agents-chat-mcp
by gitByEOS
README.md
# agents-chat-mcp
## 概述
`agents-chat-mcp` 是一个基于 MCP(Model Context Protocol)的聊天桥接服务器,将多个 Agent 接入同一个 ChatRoom,实现对话式协作。
之前我一直认为有 `SubAgent` 模式就足够了,直到某一天我需要跨设备联调,所以花了两天写了一个最小化聊天MCP。
## 安装
以 `claude` 为例:
```bash
# 当前项目安装
claude mcp add agents-chat-mcp -- npx -y @eos./agents-chat-mcp
# 全局安装
claude mcp add agents-chat-mcp -s user -- npx -y @eos./agents-chat-mcp
# 查看
claude mcp list
# 移除
claude mcp remove "agents-chat-mcp"
```
## 使用方式
1. 启动claude直接输入,如模型不主动监听则需要提示
```text
接入聊天 room:chat-test name:leader
```
2. 配置化(编辑 `~/.claude/settings.json`):
```json
{
"mcpServers": {
"agents-chat-mcp": {
"command": "npx",
"args": ["-y", "@eos./agents-chat-mcp"],
"env": {
"AGENTS_CHAT_ROOM_NAME": "project-name",
"AGENTS_CHAT_NAME": "leader"
}
}
}
}
```
## 架构
```
Claude Code (alice) ──MCP──▶ server.mjs ──┐
Claude Code (bob) ──MCP──▶ server.mjs ──┼──▶ ChatRoomServer (127.0.0.1:11666)
Claude Code (carol) ──MCP──▶ server.mjs ──┘ HTTP REST + SSE
└─ rooms / messages / events
```
多个 MCP 实例共享同一个 ChatRoom 服务器:首个实例启动内置服务器,后续实例自动检测并连接。
## 文件结构
```
├── server.mjs # MCP 入口,注册 4 个工具 + 内置服务器启动
└── lib/
├── chat-room-server.mjs # 内置 ChatRoom HTTP/SSE 服务器
├── chat-room-client.mjs # ChatRoom HTTP/SSE 客户端
└── protocol.mjs # 状态常量、唤醒 Prompt 构建、消息过滤
```
## 部署模式
### 模式 A:内置服务器(默认)
不设置 `AGENTS_CHAT_SERVER_URL`,自动在 `127.0.0.1:11666` 启动内置服务器。
如需让局域网或其他机器访问内置服务器,设置 `AGENTS_CHAT_PUBLIC_SERVER=1` 后会监听 `0.0.0.0:11666`。只在可信网络中开启,避免把未鉴权的 ChatRoom 服务暴露到公网。
### 模式 B:外部服务器
设置 `AGENTS_CHAT_SERVER_URL`,连接已运行的服务器。
**启动外部服务器:**
```bash
AGENTS_CHAT_PUBLIC_SERVER=1 node server.mjs
```
**客户端配置:**
```json
{
"mcpServers": {
"agents-chat-mcp": {
"env": {
"AGENTS_CHAT_SERVER_URL": "http://x.x.x.x:11666"
}
}
}
}
```
| 环境变量 | 必填 | 说明 | 默认值 |
|---|---|---|---|
| `AGENTS_CHAT_SERVER_URL` | 否 | ChatRoom 服务器地址 | 不设置 → 启动内置服务器 |
| `AGENTS_CHAT_PUBLIC_SERVER` | 否 | 设置为 `1` 时内置服务器监听 `0.0.0.0` | 不设置 → `127.0.0.1` |
| `AGENTS_CHAT_ROOM_NAME` | 否 | 房间名,自动 slug 化为 room ID; 也可用 `agent_chat_register` 设置 | - |
| `AGENTS_CHAT_NAME` | 否 | Agent 身份,send/watch 前需有名; 也可用 `agent_chat_register` 设置 | - |
## 工作流程
1. 调用 `agent_chat_register(user, room)` 注册身份
2. 调用 `agent_chat_send(text="我已成功接入", status="idle")` 发送接入确认
3. 调用 `agent_chat_watch()` 持续等待 @ 消息
4. 出错或错过消息后,调用 `agent_chat_helper(action="history")` 回补最近消息
### `agent_chat_register`
注册身份,首次使用或切换房间时调用。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `user` | string | 是 | Agent 名称,用于 @ 触发 |
| `room` | string | 是 | 房间名称,自动 slug 化为 ID |
### `agent_chat_helper`
查询房间、代理、历史消息、搜索消息、查看状态。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `action` | enum | 是 | `help`/`room`/`agents`/`history`/`search`/`status` |
| `query` | string | 否 | 搜索关键词,action=search 时必填 |
| `room_id` | string | 否 | 房间 ID,action=agents/history/search 时使用 |
| `limit` | number | 否 | 历史消息条数,action=history 时使用,默认 10 |
### `agent_chat_watch`
阻塞等待 @ 本 Agent 的消息,超时返回 `{ "timeout": true }`。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `timeout_ms` | number | 300000 | 最大等待时间(毫秒),默认 5 分钟 |
典型用法:`/loop agent_chat_watch → 执行任务 → agent_chat_send 回写`
### `agent_chat_send`
发送消息或广播状态。要唤醒其他 Agent,消息正文必须包含 `@username` 或 `@all`。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `text` | string | 是 | 消息正文 |
| `status` | enum | 是 | `idle` / `working` / `awaiting` / `blocked` |
## 消息协议
Agent 通过 @ 机制接收消息:
- `@username` - 仅该用户接收
- `@all` - 所有用户接收
**示例:**
```
@alice 请帮我审查代码 # 仅 alice 接收
@all 会议即将开始 # 所有人接收
```
Agent 通过 `agent_chat_watch` 阻塞等待,只有匹配的消息才会唤醒。
## 测试
使用浏览器打开 `tests/test_api.html`,可视化测试所有 API 和 MCP 工具。
```bash
node server.mjs &
open tests/test_api.html
```TDQS
B3.1/5.0
Scored across 4 tools
Disambiguation3/5
The register, send, and watch tools have clear distinct purposes. However, agent_chat_helper is a vague 'multi-purpose' tool with no specific scope, potentially overlapping with the others.
Naming Consistency5/5
All tools follow a consistent 'agent_chat_<verb>' pattern (except 'helper' which is a noun, but it still adheres to the prefix and is understandable).
Tool Count5/5
Four tools is appropriate for a basic chat agent server, covering registration, sending, and watching for messages without unnecessary bloat.
Completeness3/5
The core messaging workflow is covered, but missing obvious operations like unregistering, listing agents, or leaving the chat room, which may hinder agent workflow.
Maintenance
ActivityInactive
ResponsivenessNo issues