ContextForge MCP Gateway
OfficialContextForge
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.

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.
Related MCP server: ContextForge MCP Gateway
Tabla de contenidos
📌 Enlaces rápidos
Recurso | Descripción |
Empiece rápido: uvx, Docker, Compose o desarrollo local | |
Opciones de soporte, preguntas frecuentes, canales de la comunidad | |
Cómo informar errores, solicitar funciones, contribuir | |
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
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 4444Python ≥ 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 Tokenexport 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 exitTambié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/inspectoro
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-bytesLo 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-keyNota 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 demcpContextForge.config.SSRF_ALLOWED_NETWORKSo, para configuraciones de referencia solo locales, establezca temporalmenteSSRF_ALLOW_PRIVATE_NETWORKS=true. Consultedocs/docs/manage/configuration.md#ssrf-protectionydocs/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-bytesNavegue 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-2Redes 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-2Despliegue 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-2Persistir 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-2Redes 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-2This server cannot be deployed
Maintenance
Related MCP Connectors
- gatewayOAuthai.sealgate
MCP gateway with runtime security policy, tool-call-level control, and audit of agent actions.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Agent-native registry to discover APIs, MCP servers and CLIs, with live health checks.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceA feature-rich Model Context Protocol gateway that federates MCP and REST services, unifying discovery, authentication, and transport protocols while providing virtualization of legacy APIs as MCP-compliant tools.Apache 2.0
- AlicenseNot gradedqualityFmaintenanceA feature-rich gateway and proxy that federates MCP, REST, and gRPC services into a unified endpoint for AI clients. It enables virtualization of legacy APIs as MCP-compliant tools while providing built-in security, rate-limiting, and OpenTelemetry observability.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA gateway that aggregates multiple MCP servers into a single endpoint with authentication, group-based access control, and audit logging for AI agents.19 npmMIT
- AlicenseNot gradedqualityDmaintenanceAn open source registry and proxy that federates MCP, A2A, and REST/gRPC APIs with centralized governance, discovery, and observability. It optimizes agent and tool calling, and supports plugins.Apache 2.0
