Skip to main content
Glama

MCP-Server — Tool-Server für KI

Ein pädagogisches Projekt, das demonstriert, wie eine KI eine Verbindung zu einem Server herstellen kann, um echte Aktionen auf einem Betriebssystem auszuführen.


Was ist dieses Projekt?

Dieses Projekt simuliert einen MCP-Server (Model Context Protocol Server) — einen HTTP-Server, der Werkzeuge (Tools) bereitstellt, die eine Künstliche Intelligenz remote aufrufen kann.

Die Grundidee ist einfach: Die KI führt keine Befehle direkt auf dem Betriebssystem aus. Stattdessen sendet sie eine HTTP-Anfrage an diesen Server mit der Bitte, ein Tool auszuführen. Der Server empfängt die Anfrage, führt sie aus und gibt das Ergebnis zurück.

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

Related MCP server: Shell Server

Ziel des Projekts

  • Demonstration der Client-Server-Architektur in der KI

  • Aufzeigen, wie Werkzeuge dynamisch registriert und ausgewählt werden können

  • Als Lernbasis für größere Projekte dienen

  • Einfach zu verstehen, zu modifizieren und zu präsentieren sein


Verwendeter Stack

Technologie

Verwendung

Node.js

JavaScript-Laufzeitumgebung

Express.js

HTTP-Framework

fs, os, path

Native Node-Module

child_process

Ausführung von Systembefehlen


Ordnerstruktur

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

Installation

Voraussetzung: Node.js installiert (Version 18 oder höher empfohlen).

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

# Instale as dependências
npm install

Ausführung

# Modo normal
npm start

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

Der Server startet standardmäßig auf Port 3000.

Um einen anderen Port zu verwenden:

PORT=8080 npm start

Überprüfung der Funktionsfähigkeit

Zugriff über den Browser oder via curl:

curl http://localhost:3000/health

Erwartete Antwort:

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

Verwendung — API

Es gibt zwei Haupt-Endpunkte: einen zum Auflisten der Werkzeuge und einen zum Ausführen dieser.

Verfügbare Werkzeuge auflisten

Gibt alle auf dem Server registrierten Werkzeuge mit ihren vollständigen Schemas (Beschreibung und Parameter) zurück. Dieses Format erleichtert die Integration mit KIs (Tool Calling).

GET http://localhost:3000/tools

Antwort:

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

Ein Werkzeug ausführen

POST http://localhost:3000/tool
Content-Type: application/json

Anforderungsformat

{
  "tool": "nome_da_tool",
  "args": {
    "parametro": "valor"
  }
}

Verfügbare Tools

get_ip

Gibt die lokalen IPs der Maschine zurück.

Anfrage:

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

get_hostname

Gibt den Hostnamen, die Plattform und die Architektur der Maschine zurück.

Anfrage:

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

list_files

Listet Dateien und Verzeichnisse eines Pfades auf. Wenn path weggelassen wird, wird das aktuelle Verzeichnis des Prozesses verwendet.

Anfrage:

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

create_file

Erstellt eine Datei innerhalb des Ordners /files im Stammverzeichnis des Servers. Dieser Ordner fungiert als Sandbox zur Organisation der generierten Dateien.

Anfrage:

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

ping_host

Pingt einen Host oder eine IP an und gibt das Ergebnis zurück. Sicherheit: Nur alphanumerische Zeichen, Punkte und Bindestriche sind im Host erlaubt, um Befehlsinjektionen zu vermeiden.

Anfrage:

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

Testen mit 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"}}'

Vollständiger Ablauf — KI → MCP → System

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

Mögliche zukünftige Verbesserungen

  • Hinzufügen einer Authentifizierung via API-Key

  • Implementierung eines Aufrufprotokolls (wer hat welches Tool wann aufgerufen)

  • Hinzufügen von WebSocket-Unterstützung für Streaming-Ergebnisse

  • Integration mit lokalen KI-Modellen (Ollama, LM Studio)

  • Hinzufügen neuer Tools: CPU/Speicher-Auslastung, Skriptausführung usw.

  • Erstellen eines Beispiel-Clients, der eine KI simuliert, die die Tools aufruft


Sicherheitshinweise

Dieses Projekt ist pädagogisch. Für den produktiven Einsatz wäre Folgendes erforderlich:

  • Authentifizierung für die Routen

  • Whitelist von Pfaden für list_files und create_file

  • Rate Limiting

  • Robustere Eingabesäuberung (Sanitization)

  • HTTPS


Projekt entwickelt für akademische Zwecke und Demonstrationen.

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