Token导航 LogoToken导航TokenDH.com
Directus Extension MCP Customization logo
运维云端未说明官方级别未说明来源级核验

Directus Extension MCP Customization

MCP Server

为Directus提供自定义MCP工具的扩展框架,允许其他扩展通过事件发射器系统添加和管理自定义工具。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
权限管理TypeScript云端部署

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

JoshTheDerf

提供方

JoshTheDerf

最后核验

2026/5/17 20:19

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

Directus MCP定制扩展

此扩展允许其他Directus扩展通过挂接到Directus的事件发射器系统来添加自定义MCP(模型上下文协议)工具。

目的

Directus具有内置的MCP支持,但它只公开了自己的内部工具。此扩展拦截 /mcp 端点允许其他扩展:

  1. 将他们自己的工具添加到MCP工具列表中
  2. 处理这些自定义工具的执行

与其他扩展一起使用

要从另一个扩展添加自定义MCP工具,请使用Directus的 孤立事件发射器系统.

重要提示: 出于安全原因,MCP功能使用与核心Directus事件系统分离的隔离事件发射器。你 必须 使用 emitter.onFilter() 直接而不是 filter() 回拨来自 defineHook.

1.向列表中添加工具

听听 mcp.tools.list 过滤事件以注入您的工具:

import { defineHook } from "@directus/extensions-sdk";

export default defineHook((_, { emitter }) => {
  emitter.onFilter("mcp.tools.list", (tools) => {
    // Add your custom tool to the array
    return [
      ...tools,
      {
        name: "my_custom_tool",
        description: "Does something useful",
        inputSchema: {
          type: "object",
          properties: {
            param1: { type: "string" }
          },
          required: ["param1"]
        }
      }
    ];
  });
});

2.搬运工具执行

听一个特定于工具的过滤器事件来处理工具的执行:

import { defineHook } from "@directus/extensions-sdk";

export default defineHook((_, { emitter, services, getSchema }) => {
  emitter.onFilter("my_custom_tool.mcp.tools.call", async (toolCall, meta) => {
    // Access user accountability from meta parameter
    const { accountability } = meta;

    // Get schema and create service with accountability
    const schema = await getSchema();
    const { ItemsService } = services;

    const itemsService = new ItemsService("my_collection", {
      schema,
      accountability, // Pass accountability for permission checks
    });

    // Execute your tool logic with proper permissions
    const result = await itemsService.readByQuery({
      filter: { status: { _eq: toolCall.arguments.status } }
    });

    return {
      content: [
        {
          type: "text",
          text: JSON.stringify(result)
        }
      ]
    };
  });
});

重要提示: 筛选器事件签名为:

async (toolCall, meta, context) => { ... }
  • toolCall -包含 namearguments 来自MCP请求
  • meta -包含 accountability 从Express请求中提取
  • context -全钩子扩展上下文(服务、getSchema等)

accountability 对象包含用户的身份验证和授权上下文,允许Directus服务强制执行适当的权限。

或者,使用通用 mcp.tools.call 事件并检查工具名称:

emitter.onFilter("mcp.tools.call", async (toolCall, meta) => {
  if (toolCall.name === "my_custom_tool") {
    // Handle your specific tool with accountability
    const { accountability } = meta;
    return { content: [{ type: "text", text: "Result" }] };
  }
});

完整示例

下面是一个完整的示例,显示了添加工具和处理其执行:

import { defineHook } from "@directus/extensions-sdk";

export default defineHook((_, { logger, emitter, services, getSchema }) => {
  // Add tool to the list
  emitter.onFilter("mcp.tools.list", (tools) => {
    return [
      ...tools,
      {
        name: "my_custom_tool",
        description: "Does something useful",
        inputSchema: {
          type: "object",
          properties: {
            input: { type: "string", description: "Input parameter" }
          },
          required: ["input"]
        }
      }
    ];
  });

  // Handle tool execution with accountability
  emitter.onFilter("my_custom_tool.mcp.tools.call", async (toolCall, meta) => {
    const { input } = toolCall.arguments;
    const { accountability } = meta;

    // Use accountability for any service that needs permissions
    const schema = await getSchema();
    const { ItemsService } = services;

    const itemsService = new ItemsService("my_collection", {
      schema,
      accountability,
    });

    return {
      content: [
        {
          type: "text",
          text: `Processed: ${input}`
        }
      ]
    };
  });
});

运作原理

  1. 延长线钩入 routes.before 拦截 /mcp 端点
  2. 对于 tools/list 请求时,它会覆盖响应以发出 mcp.tools.list 过滤器
  3. 对于 tools/call 请求,它:

- 提取物 accountability 来自Express请求(req.accountability) - 创建一个 meta 包含责任的对象 - 发出特定于工具的筛选器事件: {toolName}.mcp.tools.call with(工具调用、元、上下文) - 回到通用 mcp.tools.call 如果没有特定的处理程序响应 - 通过以下方式将控制权传递给内置的Directus处理程序 next() 如果没有自定义处理程序响应

  1. 其他扩展注册过滤器监听器以添加工具和处理调用

责任流程

MCP Request → Express Middleware (adds req.accountability)
     ↓
Customization Extension (extracts req.accountability)
     ↓
Filter Event Emitted with meta = { accountability }
     ↓
Custom Tool Handler (receives accountability via meta parameter)
     ↓
Directus Service (uses accountability for permission checks)

问责对象对于以下方面至关重要:

  • 用户身份验证和授权
  • Directus服务中的权限执行
  • 审计日志和活动跟踪
  • 多租户数据隔离

安装

必须在安装任何其他要添加自定义MCP工具的扩展之前安装此扩展。

通过npm安装:

npm install directus-extension-mcp-customization

或手动:

npm install
npm run build

然后重新启动Directus实例。

相关扩展

基于此自定义框架构建的扩展:

目录标签

目录标签

权限管理TypeScript云端部署扩展框架本地部署自定义工具事件驱动Directus扩展

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明none部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP