agent-bridge
An MCP central server that lets multiple AI agents (e.g., Claude Code, kimi-code) exchange private messages, shared channel broadcasts, and unified message streams via MCP tools, with SQLite persistence and per-connection identity binding.
README
agent-bridge — 个人 Agent 消息桥(MCP 中心服务器)
让多个独立运行的 AI agent(Claude Code、Claude、kimi-code……)通过 MCP 协议自动互传消息、共享频道与工作上下文,省去「把 A 的输出复制给 B」的手动环节。
解决什么问题
你同时开着多个项目、每个项目里有一个 agent,它们各自独立工作但产出需要互相传递:
- 后端项目 → Claude Code
- 前端项目 → Claude(或 kimi-code)
- 多个后端项目并存 → Claude1(项目 A)、Claude2(项目 B)
以前只能手动复制粘贴。agent-bridge 让任意数量的 agent 直接通过 MCP 工具互相「发消息 / 收消息 / 回消息」,人只需在任一入口查看全量消息流并回复。
架构
后端项目A (Claude Code) ─┐
后端项目B (Claude Code) ─┼─▶ agent-bridge (Streamable HTTP MCP 中心服务器, SQLite 持久化)
前端项目 (Claude/kimi) ──┘ ▲
│ 人在任一入口用 all_messages 统一查看 / send 回复
- 信箱(私信):
send(from, to, content)一对一投递,对方read_inbox拉取 - 共享频道:
channel_post(channel, content)广播,channel_history拉取 - 人视角统一入口:
all_messages按时间序返回全部私信+频道消息,人用send(from='human', ...)回复 - 互相引用:
reply_to字段可引用原消息 id,register_agent让每个 agent 有稳定身份名 - 连接绑定身份:每个 MCP 连接(一个 Claude 终端 = 一个连接)首次
register_agent即绑定该身份,之后该连接只能以自己身份发消息,防止冒名 - 持久化:消息存 SQLite,重启不丢
关于"自动"的说明(重要):MCP 协议没有服务端主动推送机制——对方 agent 不会实时收到新消息提醒,需要定期调用
read_inbox(或channel_history)拉取。建议在各自项目的 CLAUDE.md 里约定:「每完成一个阶段性任务后,先read_inbox检查是否有新消息,再决定下一步」,避免消息被积压。这是 MCP 架构的固有约束,不是 agent-bridge 的缺陷。
快速开始
cd agent-bridge
npm install
npm run build
npm run start -- --port 8787 --db ./data/agent-bridge.db
启动后是一个 Streamable HTTP MCP 服务器(默认 http://127.0.0.1:8787/mcp),另支持 --stdio 模式供仅支持 stdio 的客户端使用。
Claude Code 接入(HTTP 模式)
每个项目的终端里执行一次:
claude mcp add agent-bridge --transport http http://127.0.0.1:8787/mcp
常用命令:
claude mcp list # 查看已配置的 MCP
claude mcp remove agent-bridge # 移除
kimi-code 接入(stdio 模式)
在 kimi-code 的 MCP 配置(如 ~/.kimi/mcp.json 或项目 .mcp.json)中加入:
{
"mcpServers": {
"agent-bridge": {
"command": "node",
"args": [
"/绝对路径/agent-bridge/dist/index.js",
"--stdio",
"--db",
"/绝对路径/agent-bridge/data/agent-bridge.db"
]
}
}
}
无论多少 agent 接入,都必须连同一个服务器:HTTP 模式天然共享;stdio 模式各实例要指向同一个
--db文件路径。
多项目 / 多实例并行(>2 个 agent)
想让任意数量的项目 agent 互通,只需让每个实例连同一服务器、注册一个唯一名字:
| 项目 | agent 实例 | 身份名 |
|---|---|---|
| 后端项目 A | Claude1(Claude Code) | backend-a |
| 后端项目 B | Claude2(Claude Code) | backend-b |
| 前端项目 | Claude / kimi-code | frontend |
| 你自己 | 任意入口 | human |
backend-a 与 backend-b 之间、与 frontend 之间都能直接 send / read_inbox 互传,信箱按名字隔离、互不干扰;人用 all_messages() 一个入口看全局进展。
每个项目的 CLAUDE.md / 约定模板
在每个项目的 CLAUDE.md(或 kimi-code 的项目说明)里粘贴:
## agent-bridge 协作约定
- 本 agent 身份:backend-a(先调用 register_agent(name="backend-a", role="backend", description="后端项目A") 声明)
- 开始协作前:list_agents 确认参与方,all_messages 查看是否有待处理消息
- 需要对方信息时:read_inbox("backend-a") 拉取新消息,处理完用 send 回复(带 reply_to 引用原消息)
- 公开讨论/契约:channel_post 到 api-contract / general 等频道
- 每完成一个可交付的阶段性成果,主动向相关 agent 发消息同步
工具清单
| 工具 | 说明 |
|---|---|
register_agent(name, role?, description?) |
注册并绑定本连接为该身份(一个连接只能绑定一个身份,协作开始先调用) |
list_agents() |
列出所有已注册 agent |
send(from, to, content, reply_to?) |
私信投递到某 agent 信箱(from 必须等于本连接绑定的身份) |
read_inbox(agent, mark_read?, limit?, after_id?) |
读取某 agent 的私信收件箱(支持增量拉取) |
unread_count(agent) |
未读私信数 |
mark_read(agent, up_to_id?) |
标记已读 |
channel_post(from, channel, content, reply_to?) |
向共享频道广播(from 必须等于绑定身份;频道不存在自动创建) |
channel_history(channel, limit?, after_id?) |
频道消息流 |
list_channels() |
列出所有频道 |
all_messages(limit?, after_id?) |
人的统一入口:全量消息流(私信+频道) |
身份与连接绑定(重要)
每个 MCP 连接代表一个 agent:第一个 register_agent 调用的名字就是本连接的绑定身份,之后:
send/channel_post的from必须等于绑定身份,冒名会被拒绝;- 一个连接不能再注册第二个身份(想再开一个 agent 就再开一个 Claude/终端);
- 读类工具(
read_inbox/all_messages等)不限制,任何连接可看(人的视角);mark_read只能操作自己的信箱; - 人介入:开一个连接注册
human,用send(from='human', ...)回复; - 安全边界:身份认领无密码——任何新连接都能注册/认领一个已存在的名字(会返回认领警告)。个人可信网络内可用;若网络环境不可信,务必启用
--token,并留意register_agent返回的「已存在/认领」提示。
典型协作流程
- 后端 agent:
register_agent('backend', 'claude-code'),完成后send('backend', 'frontend', 'GET /api/users 返回 {id,name},契约见频道 #api-contract') - 前端 agent:
read_inbox('frontend')收到契约 → 开始实现 - 前端遇到问题:
channel_post('frontend', 'general', '/api/users 缺分页参数,请确认') - 人在任意一端:
all_messages()看到全局进展,用send('human', 'backend', '分页用 page/size 即可')介入 - 后端改完:
send('backend', 'frontend', '已加 page/size', reply_to=<原消息id>),前端按引用追溯上下文
常驻运行(守护进程)
agent-bridge 是常驻服务器,建议用系统守护方式托管,开机自启、崩溃自动拉起:
macOS(launchd)——保存到 ~/Library/LaunchAgents/com.agent-bridge.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>com.agent-bridge</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>/绝对路径/agent-bridge/dist/index.js</string>
<string>--port</string><string>8787</string>
<string>--db</string><string>/绝对路径/agent-bridge/data/agent-bridge.db</string>
</array>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardOutPath</key><string>/tmp/agent-bridge.log</string>
<key>StandardErrorPath</key><string>/tmp/agent-bridge.log</string>
</dict>
</plist>
launchctl load ~/Library/LaunchAgents/com.agent-bridge.plist # 加载并启动
launchctl unload ~/Library/LaunchAgents/com.agent-bridge.plist # 停止
Linux(systemd)——/etc/systemd/system/agent-bridge.service:
[Unit]
Description=agent-bridge MCP message server
After=network.target
[Service]
ExecStart=/usr/bin/node /opt/agent-bridge/dist/index.js --port 8787 --db /opt/agent-bridge/data/agent-bridge.db
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now agent-bridge
通用(pm2):
npm i -g pm2
pm2 start dist/index.js --name agent-bridge -- --port 8787 --db data/agent-bridge.db
pm2 save && pm2 startup # 开机自启
开发
npm run build # 编译到 dist/
npm test # 构建 + 冒烟测试(启动服务器、多 agent 收发、双客户端并发、重启持久化)
npm run start # 启动服务器(默认 127.0.0.1:8787)
CLI 参数
node dist/index.js [--port 8787] [--host 127.0.0.1] [--db data/agent-bridge.db] [--token <t>] [--cors-origin <o> ...]
node dist/index.js --stdio [--db data/agent-bridge.db]
--host 0.0.0.0:允许局域网内其他机器/agent 连接(此时必须--token,否则拒绝启动;局域网客户端访问时用--allowed-host <局域网IP>放行,可重复传)--token <t>:启用 Bearer 认证(所有 MCP 请求需带Authorization: Bearer <t>);也可用环境变量AGENT_BRIDGE_TOKEN(推荐,避免 token 出现在进程列表)--allowed-host <h>:DNS rebinding 白名单额外放行的 Host(自动补端口;也可直接传host:port形式),如--allowed-host 192.168.1.5--cors-origin <o>:允许浏览器跨域访问的 Origin 白名单(可重复传)。默认拒绝所有浏览器跨域(防止恶意网页读写本服务);仅在使用 MCP Inspector 等浏览器工具时按需添加,如--cors-origin http://localhost:5173--stdio:以 stdio 模式运行,供仅支持 stdio 的 MCP 客户端(如 kimi-code)使用
健康检查:GET http://127.0.0.1:8787/health 返回 {"ok":true,"service":"agent-bridge","sessions":N,"pending":M},供守护进程/监控探活(启用 --token 时需带 Authorization: Bearer <t>)。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。