MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Knowledge & memory

ESQ Matching Engine

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

Checks passed
11 / 22

3 failed · 8 not measured

Median response
645 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
26

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Responded

The server completed its last measured handshake. This is an observation, not a guarantee.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
310
Publisher identityCan the publisher be traced to its source?
222

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 645 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name esq-matching-engine.

  • Pass
    Lists tools

    tools/list returned 26 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 645 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 645 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Fail
    Parameters documented

    191 of 384 parameters have a description (50%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Fail
    Website matches publisher

    The website host does not match the reverse-domain namespace.

  • Fail
    Source repo linked

    No repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-11-06T03:02:29.922608Z, within 180 days.

  • Not measured
    Open-source licence

    No GitHub repository to ask about a licence.

Start using ESQ Matching Engine

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http esq-matching-engine https://match.esqcopilot.com/mcp/c/eyJrIjoiY29ubmVjdG9yIiwiaSI6ImNvbl9tY3BfcmVnaXN0cnlfZXNxIiwicCI6Im1jcC1yZWdpc3RyeSJ9.3b61cb285412dd02ba328c4c5ccd0b00

Capabilities

Tools 26

cancel_contact_request

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.

Discovered
cancel_introduction

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.

Discovered
check_attorney_availability

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.

Discovered
compare_attorneys

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 in the order given, with no scores and 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.

Discovered
confirm_introduction

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.

Discovered
estimate_legal_cost

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.

Discovered
find_attorneys

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). Pass sort when the person picks an order (nearest_office by default, last_name, years_licensed, free_consultation_first, published_fees_first, availability_reported_first) and page for more. Returns a plain summary, the filters applied, shared_notes that apply to every listing (read once), up to three ask_the_user questions, and each listing's own facts: which filters it meets, what is not known, license status, source and date, fees and availability where published, profile link, contact and citation; or an honest 'no listings meet your filters' with legal-aid options. No scores. Show every listing in the order 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.

Discovered
get_attorney_profile

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.

Discovered
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.

Discovered
get_introduction_status

get_introduction_status is an 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.

Discovered
get_matching_requirements

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.

Discovered
get_matter_tracker

Use when the person asks where things stand with the messages they sent to lawyers through ESQ CoPilot (up to 10, each with its private status_token). Returns each message's status from its record (recorded, queued, sent, delivered, responded, consultation_requested, consultation_confirmed, cancelled, completed, failed), the lawyer's decision, a timeline of what happened and who reported it, and counts. A consultation counts only when confirmed. Failed and cancelled messages are shown, never hidden. Stores nothing; sends no reminders. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

Discovered
get_referral_status

get_referral_status is an 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.

Discovered
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.

Discovered
prepare_case_brief

Use when the person wants to get ready to talk to a lawyer about their own matter, e.g. "help me organize my eviction case before I call a lawyer" or "what should I bring to a consultation about unpaid overtime". Organizes ONLY what the person says into an editable brief: their original words (kept unchanged), matter type, confirmed state and city, dated chronology, people involved by role, evidence checklist, consultation questions, deadlines exactly as the person reported them, and a short redacted outreach summary. Each item is labeled (user_says, user_has, suggestion, unknown). Asks for missing details one or two at a time. Never infers facts, deadlines or the state; flags ID numbers, account numbers and health details and leaves them out of the summary. Stores nothing and sends nothing: to contact a lawyer the person picks, use preview_client_message. action discard drops it. Do NOT use for general legal questions, homework, news or when the person only wants information about the law. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

Discovered
prepare_introduction

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.

Discovered
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.

Discovered
report_listing_error

Use when the person (or the listed lawyer) says a detail on a listing is wrong, missing or out of date: phone, website, office, firm, practice areas, license status, languages, fees, availability or name. Pass the listing's attorney_id, which detail, and optionally the correct value. ESQ CoPilot checks each report against the official record or the lawyer's own website and corrects the listing in the next update. A report never changes the order or placement of any lawyer. No case details and no contact details of the person reporting. This is a listing service, not a lawyer referral service. No lawyer pays for placement or ranking of any kind.

Discovered
request_attorney_introduction

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. 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.

Discovered
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). Pass sort when the person picks an order (nearest_office by default, last_name, years_licensed, free_consultation_first, published_fees_first, availability_reported_first) and page for more. Returns a plain summary, the filters applied, shared_notes that apply to every listing (read once), up to three ask_the_user questions, and each listing's own facts: which filters it meets, what is not known, license status, source and date, fees and availability where published, profile link, contact and citation; or an honest 'no listings meet your filters' with legal-aid options. No scores. Show every listing in the order 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.

Discovered
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. 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.

Discovered
start_from_directory_profile

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.

Discovered
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.

Discovered
submit_matching_feedback

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.

Discovered
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.

Discovered
update_matching_preferences

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.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected645 ms26