Gestion MCP Server

Gestion MCP Server

MCP server that exposes the GestionIntegrantes REST API as tools, enabling authentication, management of personas, and user queries via natural language.

Category
访问服务器

README

HumanResourcesManagement-MCP — Servidor MCP para Gestión de Recursos Humanos

Servidor MCP (Model Context Protocol) que actúa como puente entre un LLM (Claude Desktop, ChatGPT, etc.) y el backend Spring Boot HumanResourcesManagement-Backend. Expone todas las operaciones del backend como tools MCP que el LLM puede invocar directamente.

LLM (Claude / ChatGPT)
    ↕  MCP Protocol (stdio o HTTP)
MCP Server (Node.js + TypeScript)
    ↕  HTTP REST (JWT)
Spring Boot Backend

Arquitectura

El proyecto sigue arquitectura hexagonal (puertos y adaptadores) en 3 capas, reflejando la misma filosofía del backend:

Capa Responsabilidad
Domain Modelos puros (Persona, Usuario, Sesion), excepciones, interfaz del puerto de salida BackendApiPort
Application Casos de uso (*UseCase), DTOs, mappers, interfaces de puertos de entrada *ToolsPort
Infrastructure Adaptador de entrada MCP (McpServerAdapter), adaptador de salida HTTP (HttpClientAdapter), configuración

Stack: Node.js 22, TypeScript 5, Express 4, @modelcontextprotocol/sdk 1.x, Zod 3

Estructura del proyecto

HumanResourcesManagement-MCP/
├── src/
│   ├── index.ts                              # Punto de entrada
│   ├── domain/
│   │   ├── model/                            # Sesion, Persona, Usuario
│   │   ├── exception/                        # AuthException, BackendException, ValidationException
│   │   └── port/output/
│   │       └── backend-api.port.ts           # Contrato del backend
│   ├── application/
│   │   ├── dto/                              # DTOs de aplicación
│   │   ├── mapper/                           # Mappers DTO ↔ Modelo dominio
│   │   ├── port/input/                       # Interfaces de casos de uso
│   │   └── usecase/                          # Implementación de casos de uso
│   └── infrastructure/
│       ├── config/
│       │   └── app.config.ts                 # Carga de variables de entorno
│       ├── input/mcp/
│       │   ├── mcp-server.adapter.ts         # Servidor MCP (stdio + HTTP)
│       │   └── tools/                        # Definición de tools MCP
│       └── output/http/
│           └── http-client.adapter.ts        # Cliente HTTP al backend
├── Dockerfile                                # Build multi-stage para producción
├── Dockerfile.dev                            # Imagen de desarrollo
├── docker-compose.yml                        # Orquestación de producción
├── docker-compose.dev.yml                    # Orquestación de desarrollo
├── .env.example                              # Plantilla de variables
├── .env.dev / .env.prod                      # Variables por entorno (NO versionar)
└── package.json / tsconfig.json

Tools MCP disponibles

El servidor expone 11 tools que mapean 1:1 con los endpoints REST del backend:

Tool Método Endpoint Backend Roles
auth_login POST /api/auth/login Público
auth_register POST /api/auth/register Público
auth_me GET /api/auth/me Autenticado
persona_crear POST /api/personas ADMIN, MANAGER
persona_obtener GET /api/personas/{id} ADMIN, MANAGER, USER
persona_listar GET /api/personas?search&page&size&sortBy&direction ADMIN, MANAGER, USER
persona_actualizar PUT /api/personas/{id} ADMIN, MANAGER
persona_eliminar DELETE /api/personas/{id} ADMIN
usuario_crear POST /api/usuarios ADMIN
usuario_listar GET /api/usuarios?search&rol&page&size&sortBy&direction ADMIN, MANAGER
usuario_obtener_por_email GET /api/usuarios/email/{email} ADMIN, MANAGER

Flujo de autenticación

El MCP gestiona la sesión automáticamente:

  1. El LLM invoca auth_login con email y contraseña
  2. El MCP recibe el JWT y lo almacena internamente
  3. Las tools subsecuentes (persona_*, usuario_*, auth_me) usan ese token sin que el LLM tenga que pasarlo
  4. Si no hay sesión activa, las tools protegidas devuelven un error indicando que debe hacerse auth_login primero

