Directus MCP Server
@staminna/directus-mcp-server
Servidor MCP para Directus 12 — elementos, colecciones, archivos, flujos, usuarios y herramientas de esquema. TypeScript, totalmente tipado.
Cobertura de pruebas
Sentencias | Ramas | Funciones | Líneas |
Las insignias de cobertura se generan a partir de coverage/coverage-summary.json con npm run badges (no se requiere ningún servicio externo). Ejecuta primero npm run test:coverage.
Características
🔐 Autenticación completa - autenticación basada en token con Directus
📦 Gestión de colecciones - operaciones CRUD para colecciones y elementos
📁 Operaciones de archivos - subir, descargar y gestionar archivos
🔄 Gestión de flujos - crear, actualizar, disparar y gestionar Directus Flows
👥 Gestión de usuarios - CRUD de usuarios y gestión de roles
🔍 Herramientas de esquema - analizar y validar esquemas de colecciones
🩺 Diagnósticos - diagnósticos de acceso a colecciones y resolución de problemas
Related MCP server: Storyblok MCP Server
Instalación
Mediante npm (recomendado)
npm install -g @staminna/directus-mcp-serverDesde el código fuente
git clone https://github.com/staminna/mcp-server-claude.git
cd mcp-server-claude
npm install
npm run buildVariables de entorno
Variable | Obligatoria | Descripción |
| Sí | La URL de tu instancia de Directus (p. ej., |
| Sí | Token de API estático con los permisos adecuados |
| No | Habilita la colección de prompts de IA ( |
| No | Nombre de la colección para los prompts de IA (por defecto: |
| No | Habilita la función de recursos ( |
| No | Excluye las colecciones del sistema de los recursos ( |
| No | Modo de entorno ( |
| No | Tiempo de espera de la solicitud en ms (por defecto: |
| No | Intentos de reintento para errores de red, 5xx y 429 (por defecto: |
| No | Retardo base de retroceso en ms (por defecto: |
| No | Tope de retroceso en ms (por defecto: |
| No | Tope de tamaño de importación en el cliente en bytes, equivalente al |
| No |
|
TLS / certificados de cliente
Establece estas variables cuando la instancia de Directus utilice una CA privada o requiera un certificado de cliente. Cada una de CA/CERT/KEY/PFX acepta una ruta de archivo o el contenido PEM/DER directamente.
Variable | Descripción |
| Autoridad de certificación |
| Certificado de cliente |
| Clave privada del cliente |
| Paquete PKCS#12 (alternativa a cert/key) |
| Frase de contraseña para la clave o PFX |
|
|
| Sobrescritura del nombre de servidor SNI |
Autenticación — no se requiere OAuth
Este servidor utiliza un token de acceso estático de Directus (DIRECTUS_TOKEN) y se ejecuta mediante transporte stdio. OAuth no es necesario, por diseño:
La especificación MCP solo define la autorización OAuth 2.1 para transportes basados en HTTP. Para los servidores stdio, la especificación dice que las implementaciones "SHOULD NOT" (no deben) usarlo y, en su lugar, deben obtener las credenciales del entorno — exactamente lo que hace este servidor.
Directus 12 es totalmente compatible con los tokens de acceso estáticos. El soporte de OAuth 2.1 que Directus añadió (a mediados de 2026) se aplica a su propio endpoint remoto de MCP integrado y es opcional; no hay cambios que rompan la compatibilidad en la autenticación por token en Directus 12 (consulta
DIRECTUS_V12_BREAKING_CHANGES.md).OAuth solo cobra relevancia si expones un servidor MCP de forma remota a través de HTTP (Streamable HTTP/SSE). Como subproceso local stdio de Claude Desktop, Claude Code, Cursor, etc., este servidor solo necesita el token del entorno.
Genera el token en Directus en Configuración de usuario → Token (para producción, usa un usuario dedicado con un rol de mínimos privilegios).
Uso con una suscripción de Claude (Max/Pro) — no se necesita clave de API
Los servidores MCP no consumen tokens de la API de Anthropic por sí mismos; solo lo hacen las llamadas al modelo del cliente de IA. Si usas este servidor dentro de Claude Code o Claude Desktop con una suscripción a Claude Max (o Pro), el uso del modelo está cubierto por la suscripción: no necesitas una clave de API de Anthropic. Solo se requiere una clave de API cuando utilices Claude mediante programación a través de la API de Claude (p. ej., el conector MCP remoto).
Configuración de IDE
🟣 Cursor
Abre los Ajustes de Cursor:
Cmd+,(macOS) oCtrl+,(Windows/Linux)Busca "MCP" o navega a Funciones → Servidores MCP
Haz clic en "Editar en settings.json"
Añade la siguiente configuración:
{
"mcpServers": {
"directus": {
"command": "npx",
"args": [
"-y",
"@staminna/directus-mcp-server"
],
"env": {
"DIRECTUS_URL": "http://localhost:8065",
"DIRECTUS_TOKEN": "your-directus-token-here"
}
}
}
}O si está instalado localmente:
{
"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"
}
}
}
}Guarda el archivo y reinicia Cursor
🌊 Windsurf
Abre los Ajustes de Windsurf:
Cmd+,(macOS) oCtrl+,(Windows/Linux)Busca "Servidores MCP"
Haz clic en "Editar en settings.json"
Añade la siguiente configuración:
{
"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"
}
}
}
}O si está instalado localmente:
{
"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"
}
}
}
}Guarda el archivo
Cierra Windsurf por completo (
Cmd+QoCtrl+Q)Vuelve a abrir Windsurf y espera ~10 segundos para que MCP se inicialice
🤖 Claude Desktop
Localiza el archivo de configuración de Claude Desktop:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Crea o edita el archivo de configuración:
{
"mcpServers": {
"directus": {
"command": "npx",
"args": [
"-y",
"@staminna/directus-mcp-server"
],
"env": {
"DIRECTUS_URL": "http://localhost:8065",
"DIRECTUS_TOKEN": "your-directus-token-here"
}
}
}
}O si está instalado localmente:
{
"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"
}
}
}
}Guarda el archivo y reinicia Claude Desktop
🔮 Claude.ai (Web con MCP)
Para la interfaz web de Claude.ai con soporte MCP:
Ve a los ajustes de Claude.ai
Localiza la sección de configuración de MCP
Añade un nuevo servidor MCP con:
{
"name": "directus",
"command": "npx",
"args": ["-y", "@staminna/directus-mcp-server"],
"env": {
"DIRECTUS_URL": "http://localhost:8065",
"DIRECTUS_TOKEN": "your-directus-token-here"
}
}Nota: El soporte de MCP en Claude.ai puede requerir una suscripción a Pro y extensiones específicas del navegador.
Herramientas disponibles
Gestión de colecciones
Herramienta | Descripción |
| Lista todas las colecciones en Directus |
| Obtiene el esquema de una colección específica |
| Obtiene elementos de una colección con filtros |
| Crea una nueva colección |
| Elimina una colección (requiere |
| Crea un nuevo elemento en una colección |
| Actualiza un elemento existente, opcionalmente en un |
| Elimina elementos por |
| Ejecuta operaciones masivas de crear, actualizar, eliminar |
Esquema y campos
Herramienta | Descripción |
| Crea un nuevo campo en una colección |
| Actualiza un campo existente |
| Elimina un campo de una colección |
| Crea relaciones (O2O, O2M, M2O, M2M, M2A) |
| Analiza el esquema con el mapeo de relaciones |
| Valida el esquema y las relaciones |
| Analiza las relaciones entre colecciones |
| Lee una instantánea completa o parcial del modelo de datos |
| Compara una instantánea contra el esquema en vivo ( |
| Aplica un diff (requiere |
Gestión de flujos
Herramienta | Descripción |
| Obtiene todos los flujos con filtrado opcional |
| Obtiene un flujo específico por ID |
| Crea un nuevo flujo de automatización |
| Actualiza un flujo existente |
| Elimina un flujo |
| Activa manualmente un flujo |
| Obtiene las operaciones de flujo |
Gestión de usuarios
Herramienta | Descripción |
| Obtiene todos los usuarios con filtrado |
| Obtiene un usuario específico por ID |
Gestión de archivos
Herramienta | Descripción |
| Obtiene archivos con filtrado y paginación |
| Importa CSV/JSON en una colección, o en varias a la vez |
Diagnóstico
Herramienta | Descripción |
| Diagnostica problemas de acceso a colecciones |
| Refresca la caché de colecciones |
| Valida colecciones recién creadas |
Descubrimiento
Herramienta | Descripción |
| Encuentra las herramientas que coinciden con la descripción de una tarea |
Anotaciones de seguridad de las herramientas
Cada herramienta lleva anotaciones MCP para que un cliente pueda distinguir las lecturas de las escrituras antes de llamarla: 17 son readOnlyHint: true, 6 son explícitamente destructiveHint: false (aditivas — crean), y 11 son destructiveHint: true (eliminaciones, actualizaciones que sobrescriben, apply_schema, import_data, trigger_flow).
Ten en cuenta que destructiveHint por defecto es true en la especificación MCP, por lo que las herramientas aditivas lo establecen en false en lugar de omitirlo.
Eliminar elementos de forma segura
A partir de Directus 12.3.0, delete_items nunca recurre a eliminarlo todo:
ids: [...]elimina esos elementos.query: {...}elimina todo lo que coincida con la consulta.Se rechaza pasar ambos.
No pasar ninguno no elimina nada y no realiza ninguna solicitud.
Para eliminar todos los elementos de una colección, pídelo explícitamente:
{ "collection": "articles", "query": { "limit": -1 }, "confirm": true }Ejemplos de uso
Una vez configurado, puedes interactuar con Directus a través de tu asistente de IA:
"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"Solución de problemas
El servidor MCP no se conecta
Verifica que Directus esté en ejecución: Asegúrate de que tu instancia de Directus sea accesible en la URL configurada
Comprueba los permisos del token: El token de API necesita permisos adecuados para las operaciones que deseas realizar
Reinicia el IDE: Después de cambiar la configuración de MCP, reinicia completamente tu IDE
Revisa los registros: Busca errores relacionados con MCP en la consola de desarrollador de tu IDE
Errores de permisos
Asegúrate de que tu token de Directus tenga los permisos necesarios:
Token de administrador para acceso completo
O configura permisos de rol específicos para las colecciones a las que necesites acceder
Tiempo de espera de conexión
Si usas una instancia remota de Directus:
Verifica que la URL sea correcta y accesible
Comprueba la configuración del firewall/red
Asegúrate de que CORS esté configurado correctamente en Directus
Desarrollo
# 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 lintPruebas
El proyecto incluye suites de pruebas unitarias, de integración y de extremo a extremo (vitest). Se aplican umbrales de cobertura (95% de sentencias/líneas/funciones/ramas) — la ejecución de pruebas falla si queda por debajo de ellos.
# 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 badgesVerificación en vivo contra una instancia real de Directus
tests/live/demo.mjs ejecuta las 34 herramientas contra una instancia real a través de stdio. Está deliberadamente fuera de npm test — necesita una credencial y un servidor accesible, por lo que es un control manual en lugar de uno de CI.
# 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-schemaLas credenciales se leen de ENV_FILE (por defecto .env.mdbaudio) para que nunca pasen por el historial del shell. Los resultados se informan por herramienta como pass / refused-by-instance / fail, manteniendo "este servidor está roto" separado de "esta instancia lo rechazó". La opción --apply-schema genera un diff en modo merge, lo que produce un diff estrictamente aditivo, por lo que solo puede volver a crear la colección temporal — no puede eliminar nada que ya existiera. La limpieza se ejecuta incluso si falla una fase anterior.
La suite e2e utiliza el cliente oficial del SDK de MCP (StdioClientTransport) para lanzar dist/index.js como subproceso, comunicándose con un Directus simulado en el mismo proceso en un puerto efímero — no se necesita una instancia real de Directus ni acceso a la red.
Contribuciones
¡Las contribuciones son bienvenidas! No dudes en enviar una Pull Request.
Haz un fork del repositorio
Crea tu rama de funcionalidad (
git checkout -b feature/amazing-feature)Haz commit de tus cambios (
git commit -m 'Add some amazing feature')Haz push a la rama (
git push origin feature/amazing-feature)Abre una Pull Request
Licencia
MIT © Jorge Domingues Nunes
Enlaces
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