MCP工具扩展

一个为Directus添加自定义MCP工具的演示扩展,支持个性化问候功能。

  • by JoshTheDerf
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 JoshTheDerf/directus-extension-mcp-hello-world

使用说明

Directus MCP Hello World扩展

添加自定义项的演示扩展 hello_world MCP工具到Directus。

先决条件

此扩展需要 directus-extension-mcp-customization 首先安装并启用扩展。

此扩展功能是什么

此扩展演示了如何通过以下方式向Directus添加自定义MCP工具:

  1. 添加a hello_world 工具到MCP工具列表
  2. 在调用时处理工具的执行

这 hello_world 工具接受 name 参数,并返回个性化问候。

安装

通过npm安装:

npm install directus-extension-mcp-hello-world

或手动:

npm install
npm run build

然后重新启动Directus实例。

用法

安装完毕并重新启动Directus实例后 hello_world 工具将通过MCP端点提供 /mcp.

MCP请求示例:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "hello_world",
    "arguments": {
      "name": "Alice"
    }
  }
}

答复:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Hello, Alice! Welcome to the Directus MCP custom tools demo."
      }
    ]
  }
}

运作原理

此扩展使用Directus的隔离事件发射器系统连接到MCP自定义扩展:

  • mcp.tools.list 过滤器:将工具定义添加到可用工具中
  • hello_world.mcp.tools.call 过滤器:处理调用工具时的实际执行

重要提示:隔离事件发射器

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

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

export default defineHook((_, { emitter }) => {
  // ✅ Correct: Use emitter.onFilter()
  emitter.onFilter("mcp.tools.list", (tools) => {
    return [...tools, myTool];
  });

  // ❌ Wrong: Don't use filter() callback
  // filter("mcp.tools.list", (tools) => { ... });
});

请参阅 directus-extension-mcp-customization 有关集成如何工作的更多详细信息,请参阅README。

相关扩展