Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Added "cancel_introduction", "confirm_introduction", "get_introduction_status" and 2 more; changed the definition of "find_attorneys", "get_attorney_profile", "get_referral_status" and 1 more (10 tools before, 15 now)
⟨66 unchanged words⟩ 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 ⟨22 unchanged words⟩
⟨263 unchanged words⟩ labeled clearly)","type":"boolean"},"introduction_ready_only":{"description":"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, with each one's status.","type":"boolean"},"language_required":{"description":"True if the language ⟨254 unchanged words⟩
⟨31 unchanged words⟩ languages, data freshness, the directory profile link, a first_contact line and a suggested citation. Also returns the exact ⟨7 unchanged words⟩
Older name of get_introduction_status, kept so existing connections keep working; prefer get_introduction_status. Use when the user asks what happened with ⟨35 unchanged words⟩
⟨39 unchanged words⟩ 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 notduplicate.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, ⟨7 unchanged words⟩
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"approval_code":{"description":"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.","pattern":"^apr_[a-f0-9]{32}$","type":"string"},"Cancel my introduction request — 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.
Confirm a pending introduction — 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.
Check an introduction's 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.
Prepare my message to one lawyer (nothing is sent) — 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 mea…
Start with a lawyer from the ESQ CoPilot directory — 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 fir…
Certificate recorded, valid to 2027-01-16
Authorization not required
Changed the definition of "request_attorney_introduction"
⟨207 unchanged words⟩ "minLength":8,"type":"string"},"intake_notice_acknowledged":{"description":"True only after the user read: no attorney-client relationship exists yet and the lawyer may decline","type":"boolean"},"match_id":{"maxLength":40,"type":"string ⟨11 unchanged words⟩ this lawyer","maxLength":2000,"minLength":10,"type":"string"},"opposing_party_name":{"description":"Name of the other side, if any, so the firm can check conflicts. Not shared beyond the firm.","maxLength":160,"type":"string"},"practice_area":{" ⟨43 unchanged words⟩
Unknown → Live
First tool surface recorded: 10 tools (server version 1.4.0)
https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00 (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 7 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed