yailPeralta/mcp-sever
If you are the rightful owner of mcp-sever and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The MCP Server is a backend application built with NestJS, designed to facilitate interaction with external systems like MongoDB and Trello through the Model Context Protocol (MCP).
MCP Server
Descripción
El MCP Server es un servidor implementado con NestJS que actúa como un servidor MCP (Model Context Protocol). Proporciona recursos y herramientas para interactuar con sistemas externos como MongoDB y Trello, permitiendo a los clientes MCP acceder a datos de problemas conocidos y gestionar tickets en Trello.
Arquitectura
Tecnologías Principales
- NestJS: Framework de Node.js para aplicaciones backend escalables
- MongoDB: Base de datos NoSQL para almacenar problemas conocidos y soluciones
- Mongoose: ODM para MongoDB
- Trello API: Integración con Trello para gestión de tickets
- @rekog/mcp-nest: Librería para implementar el protocolo MCP en NestJS
Estructura del Proyecto
mcp_server/
├── src/
│ ├── app.module.ts # Módulo principal de la aplicación
│ ├── main.ts # Punto de entrada de la aplicación
│ ├── database/ # Configuración de base de datos
│ │ ├── mongodb/ # Módulo MongoDB
│ │ ├── schemas/ # Esquemas de Mongoose
│ │ └── seed.ts # Script para poblar la base de datos
│ ├── resources/ # Recursos MCP
│ │ ├── known_problems.resource.ts # Recurso de problemas conocidos
│ │ └── trello.resource.ts # Recurso de listas de Trello
│ ├── tools/ # Herramientas MCP
│ │ └── trello.tool.ts # Herramientas para gestión de Trello
│ └── common/config/ # Configuración de la aplicación
Componentes Principales
1. Recursos MCP
Los recursos proporcionan acceso de solo lectura a datos externos:
- Known Problems Resource (
mcp://known-problems): Lista de problemas conocidos que han sido resueltos o cerrados, junto con sus soluciones implementadas o evaluadas. - Trello Lists Resource (
mcp://trello/lists): Lista de listas disponibles en el tablero de Trello configurado. - Trello List Cards Resource (
mcp://trello/list/{listId}/cards): Lista de tarjetas en una lista específica de Trello.
2. Herramientas MCP
Las herramientas permiten realizar acciones en sistemas externos:
- Trello Create Ticket Tool: Crea un nuevo ticket en una lista específica de Trello.
- Trello Move Ticket Tool: Mueve un ticket existente a una lista diferente en Trello.
3. Base de Datos
- Problemas: Almacena información sobre problemas conocidos con campos como título, descripción, criticidad, frecuencia, etc.
- Soluciones: Almacena soluciones asociadas a problemas, incluyendo acciones a realizar y nivel de satisfacción.
Configuración
Variables de Entorno Requeridas
PORT=3000
TRELLO_API_KEY=your_trello_api_key
TRELLO_TOKEN=your_trello_token
TRELLO_BOARD_ID=your_trello_board_id
MONGO_USER=your_mongo_user
MONGO_PASSWORD=your_mongo_password
MONGO_HOST=your_mongo_host
MONGO_PORT=27017
MONGO_COLLECTION=your_database_name
MONGO_CONNECTION=mongodb
MONGO_TLS_VALIDATE=0
MONGO_TLS_CERTIFICATE_KEY_FILE=path_to_cert
Configuración de Trello
Para usar las funcionalidades de Trello, necesitas:
- Una cuenta de Trello
- Una API Key y Token de Trello
- Un tablero de Trello con listas configuradas
Configuración de MongoDB
El servidor soporta conexiones MongoDB con o sin TLS. La configuración incluye:
- Conexión directa o a través de cluster
- Autenticación con usuario y contraseña
- Configuración de TLS opcional
Instalación y Ejecución
Prerrequisitos
- Node.js (versión 18 o superior)
- MongoDB (local o remoto)
- Cuenta de Trello con API access
Instalación
cd mcp_server
pnpm install
Configuración
- Copia el archivo
.env.examplea.env - Completa todas las variables de entorno requeridas
Poblar Base de Datos
pnpm run seed
Ejecución
# Desarrollo
pnpm run start:dev
# Producción
pnpm run start:prod
API Endpoints
El servidor expone endpoints MCP en /mcp-server/*. Los clientes MCP pueden conectarse usando el protocolo MCP para acceder a recursos y herramientas.
Recursos Disponibles
GET /mcp-server/mcp- Lista de recursos y herramientas disponiblesGET /mcp-server/resources/{uri}- Acceso a recursos específicosPOST /mcp-server/tools/{toolName}- Ejecución de herramientas
Uso con Clientes MCP
Conexión Básica
Los clientes MCP pueden conectarse al servidor usando el transporte HTTP Streamable:
import { Client } from '@modelcontextprotocol/sdk/client';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp';
const transport = new StreamableHTTPClientTransport(new URL('http://localhost:3000/mcp-server'));
const client = new Client({
name: 'example-client',
version: '1.0.0'
}, {
capabilities: {}
});
await client.connect(transport);
Acceso a Recursos
// Obtener problemas conocidos
const problems = await client.readResource({
uri: 'mcp://known-problems'
});
// Obtener listas de Trello
const lists = await client.readResource({
uri: 'mcp://trello/lists'
});
Uso de Herramientas
// Crear un ticket en Trello
const result = await client.callTool({
name: 'trello-create-ticket-tool',
arguments: {
listId: 'list_id_here',
name: 'Ticket Title',
description: 'Ticket Description'
}
});
Desarrollo
Scripts Disponibles
pnpm run build # Compilar el proyecto
pnpm run format # Formatear código con Prettier
pnpm run lint # Ejecutar ESLint
pnpm run test # Ejecutar tests unitarios
pnpm run test:e2e # Ejecutar tests end-to-end
pnpm run test:cov # Ejecutar tests con cobertura
Estructura de Datos
Esquema de Problema
interface IProblem {
id: string;
titulo: string;
descripcion: string;
contexto: string;
rolesAfectados: string[];
criticidad: 'Baja' | 'Media' | 'Alta' | 'Crítica';
frecuencia: 'Rara' | 'Ocasional' | 'Frecuente' | 'Constante';
categoria: string;
tags: string[];
estado: 'Abierto' | 'En Progreso' | 'Resuelto' | 'Cerrado';
prioridad: 'Baja' | 'Media' | 'Alta';
}
Esquema de Solución
interface ISolution {
id: string;
problemId: string;
descripcion: string;
nivelSatisfaccion: number; // 1-5
acciones: Array<{
type: string;
descripcion: string;
completada: boolean;
}>;
estado: 'Pendiente' | 'En Progreso' | 'Implementada' | 'Evaluada';
}
Contribución
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Licencia
Este proyecto está bajo la Licencia MIT.