Servidor MCP (Model Context Protocol) con arquitectura modular que permite conectarse a APIs externas.
src/
├── config/ # Configuración
│ ├── api.ts # Configuración de API
│ └── env.ts # Variables de entorno
├── services/ # Servicios de negocio
│ ├── httpClient.ts # Cliente HTTP base
│ ├── userService.ts # Servicio de usuarios
│ ├── weatherService.ts # Servicio de clima
│ └── companyService.ts # Servicio de empresas
├── tools/ # Herramientas MCP
│ ├── weatherTool.ts # Herramienta de clima
│ ├── userCreateTool.ts # Crear usuarios
│ ├── userListTool.ts # Listar usuarios
│ ├── companyCreateTool.ts # Crear empresas
│ └── companyListTool.ts # Listar empresas
├── types/ # Tipos TypeScript
│ ├── api.ts # Tipos base de API
│ └── company.ts # Tipos de empresas
└── main.ts # Punto de entrada
- ✅ Arquitectura modular y escalable
- ✅ Cliente HTTP reutilizable
- ✅ Validación con Zod
- ✅ Tipos TypeScript completos
- ✅ Manejo de errores robusto
- ✅ Configuración por variables de entorno
obtener-clima
: Obtiene información del clima
crear-usuario
: Crea un nuevo usuariolistar-usuarios
: Lista todos los usuarios
crear-empresa
: Crea una nueva empresa vía API- Tamaños permitidos:
small
,medium
,large
- Tamaños permitidos:
listar-empresas
: Lista empresas desde la API
# Construir el proyecto
npm run build
# Ejecutar en modo desarrollo
npm run dev
# Ejecutar el servidor
npm start
# Abrir inspector MCP
npm run inspector
API_BASE_URL=https://api.ejemplo.com # URL base de la API
API_TIMEOUT=30000 # Timeout en milisegundos
NODE_ENV=development # Entorno de ejecución
- Ejecutar el inspector:
npm run inspector
- El servidor se iniciará en modo debug
- Se abrirá automáticamente el navegador con la interfaz
Para agregar un nuevo servicio (ej: productos):
- Crear tipos en
src/types/product.ts
- Crear servicio en
src/services/productService.ts
- Crear herramientas en
src/tools/productCreateTool.ts
, etc. - Registrar herramientas en
src/main.ts
- Actualizar configuración si es necesario
El servidor está configurado para trabajar con APIs que sigan este formato:
{
"data": [...],
"links": {
"first": "string",
"last": "string",
"prev": "string",
"next": "string"
},
"meta": {
"current_page": 0,
"from": 0,
"last_page": 0,
"per_page": 0,
"to": 0,
"total": 0
}
}
{
"field1": "value1",
"field2": "value2"
}