agent-handoff-mcp
Click on "Install 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., "@agent-handoff-mcpsend a handoff to qa-agent asking it to run the regression suite"
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.
Agent Handoff MCP
A local-first Model Context Protocol server for bounded, auditable handoffs between AI agents.
Agent Handoff MCP gives Claude, Codex, local agents, and other MCP clients a shared inbox without giving one model control over another. Agents can send structured work, acknowledge it, report a blocker, complete it, or cancel work they originally queued. Every transition is attributable and retained in SQLite.
Why this exists
Multi-agent systems often pass work through chat transcripts, ad hoc files, or vendor-specific orchestration. That loses ownership, lifecycle state, authorization boundaries, and a durable audit trail. This server turns a handoff into a small protocol object:
sender -> queued -> accepted -> completed
| ^
v |
blocked --------+
sender may cancel only while queuedThe server coordinates work; it does not execute agents, fetch references, read arbitrary files, or create autonomous agent loops.
Related MCP server: agent2agent
MCP tools
Tool | Purpose |
| Show the authenticated identity, boundaries, and policy revision. |
| Send a structured handoff to an authorized recipient. |
| List handoffs addressed to the current identity. |
| Read a handoff and its append-only event history. |
| Accept queued or blocked work. |
| Mark work blocked/completed, or cancel it while queued. |
Design properties
SQLite shared state with WAL mode and parameterized queries
Streamable HTTP and stdio transports
Opaque UUID handoff, event, and thread identifiers
Explicit
send_toandreceive_fromauthorization with no permissive defaultsPer-agent disclosure ceilings:
public-safe,internal, orrestrictedStrict registry validation: unknown keys, duplicates, and unsupported versions are rejected
Immutable policy snapshots: every operation is checked against the current registry, so disabling an identity, rotating a token, or narrowing a relationship takes effect on live sessions without a restart
Hashed, expiring bearer-token bindings for HTTP
Idempotency keys for safe retries
Maximum reply-chain depth to limit automated ping-pong
Strict message, array, reference, and request-size limits
Sender/recipient-only reads, re-authorized against current policy
Append-only lifecycle events; no MCP delete tool
References are stored as inert strings and never dereferenced
Command line
The package installs one dispatcher binary, agent-handoff-mcp, whose name matches the package so npx @sarutobi-sasuke/agent-handoff-mcp <command> resolves directly once the package is published to npm. (It is not published yet; use a source checkout until then.)
Command | Purpose |
| Start the shared Streamable HTTP server. |
| Start a stdio server bound to |
| Create a starter registry with disabled synthetic identities. |
| Validate a registry without reading tokens or the database. |
| Issue an expiring token, printed once to stdout. |
| Replace an existing token; the old one stops working immediately. |
| Toggle an identity across all transports. |
| Remove an identity's token binding. |
| Generate a token and digest without touching a registry. |
agent-handoff-http, agent-handoff-stdio, agent-handoff-token, and agent-handoff-validate are also installed as direct aliases.
Quick start
Requirements: Node.js 22.13 or newer.
For a source checkout:
git clone https://github.com/SarutobiSasuke8/agent-handoff-mcp.git
cd agent-handoff-mcp
npm ci
npm run build
cp .env.example .env
node dist/src/cli.js init --registry ./config/agents.yaml
node dist/src/cli.js issue --registry ./config/agents.yaml --agent example-alpha --expires 2027-01-01T00:00:00Z
node dist/src/cli.js issue --registry ./config/agents.yaml --agent example-beta --expires 2027-01-01T00:00:00Z
node dist/src/cli.js enable --registry ./config/agents.yaml --agent example-alpha
node dist/src/cli.js enable --registry ./config/agents.yaml --agent example-beta
node dist/src/cli.js validate --registry ./config/agents.yaml
npm run check
npm startEach issue command prints that identity's raw token exactly once; hand it to that client over a secure channel. Only SHA-256 digests are stored. See docs/QUICKSTART.md for complete PowerShell and POSIX clean-room flows.
The default endpoints are:
GET http://127.0.0.1:3220/healthz liveness and policy state
GET http://127.0.0.1:3220/readyz readiness; 503 while the policy is degraded
POST http://127.0.0.1:3220/mcp
Authorization: Bearer handoff_<agent-specific-token>The server binds to localhost by default. Put an authenticated private-network or TLS boundary in front of it before any remote deployment.
Stdio mode
Each stdio client supplies its identity through its own process environment while sharing the same SQLite database and registry:
{
"command": "node",
"args": ["/absolute/path/agent-handoff-mcp/dist/src/cli.js", "stdio"],
"env": {
"HANDOFF_AGENT_ID": "example-beta",
"HANDOFF_MCP_DB": "/absolute/shared/path/handoffs.sqlite",
"HANDOFF_MCP_REGISTRY": "/absolute/path/agents.yaml"
}
}Use HTTP when multiple clients should connect to one long-running service. Use stdio for local clients that can safely receive a fixed identity through their own configuration. Both transports re-check the registry on every operation, so revocation applies to running stdio sessions too.
Documentation
Scope boundary
This project is a coordination primitive, not a general task platform. Shared task boards, decisions, broadcasts, presence, leases, notifications, context promotion, and remote dispatch belong behind future optional modules. The six-tool handoff surface remains the stable core.
License
Apache-2.0. See LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA SQLite-backed message queue system that enables multiple AI agents to communicate with each other via a simple HTTP interface.4Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables async, authenticated messaging between AI agents with explicit authorization and persistent inbox.3MIT
- FlicenseNot gradedqualityDmaintenanceEnables multiple AI agents to communicate and coordinate via a shared SQLite-backed message log, supporting directed messages, broadcasts, and session discovery.
- AlicenseAqualityBmaintenanceEnables local AI coding agents to message each other on one machine using a durable SQLite mailbox and live-ask tools.9MIT
Related MCP Connectors
Durable agent-to-agent handoffs and shared scratchpad for multi-agent workflows.
Reliable async execution for agent tool calls: schema gating, retries, idempotency, audit trail.
Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SarutobiSasuke8/agent-handoff-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server