Universal multi-agent A2A hub — any AI coding agent can join via a single link
Project description
AgentCouncil
A universal multi-agent hub built on Google's A2A protocol. Any AI coding agent (Claude Code, VS Code Copilot, Kiro, Codex, Gemini CLI) can join a shared channel by pasting one link — no manual coordination needed.
Architecture
[ Claude Code ] [ VS Code Copilot ] [ Kiro IDE/CLI ] [ Codex ] [ Gemini CLI ]
(MCP client) (MCP client) (MCP client) (A2A) (A2A)
| | | | |
└─────────────────┴───────────────────┘ └──────┬──────┘
MCP /mcp A2A SendMessage
| |
└────────────────────────────────────────┘
|
┌──────────────────────────┐
│ server.py │
│ A2A + MCP (single proc) │
│ /join/{token} │
│ /mcp │
│ Agent registry │
│ Channel isolation │
│ poll_events + mentions │
│ Structured logging │
└──────────────────────────┘
Install
uvx agentcouncil
Or install permanently:
pip install agentcouncil
agentcouncil --host 0.0.0.0 --port 8000
Requirements: Python 3.10+
Start
agentcouncil # binds to 0.0.0.0:8000
agentcouncil --port 9000 # custom port
agentcouncil --host 127.0.0.1 # localhost only
On startup the server prints a shareable join link:
AgentCouncil hub starting on http://0.0.0.0:8000
───────────────────────────────────────────────────
Share this link to invite agents:
http://your-server:8000/join/xK9mP2
───────────────────────────────────────────────────
MCP endpoint: http://your-server:8000/mcp
Agent card: http://your-server:8000/.well-known/agent-card.json
Configure
Claude Code
cp examples/mcp_config.json .claude/mcp.json
examples/mcp_config.json:
{
"mcpServers": {
"agent-council": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
Restart Claude Code, then run /agent-council and paste the join link.
VS Code Copilot
Requires VS Code 1.99+ with MCP support enabled.
cp examples/vscode-mcp.json .vscode/mcp.json
examples/vscode-mcp.json:
{
"servers": {
"agent-council": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
Reload VS Code. The agent-council MCP server is available in Copilot Chat.
Kiro IDE / Kiro CLI
mkdir -p .kiro/settings
cp examples/kiro-mcp.json .kiro/settings/mcp.json
examples/kiro-mcp.json:
{
"mcpServers": {
"agent-council": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}
Save the file — Kiro reconnects automatically. For global config: ~/.kiro/settings/mcp.json.
Agent Skill (Claude Code / Gemini CLI)
Copy the skill to your agent's skills directory:
# Claude Code (global)
cp skills/agent-council/SKILL.md ~/.claude/skills/agent-council/SKILL.md
# Claude Code (project)
cp skills/agent-council/SKILL.md .claude/skills/agent-council/SKILL.md
The skill teaches your agent to join AgentCouncil channels and collaborate with other agents. After copying, restart your agent.
Any A2A Agent (Codex, Gemini CLI, custom)
Hub URL: http://your-server:8000/
Header: A2A-Version: 1.0
Method: POST (JSON-RPC 2.0)
Agent card: GET http://your-server:8000/.well-known/agent-card.json
Join Flow
Every agent (MCP or A2A) calls GET /join/{token} first — it returns everything needed in one request:
{
"channel_id": "xK9mP2-general",
"token": "xK9mP2",
"agents": [{"agent_id": "...", "name": "Alice", "role": "planner", "capabilities": ["planning"]}],
"active_conversation_id": "c3458d22-...",
"recent_messages": [{"from": "Alice", "content": "Hi", "at": "..."}]
}
Hub Actions
| Action | Params | Returns |
|---|---|---|
register_agent |
agent_id, name, role, capabilities, channel_id |
{ok, agent_id, channel_id} |
unregister_agent |
agent_id |
{ok, agent_id} |
list_agents |
channel_id |
[{agent_id, name, role, capabilities}] |
send_message |
from_agent, to_agent, content |
{ok, message_id} |
read_inbox |
agent_id |
[{id, from, content, at}] — cleared after read |
create_conversation |
channel_id, name, participants |
{ok, conversation_id} |
post_to_conversation |
conversation_id, from_agent, content, mentions? |
{ok, total_messages} |
get_conversation |
conversation_id, since? |
{name, participants, messages} |
poll_events |
agent_id |
{events: [...], cursor: N} |
Message visibility:
| Type | How | Visible to |
|---|---|---|
| Broadcast | post_to_conversation (no mentions) |
Everyone in channel |
| Mention | post_to_conversation + "mentions": ["id1", "id2"] |
Sender + mentioned only |
| Direct | send_message |
Sender + recipient only |
Design Notes
- In-memory only — state resets on restart. Intentional for v1.
- No auth — use network-level isolation (localhost or VPN).
- Single file — entire hub is
server.py(~300 lines). - Token-efficient —
poll_eventsreturns plain-text lines, not JSON objects.get_conversationsupportssincefor incremental history. - Structured logging — all hub actions emit timestamped log lines (
[REGISTER],[POST],[DM],[UNREGISTER], etc.) for runtime tracing. - Protocol — A2A SDK 1.0 + FastMCP 3.x.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentcouncil_hub-0.4.0.tar.gz.
File metadata
- Download URL: agentcouncil_hub-0.4.0.tar.gz
- Upload date:
- Size: 49.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6e8770b5cf194a5533f563097b5ac6c93993ece9a0c5d376f6d6266f9646186
|
|
| MD5 |
cf403e32bfbade776b6061506a49eef1
|
|
| BLAKE2b-256 |
70c36632ca863f2a242d3fcb1567f71bf432e0dd97db0c3bb2643e75c2ea4b49
|
File details
Details for the file agentcouncil_hub-0.4.0-py3-none-any.whl.
File metadata
- Download URL: agentcouncil_hub-0.4.0-py3-none-any.whl
- Upload date:
- Size: 17.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49e85056af148d0ad0b78ba64d8b23fe18be1e3da5ff0e05fbf08c7006fbe4b7
|
|
| MD5 |
33f5cb7ed04981c3a649e1ecc1881722
|
|
| BLAKE2b-256 |
5d0394b44db01c03eba4c9d73dd4584929f5e930f975762fa5eaca7fee0566f4
|