agent-bridge

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.

Category
访问服务器

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-abackend-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_postfrom 必须等于绑定身份,冒名会被拒绝;
  • 一个连接不能再注册第二个身份(想再开一个 agent 就再开一个 Claude/终端);
  • 读类工具(read_inbox / all_messages 等)不限制,任何连接可看(人的视角);mark_read 只能操作自己的信箱;
  • 人介入:开一个连接注册 human,用 send(from='human', ...) 回复;
  • 安全边界:身份认领无密码——任何新连接都能注册/认领一个已存在的名字(会返回认领警告)。个人可信网络内可用;若网络环境不可信,务必启用 --token,并留意 register_agent 返回的「已存在/认领」提示。

典型协作流程

  1. 后端 agent:register_agent('backend', 'claude-code'),完成后 send('backend', 'frontend', 'GET /api/users 返回 {id,name},契约见频道 #api-contract')
  2. 前端 agent:read_inbox('frontend') 收到契约 → 开始实现
  3. 前端遇到问题:channel_post('frontend', 'general', '/api/users 缺分页参数,请确认')
  4. 人在任意一端:all_messages() 看到全局进展,用 send('human', 'backend', '分页用 page/size 即可') 介入
  5. 后端改完: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

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选