Show HN: AgentBridge – translate and govern calls between AI agent protocols AgentBridge, an open-source Python project, provides a neutral mesh for translating, routing, verifying, and governing calls between different AI agent protocols, including MCP, A2A, ACP, OpenAI function-calling, Gemini function-calling, and AGNTCY ACP. The working prototype includes a governance plane with Ed25519 identities, budgets, and a tamper-evident audit trail, and is available on GitHub as an early work-in-progress. One neutral mesh every agent speaks through: translate, route, verify, govern. Any protocol in, any protocol out — with identity, budgets, and a tamper-evident audit trail built into the call path. The whole product in 12 seconds: an unknown agent blocked, six protocols reaching one live MCP tool through the mesh, budget tracked, tamper-evident audit chain verified. Reproduce with python examples/demo story.py. Status: working prototype. 6 protocols live + conformance-tested against real SDKs, a governance plane, an HTTP control plane, and framework integrations. 150 tests passing 156 with a Postgres DB .Business demand still being validated — this is an early, honest work-in-progress. Name note:this project github.com/shadowhunter-92/agentbridge is a Pythonprotocol-translation + governance mesh. It is unrelated to other products that may share the "AgentBridge" name e.g. connector-gateway SaaS at other domains . This repo is the source of truth forthisAgentBridge. What it does what-it-does · Quick start quick-start · Talk to agents yourself talk-to-agents-yourself-any-protocol · Protocol support matrix protocol-support-matrix · Architecture architecture · Security model security-model · Framework integrations framework-integrations-langchain--crewai--autogen--llamaindex · Enterprise governance enterprise-governance · Editions & pricing editions--pricing-direction · Docs docs N-protocol mesh any-to-any : MCP Anthropic , A2A Google/LF , ACP IBM/LF , OpenAI function-calling, Gemini function-calling, AGNTCY ACP. One canonical model → adding a protocol is one adapter, not N² mappings. Every adapter is validated against the protocol's real official SDK . In-line proxy: the bridge actually sits between live agents on different protocols, not just translating see examples/ . Governance plane the moat : Ed25519 agent identities DIDs , per-agent spend/rate budgets, human-in-the-loop approvals for sensitive capabilities, and a hash-chained tamper-evident audit trail — all enforced in the call path and durable SQLite; Postgres-swappable . Enterprise governance: a declarative policy engine cost caps, business-hours, route/ capability rules , RBAC for operators, OIDC/JWT operator SSO, and signed audit checkpoints see docs/ENTERPRISE.md . Drop-in MCP server: point Claude Desktop / an IDE / a gateway at it to reach other protocols. Framework integrations: one helper lets LangChain / CrewAI / AutoGen / LlamaIndex agents reach a tool/agent on any protocol — they all emit OpenAI-shaped tool calls see docs/INTEGRATIONS.md . python -m venv .venv && .venv/Scripts/pip install -r requirements.txt Windows; use bin/ on nix Governance is optional. If you just want one agent/protocol to talk to another, use the mesh directly — no keys, no budgets, no setup: python from src.protocols import default registry as reg from src.protocols.canonical import CanonicalCall call = reg.get "openai" .from canonical call CanonicalCall "add", {"a": 2, "b": 3} reg.translate call call, "openai", "mcp" - a real MCP tools/call. That's it. .venv/Scripts/python examples/quickstart.py translate + bridge to a LIVE tool, zero governance Add identity, budgets, and a tamper-evident audit trail only when you want them : Run the meta-bridge control plane mesh + governance uvicorn src.api.control plane:app docs at http://localhost:8000/docs set AGENTBRIDGE ADMIN KEY for operator endpoints; AGENTBRIDGE DB=/path.db or a postgres:// URL Or run it as a drop-in MCP server stdio python -m src.serve.mcp gateway Live demos real agents on both ends .venv/Scripts/python examples/live nprotocol proxy.py OpenAI/ACP - live MCP, MCP - live ACP .venv/Scripts/python examples/live governed proxy.py identity + budget + audit in action .venv/Scripts/python examples/policy guardrails demo.py policy BLOCKS risky calls + provable audit trail Tests .venv/Scripts/python -m pytest tests/ -q 150 passing; 156 with a Postgres DB 6 PG tests skip without one Yes — you can use AgentBridge to reach an agent/tool that speaks a different protocol than you do. That's the whole point. Give it a call in any protocol's shape; it translates and if you want governs, then delivers to the live target and hands the result back: python import asyncio from src.integrations import bridge tool call from src.proxy import transport You "speak" OpenAI tool-calls; the tool lives behind MCP. Reach it anyway: async def main : result = await bridge tool call "add", {"a": 2, "b": 3}, to="mcp", invoke=lambda w: transport.call mcp tool "python", "examples/mcp server agent.py" , w "params" "name" , w "params" "arguments" , print result - OpenAI-shaped tool result: "5" asyncio.run main Swap to="mcp" for a2a , acp , gemini , or agntcy to reach an agent on that protocol. Human client discover + talk, from the CLI . Point it at any agent, see what it can do, and call it — across protocols: Discover what an agent offers MCP tools / A2A AgentCard : python -m src.serve.agent client discover --mcp "python examples/mcp server agent.py" python -m src.serve.agent client discover --a2a http://localhost:9100 Call / talk to it: python -m src.serve.agent client call --mcp "python examples/mcp server agent.py" --tool add --args '{"a":2,"b":3}' python -m src.serve.agent client talk --a2a http://localhost:9100 --message "hello" Reaching real third-party tools GitHub, Slack, Notion, … works the same way — you point the bridge at the tool's existing MCP server , no connector to build. See docs/CONNECTORS.md /shadowhunter-92/agentbridge/blob/main/docs/CONNECTORS.md and the worked GitHub example examples/github mcp bridge.py .| Protocol | Owner | Adapter | Conformance vs real SDK | Any-to-any | Live agent | |---|---|---|---|---|---| MCP | Anthropic | ✅ | ✅ mcp 1.27 CallToolRequestParams | ✅ | ✅ FastMCP server stdio | A2A | Google / LF | ✅ | ✅ a2a-sdk 0.3 Task , Message | ✅ | ✅ uvicorn agent + AgentCard | ACP | IBM / BeeAI / LF | ✅ | ✅ acp-sdk 1.0 Run , Message | ✅ | ✅ REST /runs agent | OpenAI function-calling | OpenAI | ✅ | ✅ openai 2.x ChatCompletionMessageToolCall | ✅ | ✅ routed to live MCP/ACP | Gemini function-calling | ✅ | ✅ google-genai FunctionCall | ✅ | ✅ routed to live MCP | | AGNTCY ACP | Cisco | ✅ | ✅ agntcy-acp RunCreateStateless | ✅ | ✅ routed to live MCP | ANP | — | ⛔ deferred → governance plane | — | — | — | 6 call protocols, 6×6 = 36 any-to-any pairs, all green. Adding a 7th is one adapter file + one registry line + one conformance test. Full detail: docs/PROTOCOL SUPPORT.md . ANP is an identity/discovery layer, not a call protocol — it informs the governance plane, not an adapter see docs/PROTOCOL SUPPORT.md . flowchart LR subgraph clients Agents / clients - any protocol C1 MCP client C2 A2A / ACP agent C3 OpenAI / Gemini / AGNTCY end subgraph bridge AgentBridge direction TB G Governance gateway