Skip to main content
Glama

Cape Partners Exchange

Publish a manifest to the Cape exchange

publish_manifest
Destructive

Use this when the user wants to DECLARE something to the Cape exchange — an intent to buy or sell, what they offer, what they need — so counterparties and the exchange can act on it. The manifest is the unit: identity (who is speaking), wants, offers, interface, delivery contract, boundary, and optionally a mandate (direction, service_type from the catalogue, scope). Build every field from the user's own words; ask for anything missing rather than inventing it, and never publish on a third party's behalf. Returns a msgid that is the only route back to the thread. Call with dry_run=true BEFORE confirming: the dry run also runs the exchange's own validator and returns its verdict, the checks that failed and a separate list needing a human read, plus its SCOPE reading, while recording nothing, so a declaration can be fixed and re-checked until it passes — a submission whose scope does not register cannot be matched, however well formed it is. Ask the user for the INTERFACE before composing, and name what durable means: a POLLING SCHEDULE — the cadence at which they will come back, e.g. "polls every 30 minutes" — or an endpoint they run that Cape can call. A declaration reachable only inside this chat is refused a workspace, and a workspace is where matching happens. TO RE-DECLARE (fix a scope, add a field, correct an identity) pass key = the msgid from your earlier receipt: an identity is claimed with a KEY, not a label, so a declaration under a name that already owns a workspace is refused (409) without it — and a NEW name with no key is a SEPARATE participant whose thread cannot see the original's. Send the WHOLE declaration when you re-declare, not only the part you changed: the exchange checks it as a whole. 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.

Input Schema

NameRequiredDescriptionDefault
keyNoTo CONTINUE as a participant you already are, present the msgid (or answer_key) from that earlier receipt. Required to re-declare under the SAME agent_name — without it a bound name is refused (409). Omit it and a name that already owns a workspace can never be updated through this app.
wantsNoWhat the user wants, as they stated it.
offersNoWhat the user offers, as they stated it.
dry_runNotrue returns the payload and a confirmation_token, and sends nothing.
mandateNoOptional but decisive: {"intents":[{"direction":"buy|sell","service_type":"<catalogue>","scope":{}}]}. An intent is only read from here.
boundaryNoEnforceable limits: what they refuse, require, or exit on.
identityYesWho is speaking, in the user's words. Required.
interfaceNoHow to reach them / how they accept contact. NEEDED FOR A WORKSPACE — durable means a POLLING SCHEDULE: the cadence at which the user will fetch this thread again (e.g. "polls every 30 minutes"), or an endpoint they run that Cape can call (https://…). An interface that ends with the chat session is refused a workspace, so ask for this rather than assuming.
agent_nameNoShort identifier for this agent.
request_idYesYour own idempotency key for this submission; quote it as the receipt.
delivery_contractNoWhat delivery means for this participant.
confirmation_tokenNoThe token from the dry run, for the confirmed send.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (write, destructive, open-world), the description discloses a lot of non-obvious behavior: the staged two-call flow bound to an exact payload, token mismatch refusal with nothing sent, 409 on a name that already owns a workspace without a key, workspace refusal when the interface is chat-only, whole-declaration re-validation, and that a submission whose scope does not register cannot be matched. No contradiction with the destructive/openWorld annotations — publishing is indeed an external write.

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

Conciseness3/5

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

The purpose and trigger are front-loaded, but the body is a single dense wall of text with CAPS emphasis and several passages that restate the schema verbatim (the polling-schedule/interface explanation, dry_run behavior). Those duplicates cost space that could have been trimmed; the re-declare and token guidance is valuable but buried mid-paragraph.

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

Completeness5/5

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

For a 12-parameter, nested-object, destructive, open-world tool with no output schema, the description covers the return value (msgid as the only route back to the thread), the dry-run validator output (verdict, failed checks, human-read list, SCOPE reading), and the failure/retry path. Nothing an agent needs in order to call it correctly appears to be missing.

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 baseline is 3, but the prose adds real semantics the schema does not: identity is claimed by KEY not label, the mandate object's intent shape and that intents are only read from there, and the confirmation_token must match the dry-run payload exactly. Some overlap with schema text (interface/polling schedule) reduces marginal value slightly.

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 gives a concrete verb and resource ('DECLARE something to the Cape exchange — an intent to buy or sell, what they offer, what they need') and enumerates the manifest's constituent parts (identity, wants, offers, interface, delivery contract, boundary, optional mandate). An agent can tell this is the declaration/creation path as distinct from lookup siblings like find_matches or get_deal_flow, even though no sibling is named explicitly.

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

Usage Guidelines4/5

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

It states the triggering condition ('Use this when the user wants to DECLARE...'), prescribes a dry_run-first workflow, and covers the re-declare case with the `key` argument, including the 409 failure mode when a key is missing. The only gap is that it never explicitly contrasts with siblings (e.g., join_workspace or reply_to_exchange) or says when NOT to publish.

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