资源

分组与组织

分组和标签、磁盘布局、URI 方案以及条件注册。

分组和标签

使用 grouptags 对资源进行分类整理。这些字段的作用方式与 工具 相同。

server/mcp/resources/config/app-settings.ts
import { defineMcpResource } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpResource({
  group: 'config',
  tags: ['readonly', 'settings'],
  description: '应用设置',
  file: 'config/app.json',
})

你也可以将资源文件放在子目录中,以自动推断分组:

server/mcp/resources/
├── config/
│   └── app-settings.ts         → group: 'config'
├── docs/
│   └── readme.ts               → group: 'docs'
└── schema.ts                   → 无分组
资源的 grouptags 存储在定义对象中,但尚未包含在 resources/list 协议响应中。在 MCP SDK 采用 SEP-1300 后将支持这一点。

文件组织

将你的资源组织在 server/mcp/resources/ 目录中。支持扁平和嵌套两种布局:

server/
└── mcp/
    └── resources/
        ├── readme.ts
        ├── file.ts
        └── config/
            └── app-settings.ts

每个文件都应导出一个默认的资源定义。子目录会自动设置 group

URI 方案

你可以根据自己的使用场景使用任何合适的 URI 方案:

  • file:// - 文件系统资源
  • api:// - API 端点
  • http:// / https:// - Web 资源
  • custom:// - 自定义方案

条件注册

你可以使用 enabled 守卫来控制资源是否对客户端可见:

server/mcp/resources/internal-data.ts
export default defineMcpResource({
  name: 'internal-data',
  uri: 'app://internal',
  enabled: event => event.context.user?.role === 'admin',
  handler: async (uri) => ({
    contents: [{ uri: uri.toString(), text: '内部数据...' }],
  }),
})
有关基于认证的过滤的详细文档,请参阅 动态定义 指南。

接下来的步骤