Skip to main content
Glama
IBM

ContextForge MCP Gateway

Official
by IBM

ContextForge

Un registro y proxy de código abierto que federa APIs MCP, A2A y REST/gRPC con gobernanza, descubrimiento y observabilidad centralizados. Optimiza la invocación de agentes y herramientas, y admite complementos.

Banner de ContextForge

Compilar paquete de Python Seguridad Bandit Revisión de dependencias Pruebas y cobertura Lint y análisis estático

Async Licencia PyPI Imagen de Docker

ContextForge es un registro y proxy de código abierto que federa herramientas, agentes y APIs en un único punto de conexión limpio para sus clientes de IA. Proporciona gobernanza, descubrimiento y observabilidad centralizados en toda su infraestructura de IA:

  • Pasarela de herramientas — MCP, REST, traducción de gRPC a MCP y compresión TOON

  • Pasarela de agentes — Protocolo A2A, enrutamiento de agentes compatible con OpenAI y Anthropic

  • Pasarela de API — Limitación de tasa, autenticación, reintentos y proxy inverso para servicios REST

  • Extensibilidad mediante complementos — Más de 40 complementos para transportes, protocolos e integraciones adicionales

  • Observabilidad — Seguimiento con OpenTelemetry con Phoenix, Jaeger, Zipkin y otros backends OTLP

Se ejecuta como un servidor MCP totalmente compatible, desplegable a través de PyPI o Docker, y se escala a entornos de clúster múltiple en Kubernetes con federación y almacenamiento en caché respaldados por Redis.

ContextForge

Tabla de contenidos


📌 Enlaces rápidos

Recurso

Descripción

Configuración en 5 minutos

Empiece rápido: uvx, Docker, Compose o desarrollo local

Obtener ayuda

Opciones de soporte, preguntas frecuentes, canales de la comunidad

Guía de problemas

Cómo informar errores, solicitar funciones, contribuir

Documentación completa

Guías completas, tutoriales, referencia de API


Descripción general y objetivos

ContextForge es un registro y proxy de código abierto que federa cualquier servidor del Protocolo de contexto de modelo (MCP), servidor A2A o API REST/gRPC, proporcionando gobernanza, descubrimiento y observabilidad centralizados. Optimiza la invocación de agentes y herramientas, y admite complementos. Consulte la hoja de ruta del proyecto para obtener más detalles.

Actualmente admite:

  • Federación a través de múltiples servicios MCP y REST

  • Integración A2A (Agente-a-Agente) para agentes de IA externos (OpenAI, Anthropic, personalizados)

  • Traducción de gRPC a MCP mediante descubrimiento de servicios basado en reflexión automática

  • Virtualización de APIs heredadas como herramientas y servidores compatibles con MCP

  • Transporte a través de HTTP, JSON-RPC, WebSocket, SSE (con keepalive configurable), stdio y HTTP transmitible

  • Una interfaz de usuario de administración para la gestión, configuración y monitoreo de registros en tiempo real (con soporte para despliegue en entornos aislados/airgapped)

  • Autenticación, reintentos y limitación de tasa integrados con tokens OAuth de ámbito de usuario y soporte incondicional para el encabezado X-Upstream-Authorization

  • Observabilidad con OpenTelemetry con Phoenix, Jaeger, Zipkin y otros backends OTLP

  • Despliegues escalables a través de Docker o PyPI, almacenamiento en caché respaldado por Redis y federación de clústeres múltiples

Arquitectura de ContextForge

Para obtener una lista de las próximas funciones, consulte la Hoja de ruta de ContextForge


  • Federa cualquier servidor MCP o API REST

  • Le permite elegir su versión del protocolo MCP (p. ej., 2025-11-25)

  • Expone una interfaz única y unificada para diversos backends

  • Envuelve servicios que no son MCP como servidores MCP virtuales

  • Registra herramientas, prompts y recursos con una configuración mínima

  • Traducción de gRPC a MCP mediante el protocolo de reflexión del servidor

  • Descubrimiento automático de servicios e introspección de métodos

  • Adapta APIs REST a herramientas con:

    • Extracción automática de esquemas JSON

    • Soporte para encabezados, tokens y autenticación personalizada

    • Políticas de reintento, tiempo de espera y limitación de tasa

  • Prompts: Plantillas Jinja2, soporte multimodal, reversión/control de versiones

  • Recursos: Acceso basado en URI, detección MIME, almacenamiento en caché, actualizaciones SSE

  • Herramientas: Nativas o adaptadas, con validación de entrada y controles de concurrencia

  • Interfaz de usuario de administración creada con HTMX + Alpine.js

  • Visor de registros en tiempo real con capacidades de filtrado, búsqueda y exportación

  • Autenticación: Básica, JWT o esquemas personalizados

  • Registros estructurados, puntos finales de estado, métricas

  • Más de 7000 pruebas, objetivos de Makefile, recarga en vivo, ganchos de pre-commit

  • Seguimiento independiente del proveedor con soporte para el protocolo OpenTelemetry (OTLP)

  • Soporte para múltiples backends: Phoenix (centrado en LLM), Jaeger, Zipkin, Tempo, DataDog, New Relic

  • Seguimiento distribuido a través de pasarelas y servicios federados

  • Instrumentación automática de herramientas, prompts, recursos y operaciones de pasarela

  • Métricas específicas de LLM: Uso de tokens, costos, rendimiento del modelo

  • Cero sobrecarga cuando está deshabilitado con degradación elegante

