Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

ESQ Matching Engine

REMOTE · MATCH.ESQCOPILOT.COM

Find and compare licensed US lawyers from official licensing records, with sources. No legal advice.

+3 this week 70 Trust /100

Last scanned (3 hours ago)

Scores higher than 55% of remote servers

Reachable. Last reached 5 Nov 2026.

Category CRM and Sales

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security63
Transport & Reachability100
Schema Quality & AI Usability70
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 7410 tokens (~274/item across 27 items; 23 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management37
  • Stability observed for 11 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage85
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 48% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • New tool “cancel_contact_request”, which the server declares destructive security
    • New tool “cancel_introduction”, which the server declares destructive security
    • New tool “send_client_message”, which the server declares destructive security
    • New tool “update_listing_criteria”, which the server declares destructive security
    • Tool “check_attorney_availability” rewrote its description, which is the text the model reads security
    • Tool “compare_attorneys” rewrote its description, which is the text the model reads security
    • Tool “estimate_legal_cost” rewrote its description, which is the text the model reads security
    • Tool “find_attorneys” rewrote its description, which is the text the model reads security
    • Tool “get_attorney_profile” rewrote its description, which is the text the model reads security
    • Tool “get_matching_requirements” rewrote its description, which is the text the model reads security
    • Tool “get_referral_status” rewrote its description, which is the text the model reads security
    • Tool “request_attorney_introduction” rewrote its description, which is the text the model reads security
    • Tool “submit_matching_feedback” rewrote its description, which is the text the model reads security
    • Tool “update_matching_preferences” rewrote its description, which is the text the model reads security
    • Schema quality: 196 → 274 ▼ functional
    • Tool coverage: 42% → 48% ▲ functional
    • Destructive annotations: pass → 100 functional
    • Server version: 1.5.0 → 2.0.0 functional
    • New tool “confirm_introduction” functional
    • New tool “get_contact_request_status” functional
    • New tool “get_introduction_status” functional
    • New tool “get_search_filters” functional
    • New tool “prepare_introduction” functional
    • New tool “preview_client_message” functional
    • New tool “search_attorneys” functional
    • New tool “start_from_directory_profile” functional
    • New tool “submit_listing_feedback” functional
    • “find_attorneys” added an optional parameter “introduction_ready_only” cosmetic
    • “request_attorney_introduction” added an optional parameter “approval_code” cosmetic
    • “request_attorney_introduction” added an optional parameter “entry_id” cosmetic
    • “request_attorney_introduction” added an optional parameter “pending_ok” cosmetic
    • “compare_attorneys” reworded the description of “match_id” cosmetic
    • “find_attorneys” reworded the description of “preference_set_id” cosmetic
    • “get_referral_status” reworded the description of “status_token” cosmetic
    • “request_attorney_introduction” reworded the description of “idempotency_key” cosmetic
    • Tool “find_attorneys” changed its title: Find a licensed lawyer → Search the lawyer listing (older name) cosmetic
    • Tool “get_matching_requirements” changed its title: What to ask before finding a lawyer → What to ask before searching for a lawyer (older name) cosmetic
    • Tool “get_referral_status” changed its title: Check an introduction's status → Check a message's status (older name) cosmetic
    • Tool “request_attorney_introduction” changed its title: Help me request an introduction (needs my yes) → Send my message to the lawyer I picked (needs my yes) (older name) cosmetic
    • Tool “submit_matching_feedback” changed its title: Give feedback on a match or introduction → Give feedback on search results or a message (older name) cosmetic
    • Tool “update_matching_preferences” changed its title: Save or change matching criteria → Save or change search filters (older name) cosmetic
  • 2 Nov 26 +1
    • Server version: 1.4.0 → 1.5.0 functional
    • “request_attorney_introduction” added an optional parameter “intake_notice_acknowledged” cosmetic
    • “request_attorney_introduction” added an optional parameter “opposing_party_name” cosmetic
  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 26 Oct 26 0
    • Stability: unverified → 0.03 ▲ functional
  • 25 Oct 26 65

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=match.esqcopilot.com CN=YE1,O=Let's Encrypt,C=US 18 Oct 2026 16 Jan 2027 ECDSA 256 ECDSA-SHA384 6acd8bd6621619ad32462d92c1205fab498
SANs: match.esqcopilot.com
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of match.esqcopilot.com. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
esqcopilot.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=31536000
x-content-type-options nosniff
referrer-policy no-referrer

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00 Verified 200
http (plaintext) http://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00 HTTPS enforced 308 https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00
MCP tools · 23 exposed · ~6,903 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
cancel_contact_request ~104

Use when the person wants to cancel a message that has not been sent to the lawyer. Needs the private status_token. Deletes the person's shared details at once; nothing is sent afterwards. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
contact_request_idstringyesThe contact_request_id returned by send_client_message
status_tokenstringyesThe status_token returned when the message was created
NameTypeReqDescription
api_version–yes–
attorney–yes–
attorney_response–yes–
consent–yes–
consultation–yes–
created_at–yes–
delivered_to_lawyer–yes–
delivery_notice–––
destination–yes–
last_updated–yes–
lifecycle_state–yes–
match_id–yes–
next_step–yes–
notice–yes–
personal_details_deleted–yes–
qualification–yes–
referral_id–yes–
status–yes–
submission–yes–

No examples provided.

cancel_introduction ~79

Older name of cancel_contact_request, kept until 2026-12-15; use cancel_contact_request. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
referral_idstringyes–
status_tokenstringyesThe status_token returned when the message was created
NameTypeReqDescription
api_version–yes–
attorney–yes–
attorney_response–yes–
consent–yes–
consultation–yes–
created_at–yes–
delivered_to_lawyer–yes–
delivery_notice–––
destination–yes–
last_updated–yes–
lifecycle_state–yes–
match_id–yes–
next_step–yes–
notice–yes–
personal_details_deleted–yes–
qualification–yes–
referral_id–yes–
status–yes–
submission–yes–

No examples provided.

check_attorney_availability ~121

Use when the person 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. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
appointment_typestring––
attorney_idsarrayyes–
time_zonestring––
wanted_bystring–Latest acceptable consultation date
NameTypeReqDescription
api_version–yes–
attorneys–yes–
checked_at–yes–
live_calendar_access–yes–
next_steps–yes–
time_zone–yes–

No examples provided.

compare_attorneys ~157

Use when the person asks to compare lawyers from search_attorneys. Compares 2 to 5 lawyers on practice areas, location, years licensed, fees, availability, data confidence and gaps, side by side, without picking one. Pass match_id to use the person's filters. Says when prices or timing cannot be compared because the data is unknown. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
attorney_idsarrayyes–
criteriaarray––
match_idstring–The match_id from search_attorneys, so comparisons use the same filters
prioritiesarray–What matters most, in order. Shifts ranking weights.
NameTypeReqDescription
api_version–yes–
attorneys–yes–
criteria_from_match–yes–
differences–yes–
note–yes–
verification_gaps–yes–
weights_percent–yes–

No examples provided.

confirm_introduction ~147

Kept until 2026-12-15 so older connections get a plain answer: pending requests ended on 2026-11-04 and nothing was shared. Use preview_client_message, then send_client_message. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
intake_notice_acknowledgedboolean––
opposing_party_namestring––
referral_idstringyes–
status_tokenstringyesThe status_token returned when the pending request was created
user_confirmedbooleanyestrue only after the user read confirm_text_to_show and said yes in this conversation
NameTypeReqDescription
api_version–yes–
attorney–yes–
attorney_response–yes–
consent–yes–
consultation–yes–
created_at–yes–
delivered_to_lawyer–yes–
delivery_notice–––
destination–yes–
last_updated–yes–
lifecycle_state–yes–
match_id–yes–
next_step–yes–
notice–yes–
personal_details_deleted–yes–
qualification–yes–
referral_id–yes–
status–yes–
submission–yes–

No examples provided.

estimate_legal_cost ~180

Use when the person asks what a lawyer or a type of legal issue 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. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
attorney_idstring––
billing_preferencestring––
budget_maxnumber–Total budget the user mentioned, in US dollars
descriptionstring–Short description of the legal need in the user's words. Used only to pick a practice area; not stored.
practice_areastring––
scopestring––
statestring–US state, two-letter code or name, e.g. CA or California
NameTypeReqDescription
additional_cost_categories–yes–
api_version–yes–
attorney–––
confirmed_quote_available–yes–
disclaimer–yes–
estimate–yes–
practice_area–yes–
scope–yes–
sources_checked–yes–
state–yes–

No examples provided.

find_attorneys ~828

Older name of search_attorneys, kept until 2026-12-15; use search_attorneys. Use when someone wants to find a lawyer for a U.S. legal issue, e.g. "tenant lawyers in Santa Ana" or "employment lawyers in Los Angeles". Needs the state and type of legal issue (or a short description the person confirms). Returns licensed lawyers that meet the person's filters, with which filters each listing meets, a separate data_confidence level, license source and check date, whether they are known to take private clients, directory profile links, how to contact each one and a suggested citation, or an honest 'no listings meet your filters' with legal-aid options. Show the listings as returned; never present one lawyer as the pick for the person. 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. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
accessibility_needsstring––
attribution_tokenstring–Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link
billing_preferencestring––
budget_maxnumber–Total budget the user mentioned, in US dollars
budget_minnumber––
categorystring––
citystring––
client_sidestring–Which side the user is on. ESQ Matching Engine has no record of which side lawyers usually represent, so results carry a warning to ask.
communicationstring––
consultation_bystring–Latest date the user wants a first consultation
countystring––
courtstring––
deadline_datestring–A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines.
deadline_typestring––
descriptionstring–Short description of the legal need in the user's words. Used only to pick a practice area; not stored.
exclude_attorney_idsarray––
include_unconfirmed_practice_areaboolean–Also include licensed lawyers whose practice areas are not on record (labeled clearly)
introduction_ready_onlyboolean–Deprecated since 2026-11-04 and ignored. Every listed lawyer is shown and can be contacted the same way.
language_requiredboolean–True if the language is essential, not just preferred
languagesarray––
limitinteger––
matter_typestring––
max_consultation_feenumber–0 means the user wants a free first consultation
min_years_licensedinteger––
payment_plan_neededboolean––
practice_areastring–Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law'
preference_set_idstring–Saved filters from update_listing_criteria
prioritiesarray–What matters most, in order. Shifts ranking weights.
procedural_stagestring––
reduced_fee_eligibleboolean–User may qualify for pro bono, legal aid or reduced fees
remote_okboolean–User is willing to work with a lawyer remotely (phone or video) anywhere in the state
representation_start_bystring–Date as YYYY-MM-DD
service_neededstring––
statestring–US state, two-letter code or name, e.g. CA or California
subpractice_areastring––
urgencystring––
verbositystring–compact leaves out the repeated license-check details on each result (status, source and dates stay); default full
zipstring–5-digit ZIP code, only if the user agreed to share it
NameTypeReqDescription
api_version–yes–
attribution–yes–
covered_states–––
data_coverage–––
eligible_by_practice_evidence–––
eligible_count–––
engine_version–yes–
excluded_by_rule–––
how_ranked–yes–
legal_aid–––
license_source_note–––
low_cost_options–––
match_id–yes–
message–––
missing_information–––
next_steps–––
notices–yes–
outcome–yes–
ranking_note–––
representation_side–––
results–yes–
returned–––
rules_version–yes–
suggestions–––
unmet_criteria–––
urgency–yes–

No examples provided.

get_attorney_profile ~112

Use when the person wants details on one listed lawyer. 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, how to contact the lawyer and a suggested citation. Also returns the exact consent text to show before a message is sent. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
attorney_idstringyes–
NameTypeReqDescription
api_version–yes–
attorney_id–yes–
attribution–yes–
availability–yes–
contact–yes–
fees–yes–
firm–yes–
freshness–yes–
languages–yes–
license–yes–
name–yes–
notices–yes–
practice_areas–yes–
private_client_intake–yes–
profile_url–yes–
service_area–yes–
test_data–––
years_licensed–yes–

No examples provided.

get_contact_request_status ~133

Use when the person asks what happened with a message they sent. Returns lifecycle_state (recorded, queued, sent, delivered, responded, consultation_requested, consultation_confirmed, cancelled, completed, failed), whether it reached the lawyer and the lawyer's response. Needs the private status_token. A consultation counts only when confirmed. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
contact_request_idstringyesThe contact_request_id returned by send_client_message
status_tokenstring–The status_token returned when the message was created
NameTypeReqDescription
api_version–yes–
attorney–yes–
attorney_response–yes–
consent–yes–
consultation–yes–
created_at–yes–
delivered_to_lawyer–yes–
delivery_notice–––
destination–yes–
last_updated–yes–
lifecycle_state–yes–
match_id–yes–
next_step–yes–
notice–yes–
personal_details_deleted–yes–
qualification–yes–
referral_id–yes–
status–yes–
submission–yes–

No examples provided.

get_introduction_status ~147

Older name of get_contact_request_status, kept until 2026-12-15; use get_contact_request_status. Use when the person asks what happened with a message they sent. Returns lifecycle_state (recorded, queued, sent, delivered, responded, consultation_requested, consultation_confirmed, cancelled, completed, failed), whether it reached the lawyer and the lawyer's response. Needs the private status_token. A consultation counts only when confirmed. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
referral_idstringyes–
status_tokenstring–The status_token returned when the message was created
NameTypeReqDescription
api_version–yes–
attorney–yes–
attorney_response–yes–
consent–yes–
consultation–yes–
created_at–yes–
delivered_to_lawyer–yes–
delivery_notice–––
destination–yes–
last_updated–yes–
lifecycle_state–yes–
match_id–yes–
next_step–yes–
notice–yes–
personal_details_deleted–yes–
qualification–yes–
referral_id–yes–
status–yes–
submission–yes–

No examples provided.

get_matching_requirements ~617

Older name of get_search_filters, kept until 2026-12-15; use get_search_filters. Use first when someone wants a lawyer but the state or type of legal issue is unclear ("I need a lawyer", "help me with my landlord"). Returns the few filters still needed (state, type of issue, location, timing, budget) and what was understood, for the person to confirm. Does not answer the legal question and stores nothing. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
accessibility_needsstring––
billing_preferencestring––
budget_maxnumber–Total budget the user mentioned, in US dollars
budget_minnumber––
categorystring––
citystring––
client_sidestring–Which side the user is on. ESQ Matching Engine has no record of which side lawyers usually represent, so results carry a warning to ask.
communicationstring––
consultation_bystring–Latest date the user wants a first consultation
countystring––
courtstring––
deadline_datestring–A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines.
deadline_typestring––
descriptionstring–Short description of the legal need in the user's words. Used only to pick a practice area; not stored.
exclude_attorney_idsarray––
include_unconfirmed_practice_areaboolean–Also include licensed lawyers whose practice areas are not on record (labeled clearly)
language_requiredboolean–True if the language is essential, not just preferred
languagesarray––
matter_typestring––
max_consultation_feenumber–0 means the user wants a free first consultation
min_years_licensedinteger––
payment_plan_neededboolean––
practice_areastring–Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law'
prioritiesarray–What matters most, in order. Shifts ranking weights.
procedural_stagestring––
reduced_fee_eligibleboolean–User may qualify for pro bono, legal aid or reduced fees
remote_okboolean–User is willing to work with a lawyer remotely (phone or video) anywhere in the state
representation_start_bystring–Date as YYYY-MM-DD
service_neededstring––
statestring–US state, two-letter code or name, e.g. CA or California
subpractice_areastring––
urgencystring––
zipstring–5-digit ZIP code, only if the user agreed to share it
NameTypeReqDescription
api_version–yes–
can_search–yes–
guidance–yes–
missing–yes–
notice–yes–
preliminary_search_possible–yes–
understood–yes–
urgency_notice–yes–

No examples provided.

get_referral_status ~147

Older name of get_contact_request_status, kept until 2026-12-15; use get_contact_request_status. Use when the person asks what happened with a message they sent. Returns lifecycle_state (recorded, queued, sent, delivered, responded, consultation_requested, consultation_confirmed, cancelled, completed, failed), whether it reached the lawyer and the lawyer's response. Needs the private status_token. A consultation counts only when confirmed. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
referral_idstringyes–
status_tokenstring–The status_token returned when the message was created
NameTypeReqDescription
api_version–yes–
attorney–yes–
attorney_response–yes–
consent–yes–
consultation–yes–
created_at–yes–
delivered_to_lawyer–yes–
delivery_notice–––
destination–yes–
last_updated–yes–
lifecycle_state–yes–
match_id–yes–
next_step–yes–
notice–yes–
personal_details_deleted–yes–
qualification–yes–
referral_id–yes–
status–yes–
submission–yes–

No examples provided.

get_search_filters ~594

Use first when someone wants a lawyer but the state or type of legal issue is unclear ("I need a lawyer", "help me with my landlord"). Returns the few filters still needed (state, type of issue, location, timing, budget) and what was understood, for the person to confirm. Does not answer the legal question and stores nothing. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
accessibility_needsstring––
billing_preferencestring––
budget_maxnumber–Total budget the user mentioned, in US dollars
budget_minnumber––
categorystring––
citystring––
client_sidestring–Which side the user is on. ESQ Matching Engine has no record of which side lawyers usually represent, so results carry a warning to ask.
communicationstring––
consultation_bystring–Latest date the user wants a first consultation
countystring––
courtstring––
deadline_datestring–A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines.
deadline_typestring––
descriptionstring–Short description of the legal need in the user's words. Used only to pick a practice area; not stored.
exclude_attorney_idsarray––
include_unconfirmed_practice_areaboolean–Also include licensed lawyers whose practice areas are not on record (labeled clearly)
language_requiredboolean–True if the language is essential, not just preferred
languagesarray––
matter_typestring––
max_consultation_feenumber–0 means the user wants a free first consultation
min_years_licensedinteger––
payment_plan_neededboolean––
practice_areastring–Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law'
prioritiesarray–What matters most, in order. Shifts ranking weights.
procedural_stagestring––
reduced_fee_eligibleboolean–User may qualify for pro bono, legal aid or reduced fees
remote_okboolean–User is willing to work with a lawyer remotely (phone or video) anywhere in the state
representation_start_bystring–Date as YYYY-MM-DD
service_neededstring––
statestring–US state, two-letter code or name, e.g. CA or California
subpractice_areastring––
urgencystring––
zipstring–5-digit ZIP code, only if the user agreed to share it
NameTypeReqDescription
api_version–yes–
can_search–yes–
guidance–yes–
missing–yes–
notice–yes–
preliminary_search_possible–yes–
understood–yes–
urgency_notice–yes–

No examples provided.

prepare_introduction ~390

Older name of preview_client_message, kept until 2026-12-15; use preview_client_message. Use when the person wants to contact ONE lawyer they picked ("write my message"). Builds a short, editable first message from general facts the person gives (type of legal issue, location, help wanted, timing, optional budget, contact method), asks the lawyer what is unknown (handles this kind of issue? taking new clients? consultation fee?), and returns the exact recipient, message, contact fields, notice, consent text and an approval_code. Stores and sends nothing. Show all of it to the person; only after an explicit yes call send_client_message with after_yes.arguments. Any change by the person means calling this again and asking again. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
assistancestring–What help the user wants, in a few words (e.g. 'a will and a trust', 'advice on an eviction notice')
attorney_idstringyes–
budgetstring–Optional budget in the user's words
contactobjectyesOnly the contact details the user chose to give for this lawyer
entry_idstring––
matter_locationstring–City or county of the matter, as the user said it
messagestring–The user's edited message. Omit to get a short draft; pass the user's final wording after any edit.
practice_areastring–General matter type in plain words, e.g. 'estate planning'
preferred_contact_methodstringyes–
statestringyesState where the MATTER is (not the lawyer's office state). Ask the user; do not infer it.
timingstring–Timing as the USER reported it. Not checked or calculated.
NameTypeReqDescription
after_yes–yes–
api_version–yes–
approval_code–yes–
blockers–yes–
can_request_introduction–yes–
consent_text–yes–
coverage_notice–––
delivery–yes–
fields_authorized–yes–
fields_to_share–yes–
if_blocked_say–––
intake_notice–yes–
legal_aid–––
message–yes–
message_is_draft–yes–
notices–yes–
recipient–yes–
show_user–yes–
stored–yes–

No examples provided.

preview_client_message ~368

Use when the person wants to contact ONE lawyer they picked ("write my message"). Builds a short, editable first message from general facts the person gives (type of legal issue, location, help wanted, timing, optional budget, contact method), asks the lawyer what is unknown (handles this kind of issue? taking new clients? consultation fee?), and returns the exact recipient, message, contact fields, notice, consent text and an approval_code. Stores and sends nothing. Show all of it to the person; only after an explicit yes call send_client_message with after_yes.arguments. Any change by the person means calling this again and asking again. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
assistancestring–What help the user wants, in a few words (e.g. 'a will and a trust', 'advice on an eviction notice')
attorney_idstringyes–
budgetstring–Optional budget in the user's words
contactobjectyesOnly the contact details the user chose to give for this lawyer
entry_idstring––
matter_locationstring–City or county of the matter, as the user said it
messagestring–The user's edited message. Omit to get a short draft; pass the user's final wording after any edit.
practice_areastring–General matter type in plain words, e.g. 'estate planning'
preferred_contact_methodstringyes–
statestringyesState where the MATTER is (not the lawyer's office state). Ask the user; do not infer it.
timingstring–Timing as the USER reported it. Not checked or calculated.
NameTypeReqDescription
after_yes–yes–
api_version–yes–
approval_code–yes–
blockers–yes–
can_request_introduction–yes–
consent_text–yes–
coverage_notice–––
delivery–yes–
fields_authorized–yes–
fields_to_share–yes–
if_blocked_say–––
intake_notice–yes–
legal_aid–––
message–yes–
message_is_draft–yes–
notices–yes–
recipient–yes–
show_user–yes–
stored–yes–

No examples provided.

request_attorney_introduction ~541

Older name of send_client_message, kept until 2026-12-15; use send_client_message. Use only when the person asked to contact ONE specific lawyer they picked, has seen the lawyer's name, the exact message and details to be shared and the consent text, and said yes. Never call it on your own initiative or for several lawyers at once. Call preview_client_message first and pass its approval_code: if the recipient or the text changed since the person's yes, it is refused. Stores only the approved fields; retries with the same idempotency_key do not duplicate, and reusing a key for different details is refused. The same rule applies to every listed lawyer. IMPORTANT: sending to lawyers is currently switched off, so the message is RECORDED, NOT SENT; tell the person "Your message is ready. It has not been sent." and give them the lawyer's phone, website or profile link. Returns a contact_request_id, its lifecycle_state and a private status token. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
approval_codestring–The approval_code from preview_client_message for the exact version the user said yes to. If anything changed since, the request is refused and nothing is stored.
attorney_idstringyes–
attribution_tokenstring–Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link
consentobjectyes–
contactobjectyes–
entry_idstring–The entry_id from start_from_directory_profile, if the user started from a directory listing. Counts the listing visit; carries no personal data.
idempotency_keystring–Same key on retries prevents a duplicate message
intake_notice_acknowledgedboolean–True only after the user read: no attorney-client relationship exists yet and the lawyer may decline
match_idstring––
matter_summarystringyesSummary the USER read and approved for sharing with this lawyer
opposing_party_namestring–Name of the other side, if any, so the firm can check conflicts. Not shared beyond the firm.
pending_okboolean–Deprecated since 2026-11-04 and ignored. Messages no longer wait for anything a lawyer buys.
practice_areastring––
preferred_contact_methodstringyes–
preferred_timeframestring––
statestringyesUS state, two-letter code or name, e.g. CA or California
NameTypeReqDescription
api_version–yes–
attorney–yes–
attorney_response–yes–
consent–yes–
consent_text_shown–yes–
consultation–yes–
created_at–yes–
delivered_to_lawyer–yes–
delivery_notice–yes–
destination–yes–
duplicate–yes–
last_updated–yes–
lifecycle_state–yes–
match_id–yes–
next_step–yes–
notice–yes–
personal_details_deleted–yes–
qualification–yes–
referral_id–yes–
status–yes–
status_check–––
status_token–yes–
submission–yes–

No examples provided.

search_attorneys ~806

Use when someone wants to find a lawyer for a U.S. legal issue, e.g. "tenant lawyers in Santa Ana" or "employment lawyers in Los Angeles". Needs the state and type of legal issue (or a short description the person confirms). Returns licensed lawyers that meet the person's filters, with which filters each listing meets, a separate data_confidence level, license source and check date, whether they are known to take private clients, directory profile links, how to contact each one and a suggested citation, or an honest 'no listings meet your filters' with legal-aid options. Show the listings as returned; never present one lawyer as the pick for the person. 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. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
accessibility_needsstring––
attribution_tokenstring–Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link
billing_preferencestring––
budget_maxnumber–Total budget the user mentioned, in US dollars
budget_minnumber––
categorystring––
citystring––
client_sidestring–Which side the user is on. ESQ Matching Engine has no record of which side lawyers usually represent, so results carry a warning to ask.
communicationstring––
consultation_bystring–Latest date the user wants a first consultation
countystring––
courtstring––
deadline_datestring–A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines.
deadline_typestring––
descriptionstring–Short description of the legal need in the user's words. Used only to pick a practice area; not stored.
exclude_attorney_idsarray––
include_unconfirmed_practice_areaboolean–Also include licensed lawyers whose practice areas are not on record (labeled clearly)
introduction_ready_onlyboolean–Deprecated since 2026-11-04 and ignored. Every listed lawyer is shown and can be contacted the same way.
language_requiredboolean–True if the language is essential, not just preferred
languagesarray––
limitinteger––
matter_typestring––
max_consultation_feenumber–0 means the user wants a free first consultation
min_years_licensedinteger––
payment_plan_neededboolean––
practice_areastring–Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law'
preference_set_idstring–Saved filters from update_listing_criteria
prioritiesarray–What matters most, in order. Shifts ranking weights.
procedural_stagestring––
reduced_fee_eligibleboolean–User may qualify for pro bono, legal aid or reduced fees
remote_okboolean–User is willing to work with a lawyer remotely (phone or video) anywhere in the state
representation_start_bystring–Date as YYYY-MM-DD
service_neededstring––
statestring–US state, two-letter code or name, e.g. CA or California
subpractice_areastring––
urgencystring––
verbositystring–compact leaves out the repeated license-check details on each result (status, source and dates stay); default full
zipstring–5-digit ZIP code, only if the user agreed to share it
NameTypeReqDescription
api_version–yes–
attribution–yes–
covered_states–––
data_coverage–––
eligible_by_practice_evidence–––
eligible_count–––
engine_version–yes–
excluded_by_rule–––
how_ranked–yes–
legal_aid–––
license_source_note–––
low_cost_options–––
match_id–yes–
message–––
missing_information–––
next_steps–––
notices–yes–
outcome–yes–
ranking_note–––
representation_side–––
results–yes–
returned–––
rules_version–yes–
suggestions–––
unmet_criteria–––
urgency–yes–

No examples provided.

send_client_message ~517

Use only when the person asked to contact ONE specific lawyer they picked, has seen the lawyer's name, the exact message and details to be shared and the consent text, and said yes. Never call it on your own initiative or for several lawyers at once. Call preview_client_message first and pass its approval_code: if the recipient or the text changed since the person's yes, it is refused. Stores only the approved fields; retries with the same idempotency_key do not duplicate, and reusing a key for different details is refused. The same rule applies to every listed lawyer. IMPORTANT: sending to lawyers is currently switched off, so the message is RECORDED, NOT SENT; tell the person "Your message is ready. It has not been sent." and give them the lawyer's phone, website or profile link. Returns a contact_request_id, its lifecycle_state and a private status token. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
approval_codestring–The approval_code from preview_client_message for the exact version the user said yes to. If anything changed since, the request is refused and nothing is stored.
attorney_idstringyes–
attribution_tokenstring–Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link
consentobjectyes–
contactobjectyes–
entry_idstring–The entry_id from start_from_directory_profile, if the user started from a directory listing. Counts the listing visit; carries no personal data.
idempotency_keystring–Same key on retries prevents a duplicate message
intake_notice_acknowledgedboolean–True only after the user read: no attorney-client relationship exists yet and the lawyer may decline
match_idstring––
matter_summarystringyesSummary the USER read and approved for sharing with this lawyer
opposing_party_namestring–Name of the other side, if any, so the firm can check conflicts. Not shared beyond the firm.
pending_okboolean–Deprecated since 2026-11-04 and ignored. Messages no longer wait for anything a lawyer buys.
practice_areastring––
preferred_contact_methodstringyes–
preferred_timeframestring––
statestringyesUS state, two-letter code or name, e.g. CA or California
NameTypeReqDescription
api_version–yes–
attorney–yes–
attorney_response–yes–
consent–yes–
consent_text_shown–yes–
consultation–yes–
created_at–yes–
delivered_to_lawyer–yes–
delivery_notice–yes–
destination–yes–
duplicate–yes–
last_updated–yes–
lifecycle_state–yes–
match_id–yes–
next_step–yes–
notice–yes–
personal_details_deleted–yes–
qualification–yes–
referral_id–yes–
status–yes–
status_check–––
status_token–yes–
submission–yes–

No examples provided.

start_from_directory_profile ~308

Use FIRST when the person names or pastes an ESQ CoPilot directory listing (directory.esqcopilot.com/attorney/...) or says they want help with a lawyer they were viewing, e.g. "help me check and contact Jeffrey Roy Hartmann, California bar 150013: https://directory.esqcopilot.com/attorney/jeffrey-hartmann-ca-150013". Finds that exact lawyer in the directory's own records (no web fetch, no similar-name substitute) and returns the lawyer's facts with sources and dates, what is unknown, the contact options, and the few questions still open. Do not run search_attorneys first when the exact listing is given. Looking at a listing is not an endorsement or a statement about availability. Records an anonymous count only. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
attorney_idstring–The lawyer's stable id, if known. When both are given they must name the same lawyer.
platformstring–Which assistant the user chose on the listing, if they said so. Not consent to anything.
profile_urlstring–The directory profile address the user came from, e.g. https://directory.esqcopilot.com/attorney/jeffrey-hartmann-ca-150013. Only directory.esqcopilot.com profile addresses are accepted; the page is…
NameTypeReqDescription
api_version–yes–
assessment–yes–
attribution–yes–
contact_options–yes–
conversation–yes–
entry_id–yes–
entry_version–yes–
facts–yes–
legal_aid–yes–
notices–yes–
selected_lawyer–yes–
selection_notice–yes–
test_data–––
unknowns–yes–

No examples provided.

submit_listing_feedback ~166

Optional 1-5 ratings on how useful the listings were, lawyer responsiveness, pricing and availability accuracy, satisfaction, and whether the lawyer was hired. No case details. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
availability_accuracyinteger––
commentstring–Optional. Do not include case details.
match_idstring––
pricing_accuracyinteger––
referral_idstring––
relevanceinteger––
responsivenessinteger––
retainedstring––
satisfaction_attorneyinteger––
satisfaction_matchinteger––
satisfaction_processinteger––
status_tokenstring––
NameTypeReqDescription
feedback_id–yes–
note–yes–
recorded–yes–

No examples provided.

submit_matching_feedback ~188

Older name of submit_listing_feedback, kept until 2026-12-15; use submit_listing_feedback. Optional 1-5 ratings on how useful the listings were, lawyer responsiveness, pricing and availability accuracy, satisfaction, and whether the lawyer was hired. No case details. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
availability_accuracyinteger––
commentstring–Optional. Do not include case details.
match_idstring––
pricing_accuracyinteger––
referral_idstring––
relevanceinteger––
responsivenessinteger––
retainedstring––
satisfaction_attorneyinteger––
satisfaction_matchinteger––
satisfaction_processinteger––
status_tokenstring––
NameTypeReqDescription
feedback_id–yes–
note–yes–
recorded–yes–

No examples provided.

update_listing_criteria ~115

Save or change search filters (location, budget, timing, practice area, language, sort priorities) for this conversation. No personal contact details. Deleted automatically after 24 hours. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
clear_fieldsarray––
criteriaobjectyesFields to set or change. Do not include names, emails or phone numbers.
preference_set_idstring–Omit to create a new set
NameTypeReqDescription
criteria–yes–
expires_at–yes–
note–yes–
preference_set_id–yes–
retention–yes–

No examples provided.

update_matching_preferences ~138

Older name of update_listing_criteria, kept until 2026-12-15; use update_listing_criteria. Save or change search filters (location, budget, timing, practice area, language, sort priorities) for this conversation. No personal contact details. Deleted automatically after 24 hours. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

NameTypeReqDescription
clear_fieldsarray––
criteriaobjectyesFields to set or change. Do not include names, emails or phone numbers.
preference_set_idstring–Omit to create a new set
NameTypeReqDescription
criteria–yes–
expires_at–yes–
note–yes–
preference_set_id–yes–
retention–yes–

No examples provided.

Install

How do I install the ESQ Matching Engine MCP server?

ESQ Matching Engine is a hosted endpoint at https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · match.esqcopilot.com

# add to Claude Code
claude mcp add --transport http com-esqcopilot-matching-engine 'https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00'
Common questions

What is the ESQ Matching Engine MCP server?

ESQ Matching Engine is an MCP server listed in the public MCP registry as com.esqcopilot/matching-engine. Find and compare licensed US lawyers from official licensing records, with sources. No legal advice. This page covers its hosted endpoint (https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9…).

Is the ESQ Matching Engine MCP server safe to use?

ESQ Matching Engine scores 70 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the ESQ Matching Engine MCP server expose?

ESQ Matching Engine exposes 23 tools: start_from_directory_profile, preview_client_message, get_search_filters, search_attorneys, compare_attorneys, and 18 more. Their descriptions and schemas cost roughly 6,903 tokens of context every time the server is loaded.

Does the ESQ Matching Engine MCP server require authentication?

No. We connected to ESQ Matching Engine without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the ESQ Matching Engine MCP server still maintained?

ESQ Matching Engine is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.