Requisitos

  • Docker instalado
  • El backend HumanResourcesManagement-Backend corriendo (en la red gestion-network)
  • Para desarrollo: clon local del backend con el entorno de desarrollo levantado

Variables de entorno

Variable Descripción Default
BACKEND_API_URL URL base del backend Spring Boot http://gestion-backend:8080
MCP_TRANSPORT Modo de transporte: stdio (Claude Desktop) o http (remoto/testing) stdio
MCP_HTTP_PORT Puerto HTTP cuando MCP_TRANSPORT=http 3001

Copia .env.example a .env.dev o .env.prod y ajusta los valores según tu entorno.

Ejecución

Desarrollo

Levanta el contenedor de desarrollo con bind mount del código fuente:

cd HumanResourcesManagement-MCP
docker-compose --env-file .env.dev -f docker-compose.dev.yml up -d

El servidor se reinicia automáticamente al modificar archivos en src/. Los logs se ven con:

docker logs -f human-resources-mcp-dev

Para ejecutar typecheck o lint dentro del contenedor:

docker exec -it human-resources-mcp-dev sh

# Dentro del contenedor:
npm run typecheck
npm run build

Producción

Compila la imagen y levanta el servicio:

cd HumanResourcesManagement-MCP
docker-compose --env-file .env.prod up -d --build

La imagen de producción es multi-stage: compila TypeScript en una etapa y copia solo dist/ + dependencias de producción a una imagen node:22-alpine mínima. No incluye herramientas de desarrollo ni código fuente.

Para forzar recompilación sin caché:

docker-compose --env-file .env.prod build --no-cache
docker-compose --env-file .env.prod up -d

Validación desde la PC anfitriona

Una vez el contenedor está corriendo con MCP_TRANSPORT=http:

# Health check
curl http://localhost:3001/health
# {"status":"ok","transport":"http","sesionActiva":false}
# Inicializar sesión MCP
$init = @{jsonrpc="2.0"; id=1; method="initialize"; params=@{
  protocolVersion="2024-11-05"; capabilities=@{};
  clientInfo=@{name="test";version="1.0"}
}} | ConvertTo-Json -Depth 5 -Compress

$resp = Invoke-WebRequest -Uri http://localhost:3001/mcp `
  -Method Post -Body $init -ContentType "application/json" `
  -Headers @{"Accept"="application/json, text/event-stream"} -UseBasicParsing

$sessionId = $resp.Headers["Mcp-Session-Id"]

# Listar tools
$list = @{jsonrpc="2.0"; id=2; method="tools/list"; params=@{}} | ConvertTo-Json -Depth 5 -Compress

Invoke-WebRequest -Uri http://localhost:3001/mcp `
  -Method Post -Body $list -ContentType "application/json" `
  -Headers @{"Accept"="application/json, text/event-stream"; "Mcp-Session-Id"=$sessionId} -UseBasicParsing

# Llamar una tool (auth_login)
$call = @{jsonrpc="2.0"; id=3; method="tools/call"; params=@{
  name="auth_login"; arguments=@{email="admin@example.com"; password="SecurePass1!"}
}} | ConvertTo-Json -Depth 5 -Compress

Invoke-WebRequest -Uri http://localhost:3001/mcp `
  -Method Post -Body $call -ContentType "application/json" `
  -Headers @{"Accept"="application/json, text/event-stream"; "Mcp-Session-Id"=$sessionId} -UseBasicParsing

Integración con Claude Desktop

En claude_desktop_config.json:

{
  "mcpServers": {
    "human-resources": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "--network", "host",
        "-e", "BACKEND_API_URL=http://localhost:8080",
        "-e", "MCP_TRANSPORT=stdio",
        "human-resources-mcp:prod"
      ]
    }
  }
}

El transporte stdio permite que Claude Desktop se comunique directamente con el MCP sin exponer un puerto HTTP.

Nota: Compila la imagen de producción con docker-compose --env-file .env.prod build antes de usarla con Claude Desktop. Si el backend corre en otro host, ajusta BACKEND_API_URL.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选