A2A MCP Server
by ww2521
README.md
# A2A MCP Server
将 A2A (Agent-to-Agent) 协议暴露为 MCP tools,让 Goose 可以通过 External Subagent 机制调用远程 A2A agents。
## 功能
- `a2a_discover` - 发现并注册远程 A2A agent
- `a2a_list_agents` - 列出所有已发现的 agents
- `a2a_send` - 发送消息给 agent 并等待结果(支持轮询)
- `a2a_get_task` - 查询任务状态
- `a2a_cancel_task` - 取消运行中的任务
- `a2a_list_tasks` - 列出 agent 上的任务
## 环境变量
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `A2A_GATEWAY_URL` | A2A Gateway URL (如 LiteLLM) | `http://localhost:4000` |
| `A2A_API_KEY` | 认证 API Key | 空 |
| `A2A_TIMEOUT` | HTTP 请求超时 (毫秒) | `30000` |
## 安装
```bash
cd a2a-mcp-server
npm install
npm run build
```
## 配置 Goose External Subagent
在 `~/.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
```
或者使用绝对路径的 wrapper script:
```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. 发现 Agent
```
使用 a2a_discover 发现 http://localhost:10001 的 agent
```
### 2. 发送消息
```
用 a2a_send 给 my-agent 发送消息:"帮我分析这段代码的性能问题"
```
### 3. 查询任务
```
用 a2a_get_task 查询任务 task-12345 的状态
```
### 4. 列出所有 agents
```
用 a2a_list_agents 看看有哪些可用的 agents
```
## 架构
```
Goose Main Agent (GUI)
│
├── LLM: Claude/GPT/etc.
│
├── External Subagent: a2a-mcp-server (stdio MCP)
│ │
│ └── A2A Client
│ │
│ └── HTTP/JSON-RPC (A2A Protocol)
│ │
│ ▼
│ LiteLLM Gateway
│ │
│ ┌───────┼───────┐
│ ▼ ▼ ▼
│ Agent1 Agent2 Agent3
│
└── 其他 extensions...
```
## 与 LiteLLM 集成
如果你使用 LiteLLM 作为 A2A Gateway:
```bash
# 启动 LiteLLM
litellm --config config.yaml
# 配置 A2A MCP Server
export A2A_GATEWAY_URL="http://localhost:4000"
export A2A_API_KEY="sk-xxx"
```
LiteLLM 会自动代理 A2A 请求到上游 agents,并提供:
- 认证管理
- 请求日志
- 花费追踪
- 负载均衡
## 开发
```bash
# 开发模式
npm run dev
# 编译
npm run build
# 运行
npm start
```
## License
MIT
TDQS
A3.7/5.0
Scored across 6 tools
Disambiguation5/5
Each tool has a clearly distinct purpose: discovery, listing agents, sending messages, and managing tasks by ID or listing. No overlap.
Naming Consistency5/5
All tools follow the consistent pattern 'a2a_verb_noun' in lowercase snake_case, with verbs like list, get, send, cancel, discover.
Tool Count5/5
With 6 tools covering discovery, task lifecycle (send, get, list, cancel), the count is well-scoped for an A2A protocol server.
Completeness4/5
Covers core A2A operations: agent discovery, task creation (via send), retrieval, listing, and cancellation. Minor gap: explicit task creation tool, but send likely handles it.
Maintenance
ActivityStale
ResponsivenessNo issues