ESQ Matching Engine
REMOTE · MATCH.ESQCOPILOT.COM
Find and compare licensed US lawyers from official licensing records, with sources. No legal advice.
Available components
Last scanned (3 hours ago)
Scores higher than 55% of remote servers
Reachable. Last reached 5 Nov 2026.
Category CRM and Sales
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
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (send_client_message). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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.
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 |
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 →
cancel_contact_request Cancel my message ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| contact_request_id | string | yes | The contact_request_id returned by send_client_message |
| status_token | string | yes | The status_token returned when the message was created |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Cancel my message (older name) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| referral_id | string | yes | – |
| status_token | string | yes | The status_token returned when the message was created |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Check if a lawyer is taking clients ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| appointment_type | string | – | – |
| attorney_ids | array | yes | – |
| time_zone | string | – | – |
| wanted_by | string | – | Latest acceptable consultation date |
| Name | Type | Req | Description |
|---|---|---|---|
| api_version | – | yes | – |
| attorneys | – | yes | – |
| checked_at | – | yes | – |
| live_calendar_access | – | yes | – |
| next_steps | – | yes | – |
| time_zone | – | yes | – |
No examples provided.
compare_attorneys Compare lawyers side by side ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| attorney_ids | array | yes | – |
| criteria | array | – | – |
| match_id | string | – | The match_id from search_attorneys, so comparisons use the same filters |
| priorities | array | – | What matters most, in order. Shifts ranking weights. |
| Name | Type | Req | Description |
|---|---|---|---|
| api_version | – | yes | – |
| attorneys | – | yes | – |
| criteria_from_match | – | yes | – |
| differences | – | yes | – |
| note | – | yes | – |
| verification_gaps | – | yes | – |
| weights_percent | – | yes | – |
No examples provided.
confirm_introduction Older pending requests (ended) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| intake_notice_acknowledged | boolean | – | – |
| opposing_party_name | string | – | – |
| referral_id | string | yes | – |
| status_token | string | yes | The status_token returned when the pending request was created |
| user_confirmed | boolean | yes | true only after the user read confirm_text_to_show and said yes in this conversation |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 What will representation 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.
| Name | Type | Req | Description |
|---|---|---|---|
| attorney_id | string | – | – |
| billing_preference | string | – | – |
| budget_max | number | – | Total budget the user mentioned, in US dollars |
| description | string | – | Short description of the legal need in the user's words. Used only to pick a practice area; not stored. |
| practice_area | string | – | – |
| scope | string | – | – |
| state | string | – | US state, two-letter code or name, e.g. CA or California |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Search the lawyer listing (older name) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| accessibility_needs | string | – | – |
| attribution_token | string | – | Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link |
| billing_preference | string | – | – |
| budget_max | number | – | Total budget the user mentioned, in US dollars |
| budget_min | number | – | – |
| category | string | – | – |
| city | string | – | – |
| client_side | string | – | 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. |
| communication | string | – | – |
| consultation_by | string | – | Latest date the user wants a first consultation |
| county | string | – | – |
| court | string | – | – |
| deadline_date | string | – | A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines. |
| deadline_type | string | – | – |
| description | string | – | Short description of the legal need in the user's words. Used only to pick a practice area; not stored. |
| exclude_attorney_ids | array | – | – |
| include_unconfirmed_practice_area | boolean | – | Also include licensed lawyers whose practice areas are not on record (labeled clearly) |
| introduction_ready_only | boolean | – | Deprecated since 2026-11-04 and ignored. Every listed lawyer is shown and can be contacted the same way. |
| language_required | boolean | – | True if the language is essential, not just preferred |
| languages | array | – | – |
| limit | integer | – | – |
| matter_type | string | – | – |
| max_consultation_fee | number | – | 0 means the user wants a free first consultation |
| min_years_licensed | integer | – | – |
| payment_plan_needed | boolean | – | – |
| practice_area | string | – | Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law' |
| preference_set_id | string | – | Saved filters from update_listing_criteria |
| priorities | array | – | What matters most, in order. Shifts ranking weights. |
| procedural_stage | string | – | – |
| reduced_fee_eligible | boolean | – | User may qualify for pro bono, legal aid or reduced fees |
| remote_ok | boolean | – | User is willing to work with a lawyer remotely (phone or video) anywhere in the state |
| representation_start_by | string | – | Date as YYYY-MM-DD |
| service_needed | string | – | – |
| state | string | – | US state, two-letter code or name, e.g. CA or California |
| subpractice_area | string | – | – |
| urgency | string | – | – |
| verbosity | string | – | compact leaves out the repeated license-check details on each result (status, source and dates stay); default full |
| zip | string | – | 5-digit ZIP code, only if the user agreed to share it |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Get a lawyer's profile and sources ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| attorney_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Check a message's 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.
| Name | Type | Req | Description |
|---|---|---|---|
| contact_request_id | string | yes | The contact_request_id returned by send_client_message |
| status_token | string | – | The status_token returned when the message was created |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Check a message's status (older name) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| referral_id | string | yes | – |
| status_token | string | – | The status_token returned when the message was created |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 What to ask before searching for a lawyer (older name) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| accessibility_needs | string | – | – |
| billing_preference | string | – | – |
| budget_max | number | – | Total budget the user mentioned, in US dollars |
| budget_min | number | – | – |
| category | string | – | – |
| city | string | – | – |
| client_side | string | – | 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. |
| communication | string | – | – |
| consultation_by | string | – | Latest date the user wants a first consultation |
| county | string | – | – |
| court | string | – | – |
| deadline_date | string | – | A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines. |
| deadline_type | string | – | – |
| description | string | – | Short description of the legal need in the user's words. Used only to pick a practice area; not stored. |
| exclude_attorney_ids | array | – | – |
| include_unconfirmed_practice_area | boolean | – | Also include licensed lawyers whose practice areas are not on record (labeled clearly) |
| language_required | boolean | – | True if the language is essential, not just preferred |
| languages | array | – | – |
| matter_type | string | – | – |
| max_consultation_fee | number | – | 0 means the user wants a free first consultation |
| min_years_licensed | integer | – | – |
| payment_plan_needed | boolean | – | – |
| practice_area | string | – | Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law' |
| priorities | array | – | What matters most, in order. Shifts ranking weights. |
| procedural_stage | string | – | – |
| reduced_fee_eligible | boolean | – | User may qualify for pro bono, legal aid or reduced fees |
| remote_ok | boolean | – | User is willing to work with a lawyer remotely (phone or video) anywhere in the state |
| representation_start_by | string | – | Date as YYYY-MM-DD |
| service_needed | string | – | – |
| state | string | – | US state, two-letter code or name, e.g. CA or California |
| subpractice_area | string | – | – |
| urgency | string | – | – |
| zip | string | – | 5-digit ZIP code, only if the user agreed to share it |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Check a message's status (older name) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| referral_id | string | yes | – |
| status_token | string | – | The status_token returned when the message was created |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 What to ask before searching for a lawyer ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| accessibility_needs | string | – | – |
| billing_preference | string | – | – |
| budget_max | number | – | Total budget the user mentioned, in US dollars |
| budget_min | number | – | – |
| category | string | – | – |
| city | string | – | – |
| client_side | string | – | 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. |
| communication | string | – | – |
| consultation_by | string | – | Latest date the user wants a first consultation |
| county | string | – | – |
| court | string | – | – |
| deadline_date | string | – | A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines. |
| deadline_type | string | – | – |
| description | string | – | Short description of the legal need in the user's words. Used only to pick a practice area; not stored. |
| exclude_attorney_ids | array | – | – |
| include_unconfirmed_practice_area | boolean | – | Also include licensed lawyers whose practice areas are not on record (labeled clearly) |
| language_required | boolean | – | True if the language is essential, not just preferred |
| languages | array | – | – |
| matter_type | string | – | – |
| max_consultation_fee | number | – | 0 means the user wants a free first consultation |
| min_years_licensed | integer | – | – |
| payment_plan_needed | boolean | – | – |
| practice_area | string | – | Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law' |
| priorities | array | – | What matters most, in order. Shifts ranking weights. |
| procedural_stage | string | – | – |
| reduced_fee_eligible | boolean | – | User may qualify for pro bono, legal aid or reduced fees |
| remote_ok | boolean | – | User is willing to work with a lawyer remotely (phone or video) anywhere in the state |
| representation_start_by | string | – | Date as YYYY-MM-DD |
| service_needed | string | – | – |
| state | string | – | US state, two-letter code or name, e.g. CA or California |
| subpractice_area | string | – | – |
| urgency | string | – | – |
| zip | string | – | 5-digit ZIP code, only if the user agreed to share it |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Preview my message to one lawyer (nothing is sent) (older name) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| assistance | string | – | What help the user wants, in a few words (e.g. 'a will and a trust', 'advice on an eviction notice') |
| attorney_id | string | yes | – |
| budget | string | – | Optional budget in the user's words |
| contact | object | yes | Only the contact details the user chose to give for this lawyer |
| entry_id | string | – | – |
| matter_location | string | – | City or county of the matter, as the user said it |
| message | string | – | The user's edited message. Omit to get a short draft; pass the user's final wording after any edit. |
| practice_area | string | – | General matter type in plain words, e.g. 'estate planning' |
| preferred_contact_method | string | yes | – |
| state | string | yes | State where the MATTER is (not the lawyer's office state). Ask the user; do not infer it. |
| timing | string | – | Timing as the USER reported it. Not checked or calculated. |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Preview my message to one lawyer (nothing is sent) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| assistance | string | – | What help the user wants, in a few words (e.g. 'a will and a trust', 'advice on an eviction notice') |
| attorney_id | string | yes | – |
| budget | string | – | Optional budget in the user's words |
| contact | object | yes | Only the contact details the user chose to give for this lawyer |
| entry_id | string | – | – |
| matter_location | string | – | City or county of the matter, as the user said it |
| message | string | – | The user's edited message. Omit to get a short draft; pass the user's final wording after any edit. |
| practice_area | string | – | General matter type in plain words, e.g. 'estate planning' |
| preferred_contact_method | string | yes | – |
| state | string | yes | State where the MATTER is (not the lawyer's office state). Ask the user; do not infer it. |
| timing | string | – | Timing as the USER reported it. Not checked or calculated. |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Send my message to the lawyer I picked (needs my yes) (older name) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| approval_code | string | – | 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_id | string | yes | – |
| attribution_token | string | – | Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link |
| consent | object | yes | – |
| contact | object | yes | – |
| entry_id | string | – | 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_key | string | – | Same key on retries prevents a duplicate message |
| intake_notice_acknowledged | boolean | – | True only after the user read: no attorney-client relationship exists yet and the lawyer may decline |
| match_id | string | – | – |
| matter_summary | string | yes | Summary the USER read and approved for sharing with this lawyer |
| opposing_party_name | string | – | Name of the other side, if any, so the firm can check conflicts. Not shared beyond the firm. |
| pending_ok | boolean | – | Deprecated since 2026-11-04 and ignored. Messages no longer wait for anything a lawyer buys. |
| practice_area | string | – | – |
| preferred_contact_method | string | yes | – |
| preferred_timeframe | string | – | – |
| state | string | yes | US state, two-letter code or name, e.g. CA or California |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Search the lawyer listing ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| accessibility_needs | string | – | – |
| attribution_token | string | – | Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link |
| billing_preference | string | – | – |
| budget_max | number | – | Total budget the user mentioned, in US dollars |
| budget_min | number | – | – |
| category | string | – | – |
| city | string | – | – |
| client_side | string | – | 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. |
| communication | string | – | – |
| consultation_by | string | – | Latest date the user wants a first consultation |
| county | string | – | – |
| court | string | – | – |
| deadline_date | string | – | A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines. |
| deadline_type | string | – | – |
| description | string | – | Short description of the legal need in the user's words. Used only to pick a practice area; not stored. |
| exclude_attorney_ids | array | – | – |
| include_unconfirmed_practice_area | boolean | – | Also include licensed lawyers whose practice areas are not on record (labeled clearly) |
| introduction_ready_only | boolean | – | Deprecated since 2026-11-04 and ignored. Every listed lawyer is shown and can be contacted the same way. |
| language_required | boolean | – | True if the language is essential, not just preferred |
| languages | array | – | – |
| limit | integer | – | – |
| matter_type | string | – | – |
| max_consultation_fee | number | – | 0 means the user wants a free first consultation |
| min_years_licensed | integer | – | – |
| payment_plan_needed | boolean | – | – |
| practice_area | string | – | Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law' |
| preference_set_id | string | – | Saved filters from update_listing_criteria |
| priorities | array | – | What matters most, in order. Shifts ranking weights. |
| procedural_stage | string | – | – |
| reduced_fee_eligible | boolean | – | User may qualify for pro bono, legal aid or reduced fees |
| remote_ok | boolean | – | User is willing to work with a lawyer remotely (phone or video) anywhere in the state |
| representation_start_by | string | – | Date as YYYY-MM-DD |
| service_needed | string | – | – |
| state | string | – | US state, two-letter code or name, e.g. CA or California |
| subpractice_area | string | – | – |
| urgency | string | – | – |
| verbosity | string | – | compact leaves out the repeated license-check details on each result (status, source and dates stay); default full |
| zip | string | – | 5-digit ZIP code, only if the user agreed to share it |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Send my message to the lawyer I picked (needs my yes) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| approval_code | string | – | 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_id | string | yes | – |
| attribution_token | string | – | Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link |
| consent | object | yes | – |
| contact | object | yes | – |
| entry_id | string | – | 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_key | string | – | Same key on retries prevents a duplicate message |
| intake_notice_acknowledged | boolean | – | True only after the user read: no attorney-client relationship exists yet and the lawyer may decline |
| match_id | string | – | – |
| matter_summary | string | yes | Summary the USER read and approved for sharing with this lawyer |
| opposing_party_name | string | – | Name of the other side, if any, so the firm can check conflicts. Not shared beyond the firm. |
| pending_ok | boolean | – | Deprecated since 2026-11-04 and ignored. Messages no longer wait for anything a lawyer buys. |
| practice_area | string | – | – |
| preferred_contact_method | string | yes | – |
| preferred_timeframe | string | – | – |
| state | string | yes | US state, two-letter code or name, e.g. CA or California |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Start with a lawyer from the ESQ CoPilot directory ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| attorney_id | string | – | The lawyer's stable id, if known. When both are given they must name the same lawyer. |
| platform | string | – | Which assistant the user chose on the listing, if they said so. Not consent to anything. |
| profile_url | string | – | 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 Give feedback on search results or a message ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| availability_accuracy | integer | – | – |
| comment | string | – | Optional. Do not include case details. |
| match_id | string | – | – |
| pricing_accuracy | integer | – | – |
| referral_id | string | – | – |
| relevance | integer | – | – |
| responsiveness | integer | – | – |
| retained | string | – | – |
| satisfaction_attorney | integer | – | – |
| satisfaction_match | integer | – | – |
| satisfaction_process | integer | – | – |
| status_token | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| feedback_id | – | yes | – |
| note | – | yes | – |
| recorded | – | yes | – |
No examples provided.
submit_matching_feedback Give feedback on search results or a message (older name) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| availability_accuracy | integer | – | – |
| comment | string | – | Optional. Do not include case details. |
| match_id | string | – | – |
| pricing_accuracy | integer | – | – |
| referral_id | string | – | – |
| relevance | integer | – | – |
| responsiveness | integer | – | – |
| retained | string | – | – |
| satisfaction_attorney | integer | – | – |
| satisfaction_match | integer | – | – |
| satisfaction_process | integer | – | – |
| status_token | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| feedback_id | – | yes | – |
| note | – | yes | – |
| recorded | – | yes | – |
No examples provided.
update_listing_criteria Save or change search filters ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| clear_fields | array | – | – |
| criteria | object | yes | Fields to set or change. Do not include names, emails or phone numbers. |
| preference_set_id | string | – | Omit to create a new set |
| Name | Type | Req | Description |
|---|---|---|---|
| criteria | – | yes | – |
| expires_at | – | yes | – |
| note | – | yes | – |
| preference_set_id | – | yes | – |
| retention | – | yes | – |
No examples provided.
update_matching_preferences Save or change search filters (older name) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| clear_fields | array | – | – |
| criteria | object | yes | Fields to set or change. Do not include names, emails or phone numbers. |
| preference_set_id | string | – | Omit to create a new set |
| Name | Type | Req | Description |
|---|---|---|---|
| criteria | – | yes | – |
| expires_at | – | yes | – |
| note | – | yes | – |
| preference_set_id | – | yes | – |
| retention | – | yes | – |
No examples provided.
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
claude mcp add --transport http com-esqcopilot-matching-engine 'https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00'
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.