Catalog PyPI
PACKAGE EXPLORERView in registry

agentcouncil-hub

PyPI

Universal multi-agent A2A hub — any AI coding agent can join via a single link

a2aaiclaudecodexmcpmulti-agent
Versions collected1
Direct dependencies4From release 0.4.0
Last observed20 Oct, 21:44 UTC

README

Version 0.4.0 documentation

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

ActionParamsReturns
register_agentagent_id, name, role, capabilities, channel_id{ok, agent_id, channel_id}
unregister_agentagent_id{ok, agent_id}
list_agentschannel_id[{agent_id, name, role, capabilities}]
send_messagefrom_agent, to_agent, content{ok, message_id}
read_inboxagent_id[{id, from, content, at}] — cleared after read
create_conversationchannel_id, name, participants{ok, conversation_id}
post_to_conversationconversation_id, from_agent, content, mentions?{ok, total_messages}
get_conversationconversation_id, since?{name, participants, messages}
poll_eventsagent_id{events: [...], cursor: N}

Message visibility:

TypeHowVisible to
Broadcastpost_to_conversation (no mentions)Everyone in channel
Mentionpost_to_conversation + "mentions": ["id1", "id2"]Sender + mentioned only
Directsend_messageSender + 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_events returns plain-text lines, not JSON objects. get_conversation supports since for 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.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.4.015 May 20264

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
clydeshen/agentcouncil

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 21:44 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:c5b5d8726327b75a17b31a187662acfc0db4c75c866d7737762cc976cad19a53