Consulte la Documentación de observabilidad para obtener guías de configuración con Phoenix, Jaeger y otros backends.


Inicio rápido - PyPI

ContextForge se publica en PyPI como mcp-contextforge-gateway.


TLDR;: (comando único usando uv)

# Quick start with environment variables
BASIC_AUTH_PASSWORD=pass \
MCPGATEWAY_UI_ENABLED=true \
MCPGATEWAY_ADMIN_API_ENABLED=true \
PLATFORM_ADMIN_EMAIL=admin@example.com \
PLATFORM_ADMIN_PASSWORD=changeme \
PLATFORM_ADMIN_FULL_NAME="Platform Administrator" \
uvx --from mcp-contextforge-gateway mcpgateway --host 0.0.0.0 --port 4444

# Or better: use the provided .env.example
cp .env.example .env
# Edit .env to customize your settings
uvx --from mcp-contextforge-gateway mcpgateway --host 0.0.0.0 --port 4444
  • Python ≥ 3.11

  • curl + jq - solo para el último paso de prueba de humo

1 - Instalar y ejecutar (fácil de copiar y pegar)

# 1️⃣  Isolated env + install from pypi
mkdir mcpgateway && cd mcpgateway
python3 -m venv .venv && source .venv/bin/activate
pip install --upgrade pip
pip install mcp-contextforge-gateway

# 2️⃣  Copy and customize the configuration
# Download the example environment file
curl -O https://raw.githubusercontent.com/IBM/mcp-context-forge/main/.env.example
cp .env.example .env
# Edit .env to customize your settings (especially passwords!)

# Or set environment variables directly:
export MCPGATEWAY_UI_ENABLED=true
export MCPGATEWAY_ADMIN_API_ENABLED=true
export PLATFORM_ADMIN_EMAIL=admin@example.com
export PLATFORM_ADMIN_PASSWORD=changeme
export PLATFORM_ADMIN_FULL_NAME="Platform Administrator"

BASIC_AUTH_PASSWORD=pass JWT_SECRET_KEY=my-test-key-but-now-longer-than-32-bytes \
  mcpgateway --host 0.0.0.0 --port 4444 &   # admin/pass

# 3️⃣  Generate a bearer token & smoke-test the API
export MCPGATEWAY_BEARER_TOKEN=$(python3 -m mcpgateway.utils.create_jwt_token \
    --username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes)

curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
     http://127.0.0.1:4444/version | jq
# 1️⃣  Isolated env + install from PyPI
mkdir mcpgateway ; cd mcpgateway
python3 -m venv .venv ; .\.venv\Scripts\Activate.ps1
pip install --upgrade pip
pip install mcp-contextforge-gateway

# 2️⃣  Copy and customize the configuration
# Download the example environment file
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/IBM/mcp-context-forge/main/.env.example" -OutFile ".env.example"
Copy-Item .env.example .env
# Edit .env to customize your settings

# Or set environment variables (session-only)
$Env:MCPGATEWAY_UI_ENABLED        = "true"
$Env:MCPGATEWAY_ADMIN_API_ENABLED = "true"
# Note: Basic auth for API is disabled by default (API_ALLOW_BASIC_AUTH=false)
$Env:JWT_SECRET_KEY               = "my-test-key-but-now-longer-than-32-bytes"
$Env:PLATFORM_ADMIN_EMAIL         = "admin@example.com"
$Env:PLATFORM_ADMIN_PASSWORD      = "changeme"
$Env:PLATFORM_ADMIN_FULL_NAME     = "Platform Administrator"

