Skip to main content
Glama

MCP Tool Hub

Ein modularer, erweiterbarer Model Context Protocol-Multi-Server-Hub — entwickelt in TypeScript für IT-Automatisierungsteams.

Ermöglichen Sie Ihrem LLM den Zugriff auf reale Werkzeuge: Dateien, Git, Webinhalte und persistenten Speicher. Stellen Sie die Lösung über Ansible gleichzeitig auf einer beliebigen Anzahl von Client-Maschinen bereit.


Architektur

mcp-tool-hub/
├── packages/
│   ├── core/              ← Shared types + BaseMCPServer abstract class
│   ├── server-filesystem/ ← Sandboxed local file access (read/write/list/delete)
│   ├── server-git/        ← Git log, diff, file contents, branches, status
│   ├── server-fetch/      ← Web fetching: HTML, JSON APIs, URL health checks
│   └── server-memory/     ← Persistent JSON knowledge base (survives restarts)
├── host/                  ← Orchestrator: registry + CLI + stdio JSON interface
├── ansible/               ← Playbook, inventory, systemd service templates
└── docs/                  ← How to add new servers (with template)

Die Architektur folgt dem Model Context Protocol-Muster:

  • Jeder Server ist vollständig unabhängig — eigenes Paket, eigener Build

  • Die Registry im Host bildet zur Laufzeit toolName → server ab

  • Das CLI stellt eine stdio-JSON-Schnittstelle bereit — jede LLM-Integration sendet {"toolName":"...", "arguments":{...}} an stdin und liest das Ergebnis von stdout

  • Einen neuen Server hinzufügen = Paket erstellen, BaseMCPServer erweitern, in cli.ts registrieren


Related MCP server: mcp-toolbox

Schnellstart

1. Installieren & Bauen

git clone https://github.com/your-org/mcp-tool-hub.git
cd mcp-tool-hub
npm install
npm run build

2. Konfigurieren

cp .env.example .env
# Edit .env with your paths and settings

3. Ausführen

# Via npm
npm run start --workspace=host

# Or directly
node host/dist/cli.js

4. Ein Tool aufrufen

Senden Sie JSON an stdin, erhalten Sie JSON von stdout:

echo '{"toolName":"read_file","arguments":{"path":"hello.txt"}}' | node host/dist/cli.js

Verfügbare Tools

📁 Filesystem Server

Alle Operationen sind auf MCP_FS_ROOT beschränkt (Sandbox). Pfad-Traversal (../) ist blockiert.

Tool

Beschreibung

read_file

Dateiinhalt lesen (utf8 oder base64)

write_file

In eine Datei schreiben oder anhängen

list_directory

Verzeichnisinhalt auflisten (optional rekursiv)

delete_file

Eine Datei löschen

move_file

Eine Datei verschieben oder umbenennen

get_file_info

Größe, Datum und Typ eines Pfades abrufen

🔀 Git Server

Nur lesend. Keine Schreiboperationen.

Tool

Beschreibung

git_log

Commit-Historie für ein Repo oder eine Datei

git_show_file

Dateiinhalt bei einem bestimmten Commit/Branch

git_diff

Diff zwischen zwei Refs

git_status

Status des Arbeitsverzeichnisses

git_branches

Branches auflisten (lokal + optional remote)

git_show_commit

Vollständige Commit-Details und Diff

🌐 Fetch Server

Unterstützt eine optionale Domain-Whitelist über MCP_FETCH_ALLOWED_DOMAINS.

Tool

Beschreibung

fetch_url

HTML oder Text von einer URL abrufen

fetch_json

Eine JSON-API-Antwort abrufen und parsen

check_url

Prüfen, ob eine URL erreichbar ist (HEAD-Anfrage)

🧠 Memory Server

Persistent über Neustarts hinweg. Basiert auf einer JSON-Datei.

Tool

Beschreibung

memory_set

Wert mit Schlüssel, Namespace und Tags speichern

memory_get

Wert anhand des Schlüssels abrufen

memory_search

Volltextsuche über alle Einträge

memory_delete

Einen Eintrag löschen

memory_list_namespaces

Alle Namespaces mit Anzahl auflisten

memory_clear_namespace

Alle Einträge in einem Namespace löschen


Ansible-Bereitstellung

Bereitstellung auf allen Ihren Client-Maschinen gleichzeitig:

cd ansible

# First time
ansible-playbook -i inventory.yml deploy-mcp-hub.yml

# Update only (rebuild + restart)
ansible-playbook -i inventory.yml deploy-mcp-hub.yml --tags update

# Deploy to specific group
ansible-playbook -i inventory.yml deploy-mcp-hub.yml --limit servers

Das Playbook:

  1. Installiert Node.js 20 (falls nicht vorhanden)

  2. Erstellt einen dedizierten mcp-hub-Systembenutzer

  3. Kopiert und baut das Projekt

  4. Schreibt die .env-Konfiguration aus Ihren Ansible-Variablen

  5. Installiert und startet einen systemd-Dienst (automatischer Neustart bei Fehler)

Host-spezifische Variablen in inventory.yml ermöglichen es Ihnen, unterschiedliche erlaubte Domains, Log-Level und Pfade pro Maschinengruppe zu konfigurieren.


Einen neuen Server hinzufügen

Siehe docs/adding-a-new-server.template.ts für die vollständige Vorlage mit Kommentaren.

Kurz gesagt:

// 1. Create packages/server-myservice/src/my-server.ts
export class MyServer extends BaseMCPServer {
  constructor(options: MyOptions) {
    super(SERVER_INFO, options);
    this.registerTool("my_tool", this.handleMyTool.bind(this));
  }
  private async handleMyTool(args) {
    return this.ok({ result: "done" });
  }
}

// 2. Register in host/src/cli.ts
hub.use(new MyServer({ apiKey: process.env.MY_API_KEY! }));

Ideen: server-slack, server-postgres, server-docker, server-ansible, server-ssh, server-jira


Umgebungsvariablen

Variable

Standard

Beschreibung

MCP_DATA_DIR

./mcp-data

Wurzelverzeichnis für alle Hub-Daten

MCP_FS_ROOT

./mcp-data/files

Wurzelverzeichnis der Dateisystem-Sandbox

MCP_GIT_WORKSPACE

./mcp-data/repos

Basispfad für Git-Repos

MCP_MEMORY_PATH

./mcp-data/memory.json

Datei für den Speicher

MCP_FETCH_ALLOWED_DOMAINS

(leer = alle)

Kommagetrennte Domain-Whitelist

MCP_LOG_LEVEL

info

`debug

info

warn

error`


Sicherheitshinweise

  • Dateisystem: Streng isoliert (Sandbox). Pfad-Traversal-Angriffe führen zu einem Fehler, nicht zur Datenherausgabe.

  • Git: Nur lesend. Keine commit-, push- oder clone-Operationen verfügbar.

  • Fetch: Optionale Domain-Whitelist verhindert SSRF zu internen Diensten.

  • Systemd-Dienst: Läuft als Nicht-Root-Benutzer mit PrivateTmp=true und NoNewPrivileges=true.


Anforderungen

  • Node.js ≥ 18 (für native fetch-API)

  • Git (für server-git)

  • Linux mit systemd (für Ansible-Bereitstellung)

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers