MCP Router

Una puerta de enlace unificada para enrutar solicitudes a múltiples servidores del Protocolo de Contexto de Modelo.

Documentación

MCP Anywhere

Una pasarela unificada para servidores del Protocolo de Contexto de Modelos (MCP) que permite el descubrimiento, la configuración y el acceso a herramientas de repositorios de GitHub a través de un único punto final.

https://github.com/user-attachments/assets/f011f8bf-6c99-4a8a-8236-f8eb0a3fb9e4

Versión actual: 0.8.0
Nota: Este proyecto está en versión beta. Las API y las funciones están sujetas a cambios.

Descripción general

MCP Anywhere proporciona:

  • Descubrimiento automático de herramientas desde repositorios de GitHub
  • Gestión centralizada de claves API y credenciales
  • Habilitación selectiva de herramientas y control de acceso
  • Punto final unificado para todas las herramientas MCP
  • Aislamiento basado en Docker para una ejecución segura

Documentación

📚 La documentación completa está disponible en mcpanywhere.com

Instalación

Instalación local

# Clone repository
git clone https://github.com/locomotive-agency/mcp-anywhere.git
cd mcp-anywhere

# Install with uv (recommended)
uv sync

# Or install with pip
pip install -e .

# Configure environment
cp env.example .env
# Edit .env with required values:
# SECRET_KEY=<secure-random-key>
# ANTHROPIC_API_KEY=<your-api-key>

# Start server
mcp-anywhere serve http
# Or: python -m mcp_anywhere serve http
# Access at http://localhost:8000

Implementación en producción (Fly.io)

# Install Fly CLI
curl -L https://fly.io/install.sh | sh

# Deploy application
cd mcp-anywhere
fly launch
fly secrets set SECRET_KEY=<secure-random-key>
fly secrets set JWT_SECRET_KEY=<jwt-secret-key>
fly secrets set ANTHROPIC_API_KEY=<your-api-key>
fly secrets set GOOGLE_OAUTH_CLIENT_ID=<google-oauth-client-id>
fly secrets set GOOGLE_OAUTH_CLIENT_SECRET=<google-oauth-client-secret>
fly deploy

# Application available at https://your-app.fly.dev

Para acelerar la implementación en fly.io, puedes configurar la compilación manual y el inicio de los contenedores.

# set the environment variable
REBUILD_CONTAINERS_ON_STARTUP=false

Docker

Implementación de la aplicación como contenedor Docker usando docker compose.

# Configure environment
cp env.example .env
# Edit .env with required values:
# SECRET_KEY=<secure-random-key>
# ANTHROPIC_API_KEY=<your-api-key>

Compilar e implementar la aplicación

$ docker compose -f docker-compose.native.yml up -d --build

Ver los registros para conocer el estado

$ docker logs mcp-anywhere-app

Navega a http://<DOCKER-HOST>:8000/ para usar la aplicación

Interactúa con la máquina mediante CLI, útil para interactuar con la base de datos usando sqlite3

# fetch machine id for your app
$ fly --app mcp-anywhere-app machine list

$ fly console --app mcp-anywhere-app --machine <MACHINE_ID>

Comandos de base de datos de ejemplo, una vez que hayas iniciado sesión en la consola de la máquina

$ sqlite3 /.data/mcp_anywhere.db ".tables"

$ sqlite3 /.data/mcp_anywhere.db "SELECT * FROM users;"

Uso

Añadir herramientas desde GitHub

Usa la interfaz web para añadir repositorios de servidores MCP:

  • Servidores MCP oficiales: https://github.com/modelcontextprotocol/servers
  • Intérprete de Python: https://github.com/yzfly/mcp-python-interpreter
  • Cualquier repositorio MCP compatible

El sistema usa Claude AI para analizar y configurar automáticamente los repositorios.

Configuración

  • Claves API: Almacenamiento centralizado de credenciales
  • Archivos secretos: Carga y gestión segura de archivos de credenciales (JSON, PEM, certificados)
  • Gestión de herramientas: Habilita o deshabilita herramientas específicas
  • Configuración de contenedores: Contenedorización automática con Docker

Gestión de archivos secretos

MCP Anywhere admite la carga y gestión segura de archivos de credenciales para servidores MCP:

Tipos de archivo admitidos:

  • Archivos de credenciales JSON (.json)
  • Certificados y claves PEM (.pem, .key, .crt, .cert)
  • Certificados PKCS12/PFX (.p12, .pfx)
  • Almacenes de claves Java (.jks, .keystore)
  • Archivos de configuración (.yaml, .yml, .xml, .txt)

Características:

  • Los archivos se cifran en reposo usando AES-128 (Fernet)
  • Tamaño máximo de archivo: 10 MB
  • Los archivos se montan como volúmenes de solo lectura en los contenedores
  • Las variables de entorno se configuran automáticamente con las rutas de los archivos
  • Limpieza automática cuando se eliminan los servidores

Uso mediante la interfaz web:

  1. Navega a la página de detalles del servidor
  2. Usa el formulario "Subir archivo secreto"
  3. Especifica un nombre de variable de entorno (por ejemplo, GOOGLE_APPLICATION_CREDENTIALS)
  4. Sube el archivo de credenciales
  5. El archivo se montará automáticamente cuando el contenedor se inicie

Consideraciones de seguridad:

  • Los archivos se almacenan cifrados en DATA_DIR/secrets/<server_id>/
  • Cada servidor tiene almacenamiento de secretos aislado
  • Los archivos solo se descifran al montarlos en los contenedores
  • El acceso al contenedor es de solo lectura

Integración con clientes

Configuración de Claude Desktop:

Primero ejecuta which uv, que imprimirá una ruta al binario de uv. Por ejemplo, en macOS:

/Users/yourname/.local/bin/uv

Luego puedes usar esa ruta en el comando de inicio. Cambia la ruta --directory a la ruta de tu clon de MCP Anywhere.

{
  "mcpServers": {
    "mcp-anywhere": {
      "command": "/Users/yourname/.local/bin/uv",
      "args": ["run", "--directory", "/Users/yourname/Projects/mcp-anywhere", "mcp-anywhere", "connect"]
    }
  }
}

Por último, configura la aplicación MCP Anywhere antes de iniciar Claude Desktop:

uv run mcp-anywhere serve stdio

Opciones de autenticación:

Para Google OAuth (recomendado para equipos):

  1. Configura las credenciales de Google OAuth en Google Cloud Console
  2. Configura las variables de entorno:
    GOOGLE_OAUTH_CLIENT_ID=your-client-id
    GOOGLE_OAUTH_CLIENT_SECRET=your-client-secret
    GOOGLE_OAUTH_REDIRECT_URI=/auth/callback
    OAUTH_USER_ALLOWED_DOMAIN=company.com  # Optional: restrict to your domain
    
  3. Los usuarios pueden iniciar sesión con Google en /auth/login

Integración con la API HTTP:

from fastmcp import Client
from fastmcp.client.auth import BearerAuth

async with Client(
    "https://your-app.fly.dev/mcp/",
    auth=BearerAuth(token="<oauth-token>")
) as client:
    tools = await client.list_tools()

Interfaz de línea de comandos:

# For MCP client connection
mcp-anywhere connect
# Or: python -m mcp_anywhere connect

# For STDIO server mode (local Claude Desktop integration)
mcp-anywhere serve stdio

# For HTTP server mode with OAuth (production)
mcp-anywhere serve http --host 0.0.0.0 --port 8000

Características

Autenticación y control de acceso

  • Integración con Google OAuth: inicia sesión con Google para una autenticación simplificada
  • Control de acceso basado en dominio: restringe el acceso a usuarios de dominios específicos (por ejemplo, @company.com)
  • Autenticación web basada en sesiones con gestión segura de cookies
  • Tokens JWT para acceso a la API con validación adecuada de alcances

Descubrimiento y gestión de herramientas

  • Análisis automático de repositorios usando Claude AI
  • Monitoreo de salud de contenedores con remontaje inteligente
  • Soporte para tiempos de ejecución npx, uvx y Docker
  • Habilitación selectiva de herramientas con controles por servidor
  • Gestión mejorada de servidores: inicia, detén y reinicia servidores mediante la interfaz web
  • Intérprete de Python preconfigurado con aislamiento de sandbox

Seguridad y autenticación

  • Integración con Google OAuth para autenticación simplificada de usuarios
  • Control de acceso basado en dominio para seguridad organizacional
  • Soporte de OAuth 2.0/2.1 con PKCE (implementación del SDK MCP)
  • Autenticación de API basada en JWT
  • Aislamiento de contenedores Docker para la ejecución de herramientas
  • Autenticación basada en sesiones para la interfaz web
  • Almacenamiento cifrado de archivos secretos (AES-128 con Fernet)

Arquitectura de producción

  • Arquitectura asíncrona (Starlette/FastAPI)
  • Monitoreo de salud con recuperación automática
  • Gestión flexible de contenedores con comportamiento de inicio/apagado configurable
  • Gestión mejorada del ciclo de vida del servidor con controles de inicio/detención/reinicio
  • Proceso de implementación optimizado con CI de GitHub Actions
  • Soporte de CLI para acceso directo a herramientas

Arquitectura

Client Application → MCP Anywhere Gateway → Docker Containers → MCP Tools
                            ↓
                    Web Management Interface

Contribuciones

Áreas para contribuir:

  • Revisión de OAuth y soporte de proveedores adicionales
  • Eficiencia y latencia de contenedores
  • Mejorar las pruebas
  • Documentación

Configuración

Variables de entorno requeridas

SECRET_KEY                  # Session encryption key
ANTHROPIC_API_KEY          # Claude API key for repository analysis

Variables de entorno opcionales

JWT_SECRET_KEY             # JWT token signing key (defaults to SECRET_KEY)
WEB_PORT                   # Web interface port (default: 8000)
DATA_DIR                   # Data storage directory (default: .data)
DOCKER_TIMEOUT             # Container operation timeout in seconds (default: 300)
LOG_LEVEL                  # Logging level (default: INFO)
GITHUB_TOKEN               # GitHub token for private repository access

# Container Management
CLEANUP_CONTAINERS_ON_SHUTDOWN    # Clean up containers on app shutdown (default: false)
REBUILD_CONTAINERS_ON_STARTUP     # Rebuild containers on startup (default: true)

# Google OAuth (optional - enables Google authentication)
GOOGLE_OAUTH_CLIENT_ID            # Google OAuth client ID
GOOGLE_OAUTH_CLIENT_SECRET        # Google OAuth client secret  
GOOGLE_OAUTH_REDIRECT_URI         # OAuth redirect URI (e.g., /auth/callback)
OAUTH_USER_ALLOWED_DOMAIN         # Restrict access to specific domain (e.g., company.com)

Desarrollo

Configuración de desarrollo

# Install development dependencies
uv sync --group dev

# Run tests
uv run pytest

# Run linting
uv run ruff check src/ tests/

# Run type checking
uv run mypy src/

Pruebas

# Run all tests
uv run pytest

# Run tests with coverage
uv run pytest --cov=mcp_anywhere

uv run mcp-anywhere serve http --host 0.0.0.0 --port 8080

Modo de depuración

LOG_LEVEL=DEBUG mcp-anywhere serve http

Restablecimiento de datos

mcp-anywhere reset --confirm

Soporte

Licencia

Consulta LICENCIA