# 3️⃣  Launch the gateway
mcpgateway.exe --host 0.0.0.0 --port 4444

#   Optional: background it
# Start-Process -FilePath "mcpgateway.exe" -ArgumentList "--host 0.0.0.0 --port 4444"

# 4️⃣  Bearer token and smoke-test
$Env:MCPGATEWAY_BEARER_TOKEN = python3 -m mcpgateway.utils.create_jwt_token `
    --username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes

curl -s -H "Authorization: Bearer $Env:MCPGATEWAY_BEARER_TOKEN" `
     http://127.0.0.1:4444/version | jq
# 1️⃣  Isolated env + install from PyPI using uv
mkdir mcpgateway ; cd mcpgateway
uv venv
.\.venv\Scripts\activate
uv pip install mcp-contextforge-gateway

# Continue with steps 2️⃣-4️⃣ above...

Copie .env.example a .env y ajuste cualquiera de los ajustes (o utilícelos como variables de entorno).

# 1️⃣  Spin up the sample GO MCP time server using mcpgateway.translate & docker (replace docker with podman if needed)
python3 -m mcpgateway.translate \
     --stdio "docker run --rm -i ghcr.io/ibm/fast-time-server:latest -transport=stdio" \
     --expose-sse \
     --port 8003

# Or using the official mcp-server-git using uvx:
pip install uv # to install uvx, if not already installed
python3 -m mcpgateway.translate --stdio "uvx mcp-server-git" --expose-sse --port 9000

# Alternative: running the local binary
# cd mcp-servers/go/fast-time-server; make build
# python3 -m mcpgateway.translate --stdio "./dist/fast-time-server -transport=stdio" --expose-sse --port 8002

# NEW: Expose via multiple protocols simultaneously!
python3 -m mcpgateway.translate \
     --stdio "uvx mcp-server-git" \
     --expose-sse \
     --expose-streamable-http \
     --port 9000
# Now accessible via both /sse (SSE) and /mcp (streamable HTTP) endpoints

# 2️⃣  Register it with the gateway
curl -s -X POST -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"name":"fast_time","url":"http://localhost:8003/sse"}' \
     http://localhost:4444/gateways

# 3️⃣  Verify tool catalog
curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" http://localhost:4444/tools | jq

# 4️⃣  Create a *virtual server* bundling those tools. Use the ID of tools from the tool catalog (Step #3) and pass them in the associatedTools list.
curl -s -X POST -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"server":{"name":"time_server","description":"Fast time tools","associated_tools":[<ID_OF_TOOLS>]}}' \
     http://localhost:4444/servers | jq

# Example curl
curl -s -X POST -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN"
     -H "Content-Type: application/json"
     -d '{"server":{"name":"time_server","description":"Fast time tools","associated_tools":["6018ca46d32a4ac6b4c054c13a1726a2"]}}' \
     http://localhost:4444/servers | jq

# 5️⃣  List servers (should now include the UUID of the newly created virtual server)
curl -s -H "Authorization: Bearer $MCPGATEWAY_BEARER_TOKEN" http://localhost:4444/servers | jq

# 6️⃣  Client HTTP endpoint. Inspect it interactively with the MCP Inspector CLI (or use any MCP client)
npx -y @modelcontextprotocol/inspector
# Transport Type: Streamable HTTP, URL: http://localhost:4444/servers/UUID_OF_SERVER_1/mcp,  Header Name: "Authorization", Bearer Token
export MCP_AUTH="Bearer ${MCPGATEWAY_BEARER_TOKEN}"
export MCP_SERVER_URL=http://localhost:4444/servers/UUID_OF_SERVER_1/mcp
python3 -m mcpgateway.wrapper  # Ctrl-C to exit

También puede ejecutarlo con uv o dentro de Docker/Podman; consulte la sección Contenedores anterior.

En el Inspector MCP, defina las variables de entorno MCP_AUTH y MCP_SERVER_URL, y seleccione python3 como comando y -m mcpgateway.wrapper como argumentos.

echo $PWD/.venv/bin/python3 # Using the Python3 full path ensures you have a working venv
export MCP_SERVER_URL='http://localhost:4444/servers/UUID_OF_SERVER_1/mcp'
export MCP_AUTH="Bearer ${MCPGATEWAY_BEARER_TOKEN}"
npx -y @modelcontextprotocol/inspector

o

Pase la URL y la autenticación como argumentos (no es necesario establecer variables de entorno)

