ESQ Matching Engine
com.esqcopilot/matching-engineesqcopilot.comstreamable-httpv1.4.0Scanned
Find and compare licensed US lawyers from official licensing records, with sources. No legal advice.
10 tools: 2 can delete or cancel things, 3 change things and 5 only read.
- Reads private data · 0
- Reads text others write · 1
- Can send data out · 0
- No findings
Anlyon alternative
5 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
10 tools
Deletes or cancels 2Claude Code: deny
request_attorney_introductionUse only when the user asks to be introduced to ONE specific lawyer AND has seen that lawyer's name, the exact details to be shared and the consent text from get_attorney_profile, …Reads text others writeNo findings
Why it is in this group
- The name "request_attorney_introduction" says "request": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Use only when the user asks to be introduced to ONE specific lawyer AND has seen that lawyer's name, the exact details to be shared and the consent text from get_attorney_profile, then said yes. Never call it on your own initiative or for several lawyers at once. Stores only the authorized fields; retries with the same idempotency_key do not duplicate. IMPORTANT: sending to lawyers is currently switched off, so the introduction is RECORDED, NOT SENT; tell the user and give them the lawyer's phone or profile link. Returns a referral id, its lifecycle_state and a private status token.
Annotations the server declares
- title: Help me request an introduction (needs my yes)
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
update_matching_preferencesSave or change matching criteria (location, budget, timing, practice area, language, priorities) for this conversation.No findings
Why it is in this group
- The name "update_matching_preferences" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Save or change matching criteria (location, budget, timing, practice area, language, priorities) for this conversation. No personal contact details. Deleted automatically after 24 hours.
Annotations the server declares
- title: Save or change matching criteria
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
Changes things 3Claude Code: ask
check_attorney_availabilityUse when the user asks whether a lawyer takes new clients or can meet soon.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use when the user asks whether a lawyer takes new clients or can meet soon. Returns only what lawyers reported or confirmed, with last-checked time and certainty (reported, tentative, confirmed); unknown when nothing was reported. There is no live calendar access.
Annotations the server declares
- title: Check if a lawyer is taking clients
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
estimate_legal_costUse when the user asks what a lawyer or a type of matter will cost.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use when the user asks what a lawyer or a type of matter will cost. Returns only published fees, confirmed quotes or sourced market figures, each labeled; says plainly when there is not enough data instead of guessing. Not a quote.
Annotations the server declares
- title: What will representation cost?
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
submit_matching_feedbackOptional 1-5 ratings on match relevance, lawyer responsiveness, pricing and availability accuracy, satisfaction, and whether the lawyer was hired.No findings
Why it is in this group
- The name "submit_matching_feedback" says "submit": a word for a change.
Description, as the server wrote it Optional 1-5 ratings on match relevance, lawyer responsiveness, pricing and availability accuracy, satisfaction, and whether the lawyer was hired. No case details.
Annotations the server declares
- title: Give feedback on a match or introduction
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Only reads 5Show 5 read-only tools
compare_attorneysUse when the user asks to compare lawyers from find_attorneys ("which of these is a better fit?").No findings
Why it is in this group
- The name "compare_attorneys" says "compare": a word for reading.
Description, as the server wrote it Use when the user asks to compare lawyers from find_attorneys ("which of these is a better fit?"). Compares 2 to 5 lawyers on practice fit, location, years licensed, fees, availability, data confidence and gaps. Pass match_id to use the user's criteria. Says when prices or timing cannot be compared because the data is unknown.
Annotations the server declares
- title: Compare lawyers side by side
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
find_attorneysUse when someone wants a lawyer for a U.S.No findings
Why it is in this group
- The name "find_attorneys" says "find": a word for reading.
Description, as the server wrote it Use when someone wants a lawyer for a U.S. legal matter, e.g. "find an affordable tenant lawyer in Santa Ana" or "I was fired after complaining, who can help in Los Angeles". Needs state and matter type (or a short description). Returns up to 5 licensed lawyers with reasons, a relevance score, a separate data_confidence level, license source and check date, whether they are known to take private clients, directory profile links and a suggested citation, or an honest no-match with legal-aid options. Unknown fees and availability are labeled unknown. Court and government lawyers are left out unless they said they take private clients. Records an anonymous search log only. Not legal advice.
Annotations the server declares
- title: Find a licensed lawyer
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
get_attorney_profileUse when the user wants details on one lawyer from a match.No findings
Why it is in this group
- The name "get_attorney_profile" says "get": a word for reading.
Description, as the server wrote it Use when the user wants details on one lawyer from a match. Returns license status with its official source and check date, private-client intake evidence, practice areas, service area, fees, availability, languages, data freshness, the directory profile link and a suggested citation. Also returns the exact consent text to show before an introduction.
Annotations the server declares
- title: Get a lawyer's profile and sources
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_matching_requirementsUse first when someone asks for a lawyer but the state or type of legal matter is unclear ("I need a lawyer", "help me with my landlord").No findings
Why it is in this group
- The name "get_matching_requirements" says "get": a word for reading.
Description, as the server wrote it Use first when someone asks for a lawyer but the state or type of legal matter is unclear ("I need a lawyer", "help me with my landlord"). Returns the few questions still needed (state, matter type, location, timing, budget) and what was understood. Does not answer the legal question and stores nothing.
Annotations the server declares
- title: What to ask before finding a lawyer
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_referral_statusUse when the user asks what happened with an introduction.No findings
Why it is in this group
- The name "get_referral_status" says "get": a word for reading.
Description, as the server wrote it Use when the user asks what happened with an introduction. Returns lifecycle_state (recorded, queued, sent, delivered, responded, consultation_requested, consultation_confirmed, cancelled, completed, failed), whether it reached the lawyer, the lawyer's response and consultation state. Needs the private status_token. A consultation counts only when confirmed.
Annotations the server declares
- title: Check an introduction's status
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or outbound.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write1
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out0
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
No check matched anything in these tool definitions. That is not a safety guarantee.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.4.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http matching-engine https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00claude mcp add --transport http matching-engine https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__matching-engine__get_matching_requirements",
"mcp__matching-engine__find_attorneys",
"mcp__matching-engine__compare_attorneys",
"mcp__matching-engine__get_attorney_profile",
"mcp__matching-engine__get_referral_status"
],
"ask": [
"mcp__matching-engine__estimate_legal_cost",
"mcp__matching-engine__check_attorney_availability",
"mcp__matching-engine__submit_matching_feedback"
],
"deny": [
"mcp__matching-engine__request_attorney_introduction",
"mcp__matching-engine__update_matching_preferences"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as matching-engine. Review it before you use it.
Capability tags behind 1 rule
- mcp__matching-engine__request_attorney_introduction untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/com.esqcopilot/matching-engine/verify?hash=9c61ab53d8ea0cda0479073717e97d64d33dcc951e1f431f277ddf351598e659" | jq -e '.changed == false'Pinned hash 9c61ab53d8ea, from Oct 25, 2026, 16:17 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/com.esqcopilot/matching-engine/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/com.esqcopilot/matching-engine)Source: MCP Registry. Synced Oct 25, 2026, 16:17 UTC.