MCP Server for academic purposes ;)

MCP Server — Servidor de Ferramentas para IA

Projeto educacional que demonstra como uma IA pode se conectar a um servidor para executar ações reais em um sistema operacional.

O que é este projeto?

Este projeto simula um MCP Server (Model Context Protocol Server) — um servidor HTTP que expõe ferramentas (tools) que uma Inteligência Artificial pode chamar remotamente.

A ideia central é simples: a IA não executa comandos no sistema operacional diretamente. Em vez disso, ela envia uma requisição HTTP para este servidor pedindo que uma tool seja executada. O servidor recebe, executa e devolve o resultado.

IA  →  POST /tool { "tool": "get_ip" }  →  MCP Server  →  Sistema Operacional
IA  ←  { "success": true, "result": { "ips": [...] } }  ←  MCP Server

Objetivo do projeto

  • Demonstrar arquitetura cliente-servidor aplicada à IA
  • Mostrar como ferramentas podem ser registradas e selecionadas dinamicamente
  • Servir como base de aprendizado para projetos maiores
  • Ser fácil de entender, modificar e apresentar

Stack utilizada

Tecnologia Uso
Node.js Runtime JavaScript
Express.js Framework HTTP
fs, os, path Módulos nativos do Node
child_process Execução de comandos do sistema

Estrutura de pastas

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

Como instalar

Pré-requisito: Node.js instalado (versão 18 ou superior recomendada).

# Clone ou copie o projeto para sua máquina
cd mcp-server

# Instale as dependências
npm install

Como executar

# Modo normal
npm start

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

O servidor irá iniciar na porta 3000 por padrão.

Para usar outra porta:

PORT=8080 npm start

Como verificar que está funcionando

Acesse no navegador ou via curl:

curl http://localhost:3000/health

Resposta esperada:

{ "status": "ok", "message": "MCP Server rodando" }

Como usar — API

Existem dois endpoints principais: um para listar ferramentas e outro para executá-las.

Listar ferramentas disponíveis

Retorna todas as ferramentas registradas no servidor com seus schemas completos (descrição e parâmetros). Este formato facilita a integração com IAs (Tool Calling).

GET http://localhost:3000/tools

Resposta:

{
  "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"]
      }
    }
  ]
}

Executar uma ferramenta

POST http://localhost:3000/tool
Content-Type: application/json
Formato da requisição
{
  "tool": "nome_da_tool",
  "args": {
    "parametro": "valor"
  }
}

Tools disponíveis

get_ip

Retorna os IPs locais da máquina.

Request:

{ "tool": "get_ip", "args": {} }

get_hostname

Retorna o hostname, plataforma e arquitetura da máquina.

Request:

{ "tool": "get_hostname", "args": {} }

list_files

Lista arquivos e diretórios de um caminho. Se path for omitido, usa o diretório atual do processo.

Request:

{ "tool": "list_files", "args": { "path": "/home/user" } }

create_file

Cria um arquivo dentro da pasta /files na raiz do servidor. Essa pasta funciona como um sandbox para organizar os arquivos gerados.

Request:

{
  "tool": "create_file",
  "args": {
    "filename": "teste.txt",
    "content": "Olá, MCP!"
  }
}

ping_host

Faz ping em um host ou IP e retorna o resultado.Segurança: Apenas caracteres alfanuméricos, pontos e hifens são permitidos no host para evitar injeção de comandos.

Request:

{ "tool": "ping_host", "args": { "host": "8.8.8.8" } }

Testando com 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"}}'

Fluxo 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

Possíveis melhorias futuras

  • Adicionar autenticação via API Key
  • Implementar log de chamadas (quem chamou qual tool e quando)
  • Adicionar suporte a WebSocket para resultados em streaming
  • Integrar com modelos de IA locais (Ollama, LM Studio)
  • Adicionar novas tools: leitura de CPU/memória, execução de scripts, etc.
  • Criar um cliente de exemplo que simula uma IA chamando as tools

Observações de segurança

Este projeto é educacional. Para uso em produção, seria necessário:

  • Autenticação nas rotas
  • Whitelist de caminhos para list_files e create_file
  • Rate limiting
  • Sanitização mais robusta de inputs
  • HTTPS

Projeto desenvolvido para fins acadêmicos e de demonstração.

MCP Server · Populars

MCP Server · New

    mcpware

    Cross-Code Organizer (CCO)

    Cross-Code Organizer (formerly Claude Code Organizer): cross-harness config dashboard for Claude Code, Codex CLI, MCP servers, skills, memories, agents, sessions, security scanning, context budget, and backups.

    Community mcpware
    dcostenco

    🧠 Prism MCP — The Mind Palace for AI Agents

    The Mind Palace for AI Agents - HIPAA-hardened Cognitive Architecture with on-device LLM (prism-coder:7b), Hebbian learning, ACT-R spreading activation, adversarial evaluation, persistent memory, multi-agent Hivemind and visual dashboard. Zero API keys required.

    Community dcostenco
    Mcp-Brasil

    mcp-brasil

    MCP Server para 70 APIs públicas brasileiras

    Community Mcp-Brasil
    kridaydave

    File Organizer MCP Server

    This MCP server will organize your files using connections to MCP using clients like Claude, Cursor and Gemini Cli

    Community kridaydave
    higress-group

    AI Gateway

    🤖 AI Gateway | AI Native API Gateway

    Community higress-group