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.
https://match.esqcopilot.com/mcpStreamable HTTP, no sign-in. GET answers "Use POST"; that is normal.
llms.txt · /.well-known/mcp.json
These help agents find the server; they do not install it.
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:
Settings, Connectors, Add custom connector, paste
https://match.esqcopilot.com/mcp. No sign-in needed.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".Any client that supports remote Streamable HTTP servers can use the endpoint directly.
The ten tools
| Tool | What it is for | Effect |
|---|---|---|
get_matching_requirements | What to ask before finding a lawyer | Read-only |
find_attorneys | Find a licensed lawyer | Read-only |
compare_attorneys | Compare lawyers side by side | Read-only |
estimate_legal_cost | What will representation cost? | Read-only |
check_attorney_availability | Check if a lawyer is taking clients | Read-only |
get_attorney_profile | Get a lawyer's profile and sources | Read-only |
request_attorney_introduction | Help me request an introduction (needs my yes) | Records data; needs the user's yes |
get_referral_status | Check an introduction's status | Read-only |
update_matching_preferences | Save or change matching criteria | Saves data |
submit_matching_feedback | Give feedback on a match or introduction | Saves data |
A good agent flow
- If the state or type of matter is unclear, call
get_matching_requirementsand ask only the questions it returns. Do not ask for names or contact details yet. - Call
find_attorneys. Show each lawyer's name, the reasons, theprofile_url, and the license source. - Say what is unknown.
match.scoreis relevance only;data_confidencesays how much rests on known facts. Never call a lawyer verified, available or affordable unless the response says so. - 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 callrequest_attorney_introductionwith anidempotency_key. - Report the returned
lifecycle_statetruthfully. 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.check | Status, 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_intake | Whether 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_confidence | low, medium or high, with the share of the ranking weight that rests on known facts and the main limits. |
attribution | Source 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_source | Where 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_state | recorded, 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
| Date | Version | Change |
|---|---|---|
| 2026-10-24 | match-2026.10.24 | Rules-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-24 | match-2026.10.15 | llms.txt and /.well-known/mcp.json added. |
| 2026-10-22 | match-2026.10.15 | Renamed ESQ Matching Engine; MCP Registry entry 1.2.0. |
| 2026-10-15 | match-2026.10.15 | First 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.