npx -y @modelcontextprotocol/inspector
command as `python`
Arguments as `-m mcpgateway.wrapper --url "http://localhost:4444/servers/UUID_OF_SERVER_1/mcp" --auth "Bearer <your token>"`

Al usar un cliente MCP como Claude con stdio:

{
  "mcpServers": {
    "mcpgateway-wrapper": {
      "command": "python",
      "args": ["-m", "mcpgateway.wrapper"],
      "env": {
        "MCP_AUTH": "Bearer your-token-here",
        "MCP_SERVER_URL": "http://localhost:4444/servers/UUID_OF_SERVER_1",
        "MCP_TOOL_CALL_TIMEOUT": "120"
      }
    }
  }
}

Inicio rápido - Contenedores

Utilice la imagen OCI oficial de GHCR con Docker o Podman. Tenga en cuenta: Actualmente, arm64 no es compatible en producción. Si, por ejemplo, está ejecutando en MacOS con chips Apple Silicon (M1, M2, etc.), puede ejecutar los contenedores usando Rosetta o instalar a través de PyPi.

🚀 Inicio rápido - Docker Compose

Obtenga una pila completa ejecutándose con PostgreSQL y Redis en menos de 30 segundos:

# Clone and start the stack
git clone https://github.com/IBM/mcp-context-forge.git
cd mcp-context-forge

# Start with PostgreSQL (recommended for production)
docker compose up -d

# Check status
docker compose ps

# View logs
docker compose logs -f gateway

# Access Admin UI: http://localhost:8080/admin (login with PLATFORM_ADMIN_EMAIL/PASSWORD)
# Generate API token
docker compose exec gateway python3 -m mcpgateway.utils.create_jwt_token \
  --username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes

Lo que obtiene:

  • 🗄️ PostgreSQL - Base de datos lista para producción con más de 55 tablas

  • 🚀 ContextForge - Pasarela con todas las funciones con interfaz de usuario de administración

  • 📊 Redis - Almacenamiento en caché y de sesiones de alto rendimiento

  • 🔧 Herramientas de administración - pgAdmin, Redis Insight para la gestión de bases de datos

  • 🌐 Proxy Nginx - Proxy inverso de almacenamiento en caché en el puerto 8080

Habilitar HTTPS (opcional):

# Start with TLS enabled (auto-generates self-signed certs)
make compose-tls

# Access via HTTPS: https://localhost:8443/admin

# Or bring your own certificates:
# Unencrypted key:
mkdir -p certs
cp your-cert.pem certs/cert.pem && cp your-key.pem certs/key.pem
make compose-tls

# Passphrase-protected key:
mkdir -p certs
cp your-cert.pem certs/cert.pem && cp your-encrypted-key.pem certs/key-encrypted.pem
echo "KEY_FILE_PASSWORD=your-passphrase" >> .env
make compose-tls

☸️ Inicio rápido - Helm (Kubernetes)

Despliegue en Kubernetes con funciones de nivel empresarial:

# Add Helm repository (when available)
# helm repo add mcp-context-forge https://ibm.github.io/mcp-context-forge
# helm repo update

# For now, use local chart
git clone https://github.com/IBM/mcp-context-forge.git
cd mcp-context-forge/charts/mcp-stack

# Install with PostgreSQL (default)
helm install mcp-gateway . \
  --set mcpContextForge.secret.PLATFORM_ADMIN_EMAIL=admin@yourcompany.com \
  --set mcpContextForge.secret.PLATFORM_ADMIN_PASSWORD=changeme \
  --set mcpContextForge.secret.JWT_SECRET_KEY=your-secret-key

# Check deployment status
kubectl get pods -l app.kubernetes.io/name=mcp-context-forge

# Port forward to access Admin UI
kubectl port-forward svc/mcp-gateway-mcp-context-forge 4444:80
# Access: http://localhost:4444/admin

# Generate API token
kubectl exec deployment/mcp-gateway-mcp-context-forge -- \
  python3 -m mcpgateway.utils.create_jwt_token \
  --username admin@yourcompany.com --exp 10080 --secret your-secret-key

Nota sobre SSRF: Helm utiliza de forma predeterminada configuraciones estrictas de SSRF (SSRF_ALLOW_PRIVATE_NETWORKS=false). Si registra URLs de herramientas dentro del clúster (por ejemplo, servicios fast-time o fast-test), permita solo sus CIDR de clúster a través de mcpContextForge.config.SSRF_ALLOWED_NETWORKS o, para configuraciones de referencia solo locales, establezca temporalmente SSRF_ALLOW_PRIVATE_NETWORKS=true. Consulte docs/docs/manage/configuration.md#ssrf-protection y docs/docs/deployment/helm.md.

