As A Proxy
🔌 Convierte cualquier MCP Server stdio en un servicio HTTP con FastMCP. Centraliza credenciales y comparte acceso entre múltiples clientes MCP.
Ask AI about As A Proxy
Powered by Claude · Grounded in docs
I know everything about As A Proxy. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
🔌 MCP Server Proxy con FastMCP
📝 Artículo relacionado: 🔌 MCP Server como proxy de otro MCP Server
🤔 ¿Qué problema resuelve?
Muchos MCP Servers tienen limitaciones que dificultan su uso en entornos compartidos o remotos:
- ❌ Funcionan via stdio → Solo pueden ejecutarse localmente
- ❌ Requieren credenciales (PAT, API Keys, tokens) → Cada cliente debe configurarlas
- ❌ Necesitan dependencias específicas → Hay que instalarlas en cada máquina
- ❌ No pueden exponerse como servicio remoto
Este proyecto demuestra cómo crear un proxy con FastMCP que resuelve estos problemas:
- ✅ Ejecutar el servidor en una máquina centralizada
- ✅ Acceder desde cualquier cliente MCP via HTTP
- ✅ Compartir el acceso entre múltiples usuarios/agentes
- ✅ Centralizar la autenticación (tokens, PATs, API keys)
- ✅ Desplegar en un servidor o contenedor para acceso remoto
🎯 Caso de ejemplo: Azure DevOps MCP
Este repositorio usa el Azure DevOps MCP Server como ejemplo porque:
- Usa stdio → No puede exponerse directamente como servicio
- Requiere PAT → Necesita un Personal Access Token para autenticarse
- Es muy útil → Permite interactuar con Azure DevOps desde agentes IA
Pero el mismo patrón aplica a cualquier MCP Server que use stdio y/o requiera credenciales.
🏗️ Arquitectura
┌─────────────┐ HTTP/SSE ┌─────────────────┐ stdio ┌──────────────────────┐
│ MCP Client │ ───────────────▶ │ FastMCP Proxy │ ────────────▶ │ MCP Server (stdio) │
│ (Copilot) │ │ (Este Server) │ │ (ej: Azure DevOps) │
└─────────────┘ └─────────────────┘ └──────────────────────┘
│
▼
🔐 Credenciales centralizadas
(PAT, API Keys, Tokens...)
📋 Requisitos
- Python 3.10 o superior
- Node.js 20 o superior (para el ejemplo con Azure DevOps)
- Las credenciales que requiera el MCP Server que quieras proxear
🚀 Instalación
1. Clonar el repositorio
git clone https://github.com/0GiS0/mcp-server-as-a-proxy.git
cd mcp-server-as-a-proxy
2. Instalar dependencias
pip install -e .
3. Configurar variables de entorno
cp .env.example .env
Edita el archivo .env con tus credenciales (ejemplo para Azure DevOps):
AZURE_DEVOPS_ORG=tu-organizacion
ADO_MCP_AUTH_TOKEN=tu-personal-access-token
4. Ejecutar el servidor
python proxy_server.py
El servidor estará disponible en http://localhost:8080/mcp
🔧 Cómo adaptar a otro MCP Server
El código en proxy_server.py se puede adaptar fácilmente para cualquier MCP Server stdio:
from fastmcp import FastMCP
from fastmcp.server.proxy import ProxyClient
from fastmcp.client.transports import StdioTransport
# 1️⃣ Configura el transport para TU MCP Server
transport = StdioTransport(
command="npx", # O python, node, etc.
args=["-y", "@tu-mcp/server"], # Argumentos del servidor
env={
"API_KEY": "tu-api-key", # Variables de entorno necesarias
"OTHER_SECRET": "..."
}
)
# 2️⃣ Crea el proxy
proxy = FastMCP.as_proxy(
ProxyClient(transport),
name="MiMCPProxy"
)
# 3️⃣ Expón via HTTP (Streamable)
if __name__ == "__main__":
proxy.run(transport="http", host="0.0.0.0", port=8080)
🔌 Configuración del Cliente MCP
VS Code (mcp.json)
{
"servers": {
"mi-proxy": {
"type": "http",
"url": "http://localhost:8080/mcp"
}
}
}
Claude Desktop
{
"mcpServers": {
"mi-proxy": {
"url": "http://localhost:8080/mcp",
"transport": "http"
}
}
}
📊 Escalabilidad
NOTA: La arquitectura actual está diseñada para desarrollo y demos. Para producción con múltiples usuarios, consulta el issue #7.
| Escenario | Estado |
|---|---|
| Desarrollo/demos | ✅ Funciona bien |
| Producción (múltiples usuarios) | ⚠️ Requiere configuración adicional |
Opciones para escalar:
- Múltiples instancias + Load Balancer
- Gunicorn con workers:
gunicorn proxy_server:proxy -w 4 -k uvicorn.workers.UvicornWorker - Kubernetes con réplicas
⚠️ Seguridad
IMPORTANTE: Este proxy actualmente no implementa autenticación propia. Para uso en producción, añade una capa de autenticación.
🔐 Autenticación con Microsoft Entra ID
FastMCP incluye un provider nativo para Azure. Documentación completa: FastMCP Azure Integration
from fastmcp.server.auth.providers.azure import AzureProvider
auth_provider = AzureProvider(
client_id="tu-app-client-id",
client_secret="tu-client-secret",
tenant_id="tu-tenant-id",
base_url="http://localhost:8080",
required_scopes=["mcp-access"],
)
proxy = FastMCP.as_proxy(
ProxyClient(transport),
name="MiProxy",
auth=auth_provider # 👈 Añadir autenticación
)
📚 Referencias
🌐 Sígueme en Mis Redes Sociales
Si te ha gustado este proyecto y quieres ver más contenido como este, no olvides suscribirte a mi canal de YouTube y seguirme en mis redes sociales:
📄 Licencia
MIT
