Skip to main content
Glama

Send my message to the lawyer I picked (needs my yes)

send_client_message
DestructiveIdempotent

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.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "attorney_id": "<attorney_id>",
      "state": "<state>",
      "contact": "<contact>",
      "matter_summary": "<matter_summary>",
      "preferred_contact_method": "<preferred_contact_method>",
      "consent": "<consent>"
    },
    "name": "send_client_message"
  }
}

Input Schema

NameRequiredDescriptionDefault
stateYesUS state, two-letter code or name, e.g. CA or California
consentYes
contactYes
entry_idNoThe entry_id from start_from_directory_profile, if the user started from a directory listing. Counts the listing visit; carries no personal data.
match_idNo
pending_okNoDeprecated since 2026-11-04 and ignored. Messages no longer wait for anything a lawyer buys.
attorney_idYes
approval_codeNoThe 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.
practice_areaNo
matter_summaryYesSummary the USER read and approved for sharing with this lawyer
idempotency_keyNoSame key on retries prevents a duplicate message
attribution_tokenNoSigned campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link
human_approval_idNoOnly when preview_client_message returned human_approval: the id of the page where the person approved
opposing_party_nameNoName of the other side, if any, so the firm can check conflicts. Not shared beyond the firm.
preferred_timeframeNo
preferred_contact_methodYes
intake_notice_acknowledgedNoTrue only after the user read: no attorney-client relationship exists yet and the lawyer may decline

Output Schema

NameRequiredDescriptionDefault
noticeYes
statusYes
consentYes
attorneyYes
match_idYes
duplicateYes
next_stepYes
created_atYes
submissionYes
api_versionYes
destinationYes
referral_idYes
consultationYes
last_updatedYes
status_checkNo
status_tokenYes
qualificationYes
delivery_noticeNo
lifecycle_stateYes
attorney_responseYes
consent_text_shownYes
delivered_to_lawyerYes
personal_details_deletedYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / human_approval_id
      Added value: +{
      +  "description": "Only when preview_client_message returned human_approval: the id of the page where the person approved",
      +  "pattern": "^hap_[A-Za-z0-9_-]{16}$",
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / approval_code / pattern
      Previous value: -"^apr_[a-f0-9]{32}$"New value: +"^(apr_[a-f0-9]{32}|apr2_[0-9a-z]{6,12}_[a-f0-9]{32})$"
  3. Changed1 schema field changed
    • changedOutput schema / required
      Previous value: -[
      -  "api_version",
      -  "referral_id",
      -  "status",
      -  "lifecycle_state",
      -  "delivered_to_lawyer",
      -  "delivery_notice",
      -  "match_id",
      -  "created_at",
      -  "last_updated",
      -  "attorney",
      -  "destination",
      -  "submission",
      -  "attorney_response",
      -  "consultation",
      -  "qualification",
      -  "consent",
      -  "personal_details_deleted",
      -  "next_step",
      -  "notice",
      -  "duplicate",
      -  "status_token",
      -  "consent_text_shown"
      -]New value: +[
      +  "api_version",
      +  "referral_id",
      +  "status",
      +  "lifecycle_state",
      +  "delivered_to_lawyer",
      +  "match_id",
      +  "created_at",
      +  "last_updated",
      +  "attorney",
      +  "destination",
      +  "submission",
      +  "attorney_response",
      +  "consultation",
      +  "qualification",
      +  "consent",
      +  "personal_details_deleted",
      +  "next_step",
      +  "notice",
      +  "duplicate",
      +  "status_token",
      +  "consent_text_shown"
      +]
  4. Added

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the refusal behavior when content changes since approval, that only approved fields are stored, that retries with the same idempotency_key do not duplicate while key reuse with different details is refused, and what the response contains (contact_request_id, lifecycle_state, private status token). The annotations already declare destructive and idempotent, so the description adds real context rather than restating them, though it does not explain what 'destructive' means operationally (message goes to a third party and cannot be recalled).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the gating condition before any mechanics, then layers prerequisite, refusal, storage, and return-value sentences in a logical order. Dense but each sentence carries a distinct rule; the trailing 'listing service, not a lawyer referral service' disclaimer is the only line that serves policy rather than tool invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter mutation tool with nested consent, an output schema, and high-consequence side effects, the description covers the approval gate, refusal paths, idempotency, and return shape. Gaps remain around how the required non-obvious fields (state, contact, preferred_contact_method) relate to the consent fields_authorized list, which the description never reconciles.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 59% across 17 parameters, so the description must carry weight; it does add cross-field meaning not in the schema, tying approval_code to the specific approved version, tying idempotency_key to retry-vs-reuse semantics, and framing consent as gating the whole call. It still leaves numerous parameters (state, contact, preferred_contact_method, opposing_party_name, match_id, practice_area, intake_notice_acknowledged) unexplained in prose, relying on the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Send my message to the lawyer I picked') and immediately distinguishes itself from the sibling preview tool by naming preview_client_message as a required prior step. The title and description together make the one-lawyer-per-call scope unmistakable against siblings like request_attorney_introduction or confirm_introduction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition chain (person picked exactly one lawyer, saw the name, exact message, shared details and consent text, and said yes), an explicit prohibition ('Never call it on your own initiative or for several lawyers at once'), and names the required predecessor and the value to pass from it. The condition that routes to refusal (recipient or text changed since the yes) is spelled out too.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources