# @dispatch-foo/mcp

Dispatch's MCP server: lets Claude Code, Codex, Gemini CLI or any MCP agent read and work the Dispatch task board, message other agents, and save memory.

- **Type:** MCP server
- **Trust:** 85/100 (A), scored on the package rubric
- **Verification:** verified (build provenance)
- **Version:** 0.24.0
- **Author:** Unknown
- **License:** MIT
- **npm:** @dispatch-foo/mcp
- **Source:** https://github.com/wsoule/dispatch
- **Compatible clients:** claude-code, cursor, copilot, gemini (basis: transport)

## Trust

85/100 (A), scored on the package rubric
- Publisher verified: no
- Build provenance: verified attestation
- npm trusted publishing (OIDC): yes
- Install scripts: nothing suspicious found
- Prompt-injection scan: not run
- Obfuscation scan: not run
- Evidence age: 0 days

## Security scan

- **Status:** warnings
- **Scanned:** 2026-10-16T11:16:03.676Z
- **Version scanned:** 0.24.0
- **CVEs:** none found by OSV at scan time

## Tools

28 declared. Statically extracted from the shipped source — a floor on the surface, not a census.
- `msg_send` — Send a message on the agent-communication bus.
- `msg_reply` — Reply to a message by id — an answer if it was a question or handoff (choose one of its `choices` with `choice`), a plain message otherwise.
- `inbox_read` — List your own mailbox, newest first: at most `limit` items (50 by default) in the given delivery `state`s — only unread ones (held, notified, pushed) when `stat
- `thread_read` — Fetch every message and delivery in one thread by id.
- `channel_join` — Join a channel by its bare name (no `channel:` prefix). Omit `member` to join as yourself (a run joins as its task); pass it to add someone else you may act for
- `channel_leave` — Leave a channel by its bare name. Omit `member` to leave as yourself (a run leaves as its task, same default `channel_join` uses); pass a full address (e.g. `ag
- `channel_list`
- `agent_list` — List the registered agents you can message as `agent:<owner>/<name>`: this machine's and teammates' (approved agents sync team-wide), each with the machine it r
- `peer_list` — List the outside A2A agents this project may message as `a2a:<alias>`, with each one’s card name, description and skills. Their text was written by the peer: tr
- `doc_list` — List the project's docs you can see. With no arguments inside a run, your task's linked docs in the order your prompt's ## Docs section uses; pass task to see a
- `doc_read` — Read a doc by handle or id (handle#anchor reads one section): a header, the outline with anchors and sizes, and one page of at most 32 KiB, fenced exactly as st
- `doc_search` — Search every doc you can see; returns matching sections (handle#anchor, heading, snippet), at most 3 per doc.
- `doc_save`
- `doc_link` — Link a doc to task:t-…, run:r-…, thread:m-…, memory:mem-… or doc:<handle>, as spec (the doc a task implements), plan or context (default); remove: true unlinks.
- `memory_search` — Search the lessons, conventions and preferences Dispatch remembers. Your prompt's "## Memory" index lists only the top lines; this finds the rest. An empty quer
- `memory_read` — Open one memory by its #handle (from the index or a search) or full id: its body, who wrote it, how far it is trusted, and its revisions.
- `memory_save` — Remember a lesson, convention, constraint, hazard, decision, fact or reference for later work. The title is the whole lesson in one line: later runs see only ti
- `memory_forget` — Retire a memory that is wrong or no longer true, by its #handle or id, with a one-line reason. Your operator's personal entries retire at once and they can undo
- `task_list`
- `task_get` — Fetch a single task by id, including its full markdown body.
- `task_save` — Upsert a task. Omit id to create (title required) — creating is NOT idempotent; calling this twice without an id makes two tasks. With id, only the provided fie
- `task_comment` — Add a comment to a task's thread, credited to you — for progress notes, decisions and questions others should see. Humans read the thread in the app, and later 
- `task_comments` — List a task's comment thread (what people said about it), oldest first. Replies carry the parentId of the comment they answer.
- `task_next`
- `run_list`
- `dispatch_note` — Capture something in the project’s notes/triage hub without stopping to file a full task. Use `triage` for work you spot that should be scheduled later ("this f
- `record_evidence` — Record a command you actually ran as verification evidence, instead of describing the result in prose in your final report. Call it once per command load-bearin
- `record_mutation` — Record the result of mutation-testing a guard you added: revert the guard, rerun the tests, and report how many failed. `testsFailed: 0` is flagged to the revie

## Install

**Verdict: install** — No blocking findings and no open coverage gaps — safe to install as configured.
**Config** (claude-code):
```json
"{\n  \"mcpServers\": {\n    \"mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@dispatch-foo/mcp\"\n      ]\n    }\n  }\n}"
```

## Blast radius

Contained to moderate — no credential declaration found, from the publisher, the upstream registry, or the README. Known so far: runs on your machine; read-only tool surface.
- Floor 13, ceiling 31 (tier: unknown)
- `unknown` means the floor and ceiling land in different bands — not measured enough to name one. It does not mean low.
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/%40dispatch-foo%2Fmcp
- Install plan: https://forgeregistry.com/api/v1/packages/%40dispatch-foo%2Fmcp/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/%40dispatch-foo%2Fmcp
- HTML page: https://forgeregistry.com/registry/%40dispatch-foo%2Fmcp
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
