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, compare and price licensed U.S. lawyers from official licensing records. Not legal advice.

+3 this week 72 Trust /100

Last scanned (20 hours ago)

Scores higher than 58% of remote servers

Reachable. Last reached 4 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 Usability72
  • 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 4310 tokens (~226/item across 19 items; 15 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 Management50
  • Stability observed for 15 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
  • We read all 15 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 17 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.

  • 4 Nov 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • New tool “cancel_introduction”, which the server declares destructive security
    • New tool “confirm_introduction”, which the server declares destructive 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_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
    • Schema quality: 196 → 226 ▼ functional
    • Tool coverage: 42% → 48% ▲ functional
    • Server version: 1.5.0 → 1.7.0 functional
    • New tool “get_introduction_status” functional
    • New tool “prepare_introduction” functional
    • New tool “start_from_directory_profile” 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
  • 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 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Oct 26 +1

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

  • 26 Oct 26 +1
    • Server version: 1.3.0 → 1.4.0 functional
  • 24 Oct 26 +5
    • The server rewrote its instructions, which are the text every model session reads 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
    • Schema quality: 215 → 252 ▼ functional
    • Schema quality: 215 → 192 ▲ functional
    • Tool “compare_attorneys” now declares an output schema ▲ functional
    • Tool “check_attorney_availability” now declares an output schema ▲ functional
    • Tool “estimate_legal_cost” now declares an output schema ▲ functional
    • Tool “find_attorneys” now declares an output schema ▲ functional
    • Tool “get_attorney_profile” now declares an output schema ▲ functional
    • Tool “get_matching_requirements” now declares an output schema ▲ functional
    • Tool “get_referral_status” now declares an output schema ▲ functional
    • Tool “request_attorney_introduction” now declares an output schema ▲ functional
    • Tool “submit_matching_feedback” now declares an output schema ▲ functional
    • Tool “update_matching_preferences” now declares an output schema ▲ functional
    • The server now declares the “resources” capability functional
    • First check of Schema quality: 100 functional
    • First check of Tool coverage: 100 functional
    • New resource “citation-policy” functional
    • New resource “coverage” functional
    • New resource “data-sources” functional
    • New resource “practice-areas” functional
    • Server version: match-2026.10.24 → 1.3.0 functional
    • Server version: match-2026.10.15 → match-2026.10.24 functional
    • “find_attorneys” added an optional parameter “verbosity” cosmetic
    • Tool “check_attorney_availability” changed its title: Check lawyer availability → Check if a lawyer is taking clients cosmetic
    • Tool “estimate_legal_cost” changed its title: What will a lawyer cost? → What will representation cost? cosmetic
    • Tool “find_attorneys” changed its title: Find and rank lawyers for a legal matter → Find a licensed lawyer cosmetic
    • Tool “get_attorney_profile” changed its title: Get a lawyer's matching profile → Get a lawyer's profile and sources cosmetic
    • Tool “get_matching_requirements” changed its title: What ESQ Matching Engine needs to match a lawyer → What to ask before finding a lawyer cosmetic
    • Tool “request_attorney_introduction” changed its title: Request an introduction to a lawyer (needs consent) → Help me request an introduction (needs my yes) cosmetic
  • 22 Oct 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • The server changed its declared name: esq-copilot-matching → esq-matching-engine 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 “get_referral_status” rewrote its description, which is the text the model reads security
    • “request_attorney_introduction” reworded the description of “attribution_token” cosmetic
    • “find_attorneys” reworded the description of “deadline_date” cosmetic
    • “get_matching_requirements” reworded the description of “client_side” cosmetic
    • “get_matching_requirements” reworded the description of “deadline_date” cosmetic
    • “find_attorneys” reworded the description of “attribution_token” cosmetic
    • “find_attorneys” reworded the description of “client_side” cosmetic
    • “request_attorney_introduction” reworded the description of “idempotency_key” cosmetic
    • “get_referral_status” reworded the description of “status_token” cosmetic
    • Tool “get_matching_requirements” changed its title: What ESQ CoPilot needs to match a lawyer → What ESQ Matching Engine needs to match a lawyer cosmetic
  • 21 Oct 26 0
    • Tool “update_matching_preferences” is now declared destructive security
    • Stability: unverified → 0.03 ▲ functional
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 4 Nov 2026 · Probed https://match.esqcopilot.com/mcp

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 Verified 200
http (plaintext) http://match.esqcopilot.com/mcp HTTPS enforced 308 https://match.esqcopilot.com/mcp
MCP tools · 15 exposed · ~3,734 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_introduction ~75

Use when the user wants to cancel an introduction or a pending request that has not been sent to the lawyer. Needs the private status_token. Deletes the user's shared details at once; nothing is sent afterwards.

NameTypeReqDescription
referral_idstringyes–
status_tokenstringyesThe status_token returned when the introduction 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 ~98

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.

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 ~135

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.

NameTypeReqDescription
attorney_idsarrayyes–
criteriaarray––
match_idstring–The match_id from find_attorneys, so comparisons use the same criteria
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 ~164

Use only when get_introduction_status shows pending.ready_to_confirm true (the lawyer has since activated the free EsqHarness). Show the user confirm_text_to_show, get an explicit yes, then call this with the private status_token (and intake_notice_acknowledged and opposing_party_name if the firm's rules ask for them). The server checks the lawyer's harness and firm rules again; if anything fails, nothing is shared.

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 ~156

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.

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 ~809

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, a first_contact line (how to contact each lawyer first) and a suggested citation, or an honest no-match with legal-aid options. Set introduction_ready_only to list only lawyers who can receive an introduction through ESQ CoPilot now (activated free EsqHarness). 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.

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–true returns only lawyers who can receive an introduction through ESQ CoPilot right now (activated free EsqHarness that accepts this state and matter). Default false: every licensed lawyer is listed,…
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 criteria from update_matching_preferences
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 ~88

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, a first_contact line and a suggested citation. Also returns the exact consent text to show before an introduction.

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_introduction_status ~101

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.

NameTypeReqDescription
referral_idstringyes–
status_tokenstring–The status_token returned when the introduction 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 ~566

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.

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 ~122

Older name of get_introduction_status, kept so existing connections keep working; prefer get_introduction_status. 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.

NameTypeReqDescription
referral_idstringyes–
status_tokenstring–The status_token returned when the introduction 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.

prepare_introduction ~343

Use when the user wants to contact ONE lawyer ("prepare my message"). Builds a short, editable first message from general facts (matter type, matter location, help wanted, the user's own timing, optional budget, contact method), asks the lawyer what is unknown (handles this matter? taking new clients? consultation fee?), and returns the exact recipient, message, contact fields, intake notice, consent text and an approval_code. Stores and sends nothing. Show all of it to the user; only after an explicit yes call request_attorney_introduction with after_yes.arguments. Any change by the user means calling this again and asking again.

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 ~556

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. Prefer prepare_introduction first and pass its approval_code: if the recipient or details changed since the user's yes, the request is refused. Stores only the authorized fields; retries with the same idempotency_key do not duplicate, and reusing a key for different details is refused. ESQ CoPilot introduces users only to lawyers who activated the free EsqHarness: call it only when the lawyer's next_action is request_introduction, or with pending_ok true when next_action is lawyer_not_activated AND the user read the pending terms and opted in. Otherwise it is refused with nothing stored. IMPORTANT: sending to lawyers is currently switched off, so the introduction is RECORDED, NOT SENT; tell the user "Your message is ready. It has not been sent." and give them the lawyer's phone, website or profile link. Returns a referral id, its lifecycle_state and a private status token.

NameTypeReqDescription
approval_codestring–The approval_code from prepare_introduction 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 introduction
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–True only after the user read pending_consent_text and chose to let the request wait for this lawyer to activate the free EsqHarness
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 ~291

Use FIRST when the user names or pastes an ESQ CoPilot directory profile (directory.esqcopilot.com/attorney/...) or says they want help with a lawyer they were viewing, e.g. "help me assess and contact Jeffrey Roy Hartmann, California bar 150013: https://directory.esqcopilot.com/attorney/jeffrey-hartmann-ca-150013". Resolves that exact lawyer from 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 routes, and the first thing to say and the few questions to ask. Do not run find_attorneys first when the exact listing is given. Choosing a listing is not a verified match, availability or endorsement. Records an anonymous count only.

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–
harness_required–yes–
legal_aid–yes–
notices–yes–
selected_lawyer–yes–
selection_notice–yes–
test_data–––
unknowns–yes–

No examples provided.

submit_matching_feedback ~140

Optional 1-5 ratings on match relevance, lawyer responsiveness, pricing and availability accuracy, satisfaction, and whether the lawyer was hired. No case details.

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_matching_preferences ~90

Save or change matching criteria (location, budget, timing, practice area, language, priorities) for this conversation. No personal contact details. Deleted automatically after 24 hours.

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, 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 sustany-alcbar-match 'https://match.esqcopilot.com/mcp'
Common questions

What is the ESQ Matching Engine MCP server?

ESQ Matching Engine is an MCP server listed in the public MCP registry as io.github.sustany/alcbar-match. Find, compare and price licensed U.S. lawyers from official licensing records. Not legal advice. This page covers its hosted endpoint (https://match.esqcopilot.com/mcp).

Is the ESQ Matching Engine MCP server safe to use?

ESQ Matching Engine scores 72 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 15 tools: start_from_directory_profile, prepare_introduction, get_matching_requirements, find_attorneys, compare_attorneys, and 10 more. Their descriptions and schemas cost roughly 3,734 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 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.