mcp-tool-hub
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 → serverabDas CLI stellt eine stdio-JSON-Schnittstelle bereit — jede LLM-Integration sendet
{"toolName":"...", "arguments":{...}}an stdin und liest das Ergebnis von stdoutEinen neuen Server hinzufügen = Paket erstellen,
BaseMCPServererweitern, incli.tsregistrieren
Schnellstart
1. Installieren & Bauen
git clone https://github.com/your-org/mcp-tool-hub.git
cd mcp-tool-hub
npm install
npm run build2. Konfigurieren
cp .env.example .env
# Edit .env with your paths and settings3. Ausführen
# Via npm
npm run start --workspace=host
# Or directly
node host/dist/cli.js4. 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.jsVerfügbare Tools
📁 Filesystem Server
Alle Operationen sind auf MCP_FS_ROOT beschränkt (Sandbox). Pfad-Traversal (../) ist blockiert.
Tool | Beschreibung |
| Dateiinhalt lesen (utf8 oder base64) |
| In eine Datei schreiben oder anhängen |
| Verzeichnisinhalt auflisten (optional rekursiv) |
| Eine Datei löschen |
| Eine Datei verschieben oder umbenennen |
| Größe, Datum und Typ eines Pfades abrufen |
🔀 Git Server
Nur lesend. Keine Schreiboperationen.
Tool | Beschreibung |
| Commit-Historie für ein Repo oder eine Datei |
| Dateiinhalt bei einem bestimmten Commit/Branch |
| Diff zwischen zwei Refs |
| Status des Arbeitsverzeichnisses |
| Branches auflisten (lokal + optional remote) |
| Vollständige Commit-Details und Diff |
🌐 Fetch Server
Unterstützt eine optionale Domain-Whitelist über MCP_FETCH_ALLOWED_DOMAINS.
Tool | Beschreibung |
| HTML oder Text von einer URL abrufen |
| Eine JSON-API-Antwort abrufen und parsen |
| Prüfen, ob eine URL erreichbar ist (HEAD-Anfrage) |
🧠 Memory Server
Persistent über Neustarts hinweg. Basiert auf einer JSON-Datei.
Tool | Beschreibung |
| Wert mit Schlüssel, Namespace und Tags speichern |
| Wert anhand des Schlüssels abrufen |
| Volltextsuche über alle Einträge |
| Einen Eintrag löschen |
| Alle Namespaces mit Anzahl auflisten |
| 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 serversDas Playbook:
Installiert Node.js 20 (falls nicht vorhanden)
Erstellt einen dedizierten
mcp-hub-SystembenutzerKopiert und baut das Projekt
Schreibt die
.env-Konfiguration aus Ihren Ansible-VariablenInstalliert 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 | |||
|
| Wurzelverzeichnis für alle Hub-Daten | |||
|
| Wurzelverzeichnis der Dateisystem-Sandbox | |||
|
| Basispfad für Git-Repos | |||
|
| Datei für den Speicher | |||
| (leer = alle) | Kommagetrennte Domain-Whitelist | |||
|
| `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- oderclone-Operationen verfügbar.Fetch: Optionale Domain-Whitelist verhindert SSRF zu internen Diensten.
Systemd-Dienst: Läuft als Nicht-Root-Benutzer mit
PrivateTmp=trueundNoNewPrivileges=true.
Anforderungen
Node.js ≥ 18 (für native
fetch-API)Git (für
server-git)Linux mit systemd (für Ansible-Bereitstellung)
This server cannot be installed
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/TOMJARA/mcp-tool-hub'
If you have feedback or need assistance with the MCP directory API, please join our Discord server