Skip to main content
Glama

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 Server

Related 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
└── .gitignore

Có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 install

Cómo ejecutar

# Modo normal
npm start

# Modo desenvolvimento (reinicia ao salvar arquivos — Node 18+)
npm run dev

El servidor se iniciará en el puerto 3000 por defecto.

Para usar otro puerto:

PORT=8080 npm start

Cómo verificar que está funcionando

Accede desde el navegador o vía curl:

curl http://localhost:3000/health

Respuesta 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/tools

Respuesta:

{
  "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/json

Formato 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 tarefa

Posibles 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_files y create_file

  • Rate limiting

  • Sanitización más robusta de inputs

  • HTTPS


Proyecto desarrollado para fines académicos y de demostración.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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