Skip to main content
Glama

Cape Partners Exchange

Withdraw an engagement request you raised

withdraw_engagement
Destructive

Use this when the user wants to CANCEL an engagement request (an introduction) they already raised and that is still waiting on the other side. Name it either by engagement_request_id or by candidate (the exact counterparty the exchange showed them), plus the key of the thread it was raised on. The request is marked withdrawn — not deleted — which releases the pairing so a different request can be made later, and the other side sees a withdrawal on the record rather than a request that vanished. A request the OTHER side raised at this participant is answered (confirm or decline), not withdrawn, and is refused here. The call is staged: a dry run sends nothing, and the confirmed call is bound to the exact payload that dry run returned. Call once with dry_run=true to get the exact payload and a confirmation_token; call again with the same arguments plus that token to send. A token that does not match the payload is refused and nothing is sent.

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": {
      "request_id": "<request_id>",
      "key": "<key>"
    },
    "name": "withdraw_engagement"
  }
}

Input Schema

NameRequiredDescriptionDefault
keyYesThe msgid (or answer_key) of the thread the engagement request was raised on.
reasonNoOptional reason in the user's own words, recorded with the withdrawal.
dry_runNotrue returns the exact withdrawal and a confirmation_token, and withdraws nothing.
candidateNoOR the exact counterparty name the request was raised against. Provide this or engagement_request_id — never guessed.
request_idYesYour own idempotency key for this withdrawal; quote it as the receipt.
confirmation_tokenNoThe token from the dry run, for the confirmed withdrawal.
engagement_request_idNoThe id of the live request to withdraw, as get_exchange_answer reports it under state.pairings[].pending_request.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and readOnly=true is false, and the description goes well beyond them by clarifying the request is 'marked withdrawn — not deleted', that the pairing is released, and that the other side sees a withdrawal on the record. It also discloses the two-call staging protocol and that a mismatched confirmation_token causes the call to be refused with nothing sent.

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?

Five sentences, front-loaded with the cancellation trigger before the naming rule and the staging protocol, and every sentence carries distinct information. Slightly long for the amount of material, but there is no filler or repetition.

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 seven-parameter mutation with no output schema, the description covers the critical points: side effects, irreversibility nuance, wrong-side refusal, and the mandatory dry-run handshake. It falls just short by omitting the idempotency receipt role of `request_id` and the recording of `reason`, which are the only caller-facing details left to the schema alone.

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 100%, so the schema already documents all seven parameters, but the description adds real semantic value by explaining the either/or naming choice (engagement_request_id vs candidate) and the dry_run/confirmation_token contract. The gap is that the required `request_id` idempotency key and the optional `reason` are never mentioned in the description, and the near-identical names `request_id` and `engagement_request_id` risk confusion for an agent reading only the prose.

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?

The description opens with a specific verb and resource ('CANCEL an engagement request (an introduction) they already raised') and adds the scoping condition ('still waiting on the other side'). It also explicitly distinguishes this from answering a counterparty-raised request, which separates it from reply_to_exchange without needing either schema.

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?

It gives an explicit when-to-use trigger (user wants to cancel a request they raised) and an explicit when-not with the correct alternative behaviour ('A request the OTHER side raised ... is answered (confirm or decline), not withdrawn, and is refused here'). The staged dry-run prerequisite is also stated as a required call sequence.

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