Directus MCP Server
@staminna/directus-mcp-server
MCP-Server für Directus 12 – Items, Collections, Dateien, Flows, Benutzer und Schema-Tools. TypeScript, durchgängig typisiert.
Testabdeckung
Statements | Branches | Functions | Lines |
Die Badges zur Testabdeckung werden aus coverage/coverage-summary.json mit npm run badges generiert (kein externer Dienst erforderlich). Führen Sie zuerst npm run test:coverage aus.
Funktionen
🔐 Vollständige Authentifizierung – Token-basierte Authentifizierung mit Directus
📦 Collection-Verwaltung – CRUD-Operationen für Collections und Items
📁 Datei-Operationen – Dateien hochladen, herunterladen und verwalten
🔄 Flow-Verwaltung – Directus-Flows erstellen, aktualisieren, auslösen und verwalten
👥 Benutzerverwaltung – Benutzer-CRUD und Rollenverwaltung
🔍 Schema-Tools – Collection-Schemas analysieren und validieren
🩺 Diagnose – Diagnose und Fehlerbehebung beim Collection-Zugriff
Related MCP server: Storyblok MCP Server
Installation
Über npm (empfohlen)
npm install -g @staminna/directus-mcp-serverAus dem Quellcode
git clone https://github.com/staminna/mcp-server-claude.git
cd mcp-server-claude
npm install
npm run buildUmgebungsvariablen
Variable | Erforderlich | Beschreibung |
| Ja | Die URL Ihrer Directus-Instanz (z. B. |
| Ja | Statisches API-Token mit entsprechenden Berechtigungen |
| Nein | KI-Prompts-Collection aktivieren ( |
| Nein | Name der Collection für KI-Prompts (Standard: |
| Nein | Ressourcen-Funktion aktivieren ( |
| Nein | System-Collections von Ressourcen ausschließen ( |
| Nein | Umgebungsmodus ( |
| Nein | Anfrage-Timeout in ms (Standard: |
| Nein | Wiederholungsversuche bei Netzwerkfehlern, 5xx und 429 (Standard: |
| Nein | Basis-Backoff-Verzögerung in ms (Standard: |
| Nein | Backoff-Obergrenze in ms (Standard: |
| Nein | Clientseitige Obergrenze für die Importgröße in Bytes, entsprechend |
| Nein |
|
TLS / Client-Zertifikate
Setzen Sie diese Werte, wenn die Directus-Instanz eine private CA verwendet oder ein Client-Zertifikat erfordert. Jede der Variablen CA/CERT/KEY/PFX akzeptiert entweder einen Dateipfad oder den PEM/DER-Inhalt selbst.
Variable | Beschreibung |
| Zertifizierungsstelle |
| Client-Zertifikat |
| Privater Clientschlüssel |
| PKCS#12-Bundle (Alternative zu Zertifikat/Schlüssel) |
| Passphrase für den Schlüssel oder die PFX-Datei |
|
|
| Überschreibung des SNI-Servernamens |
Authentifizierung – kein OAuth erforderlich
Dieser Server verwendet ein statisches Directus-Zugriffstoken (DIRECTUS_TOKEN) und läuft über stdio-Transport. OAuth ist nicht erforderlich, ganz bewusst:
Die MCP-Spezifikation definiert OAuth-2.1-Autorisierung nur für HTTP-basierte Transporte. Für stdio-Server besagt die Spezifikation, dass Implementierungen es „SHOULD NOT“ verwenden sollten und stattdessen Anmeldeinformationen aus der Umgebung beziehen sollten – genau das tut dieser Server.
Directus 12 unterstützt statische Zugriffstokens vollständig. Die OAuth-2.1-Unterstützung, die Directus (Mitte 2026) hinzugefügt hat, gilt für den eigenen integrierten Remote-MCP-Endpunkt und ist optional; es gibt keine Breaking Changes an der Token-Authentifizierung in Directus 12 (siehe
DIRECTUS_V12_BREAKING_CHANGES.md).OAuth wird nur relevant, wenn Sie einen MCP-Server remote über HTTP bereitstellen (Streamable HTTP/SSE). Als lokaler stdio-Subprozess von Claude Desktop, Claude Code, Cursor usw. benötigt dieser Server nur das Token aus der Umgebung.
Generieren Sie das Token in Directus unter Benutzereinstellungen → Token (verwenden Sie für die Produktion einen dedizierten Benutzer mit einer Rolle mit minimalen Berechtigungen).
Verwendung mit einem Claude-Abonnement (Max/Pro) – kein API-Schlüssel erforderlich
MCP-Server verbrauchen selbst keine Anthropic-API-Tokens; nur die Modellaufrufe des KI-Clients tun das. Wenn Sie diesen Server in Claude Code oder Claude Desktop mit einem Abonnement für Claude Max (oder Pro) verwenden, wird die Modellnutzung durch das Abonnement abgedeckt – Sie benötigen keinen Anthropic-API-Schlüssel. Ein API-Schlüssel ist nur erforderlich, wenn Sie Claude programmatisch über die Claude-API steuern (z. B. über den Remote-MCP-Connector).
IDE-Konfiguration
🟣 Cursor
Öffnen Sie die Cursor-Einstellungen:
Cmd+,(macOS) oderCtrl+,(Windows/Linux)Suchen Sie nach „MCP“ oder navigieren Sie zu Features → MCP Servers
Klicken Sie auf „Edit in settings.json“
Fügen Sie die folgende Konfiguration hinzu:
{
"mcpServers": {
"directus": {
"command": "npx",
"args": [
"-y",
"@staminna/directus-mcp-server"
],
"env": {
"DIRECTUS_URL": "http://localhost:8065",
"DIRECTUS_TOKEN": "your-directus-token-here"
}
}
}
}Oder wenn lokal installiert:
{
"mcpServers": {
"directus": {
"command": "node",
"args": [
"/path/to/mcp-server-claude/dist/index.js"
],
"env": {
"DIRECTUS_URL": "http://localhost:8065",
"DIRECTUS_TOKEN": "your-directus-token-here"
}
}
}
}Speichern Sie die Datei und starten Sie Cursor neu
🌊 Windsurf
Öffnen Sie die Windsurf-Einstellungen:
Cmd+,(macOS) oderCtrl+,(Windows/Linux)Suchen Sie nach „MCP Servers“
Klicken Sie auf „Edit in settings.json“
Fügen Sie die folgende Konfiguration hinzu:
{
"mcpServers": {
"directus": {
"command": "npx",
"args": [
"-y",
"@staminna/directus-mcp-server"
],
"env": {
"DIRECTUS_URL": "http://localhost:8065",
"DIRECTUS_TOKEN": "your-directus-token-here",
"DIRECTUS_PROMPTS_COLLECTION_ENABLED": "true",
"DIRECTUS_PROMPTS_COLLECTION": "ai_prompts",
"DIRECTUS_RESOURCES_ENABLED": "true",
"DIRECTUS_RESOURCES_EXCLUDE_SYSTEM": "true",
"NODE_ENV": "production"
}
}
}
}Oder wenn lokal installiert:
{
"mcpServers": {
"directus": {
"command": "node",
"args": [
"/path/to/mcp-server-claude/dist/index.js"
],
"env": {
"DIRECTUS_URL": "http://localhost:8065",
"DIRECTUS_TOKEN": "your-directus-token-here"
}
}
}
}Speichern Sie die Datei
Beenden Sie Windsurf vollständig (
Cmd+QoderCtrl+Q)Öffnen Sie Windsurf erneut und warten Sie ~10 Sekunden, bis MCP initialisiert ist
🤖 Claude Desktop
Suchen Sie die Konfigurationsdatei von Claude Desktop:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Erstellen oder bearbeiten Sie die Konfigurationsdatei:
{
"mcpServers": {
"directus": {
"command": "npx",
"args": [
"-y",
"@staminna/directus-mcp-server"
],
"env": {
"DIRECTUS_URL": "http://localhost:8065",
"DIRECTUS_TOKEN": "your-directus-token-here"
}
}
}
}Oder wenn lokal installiert:
{
"mcpServers": {
"directus": {
"command": "node",
"args": [
"/path/to/mcp-server-claude/dist/index.js"
],
"env": {
"DIRECTUS_URL": "http://localhost:8065",
"DIRECTUS_TOKEN": "your-directus-token-here"
}
}
}
}Speichern Sie die Datei und starten Sie Claude Desktop neu
🔮 Claude.ai (Web mit MCP)
Für die Claude.ai-Weboberfläche mit MCP-Unterstützung:
Navigieren Sie zu den Claude.ai-Einstellungen
Suchen Sie den Abschnitt für die MCP-Konfiguration
Fügen Sie einen neuen MCP-Server hinzu mit:
{
"name": "directus",
"command": "npx",
"args": ["-y", "@staminna/directus-mcp-server"],
"env": {
"DIRECTUS_URL": "http://localhost:8065",
"DIRECTUS_TOKEN": "your-directus-token-here"
}
}Hinweis: Die MCP-Unterstützung von Claude.ai erfordert möglicherweise ein Pro-Abonnement und bestimmte Browsererweiterungen.
Verfügbare Tools
Collection-Verwaltung
Tool | Beschreibung |
| Alle Collections in Directus auflisten |
| Schema für eine bestimmte Collection abrufen |
| Items aus einer Collection mit Filterung abrufen |
| Eine neue Collection erstellen |
| Eine Collection löschen (erfordert |
| Ein neues Item in einer Collection erstellen |
| Ein vorhandenes Item aktualisieren, optional in einer Entwurfs- |
| Items per |
| Massenhaftes Erstellen, Aktualisieren und Löschen ausführen |
Schema & Felder
Tool | Beschreibung |
| Ein neues Feld in einer Collection erstellen |
| Ein vorhandenes Feld aktualisieren |
| Ein Feld aus einer Collection löschen |
| Beziehungen erstellen (O2O, O2M, M2O, M2M, M2A) |
| Schema mit Beziehungszuordnung analysieren |
| Schema und Beziehungen validieren |
| Beziehungen über Collections hinweg analysieren |
| Einen vollständigen oder partiellen Snapshot des Datenmodells lesen |
| Snapshot mit dem Live-Schema vergleichen ( |
| Ein Diff anwenden (erfordert |
Flow-Verwaltung
Tool | Beschreibung |
| Alle Flows mit optionaler Filterung abrufen |
| Einen bestimmten Flow anhand der ID abrufen |
| Einen neuen Automatisierungs-Flow erstellen |
| Einen vorhandenen Flow aktualisieren |
| Einen Flow löschen |
| Einen Flow manuell auslösen |
| Flow-Operationen abrufen |
Benutzerverwaltung
Tool | Beschreibung |
| Alle Benutzer mit Filterung abrufen |
| Einen bestimmten Benutzer anhand der ID abrufen |
Dateiverwaltung
Tool | Beschreibung |
| Dateien mit Filterung und Paginierung abrufen |
| CSV/JSON in eine Collection oder mehrere auf einmal importieren |
Diagnose
Tool | Beschreibung |
| Probleme beim Zugriff auf Collections diagnostizieren |
| Collection-Cache aktualisieren |
| Neu erstellte Collections validieren |
Tool-Suche
Tool | Beschreibung |
| Die zu einer Aufgabenbeschreibung passenden Tools finden |
Tool-Sicherheitsannotationen
Jedes Tool trägt MCP-Annotationen, damit ein Client vor dem Aufruf Lesevorgänge von Schreibvorgängen unterscheiden kann: 17 sind readOnlyHint: true, 6 sind explizit destructiveHint: false (additiv — erstellt), und 11 sind destructiveHint: true (Löschungen, überschreibende Aktualisierungen, apply_schema, import_data, trigger_flow).
Beachte, dass destructiveHint in der MCP-Spezifikation standardmäßig true ist; deshalb setzen die additiven Tools es auf false, anstatt es wegzulassen.
Elemente sicher löschen
Seit Directus 12.3.0 fällt delete_items nie mehr auf das Löschen aller Elemente zurück:
ids: [...]löscht diese Elemente.query: {...}löscht alles, auf das die Abfrage zutrifft.Die Übergabe beider wird abgelehnt.
Die Übergabe keines von beiden löscht nichts und sendet keine Anfrage.
Um jedes Element in einer Collection zu löschen, fordere es ausdrücklich an:
{ "collection": "articles", "query": { "limit": -1 }, "confirm": true }Verwendungsbeispiele
Nach der Konfiguration kannst du über deinen KI-Assistenten mit Directus interagieren:
"List all collections in my Directus instance"
"Create a new collection called 'blog_posts' with title, content, and published fields"
"Get all items from the 'products' collection where status is 'published'"
"Create a new flow that triggers on item creation in the 'orders' collection"
"Analyze the schema of the 'users' collection including relationships"Fehlerbehebung
MCP-Server stellt keine Verbindung her
Prüfe, ob Directus läuft: Stelle sicher, dass deine Directus-Instanz unter der konfigurierten URL erreichbar ist
Prüfe Token-Berechtigungen: Das API-Token benötigt passende Berechtigungen für die Vorgänge, die du ausführen möchtest
Starte die IDE neu: Starte deine IDE nach einer Änderung der MCP-Konfiguration vollständig neu
Prüfe die Logs: Suche in der Entwicklerkonsole deiner IDE nach MCP-bezogenen Fehlern
Berechtigungsfehler
Stelle sicher, dass dein Directus-Token über die erforderlichen Berechtigungen verfügt:
Admin-Token für vollständigen Zugriff
Oder konfiguriere spezifische Rollenberechtigungen für die Collections, auf die du zugreifen musst
Verbindungszeitüberschreitung
Wenn du eine entfernte Directus-Instanz verwendest:
Prüfe, ob die URL korrekt und erreichbar ist
Prüfe Firewall-/Netzwerkeinstellungen
Stelle sicher, dass CORS auf Directus korrekt konfiguriert ist
Entwicklung
# Install dependencies
npm install
# Build
npm run build
# Watch mode
npm run dev
# Run server
npm start
# Type check
npm run typecheck
# Lint
npm run lintTesten
Das Projekt umfasst Unit-, Integrations- und End-to-End-Suiten (vitest). Abdeckungsschwellen (95 % Statements/Zeilen/Funktionen/Zweige) werden erzwungen — unter diesen Werten schlägt der Testlauf fehl.
# Unit + integration tests
npm test
# With coverage report (coverage/ — text, html, lcov, json-summary)
npm run test:coverage
# End-to-end: builds, then spawns the real server over stdio against a mock Directus
npm run test:e2e
# Everything
npm run test:all
# Refresh the README coverage badges from the last coverage run
npm run badgesLive-Überprüfung gegen ein echtes Directus
tests/live/demo.mjs steuert alle 34 Tools über stdio gegen eine echte Instanz. Es liegt bewusst außerhalb von npm test — es benötigt Zugangsdaten und einen erreichbaren Server, ist also ein manuelles Gate und kein CI-Gate.
# Read-only + guard phases (touches nothing)
ENV_FILE=.env.mdbaudio npm run test:live
# Also create, mutate and drop a scratch mcp_demo_<stamp> collection
ENV_FILE=.env.mdbaudio npm run test:live -- --write
# Additionally exercise apply_schema, confined to that scratch collection
ENV_FILE=.env.mdbaudio npm run test:live -- --write --apply-schemaDie Zugangsdaten werden aus ENV_FILE gelesen (standardmäßig .env.mdbaudio) und gelangen so nie in die Shell-Historie. Die Ergebnisse werden pro Tool als bestanden / von der Instanz abgelehnt / fehlgeschlagen gemeldet, wodurch "dieser Server ist defekt" von "diese Instanz hat abgelehnt" getrennt bleibt. --apply-schema erstellt im merge-Modus Diffs, was einen strikt additiven Diff ergibt; es kann die Wegwerf-Collection also nur neu erstellen — es kann nichts löschen, was bereits existierte. Die Bereinigung läuft auch dann, wenn eine frühere Phase fehlschlägt.
Die E2E-Suite verwendet den offiziellen MCP-SDK-Client (StdioClientTransport), um dist/index.js als Unterprozess zu starten, der mit einem prozessinternen Mock-Directus auf einem ephemeren Port kommuniziert — es wird weder eine echte Directus-Instanz noch Netzwerkzugriff benötigt.
Mitwirken
Beiträge sind willkommen! Du kannst gerne einen Pull Request einreichen.
Forke das Repository
Erstelle deinen Feature-Branch (
git checkout -b feature/amazing-feature)Committe deine Änderungen (
git commit -m 'Add some amazing feature')Pushe den Branch (
git push origin feature/amazing-feature)Öffne einen Pull Request
Lizenz
MIT © Jorge Domingues Nunes
Links
Maintenance
Related MCP Servers
- FlicenseBqualityFmaintenanceA Node.js server that enables AI Clients to interact with the Directus CMS API through the Model Context Protocol, allowing for management of collections, items, files, users, and system information.1824
- FlicenseNot gradedqualityNot gradedmaintenanceEnables comprehensive management of Storyblok CMS through natural language interactions. Supports story creation and publishing, asset management, component schema updates, release workflows, and content discovery across all major Storyblok APIs.10
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact directly with Strapi v5 CMS content through full CRUD operations, media uploads, and content type exploration using Strapi's Document Service API.2011MIT
- AlicenseAqualityCmaintenanceEnables comprehensive management of Directus instances through tools for schema manipulation, content CRUD operations, and dashboard management. It allows AI assistants to programmatically interact with collections, fields, relations, and workflow automation using the official Directus SDK.2040MIT
Related MCP Connectors
Manage Appwrite projects, databases, auth, storage, functions, and messaging; search Appwrite docs
AI-powered design and management for Webflow Sites
Manage SRG+ hubs, channels, content, assets, users, and workspaces from any MCP-aware AI agent.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/staminna/mcp-server-claude'
If you have feedback or need assistance with the MCP directory API, please join our Discord server