Skip to main content
Glama
ww2521
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