Gateway MCP Server
Un servidor gateway que enruta inteligentemente solicitudes MCP a múltiples servidores backend.
Documentación
Gateway MCP Server
Enruta solicitudes MCP de forma inteligente hacia múltiples servidores backend.
🎯 Características Principales
🚀 Supera los Límites de Herramientas
- Desafío: Los clientes MCP a menudo tienen límites sobre cuántas herramientas pueden cargar a la vez
- Solución: mcpware expone solo 2 herramientas de enrutamiento mientras proporciona acceso a herramientas backend ilimitadas
- Resultado: ¡Conéctate a GitHub (más de 50 herramientas), bases de datos y más a través de una única puerta de enlace!
🔧 Beneficios Adicionales
- Punto de entrada único para múltiples servidores MCP
- Gestión automática de procesos para servidores backend
- Aislamiento y despliegue basado en Docker
Inicio Rápido
# Clone the repository
git clone https://github.com/delexw/mcpware.git
cd mcpware
# Build the Docker image
docker build -t mcpware . --no-cache
# Configure MCP client (see Installation section)
Luego configura los clientes MCP como se muestra en la sección Instalación.
Cómo Funciona
mcpware se ejecuta como un contenedor Docker que:
- Recibe solicitudes de clientes MCP a través de stdio
- Las enruta al servidor MCP backend apropiado (también ejecutándose en Docker)
- Devuelve las respuestas al cliente MCP
Importante: Los servidores backend pueden usar cualquier comando (docker, npx, node, python, etc.). Cuando se ejecuta mcpware en Docker, los backends que usan comandos locales como npx o node se ejecutarán dentro del contenedor de mcpware.
Instalación
Requisitos Previos
- Docker
- Clientes MCP (Cursor, etc.)
Configuración con el Cliente MCP
-
Clona este repositorio:
git clone https://github.com/delexw/mcpware.git cd mcpware -
Configura tus backends en
config.json(consulta la sección de Configuración a continuación) -
Configura tus variables de entorno:
- Copia el archivo de ejemplo:
cp env.example .env - Edita
.envcon tus valores reales:GITHUB_PERSONAL_ACCESS_TOKEN=your_github_token_here BUILDKITE_API_TOKEN=your_buildkite_token_here # Add other environment variables as needed
- Copia el archivo de ejemplo:
-
Añade a la configuración del cliente MCP:
Nota: Puedes configurar los secretos o tokens directamente en mcpware
config.jsonConfiguración (Ejecución Directa con Docker):
{ "mcpServers": { "mcpware": { "command": "docker", "args": [ "run", "-i", "--rm", "-v", "/path/to/mcpware/config.json:/app/config.json:ro", "-v", "/var/run/docker.sock:/var/run/docker.sock", "--env-file", "/path/to/mcpware/.env", "mcpware" ] } } }Importante:
- Reemplaza
/path/to/mcpwarecon la ruta absoluta a tu repositorio clonado - El montaje del socket de Docker (
/var/run/docker.sock) es necesario para que mcpware lance backends basados en Docker; de lo contrario, no lo necesitas
¿Por qué montar el socket de Docker?
- mcpware necesita lanzar contenedores Docker para servidores MCP backend (como
ghcr.io/github/github-mcp-server) - El montaje del socket de Docker permite que mcpware se comunique con Docker
- Sin este montaje, mcpware no puede iniciar servidores backend que se ejecutan como contenedores Docker
- Reemplaza
Configuración del Socket de Docker Específica por Plataforma
La puerta de enlace necesita acceso al socket de Docker para lanzar contenedores backend. La ruta de montaje varía según la plataforma:
¿Por qué se requiere acceso al socket de Docker?
mcpware actúa como un gestor de procesos que lanza servidores MCP backend. Cuando un backend está configurado para ejecutarse como un contenedor Docker (por ejemplo, ghcr.io/github/github-mcp-server), mcpware necesita:
- Crear e iniciar contenedores Docker
- Gestionar su ciclo de vida (detener/reiniciar)
- Comunicarse con ellos a través de stdio
Sin acceso al socket de Docker, mcpware no puede lanzar backends basados en Docker y fallará con errores de permisos.
Verificación Rápida
Ejecuta este script para verificar tu configuración de Docker:
python scripts/check_docker_socket.py
Linux/macOS/WSL2
No se necesitan cambios. La configuración predeterminada funciona:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Windows (Contenedores Nativos)
Actualiza la ruta del socket de Docker:
{
"mcpServers": {
"mcpware": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/path/to/mcpware/config.json:/app/config.json:ro",
"-v",
"//./pipe/docker_engine://./pipe/docker_engine",
"--env-file",
"/path/to/mcpware/.env",
"mcpware"
]
}
}
}
Observa la diferente ruta del socket de Docker: //./pipe/docker_engine en lugar de /var/run/docker.sock
Verifica tu Tipo de Docker
Para verificar qué backend de Docker estás usando en Windows:
docker version --format '{{.Server.Os}}'
linux= backend WSL2/Hyper-V (usa la configuración predeterminada)windows= contenedores Windows (usa el archivo de anulación)
Configuración
Crea un config.json con tus servidores backend:
{
"backends": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
},
"description": "GitHub MCP Server",
"timeout": 60
},
"database": {
"command": "docker",
"args": ["run", "-i", "--rm", "bytebase/dbhub", "--transport", "stdio"],
"description": "Database MCP Server"
}
}
}
Notas de Configuración:
- Los comandos backend pueden ser cualquier ejecutable (
docker,npx,node,python, etc.) - Cuando uses comandos
docker, asegúrate de que el socket de Docker esté montado (consulta las instrucciones de instalación)
Consulta config.example.json para más ejemplos de backends (bases de datos, APIs, etc.).
Uso
La puerta de enlace expone dos herramientas principales:
use_tool
Enruta una llamada de herramienta a un servidor backend específico.
Parámetros:
backend_server: Nombre del servidor backendserver_tool: Nombre de la herramienta a llamartool_arguments: Argumentos a pasar a la herramienta
Ejemplo:
{
"backend_server": "github",
"server_tool": "create_issue",
"tool_arguments": {
"owner": "myorg",
"repo": "myrepo",
"title": "New issue",
"body": "Issue description"
}
}
discover_backend_tools
Descubre los backends disponibles y sus herramientas.
Parámetros:
backend_name: (Opcional) Backend específico a consultar
Usar mcpware Junto a Otros Servidores MCP
mcpware está diseñado para funcionar junto a otros servidores MCP en tu configuración de cliente MCP. Puedes:
- Usar mcpware como puerta de enlace para múltiples servidores backend
- Mantener algunos servidores MCP separados para acceso directo
- Combinar y personalizar según tus necesidades
Ejemplo de configuración mixta:
{
"mcpServers": {
"mcpware": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/path/to/mcpware/config.json:/app/config.json:ro",
"-v", "/var/run/docker.sock:/var/run/docker.sock",
"--env-file", "/path/to/mcpware/.env",
"mcpware"
]
},
"redis-direct": {
"command": "docker",
"args": ["run", "--rm", "-i", "-e", "REDIS_HOST=localhost", "mcp/redis"]
}
}
}
Esto te permite:
- Acceder a múltiples servidores a través de mcpware cuando necesitas enrutamiento
- Conectarte directamente a servidores específicos cuando necesitas acceso dedicado
- Organizar tus servidores MCP según tu flujo de trabajo
Desarrollo
Requisitos Previos
Asegúrate de tener Python 3.10+ instalado:
python --version # Should show Python 3.10 or higher
Configuración de Desarrollo
-
Clona el repositorio:
git clone https://github.com/delexw/mcpware.git cd mcpware -
Crea un entorno virtual (recomendado):
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate -
Instala las dependencias de desarrollo:
pip install -r requirements.txt
Dependencias de Desarrollo
El proyecto utiliza dependencias mínimas. Toda la funcionalidad principal está implementada usando la biblioteca estándar de Python.
Dependencias de prueba (incluidas en requirements.txt):
pytest- Marco de pruebaspytest-asyncio- Soporte de pruebas asíncronaspytest-cov- Informes de cobertura de código
Herramientas de desarrollo opcionales (instala por separado si es necesario):
# Code formatting
pip install black isort
# Linting
pip install flake8 pylint mypy
# Development convenience
pip install pytest-watch # Auto-run tests on file changes
Ejecución Local
# Run the gateway server
python gateway_server.py --config config.json
# Run with debug logging
python gateway_server.py --config config.json --log-level DEBUG
Estilo de Código
Formatea tu código antes de confirmar:
# Format with black (if installed)
black src/ tests/ gateway_server.py
# Sort imports (if installed)
isort src/ tests/ gateway_server.py
# Run linting (if installed)
flake8 src/ tests/ gateway_server.py --max-line-length=120
Ejecución de Pruebas
# Run all tests
pytest
# Run with coverage report
pytest --cov=src --cov=gateway_server --cov-report=html
# Run specific test file
pytest tests/test_config.py
# Run tests in watch mode (requires pytest-watch)
pytest-watch
Docker
Compila y ejecuta con Docker:
# Build the image
docker build -t mcpware .
# Run interactively (for testing)
docker run -it --rm \
-v $(pwd)/config.json:/app/config.json:ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-e GITHUB_PERSONAL_ACCESS_TOKEN \
mcpware
# Run with specific config file
docker run -it --rm \
-v /path/to/your/config.json:/app/config.json:ro \
-v /var/run/docker.sock:/var/run/docker.sock \
-e GITHUB_PERSONAL_ACCESS_TOKEN \
mcpware
Variables de Entorno
La puerta de enlace admite la sustitución de variables de entorno en las configuraciones de backend. Configúralas en tu archivo .env:
# Example .env file
GITHUB_PERSONAL_ACCESS_TOKEN=ghp_xxxxxxxxxxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxx
# Add other tokens as needed
Las variables de entorno referenciadas en config.json usando la sintaxis ${VAR_NAME} se sustituirán automáticamente.
Pruebas
El proyecto incluye pruebas unitarias y de integración exhaustivas.
Ejecución de Pruebas
-
Instala las dependencias de prueba:
pip install -r requirements.txt -
Ejecuta todas las pruebas:
pytest -
Ejecuta las pruebas con cobertura:
pytest --cov=src --cov=gateway_server --cov-report=html -
Ejecuta módulos de prueba específicos:
pytest tests/test_config.py pytest tests/test_backend.py pytest tests/test_protocol.py -
Ejecuta las pruebas en modo de observación:
pytest-watch
Licencia
MIT