内容
# A2A MCP 服务器
将 A2A(代理间)协议暴露为 MCP 工具,让 Goose 可以通过外部子代理机制调用远程 A2A 代理。
## 功能
- `a2a_discover` - 发现并注册远程 A2A 代理
- `a2a_list_agents` - 列出所有已发现的代理
- `a2a_send` - 发送消息给代理并等待结果(支持轮询)
- `a2a_get_task` - 查询任务状态
- `a2a_cancel_task` - 取消运行中的任务
- `a2a_list_tasks` - 列出代理上的任务
## 环境变量
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `A2A_GATEWAY_URL` | A2A 网关 URL(如 LiteLLM) | `http://localhost:4000` |
| `A2A_API_KEY` | 认证 API 密钥 | 空 |
| `A2A_TIMEOUT` | HTTP 请求超时(毫秒) | `30000` |
## 安装
```bash
cd a2a-mcp-server
npm install
npm run build
```
## 配置 Goose 外部子代理
在 `~/.config/goose/config.yaml` 中添加:
```yaml
extensions:
a2a-mcp-server:
type: stdio
cmd: node
args:
- /path/to/a2a-mcp-server/dist/server.js
env:
A2A_GATEWAY_URL: "http://localhost:4000"
A2A_API_KEY: "your-api-key"
timeout: 300
bundled: false
enabled: true
```
或者使用绝对路径的包装脚本:
```bash
#!/bin/bash
# /usr/local/bin/a2a-mcp-server
export A2A_GATEWAY_URL="http://localhost:4000"
export A2A_API_KEY="your-api-key"
exec node /path/to/a2a-mcp-server/dist/server.js
```
然后配置:
```yaml
extensions:
a2a-mcp-server:
type: stdio
cmd: /usr/local/bin/a2a-mcp-server
timeout: 300
bundled: false
enabled: true
```
## 使用示例
### 1. 发现代理
```
使用 a2a_discover 发现 http://localhost:10001 的代理
```
### 2. 发送消息
```
用 a2a_send 给 my-agent 发送消息:"帮我分析这段代码的性能问题"
```
### 3. 查询任务
```
用 a2a_get_task 查询任务 task-12345 的状态
```
### 4. 列出所有代理
```
用 a2a_list_agents 看看有哪些可用的代理
```
## 架构
```
Goose 主代理(GUI)
│
├── LLM: Claude/GPT/等
│
├── 外部子代理: a2a-mcp-server (stdio MCP)
│ │
│ └── A2A 客户端
│ │
│ └── HTTP/JSON-RPC (A2A 协议)
│ │
│ ▼
│ LiteLLM 网关
│ │
│ ┌───────┼───────┐
│ ▼ ▼ ▼
│ 代理 1 代理 2 代理 3
│
└── 其他扩展...
```
## 与 LiteLLM 集成
如果你使用 LiteLLM 作为 A2A 网关:
```bash
# 启动 LiteLLM
litellm --config config.yaml
# 配置 A2A MCP 服务器
export A2A_GATEWAY_URL="http://localhost:4000"
export A2A_API_KEY="sk-xxx"
```
LiteLLM 会自动代理 A2A 请求到上游代理,并提供:
- 认证管理
- 请求日志
- 花费追踪
- 负载均衡
## 开发
```bash
# 开发模式
npm run dev
# 编译
npm run build
# 运行
npm start
```
## License
MIT