Skip to main content

Universal agent protocol gateway — translate between A2A, MCP, OpenAI Assistants, and REST in one config file.

Project description

agent-gateway

PyPI version Python License: MIT Tests

One gateway. Every agent protocol. Route requests between A2A, MCP, OpenAI Assistants, and plain REST — with a single YAML config.

pip install agentic-gateway

🎬 Demo

agent-gateway demo — unified protocol routing for A2A, MCP, OpenAI, REST
Starting the gateway, routing requests across 4 protocols, and viewing live metrics


The Problem

The AI agent ecosystem is fragmented:

Your App ──→ Agent A (A2A protocol)
         ──→ Agent B (MCP tools)
         ──→ Agent C (OpenAI Assistants API)
         ──→ Agent D (plain REST)

Each speaks a different language. You write adapters for each. Then a new protocol drops and you rewrite everything.

The Solution

                  ┌────────────────────┐
Your App ────────→│   agent-gateway    │────→ Agent A (A2A)
                  │                    │────→ Agent B (MCP)
                  │   One protocol     │────→ Agent C (OpenAI)
                  │   in, any out      │────→ Agent D (REST)
                  └────────────────────┘

Talk to the gateway in any protocol. It translates to any other.

Quick Start

1. Define your gateway

# gateway.yaml
gateway:
  name: my-gateway
  port: 8080

routes:
  - name: search-agent
    upstream:
      protocol: a2a
      url: http://localhost:9000
    expose_as:
      - mcp      # Expose A2A agent as MCP tool
      - rest     # And as REST endpoint

  - name: code-helper
    upstream:
      protocol: mcp
      command: python -m code_helper_mcp
      transport: stdio
    expose_as:
      - a2a      # Expose MCP server as A2A agent
      - openai   # And as OpenAI Assistants-compatible

  - name: legacy-api
    upstream:
      protocol: rest
      url: https://api.example.com/analyze
      method: POST
      headers:
        Authorization: "Bearer ${API_KEY}"
    expose_as:
      - a2a
      - mcp

2. Start the gateway

agent-gateway serve gateway.yaml

3. Connect from any protocol

# As A2A client:
response = a2a_client.send_task("search-agent", "Find recent papers on RLHF")

# As MCP client (from Claude Desktop):
# Just add to claude_desktop_config.json:
#   {"mcpServers": {"gateway": {"url": "http://localhost:8080/mcp"}}}

# As OpenAI-compatible:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8080/openai/v1")
response = client.chat.completions.create(
    model="code-helper",
    messages=[{"role": "user", "content": "Fix this bug"}],
)

# As REST:
import httpx
response = httpx.post("http://localhost:8080/rest/search-agent", json={"query": "RLHF papers"})

Protocol Support Matrix

From ↓ / To → A2A MCP OpenAI REST
A2A
MCP
OpenAI
REST

Architecture

┌─────────────────────────────────────────────────────────────────┐
│                        agent-gateway                             │
│                                                                  │
│  ┌──────────┐    ┌────────────┐    ┌──────────┐    ┌─────────┐ │
│  │ Ingress  │───→│  Router    │───→│Translator│───→│  Egress │ │
│  │          │    │            │    │          │    │         │ │
│  │ • A2A    │    │ • Match    │    │ • A2A↔X  │    │ • HTTP  │ │
│  │ • MCP    │    │   route    │    │ • MCP↔X  │    │ • stdio │ │
│  │ • OpenAI │    │ • Auth     │    │ • OAI↔X  │    │ • SSE   │ │
│  │ • REST   │    │ • Rate     │    │ • REST↔X │    │         │ │
│  └──────────┘    └────────────┘    └──────────┘    └─────────┘ │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Features

  • Protocol translation — Seamless conversion between A2A, MCP, OpenAI, REST
  • YAML configuration — No code required, just declare routes
  • Environment variables${VAR} expansion in config
  • Auth passthrough — Forward headers, tokens, API keys
  • Health checks — Built-in /health endpoint with upstream status
  • Hot reload — Change config without restart (--watch)
  • Middleware — Rate limiting, logging, request/response transforms
  • Discovery — Auto-generates agent cards, tool lists, OpenAPI specs

CLI

# Start gateway
agent-gateway serve gateway.yaml

# Validate config
agent-gateway validate gateway.yaml

# List routes
agent-gateway routes gateway.yaml

# Health check
agent-gateway health http://localhost:8080

Programmatic Usage

from agent_gateway import Gateway

gateway = Gateway.from_yaml("gateway.yaml")

# Translate a single request
result = await gateway.translate(
    source_protocol="rest",
    target_route="search-agent",
    payload={"query": "test"},
)

Why Not Just Use X?

Solution Limitation
mcp-a2a-bridge Only 2 protocols (MCP ↔ A2A)
LangServe LangChain-only, single protocol
Custom adapters One-off, unmaintainable
API Gateway (Kong, etc.) No protocol awareness, just HTTP routing

agent-gateway understands the semantics of each protocol — agent cards, tool schemas, function calling, streaming — and translates them correctly.

Contributing

git clone https://github.com/naveenkumarbaskaran/agent-gateway.git
cd agent-gateway
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agentic_gateway-2.0.0.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agentic_gateway-2.0.0-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file agentic_gateway-2.0.0.tar.gz.

File metadata

  • Download URL: agentic_gateway-2.0.0.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for agentic_gateway-2.0.0.tar.gz
Algorithm Hash digest
SHA256 aa01c68a563632527e0c0a4ecf01bf2d1d1d570b14160242578333d16e81d595
MD5 3da18ba5f6848e9c067a4be1b3203fcf
BLAKE2b-256 ef1ba7d813c49a78cbb6f45715c5209e03c06e30a83117c2c0e770be2154e60a

See more details on using hashes here.

File details

Details for the file agentic_gateway-2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for agentic_gateway-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9278c5f2ca307eba06da9901468fbb42b512da97577578341ab752ff188cc009
MD5 c42a029880e6e9484b95a1ec54700d50
BLAKE2b-256 3773ca5d5ec23a11a13429c3ae993fb1ac68fe05ccde33c6ac8f276bda5b733b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page