Skip to main content
Glama

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.

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Gagocode/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server