cos-link-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cos-link-mcppropose dinner next week to my partner's CoS"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CoS Link for Grok Bot
Your Grok Bot Chief of Staff should be able to coordinate with your partner's Grok Bot Chief of Staff.
CoS Link proposes a communication protocol specifically for Grok Bot Chiefs of Staff across separate user accounts. Its working reference implementation provides owner-approved pairing, limited capability grants, shared messages, and revocation. Each CoS keeps its owner's computer, credentials, and private sources local.
Built by Autodev Team for the Grok Bot use case. The Grok Build and Cursor plugins provide distribution and MCP integration paths; the proposal asks the platform to add native Grok Bot identity and delivery hooks. No Slack account is required. Not affiliated with or endorsed by xAI or Cursor.
System design · Protocol · Native feature proposal · Plugin setup · Data handling · Security
Submitted for review: Grok Build marketplace PR #707 and Cursor publisher application. Both await review; no accepted marketplace listing is claimed.

A shared plan, separate authority
“Find a time for dinner with my partner next week.”
Your Grok Bot CoS proposes a task to your partner's approved Grok Bot CoS. Their CoS checks their calendar locally and returns candidate windows. One organizer prepares the result for the appropriate owner decision. Private event titles, calendar credentials, and unrelated context do not belong in the exchange.
The current release coordinates task proposals and availability windows. It does not execute calendar writes or claim that a peer can approve an action on your behalf.
flowchart LR
A[Your CoS] <-->|MCP client| S[CoS Link\nauthentication · grants · mailbox]
B[Their CoS] <-->|MCP client| S
O[Owners] -->|pair · scope · revoke| S
C[A2A clients] <-->|A2A 1.0 profile| S
S --> D[(Durable SQLite storage)]Related MCP server: agent-bridge
What works
Independent owner and agent credentials, with only hashed tokens stored in the mailbox database.
Intended-recipient invitations, single-use codes, independent acceptance, and inviter verification before activation.
Asymmetric capability grants, permission changes, per-owner pause/resume, revocation, and agent credential replacement.
Addressed, structured messages with task correlation, expiry, turn budgets, persistent cursors, and idempotent retries.
An owner console showing contacts, shared messages, and connection activity.
An MCP stdio client that talks to a separately hosted service over HTTPS; loopback HTTP is available for development.
An explicit A2A 1.0 JSON-RPC profile with authenticated discovery, task messages, retrieval, and cancellation. See the exact supported surface.
Tests exercise owner/agent authority, consent, replay and conflicting keys, concurrency, restart recovery, payload validation, unauthorized task access, revoked disclosure, unrelated-owner directory isolation, and A2A/MCP behavior. A separate live demo starts two real MCP processes against a local HTTP service. The installed Grok Build CLI also validates the manifest and completes an MCP initialization and tool-discovery handshake. See verification evidence and its limits. These checks use synthetic accounts; they do not prove native Grok Bot identity, wakeups, or vendor certification.
Run locally
Requires Python 3.11+ and uv.
git clone https://github.com/logan-robbins/cos-link.git
cd cos-link
uv sync --locked
uv run cos-link init
uv run cos-link create-owner --name Alice --credentials-out local/alice.json
uv run cos-link create-owner --name Bob --credentials-out local/bob.json
uv run cos-link serveOpen http://127.0.0.1:8080. Each owner opens their own console with the owner_token from their private credential file. Share the intended owner's id, create an invitation, have that owner accept it, and verify their identity before activating the contact. The console keeps the key only in the current tab's memory.
Credential files and the SQLite database live under the ignored local/ directory. The operator must distribute each owner's credentials securely. Never commit these files or paste an owner/admin key into an agent chat. Agent hosts receive only their own agent_token.
For a fast demonstration with no real accounts:
uv run python examples/two_owners.py
uv run python examples/live_mcp.pyThe first example exercises the HTTP application. The second launches a temporary HTTP service and two MCP stdio clients, then verifies identities, a request, retries, inbox retrieval, task status, and revocation.
Connect your agent
Install the cos-link-mcp entry point in the host environment, then configure a standard MCP server:
{
"mcpServers": {
"cos-link": {
"command": "cos-link-mcp",
"env": {
"COS_LINK_URL": "https://your-mailbox.example",
"COS_LINK_TOKEN": "<this owner's agent credential>"
}
}
}
}Use the packaged integration instructions for Grok Build or Cursor. Their manifests use environment placeholders, never real secrets. The command must already be installed and accessible to the host; the plugin does not silently install runtimes or execute a remote installer.
Ask the agent to list contacts, submit a task.propose message, and poll the inbox. Persist cursors after processing and reuse the same idempotency key on retries. A host routine can schedule polling. MCP does not, by itself, wake an idle Grok Bot. A supported native wake mechanism remains part of the platform proposal.
Deploy a shared mailbox
Use one service instance, persistent storage, a private data directory, and an HTTPS reverse proxy. Set COS_LINK_PUBLIC_URL to the service's external HTTPS origin so the Agent Card advertises the right endpoint. Restrict provisioning access and add rate limits at the proxy. The service operator can read shared payloads; there is no end-to-end encryption claim.
A container recipe is included:
docker build -t cos-link .
docker volume create cos-link-data
docker run --rm -v cos-link-data:/data cos-link init
docker run --rm -v cos-link-data:/data cos-link create-owner --name Alice --credentials-out /data/alice.json
docker run --rm -p 127.0.0.1:8080:8080 -v cos-link-data:/data cos-linkRetrieve and distribute credential files securely through the operator's deployment workflow. Configure HTTPS before exposing the service remotely. The Dockerfile is a deployment recipe; local Python verification does not constitute a production deployment or container runtime test.
Why publish this
Grok Bot documents internal Bot handoffs and copied templates. Trusted cross-account contacts need additional product primitives: verified owner/Bot identity, bilateral permissions, authenticated delivery and wakeups, and approval provenance.
This repository makes that discussion concrete. The native feature proposal describes those primitives; the submission research distinguishes the Grok Build marketplace, Cursor publisher applications, Grok Bot templates, and community feedback routes. Marketplace submission or acceptance would distribute the integration, not implement native account peering.
Verify and contribute
uv run ruff check .
uv run pytest -q
uv run python examples/two_owners.py
uv run python examples/live_mcp.py
uv buildSee CONTRIBUTING.md, SECURITY.md, and the Apache 2.0 license.
Available Tools
8 toolscancel_taskB
Cancel a non-terminal task using a retry-safe idempotency key.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| idempotency_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose two useful traits—that the operation is retry-safe via an idempotency key, and that only non-terminal tasks are eligible—but is silent on permissions, what terminal state the task lands in, and side effects on in-flight work.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the critical qualifier and the idempotency mechanism are both delivered in one pass.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the safety story is partly covered by the idempotency note. However, for a mutation tool with no annotations the description leaves key operational context—permissions and cancellation side effects—unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters. The description compensates for idempotency_key by explaining its retry-safe purpose, and task_id is self-evident from the name, but no format, uniqueness scope, or reuse semantics are given for the key.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Cancel) and resource (task) and adds the qualifier 'non-terminal', which tells an agent this only applies to active/pending work. It implicitly distinguishes itself from siblings like list_tasks and get_task, though it does not explicitly name the closest alternative (update_task_status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to cancel versus transitioning a task via update_task_status, nor any stated prerequisites or error conditions beyond the 'non-terminal' hint. The agent must infer the routing decision entirely on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_identityA
Return the authenticated CoS Link owner, role, and public account metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the authentication context and the returned subject (owner/role/account metadata) but says nothing about safety profile, permission requirements, or caching behavior, which for a zero-param read tool is a modest but real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the verb and returned fields front-loaded and zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail need not be repeated. For a simple zero-param identity lookup the description is nearly sufficient; only behavioral notes about permissions/caching are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description doesn't need to and doesn't attempt to explain parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Return) plus the exact resource set: authenticated owner, role, and public account metadata. An agent can tell this apart from list_contacts or read_inbox without opening a schema, though it doesn't name a sibling explicitly to reinforce the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'authenticated' implies this returns the caller's own identity, which is enough to infer the natural use case (resolving who the current user is). However, no when-to-use, prerequisite, or alternative-tool guidance is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskC
Read the current durable state of a coordination task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It implies a read operation with 'Read' and 'current durable state', which suggests non-destructive behavior and possibly eventual consistency, but doesn't state whether it's cached, whether it fails for cancelled/completed tasks, or what 'durable' entails operationally. With no annotations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded, no waste. Efficient and to the point, though it could benefit from a bit more clarity on what 'durable state' means in practice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values needn't be explained. However, with no annotations and a terse description, critical behavioral context is missing: whether the task_id is an ID or name, whether it returns errors for missing tasks, and how it relates to siblings like list_tasks. For a read tool with no annotations, this is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there is one required parameter (task_id). The description adds no meaning to task_id beyond the schema's type string. For a single required string parameter, the baseline is 4 for zero params, but here the parameter exists and is undocumented, so 3 reflects adequate but minimal coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (Read) and resource (coordination task) but is vague about scope. 'current durable state' is somewhat distinctive phrasing but doesn't clearly differentiate from list_tasks or update_task_status beyond being a read of a single task. The purpose is understandable but not sharply defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of alternatives like list_tasks or how this differs from other task-related siblings. An agent must infer that this retrieves a single task by ID, but there's no explicit routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsB
List owner-approved CoS relationships visible to this credential.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does convey a meaningful behavioral constraint: only owner-approved relationships and only those visible to the credential, implying scoping/filtering. But it omits return format, pagination, and why the credential-scoped visibility matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, front-loaded sentence with no filler. Efficient, though the jargon density slightly hurts readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a zero-param list tool, the description conveys the key scoping behavior. Minor gap: no usage routing against siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline is 4. Nothing to misdocument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (CoS relationships / contacts), which is clearer than a tautology. However, 'owner-approved CoS relationships visible to this credential' is jargon-heavy and doesn't clearly distinguish what this resource actually is against siblings like get_identity or read_inbox. An agent knows it's a list operation but not exactly what it retrieves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no reference to alternative tools. The description doesn't help an agent decide between list_contacts and get_identity when looking up a person.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksB
List polling-based coordination tasks visible to this credential.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| relationship_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the important scoping constraint that results are limited to tasks visible to the current credential, which is meaningful behavioral context. It says nothing, however, about pagination, default ordering, or result volume beyond the schema's limit parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words, and the credential-visibility scope is front-loaded. It is efficient, though its brevity comes at the cost of the missing usage and parameter guidance flagged elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the credential-visibility scope is covered. Still, for a two-parameter list tool with 0% schema description coverage and no annotations, the description leaves the agent without any information on how limit and relationship_id shape results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so neither parameter is explained anywhere. The description does not mention limit or relationship_id at all. The credential-visibility constraint is arguably relevant to relationship_id filtering, but it is not framed that way, leaving both parameters semantically opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (polling-based coordination tasks), which distinguishes it from siblings like list_contacts and read_inbox. However, it does not clarify its relationship to the sibling get_task, which likely retrieves a single task, so sibling differentiation is only partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description contains no explicit when-to-use guidance, no mention of alternatives, and no exclusions. An agent must infer from the name alone that this is the enumeration counterpart to get_task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_inboxA
Poll accepted peer messages. Persist next_cursor before the next poll.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses cursor-based pagination behavior and the requirement to persist next_cursor across polls, but it does not say whether polling consumes or marks messages as read, nor anything about permissions — significant omissions for a message-retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core action front-loaded and the operational caveat second. Nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but 'next_cursor' is referenced from the description rather than the input schema and is never defined. With no annotations and no parameter descriptions, the definition leaves gaps around limit behavior, message state after polling, and access requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It conveys cursor semantics by tying the input to a returned next_cursor that must be persisted, which is genuinely useful, but the 'limit' parameter remains entirely unexplained and the cursor's format is not clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Poll') and resource ('accepted peer messages'), which reads clearly as an inbox retrieval and is distinguishable from siblings like list_contacts or list_tasks. It stops short of explicitly naming those siblings, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The imperative 'Persist next_cursor before the next poll' implies an intended polling loop with cursor persistence, giving partial usage context. It never states when to use this versus alternatives such as list_tasks/get_task, nor any prerequisites, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_coordinationC
Submit one structured message within the relationship's current grant.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | ||
| task_id | No | ||
| capability | Yes | ||
| expires_at | No | ||
| turn_budget | No | ||
| idempotency_key | Yes | ||
| relationship_id | Yes | ||
| recipient_owner_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It hints at authorization scope via 'relationship's current grant', but omits idempotency behavior (despite the idempotency_key parameter), delivery guarantees, error handling, and mutation side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. For a simple sentence it is efficient, though its extreme brevity reflects under-specification rather than intentional conciseness for such a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with 5 required fields, nested payload object, and no annotations, the description is far too thin. Output schema exists so return values need not be explained, but critical parameter and behavioral details are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters. The description adds no meaning beyond vaguely implying a payload ('structured message') and relationship scope. Parameters like capability, recipient_owner_id, idempotency_key, turn_budget, expires_at, and task_id are entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Submit) and resource (one structured message), with a clear scope (within the relationship's current grant). It distinguishes from read_inbox by being a send action, but does not explicitly name or differentiate from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as read_inbox or task tools. The phrase 'current grant' is a constraint, not a usage instruction or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_task_statusC
Record processing outcome; this never represents an owner's external approval.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| task_id | Yes | ||
| idempotency_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, yet it omits permissions required, side effects, idempotency semantics (despite an idempotency_key being required), and reversibility. The one clarifying statement about external approval is genuinely useful context but far short of what a mutation tool with zero annotation coverage needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is efficient but cryptic; the most important content (what status is being set, on what object) is not front-loaded or stated at all. Length is fine, informativeness is not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, but for a three-parameter mutation tool with no annotations and no enum guidance on status, the description leaves too much unspecified for an agent to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three required parameters, and the description names none of them. It gives no hint about valid status values, the meaning of task_id, or how idempotency_key governs retries, so it fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a vague action ('Record processing outcome') that loosely maps to the tool name update_task_status but never names the resource or the status field explicitly. It does add a distinguishing semantic (it is not an owner's external approval), which helps separate it from cancel_task or send_coordination, but the core purpose is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus siblings such as cancel_task, get_task, or send_coordination. The single clause about external approval hints at a usage boundary but never states the conditions under which the tool should be invoked.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
cancel_task - First observed
get_identity - First observed
get_task - First observed
list_contacts - First observed
list_tasks - First observed
read_inbox - First observed
send_coordination - First observed
update_task_status
TDQS
Scored across 8 tools
Each tool targets a distinct resource/action: identity, contact listing, inbox polling, task listing/reading/canceling, coordination sending, and status updating. No two tools appear to do the same thing, and boundaries are clear.
All names follow a consistent snake_case verb_noun pattern (get/list/read/send/cancel/update). The convention is predictable across the entire set.
Eight tools is a well-scoped count for a coordination/communication server, covering identity, contacts, inbox, and task lifecycle without obvious redundancy.
Core workflows for identity, relationship listing, inbox polling, task read/cancel/update, and coordination sending are present. Minor gaps exist, such as no explicit create_task or inbox acknowledgement/delete, but likely workable via existing operations.
Maintenance
Related MCP Connectors
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
- OctopadOAuthapp.octopad
The back-office workspace for your team's AIs: tasks, knowledge and context shared over MCP.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
End-to-end encrypted messaging and work coordination for autonomous AI agents.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to message each other by @nickname via an MCP server, with contacts, presence, and durable delivery across local and remote agents.3Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables local AI agents to collaborate as Driver and Navigator for pair programming and technical peer review, exchanging proposals, diffs, and messages through a zero-cloud filesystem-backed MCP server.5 npmMIT
- AlicenseAqualityBmaintenanceDM / IM for AI agents over the A2A 1.0 protocol — send and receive agent-to-agent DMs, manage friends and group threads, and rehydrate per-friend persistent memory with one-call wake context. 12 tools, pip install agoradm-mcp, stdio transport.12Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible agents like ChatGPT and Claude to securely access a Grok Bot workstation's folder-scoped files, shell, and Git tools over HTTPS+OAuth or local stdio, and to orchestrate specialized Grok Bot agents via a message bridge.1MIT