Funciones empresariales:

  • 🔄 Escalado automático - HPA con objetivos de CPU/memoria

  • 🗄️ Elección de base de datos - PostgreSQL (prod), SQLite (dev)

  • 📊 Observabilidad - Métricas de Prometheus, seguimiento de OpenTelemetry

  • 🔒 Seguridad - RBAC, políticas de red, gestión de secretos

  • 🚀 Alta disponibilidad - Despliegues de réplicas múltiples con agrupación en clústeres de Redis

  • 📈 Monitoreo - Paneles de Grafana integrados y alertas


🐳 Docker (Contenedor único)

docker run -d --name mcpgateway \
  -p 4444:4444 \
  -e MCPGATEWAY_UI_ENABLED=true \
  -e MCPGATEWAY_ADMIN_API_ENABLED=true \
  -e HOST=0.0.0.0 \
  -e JWT_SECRET_KEY=my-test-key-but-now-longer-than-32-bytes \
  -e AUTH_REQUIRED=true \
  -e PLATFORM_ADMIN_EMAIL=admin@example.com \
  -e PLATFORM_ADMIN_PASSWORD=changeme \
  -e PLATFORM_ADMIN_FULL_NAME="Platform Administrator" \
  -e DATABASE_URL=sqlite:///./mcp.db \
  -e SECURE_COOKIES=false \
  ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2

# Tail logs and generate API key
docker logs -f mcpgateway
docker run --rm -it ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2 \
  python3 -m mcpgateway.utils.create_jwt_token --username admin@example.com --exp 10080 --secret my-test-key-but-now-longer-than-32-bytes

Navegue a http://localhost:4444/admin e inicie sesión con PLATFORM_ADMIN_EMAIL / PLATFORM_ADMIN_PASSWORD.

Persistir base de datos SQLite:

mkdir -p $(pwd)/data && touch $(pwd)/data/mcp.db && chmod 777 $(pwd)/data
docker run -d --name mcpgateway --restart unless-stopped \
  -p 4444:4444 -v $(pwd)/data:/data \
  -e DATABASE_URL=sqlite:////data/mcp.db \
  -e MCPGATEWAY_UI_ENABLED=true -e MCPGATEWAY_ADMIN_API_ENABLED=true \
  -e HOST=0.0.0.0 -e JWT_SECRET_KEY=my-test-key-but-now-longer-than-32-bytes \
  -e PLATFORM_ADMIN_EMAIL=admin@example.com -e PLATFORM_ADMIN_PASSWORD=changeme \
  ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2

Redes de host (acceder a servidores MCP locales):

docker run -d --name mcpgateway --network=host \
  -v $(pwd)/data:/data -e DATABASE_URL=sqlite:////data/mcp.db \
  -e MCPGATEWAY_UI_ENABLED=true -e HOST=0.0.0.0 -e PORT=4444 \
  ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2

Despliegue en entornos aislados (sin internet):

docker build -f Containerfile.lite -t mcpgateway:airgapped .
docker run -d --name mcpgateway -p 4444:4444 \
  -e MCPGATEWAY_UI_AIRGAPPED=true -e MCPGATEWAY_UI_ENABLED=true \
  -e HOST=0.0.0.0 -e JWT_SECRET_KEY=my-test-key-but-now-longer-than-32-bytes \
  mcpgateway:airgapped

🦭 Podman (compatible con rootless)

podman run -d --name mcpgateway \
  -p 4444:4444 -e HOST=0.0.0.0 -e DATABASE_URL=sqlite:///./mcp.db \
  ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2

Persistir SQLite:

mkdir -p $(pwd)/data && chmod 777 $(pwd)/data
podman run -d --name mcpgateway --restart=on-failure \
  -p 4444:4444 -v $(pwd)/data:/data \
  -e DATABASE_URL=sqlite:////data/mcp.db \
  ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2

Redes de host:

podman run -d --name mcpgateway --network=host \
  -v $(pwd)/data:/data -e DATABASE_URL=sqlite:////data/mcp.db \
  ghcr.io/ibm/mcp-context-forge:1.0.0-RC-2

-
security - not tested
A
license - permissive license
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/IBM/mcp-context-forge'

If you have feedback or need assistance with the MCP directory API, please join our Discord server