MCP Data Gateway
Puerta de enlace de datos MCP
Estado: Desarrollo inicial. El andamiaje del proyecto (configuración, dependencias, documentos) está listo. El código fuente en
src/aún no se ha implementado; consulte la Hoja de ruta de desarrollo para conocer el progreso actual. El plan de implementación está endocs/plan.md.
Un servidor del Protocolo de Contexto de Modelo (MCP) basado en Python que actúa como una puerta de enlace de datos unificada, permitiendo a Claude (y a otros clientes MCP) enviar y recibir datos a través de múltiples API externas mediante una única interfaz segura.
Descripción general
Este servidor MCP proporciona:
Manejo genérico de datos para múltiples tipos de datos
Puerta de enlace API genérica compatible con cualquier endpoint REST o GraphQL
Autenticación OAuth 2.0 con flujo de inicio de sesión automático basado en navegador
Almacenamiento seguro de credenciales utilizando el llavero del sistema
Base para la evolución de la aplicación MCP en el futuro
Características
Característica | Descripción |
Soporte multi-API | Conéctese a cualquier número de servicios externos mediante una configuración unificada |
REST + GraphQL | Soporte nativo para API REST y GraphQL |
OAuth 2.0 | Flujo completo de código de autorización con ventana emergente automática del navegador |
Actualización de tokens | Actualización automática de tokens y reautenticación cuando caducan |
Almacenamiento seguro | Credenciales almacenadas cifradas mediante el llavero del sistema |
Modelos de datos genéricos | Esquemas flexibles para manejar cualquier forma de datos |
Autenticación automática | Las herramientas solicitan el inicio de sesión automáticamente cuando es necesario |
Arquitectura
MCP/
├── src/
│ ├── server.py # MCP server entry point
│ ├── auth/
│ │ ├── __init__.py
│ │ ├── oauth.py # OAuth 2.0 flow handler with popup
│ │ └── credentials.py # Secure credential storage (keyring)
│ ├── gateway/
│ │ ├── __init__.py
│ │ ├── api_client.py # Generic REST/GraphQL HTTP client
│ │ └── handlers.py # Request/response transformation
│ ├── models/
│ │ ├── __init__.py
│ │ └── data_models.py # Generic Pydantic data models
│ └── tools/
│ ├── __init__.py
│ └── mcp_tools.py # MCP tool definitions for Claude
├── config/
│ └── api_configs.json # API service configurations
├── tests/ # Unit and integration tests
├── .env.example # Environment variables template
├── .gitignore # Excludes secrets and build artifacts
├── requirements.txt # Python dependencies
└── README.md # This fileResponsabilidades de los módulos
Servidor MCP central (src/server.py)
Inicializa el servidor MCP utilizando el SDK de Python
mcpRegistra herramientas (
fetch_data,send_data,execute_graphql, etc.)Maneja el ciclo de vida de ejecución de herramientas y las respuestas de error
Autenticación (src/auth/)
oauth.py: Flujo de código de autorización OAuth 2.0 con ventana emergente automática del navegador. Inicia un servidor de devolución de llamada HTTP local para recibir el código de autenticación. Admite múltiples proveedores (Google, GitHub, personalizados).
credentials.py: Almacenamiento seguro de tokens de acceso/actualización a través del llavero del sistema. Maneja la validación y caducidad de tokens.
Puerta de enlace API (src/gateway/)
api_client.py: Cliente HTTP asíncrono genérico compatible con REST (GET/POST/PUT/DELETE) y GraphQL (consultas/mutaciones). Maneja tokens Bearer, claves API, autenticación básica.
handlers.py: Normaliza las respuestas entre diferentes API y analiza los errores de GraphQL por separado de los errores HTTP.
Herramientas MCP (src/tools/mcp_tools.py)
Herramienta | Descripción |
| Obtener datos de una API configurada (OAuth automático si es necesario) |
| Enviar datos (POST/PUT) a una API configurada (OAuth automático si es necesario) |
| Ejecutar una consulta o mutación GraphQL (OAuth automático si es necesario) |
| Listar todos los servicios API configurados |
| Mostrar el estado de autenticación y conexión |
Flujo de autenticación
Cuando Claude llama a una herramienta que requiere autenticación:
1. Claude invokes tool (e.g., fetch_data)
↓
2. MCP checks credentials in keyring
↓
3a. Valid token → Proceed with API call
3b. Missing/Expired → Open browser popup for OAuth
↓
4. User logs in via browser
↓
5. Local callback server receives auth code
↓
6. Exchange auth code for access token
↓
7. Store token in keyring
↓
8. Resume original tool callStack tecnológico
Python 3.10+
mcp — SDK de Python para el Protocolo de Contexto de Modelo
httpx — Cliente HTTP asíncrono (REST + GraphQL)
keyring — Almacenamiento seguro de credenciales multiplataforma
pydantic — Validación y modelado de datos
python-dotenv — Gestión de variables de entorno
Configuración
Requisitos previos
Python 3.10 o superior
pip o uv (recomendado)
Instalación
# Clone the repository
cd /Users/chawengwit/Documents/MCP
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Copy environment template
cp .env.example .env
# Edit .env with your OAuth credentials and API settingsConfiguración
1. Variables de entorno (.env)
# OAuth credentials (per provider)
OAUTH_CLIENT_ID=your_client_id
OAUTH_CLIENT_SECRET=your_client_secret
OAUTH_REDIRECT_URI=http://localhost:8765/callback
# Server settings
MCP_LOG_LEVEL=INFO # DEBUG | INFO | WARN | ERROR
MCP_LOG_FILE= # Optional path to log file (default: stderr only)
MCP_DEBUG=false # Enable verbose request tracing
MCP_MAX_RESPONSE_BYTES=1048576 # Response size cap (1 MB default)
OAUTH_CALLBACK_PORT=87652. Configuraciones de API (config/api_configs.json)
{
"apis": {
"example_api": {
"base_url": "https://api.example.com",
"type": "rest",
"auth": {
"method": "oauth2",
"provider": "custom",
"authorize_url": "https://auth.example.com/oauth/authorize",
"token_url": "https://auth.example.com/oauth/token",
"scopes": ["read", "write"]
},
"endpoints": {
"get_users": {"method": "GET", "path": "/users"},
"create_user": {"method": "POST", "path": "/users"}
}
}
}
}Uso
Ejecución del servidor MCP
python -m src.serverConexión a Claude Code
Agregue esta configuración a sus ajustes de MCP de Claude Code:
{
"mcpServers": {
"data-gateway": {
"command": "python",
"args": ["-m", "src.server"],
"cwd": "/Users/chawengwit/Documents/MCP"
}
}
}Ejemplos de interacción
Una vez conectado, Claude puede:
Listar API configuradas: "Muéstrame los servicios API disponibles"
Obtener datos: "Obtén la lista de usuarios de example_api"
Enviar datos: "Crea un nuevo registro en example_api con estos datos..."
Ejecutar GraphQL: "Ejecuta esta consulta GraphQL contra mi API..."
La primera vez que Claude utiliza una herramienta que requiere autenticación, su navegador se abrirá automáticamente para el inicio de sesión OAuth.
Formato de respuesta
Todas las herramientas MCP devuelven JSON estructurado para un análisis consistente.
Éxito:
{
"data": <api response>,
"metadata": { "source": "...", "endpoint": "...", "timestamp": "...", "duration_ms": 142 }
}Error:
{
"error": { "code": "AUTH_REQUIRED", "message": "...", "details": { ... } }
}Códigos de error estándar: AUTH_REQUIRED, AUTH_FAILED, API_NOT_CONFIGURED, ENDPOINT_NOT_FOUND, RATE_LIMITED, UPSTREAM_ERROR, VALIDATION_ERROR, RESPONSE_TOO_LARGE.
Las respuestas JSON/texto más grandes que MCP_MAX_RESPONSE_BYTES se truncan y se devuelven como éxito con metadata.truncated: true además de cursores de paginación. Solo las cargas útiles binarias o de transmisión emiten RESPONSE_TOO_LARGE (no se pueden truncar de forma segura). Los datos binarios están codificados en base64 con metadatos content_type. Las respuestas de GraphQL muestran tanto data como errors para que los éxitos parciales sigan siendo utilizables.
Consulte CLAUDE.md para obtener todos los detalles.
Depuración
Diagnóstico rápido
Síntoma | Intente |
La herramienta se bloquea en la primera llamada | Compruebe que |
| Instale |
401 después de haber funcionado antes | Elimine la entrada del llavero, vuelva a autenticarse |
GraphQL "tiene éxito" pero no hay datos | Compruebe |
Respuesta truncada | Use paginación o aumente |
Habilitación del modo de depuración
MCP_DEBUG=true MCP_LOG_LEVEL=DEBUG python -m src.serverEsto vuelca los intercambios HTTP completos (con secretos redactados) a stderr. Nunca a stdout — stdout transporta el flujo del protocolo JSON-RPC de MCP.
Notas de registro
Todos los registros van a
stderr(o alMCP_LOG_FILEopcional).Los tokens, las claves API, los encabezados
Authorizationy las credenciales se redactan automáticamente antes de registrarse.Los registros son JSON estructurados (un evento por línea) para facilitar el análisis con
jq.
Consulte CLAUDE.md para conocer la estrategia completa de depuración.
Hoja de ruta de desarrollo
Fase 1: Configuración del proyecto
[x]
requirements.txtcon dependencias fijadas[x]
.gitignorepara secretos y cachés[x]
.env.exampledocumentando variables de entorno[ ] Inicializar la estructura del paquete
src/[ ] Plantilla inicial
config/api_configs.json
Fase 2: Servidor MCP central
[ ] Inicialización del servidor MCP
[ ] Definiciones de esquema de herramientas
[ ] Registro y manejo de errores
Fase 3: Autenticación
[ ] Flujo de código de autorización OAuth 2.0
[ ] Servidor HTTP de devolución de llamada local
[ ] Almacenamiento de tokens basado en llavero
[ ] Lógica de actualización de tokens
Fase 4: Puerta de enlace API
[ ] Cliente REST genérico
[ ] Soporte para consultas/mutaciones GraphQL
[ ] Soporte para múltiples métodos de autenticación
[ ] Manejadores de solicitud/respuesta
Fase 5: Herramientas e integración
[ ] Implementar la herramienta
fetch_data[ ] Implementar la herramienta
send_data[ ] Implementar la herramienta
execute_graphql[ ] Implementar las herramientas
list_apisyget_status
Fase 6: Pruebas y pulido
[ ] Pruebas unitarias por módulo
[ ] Pruebas de integración con API simuladas
[ ] Ejemplos de configuración
[ ] Documentación de usuario
Mejoras futuras
Aplicación MCP: Interfaz web independiente como frontend sobre esta puerta de enlace
Almacenamiento persistente: SQLite/PostgreSQL para historial de datos y registros de auditoría
Limitación de tasa: Limitación de tasa por API y cola de solicitudes
Almacenamiento en caché: Almacenamiento en caché de respuestas con TTL configurable
Multi-inquilino: Soporte para múltiples usuarios con almacenes de credenciales separados
Webhooks: Recibir datos a través de webhooks entrantes
Canalizaciones de transformación de datos: Encadenar transformaciones entre API
Seguridad
Todas las credenciales almacenadas en el llavero seguro a nivel de SO (Keychain en macOS, Administrador de credenciales en Windows, Secret Service en Linux)
Archivo
.envexcluido del control de versiones mediante.gitignoreOAuth utiliza el flujo de código de autorización estándar (sin concesión implícita)
Los tokens nunca se registran ni se exponen en mensajes de error
El servidor de devolución de llamada local solo escucha en
localhosty solo durante el flujo OAuth
Licencia
Por determinar
Contribución
Este proyecto está en desarrollo inicial. Las pautas de contribución se agregarán una vez que la implementación central sea estable.
This 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.
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/Chawengwit/MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server