mcp-server
Servidor MCP — Servidor de Herramientas para IA
Proyecto educativo que demuestra cómo una IA puede conectarse a un servidor para ejecutar acciones reales en un sistema operativo.
¿Qué es este proyecto?
Este proyecto simula un MCP Server (Model Context Protocol Server) — un servidor HTTP que expone herramientas (tools) que una Inteligencia Artificial puede llamar remotamente.
La idea central es sencilla: la IA no ejecuta comandos en el sistema operativo directamente. En su lugar, envía una petición HTTP a este servidor solicitando que se ejecute una herramienta. El servidor recibe, ejecuta y devuelve el resultado.
IA → POST /tool { "tool": "get_ip" } → MCP Server → Sistema Operacional
IA ← { "success": true, "result": { "ips": [...] } } ← MCP ServerRelated MCP server: Shell Server
Objetivo del proyecto
Demostrar la arquitectura cliente-servidor aplicada a la IA
Mostrar cómo las herramientas pueden ser registradas y seleccionadas dinámicamente
Servir como base de aprendizaje para proyectos más grandes
Ser fácil de entender, modificar y presentar
Stack utilizada
Tecnología | Uso |
Node.js | Runtime JavaScript |
Express.js | Framework HTTP |
fs, os, path | Módulos nativos de Node |
child_process | Ejecución de comandos del sistema |
Estructura de carpetas
mcp-server/
│
├── src/
│ ├── server.js ← Ponto de entrada — inicia o servidor
│ ├── routes/
│ │ └── tools.routes.js ← Define as rotas HTTP
│ ├── controllers/
│ │ └── tools.controller.js ← Valida o input e chama o serviço
│ ├── services/
│ │ └── tools.service.js ← Registry de tools + lógica de seleção
│ ├── tools/
│ │ ├── getIp.js ← Tool: retorna o IP da máquina
│ │ ├── getHostname.js ← Tool: retorna o hostname
│ │ ├── listFiles.js ← Tool: lista arquivos de um diretório
│ │ ├── createFile.js ← Tool: cria um arquivo
│ │ └── pingHost.js ← Tool: faz ping em um host
│ └── utils/
│ └── response.js ← Padroniza respostas JSON
│
├── docs/
│ ├── README.md ← Este arquivo
│ └── AI_CONTEXT.md ← Contexto arquitetural para IAs
│
├── package.json
└── .gitignoreCómo instalar
Requisito previo: Node.js instalado (versión 18 o superior recomendada).
# Clone ou copie o projeto para sua máquina
cd mcp-server
# Instale as dependências
npm installCómo ejecutar
# Modo normal
npm start
# Modo desenvolvimento (reinicia ao salvar arquivos — Node 18+)
npm run devEl servidor se iniciará en el puerto 3000 por defecto.
Para usar otro puerto:
PORT=8080 npm startCómo verificar que está funcionando
Accede desde el navegador o vía curl:
curl http://localhost:3000/healthRespuesta esperada:
{ "status": "ok", "message": "MCP Server rodando" }Cómo usar — API
Existen dos endpoints principales: uno para listar herramientas y otro para ejecutarlas.
Listar herramientas disponibles
Devuelve todas las herramientas registradas en el servidor con sus esquemas completos (descripción y parámetros). Este formato facilita la integración con IAs (Tool Calling).
GET http://localhost:3000/toolsRespuesta:
{
"success": true,
"result": [
{
"name": "create_file",
"description": "Cria um arquivo dentro da pasta /files.",
"parameters": {
"type": "object",
"properties": {
"filename": { "type": "string", "description": "..." },
"content": { "type": "string", "description": "..." }
},
"required": ["filename"]
}
}
]
}Ejecutar una herramienta
POST http://localhost:3000/tool
Content-Type: application/jsonFormato de la petición
{
"tool": "nome_da_tool",
"args": {
"parametro": "valor"
}
}Tools disponibles
get_ip
Devuelve las IPs locales de la máquina.
Request:
{ "tool": "get_ip", "args": {} }get_hostname
Devuelve el nombre de host, plataforma y arquitectura de la máquina.
Request:
{ "tool": "get_hostname", "args": {} }list_files
Lista archivos y directorios de una ruta. Si path se omite, utiliza el directorio actual del proceso.
Request:
{ "tool": "list_files", "args": { "path": "/home/user" } }create_file
Crea un archivo dentro de la carpeta /files en la raíz del servidor. Esta carpeta funciona como un sandbox para organizar los archivos generados.
Request:
{
"tool": "create_file",
"args": {
"filename": "teste.txt",
"content": "Olá, MCP!"
}
}ping_host
Hace ping a un host o IP y devuelve el resultado. Seguridad: Solo se permiten caracteres alfanuméricos, puntos y guiones en el host para evitar la inyección de comandos.
Request:
{ "tool": "ping_host", "args": { "host": "8.8.8.8" } }Probando con curl
# get_ip
curl -X POST http://localhost:3000/tool \
-H "Content-Type: application/json" \
-d '{"tool": "get_ip", "args": {}}'
# list_files
curl -X POST http://localhost:3000/tool \
-H "Content-Type: application/json" \
-d '{"tool": "list_files", "args": {"path": "/tmp"}}'
# create_file
curl -X POST http://localhost:3000/tool \
-H "Content-Type: application/json" \
-d '{"tool": "create_file", "args": {"filename": "ola.txt", "content": "Olá mundo!"}}'
# ping_host
curl -X POST http://localhost:3000/tool \
-H "Content-Type: application/json" \
-d '{"tool": "ping_host", "args": {"host": "8.8.8.8"}}'Flujo completo — IA → MCP → Sistema
1. IA decide que precisa saber o IP da máquina
2. IA envia: POST /tool { "tool": "get_ip", "args": {} }
3. Express recebe a requisição
4. Route encaminha para o Controller
5. Controller valida o body e chama o Service
6. Service consulta o Registry e encontra a função getIp
7. getIp() usa o módulo "os" para ler as interfaces de rede
8. Resultado sobe de volta: getIp → Service → Controller → Response
9. IA recebe: { "success": true, "result": { "ips": [...] } }
10. IA usa o resultado para continuar sua tarefaPosibles mejoras futuras
Añadir autenticación vía API Key
Implementar registro de llamadas (quién llamó a qué herramienta y cuándo)
Añadir soporte a WebSocket para resultados en streaming
Integrar con modelos de IA locales (Ollama, LM Studio)
Añadir nuevas herramientas: lectura de CPU/memoria, ejecución de scripts, etc.
Crear un cliente de ejemplo que simule una IA llamando a las herramientas
Observaciones de seguridad
Este proyecto es educativo. Para su uso en producción, sería necesario:
Autenticación en las rutas
Whitelist de rutas para
list_filesycreate_fileRate limiting
Sanitización más robusta de inputs
HTTPS
Proyecto desarrollado para fines académicos y de demostración.
This server cannot be deployed
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
An MCP server that gives your AI access to the source code and docs of all public github repos
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
MCP server exposing the Backtest360 engine API as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA modular MCP server providing file operations, web search, URL scraping, and sandboxed command execution for LLM interactions.1MIT
- FlicenseAqualityDmaintenanceA simple MCP server that exposes a terminal tool, allowing AI agents to execute shell commands.1-
- AlicenseNot gradedqualityCmaintenanceA self-hosted MCP server that gives AI agents controlled access to a machine: filesystem, shell, background processes, git, web fetching and persistent key-value memory.GPL 3.0
- FlicenseBqualityCmaintenanceA lightweight MCP server that enables AI assistants to interact with the local machine through terminal, filesystem, and Python execution tools.91-