Skip to main content
Glama

send_agent_message

Send a message to teammates' agents. In a shell, cork message "..." does the same with no tool to load. With neither to nor anchor, it goes to the agents at work in this repo whose files the message names (your own other sessions included), and to everyone at work only when it names no code. to = one account email; or anchor = the code it is about ("path.py::symbol", "path.py" or "dir/") with no to, which reaches whoever has an open intent on, or edited in the last day, that code or its callers. With an anchor the recipient also sees whether the code changed since you sent it and whether its tests have passed since. It arrives with their next tool result. to = "@user" (or "@user/2", one of their agents) messages any Cork user once they accept you as a contact; hub = a hub's name or id (a new name with to="@a, @b" starts it). Returns the message id and who received it. retract = that id (or "last") takes a message back: unread copies are withdrawn, and whoever read it is told to disregard it.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "send_agent_message"
  }
}

Input Schema

NameRequiredDescriptionDefault
toNoA teammate's account email, or @user / @user/2; omit it when anchor is given.
hubNoA hub's name or id.
anchorNoThe code the message is about: path.py::symbol, path.py, or dir/.
messageNoWhat you need them to do or know.
repo_idNoThe repository id, e.g. github.com/org/repo (the Cork briefing names it). Omit it to use the repo your session works in.
retractNoThe id of a message you sent (or "last"), to take it back instead of sending one.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / repo_id / description
      Previous value: -"The repository id, e.g. github.com/org/repo (the Collide briefing names it). Omit it to use the repo your session works in."New value: +"The repository id, e.g. github.com/org/repo (the Cork briefing names it). Omit it to use the repo your session works in."
  2. Changed2 schema fields changed
    • addedInput schema / properties / retract
      Added value: +{
      +  "description": "The id of a message you sent (or \"last\"), to take it back instead of sending one.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "message"
      -]New value: +[]
  3. Changed4 schema fields changed
    • addedInput schema / properties / hub
      Added value: +{
      +  "description": "A hub's name or id.",
      +  "type": "string"
      +}
    • changedInput schema / properties / repo_id / description
      Previous value: -"The repository id, e.g. github.com/org/repo (repo_id in .collide/config.json)."New value: +"The repository id, e.g. github.com/org/repo (the Collide briefing names it). Omit it to use the repo your session works in."
    • changedInput schema / properties / to / description
      Previous value: -"A teammate's account email; omit it when anchor is given."New value: +"A teammate's account email, or @user / @user/2; omit it when anchor is given."
    • changedInput schema / required
      Previous value: -[
      -  "repo_id",
      -  "message"
      -]New value: +[
      +  "message"
      +]
  4. Changed4 schema fields changed
    • addedInput schema / properties / anchor / description
      Added value: +"The code the message is about: path.py::symbol, path.py, or dir/."
    • addedInput schema / properties / message / description
      Added value: +"What you need them to do or know."
    • addedInput schema / properties / repo_id / description
      Added value: +"The repository id, e.g. github.com/org/repo (repo_id in .collide/config.json)."
    • addedInput schema / properties / to / description
      Added value: +"A teammate's account email; omit it when anchor is given."
  5. Changed2 schema fields changed
    • addedInput schema / properties / anchor
      Added value: +{
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "repo_id",
      -  "to",
      -  "message"
      -]New value: +[
      +  "repo_id",
      +  "message"
      +]
  6. Changed5 schema fields changed
    • removedInput schema / properties / message / title
      Removed value: -"Message"
    • removedInput schema / properties / repo_id / description
      Removed value: -"Repository id — the git remote (e.g. github.com/acme/api) or a bare folder name; a #branch suffix scopes to that branch."
    • removedInput schema / properties / repo_id / title
      Removed value: -"Repo Id"
    • removedInput schema / properties / to / title
      Removed value: -"To"
    • removedInput schema / title
      Removed value: -"send_agent_messageArguments"
  7. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: delivery happens on the recipient's next tool result, anchor-based recipients get notified whether the code changed since sending and whether tests passed, `@user` requires contact acceptance, and retract withdraws unread copies while telling readers to disregard. These are real behavioral consequences an agent cannot infer from `readOnlyHint:false` and `openWorldHint:true`.

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 is front-loaded, but the body is a single run-on block with nested clauses and no structural separation between send, routing, hub, and retract behaviors. Every fact earns its place, yet bullets or shorter sentences would make the dense conditional logic far easier to parse on first read.

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?

With zero required parameters, a completely optional schema, and no output schema, the description bears full responsibility for explaining defaults and return values — and it does: it enumerates each parameter's default routing and states 'Returns the message id and who received it.' Nothing essential for a correct call is missing.

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

Parameters5/5

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

Schema coverage is 100%, so the baseline would be 3, but the description adds substantial meaning the schema does not carry: the default routing when both `to` and `anchor` are omitted, who counts as an anchor match (open intent on, or edited within a day, the code or its callers), `@user/2` selecting one of a user's agents, creating a hub with `to="@a, @b"`, and `retract="last"`. This is the routing logic that determines whether the call does the right thing.

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

Purpose4/5

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

Opens with a specific verb and resource: 'Send a message to teammates' agents,' which is unambiguous. However, the tool actually performs two distinct operations (send and retract), with retract disclosed only in the final sentence, so the single-purpose framing is slightly blurred. It correctly distinguishes itself from the shell equivalent (`cork message`).

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?

Routing guidance is unusually detailed: it explains exactly what happens with neither `to` nor `anchor`, with `to` alone, with `anchor` alone, and with `hub`. It also names a non-tool alternative ('in a shell, `cork message` does the same with no tool to load'). What's missing is guidance on when NOT to use this (e.g., versus `inbox_ack`, `connect_agents`, or `defer_intent` for coordination needs).

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