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.
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 installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Appeared in Searches
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
