Sistema de gestión centralizada para publicar, versionar y administrar MCP Servers desplegados en Cloudflare Workers.
Este proyecto es un monorepo construido con Turborepo que incluye:
mcp-manager: Backend principal con Hono + Durable Objects para gestionar MCPsmcp-dashboard: Frontend Next.js para administración visualmcp-worker-template: Template para generar Workers MCP
mcp-control-plane/
├── apps/
│ ├── mcp-manager/ # Backend principal
│ ├── mcp-dashboard/ # Frontend (Next.js)
│ └── mcp-worker-template/ # Template para Workers MCP
├── scripts/
│ ├── deploy.ts # Script de deploy
│ └── seed-db.ts # Script para inicializar DB
└── turbo.json # Configuración Turborepo
- Node.js 18+
- npm 10+
- Cuenta de Cloudflare con Workers habilitado
- Wrangler CLI instalado globalmente:
npm install -g wrangler
# Instalar dependencias
npm install
# Configurar variables de entorno
cd apps/mcp-manager
wrangler secret put CF_API_TOKEN
wrangler secret put CF_ACCOUNT_ID-
Crear base de datos D1:
wrangler d1 create mcp-registry
-
Crear bucket R2:
wrangler r2 bucket create mcp-bundles
-
Crear KV namespace (opcional):
wrangler kv:namespace create CACHE
-
Actualizar
wrangler.jsonccon los IDs generados (enapps/mcp-manager/wrangler.jsonc) -
Ejecutar migraciones:
npm run seed
# Ejecutar todos los servicios en modo desarrollo
npm run dev
# Ejecutar solo el backend
cd apps/mcp-manager && npm run dev
# Ejecutar solo el frontend
cd apps/mcp-dashboard && npm run dev# Deploy del backend
npm run deploy
# O manualmente
cd apps/mcp-manager && wrangler deployGET /api/mcp- Listar MCPs (con paginación)POST /api/mcp- Crear nuevo MCPGET /api/mcp/:id- Obtener MCP por IDPATCH /api/mcp/:id- Actualizar MCPDELETE /api/mcp/:id- Eliminar MCP (soft delete)
GET /api/versions/:mcpId- Listar versiones de un MCPPOST /api/versions/:mcpId- Crear nueva versiónPOST /api/versions/:mcpId/versions/:version/publish- Publicar versión
GET /api/deployments- Listar deploymentsGET /api/deployments/:id- Obtener deployment por IDGET /api/deployments/:id/stream- SSE stream de progreso
El proyecto usa Cloudflare D1 (SQLite) con el siguiente schema:
mcp_servers: Registro de MCPsmcp_versions: Versiones de cada MCPdeployments: Historial de deploymentsmcp_auth_configs: Configuración de autenticación
Ver apps/mcp-manager/migrations/0001_initial.sql para el schema completo.
- API Keys se hashean con SHA-256 antes de almacenar
- OAuth tokens se validan antes de usar
- CORS configurado estrictamente
- Secrets nunca se exponen en logs
# Ejecutar tests del backend
cd apps/mcp-manager && npm test
# Ejecutar tests con coverage
cd apps/mcp-manager && npm test -- --coverage- ✅ API REST completa con Hono
- ✅ Durable Objects con WebSocket streaming
- ✅ Dashboard Next.js con componentes UI
- ✅ Sistema de versionado completo
- ✅ Rollback automático
- ✅ Tests unitarios con Vitest
- ✅ Manejo de errores con Effect-TS
- ✅ Configuración moderna con
wrangler.jsonc
MIT