ESQ CoPilot · Developers and AI agents

Connect an AI agent to the ESQ Matching Engine

The Matching Engine finds and compares licensed U.S. lawyers from public licensing records and the ESQ CoPilot Lawyer Directory, explains every ranking, and records an introduction only after the user says yes to one lawyer. It is not a law firm and gives no legal advice.

MCP endpoint
https://match.esqcopilot.com/mcp
Streamable HTTP, no sign-in. GET answers "Use POST"; that is normal.
Discovery files
llms.txt · /.well-known/mcp.json
These help agents find the server; they do not install it.
REST API
openapi.json
Same ten operations. REST needs an API key; ask notices@esqcopilot.com.
Status
status.json
Read-only smoke test: versions, tools, data size. Stores nothing.

Where it is listed

Listed in the official MCP Registry as "ESQ Matching Engine". Submissions to the Claude directory and to ChatGPT apps are under review; until approved, add it by hand:

Claude
Settings, Connectors, Add custom connector, paste https://match.esqcopilot.com/mcp. No sign-in needed.
ChatGPT
Needs a plan with Developer mode. Settings, Apps, Advanced settings, turn on Developer mode, create an app with https://match.esqcopilot.com/mcp and authentication "None".
Other MCP clients
Any client that supports remote Streamable HTTP servers can use the endpoint directly.

The ten tools

ToolWhat it is forEffect
get_matching_requirementsWhat to ask before finding a lawyerRead-only
find_attorneysFind a licensed lawyerRead-only
compare_attorneysCompare lawyers side by sideRead-only
estimate_legal_costWhat will representation cost?Read-only
check_attorney_availabilityCheck if a lawyer is taking clientsRead-only
get_attorney_profileGet a lawyer's profile and sourcesRead-only
request_attorney_introductionHelp me request an introduction (needs my yes)Records data; needs the user's yes
get_referral_statusCheck an introduction's statusRead-only
update_matching_preferencesSave or change matching criteriaSaves data
submit_matching_feedbackGive feedback on a match or introductionSaves data

A good agent flow

  1. If the state or type of matter is unclear, call get_matching_requirements and ask only the questions it returns. Do not ask for names or contact details yet.
  2. Call find_attorneys. Show each lawyer's name, the reasons, the profile_url, and the license source.
  3. Say what is unknown. match.score is relevance only; data_confidence says how much rests on known facts. Never call a lawyer verified, available or affordable unless the response says so.
  4. Only if the user asks to be introduced to one lawyer: show that lawyer's name, the exact fields to be shared and the consent text from get_attorney_profile, and get an explicit yes. Then call request_attorney_introduction with an idempotency_key.
  5. Report the returned lifecycle_state truthfully. Right now introductions are recorded, not sent to lawyers, so tell the user to contact the office directly.
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"find_attorneys","arguments":{
  "state":"CA","city":"Santa Ana","practice_area":"Landlord-Tenant Law","client_side":"tenant","budget_max":500,"limit":3}}}

Fields worth reading

license.checkStatus, the date it was last checked at the official source (last_authoritative_check), the separate date ESQ CoPilot copied it, and the official record link. If no check date is recorded it says unknown.
private_client_intakeWhether the lawyer is known to take private clients, and how we know: lawyer-confirmed (with expiry), lawyer-reported, inferred from the employer name, or unknown. Court and government employment never counts as available.
data_confidencelow, medium or high, with the share of the ranking weight that rests on known facts and the main limits.
attributionSource name, profile link, official license source, match_id, check date and a plain suggested_citation. Schema esq-attribution-1; older fields are unchanged.
attribution.request_sourceWhere a request came from: verified only for a signed connector address, API key or signed partner token; claimed for a client's own name; otherwise unknown. Bad tokens show as invalid.
lifecycle_staterecorded, queued, sent, delivered, responded, consultation_requested, consultation_confirmed, cancelled, completed or failed. A consultation counts only when confirmed.

Privacy and limits

Case descriptions are used only to pick a practice area and are not stored. Searches keep only structured criteria (no names, contact details or free text). Introduction details are encrypted and deleted after 180 days. Never put names, contact details or case facts in URLs or attribution tokens. Public connectors are rate limited. No lawyer pays for placement or ranking. Fees, availability and languages appear only where a lawyer has provided them; most are still unknown.

Showing these files or this page to an agent does not install the server, and nothing here can guarantee that an AI assistant will use or cite ESQ CoPilot.

Changelog

DateVersionChange
2026-10-24match-2026.10.24Rules-v2: court, government and military lawyers are left out unless they say they take private clients; in-house lawyers are ranked lower and labeled; every lawyer has data_confidence (separate from the relevance score), private_client_intake, a license check block that keeps the official check date apart from ESQ CoPilot's copy date, and an attribution block with a suggested citation. Introductions report lifecycle_state and say plainly when they are recorded but not sent. Tool descriptions and annotations corrected.
2026-10-24match-2026.10.15llms.txt and /.well-known/mcp.json added.
2026-10-22match-2026.10.15Renamed ESQ Matching Engine; MCP Registry entry 1.2.0.
2026-10-15match-2026.10.15First public release: ten tools over MCP and REST.

Support: notices@esqcopilot.com · Operated by Digital Crossings Inc (ESQ CoPilot). ESQ CoPilot is not a law firm and does not endorse any lawyer.