进阶主题
自定义路径
自定义模块查找 MCP 定义的位置。
默认路径结构
默认情况下,模块会在以下位置查找定义:
server/
└── mcp/
├── tools/
│ └── # 工具定义
├── resources/
│ └── # 资源定义
└── prompts/
└── # 提示词定义
更改基础目录
使用 dir 配置选项更改基础目录:
nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxtjs/mcp-toolkit'],
mcp: {
dir: 'my-mcp', // 在 server/my-mcp/ 中查找,而不是 server/mcp/
},
})
这将在以下位置查找定义:
server/
└── my-mcp/
├── tools/
│ └── # 工具定义
├── resources/
│ └── # 资源定义
└── prompts/
└── # 提示词定义
使用 Hook 扩展路径
对于更高级的用例,可以使用 mcp:definitions:paths hook 来添加需要扫描的额外目录。当你希望在多个模块或层之间共享定义时,这非常有用。
在 nuxt.config.ts 中使用 Hook
nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxtjs/mcp-toolkit'],
hooks: {
'mcp:definitions:paths'(paths) {
// 添加工具的额外路径
paths.tools.push('shared/tools')
// 添加资源的额外路径
paths.resources.push('shared/resources')
// 添加提示词的额外路径
paths.prompts.push('shared/prompts')
},
},
})
在自定义模块中使用 Hook
my-module.ts
export default defineNuxtModule({
setup(options, nuxt) {
nuxt.hook('mcp:definitions:paths', (paths) => {
// 添加工具的额外路径
paths.tools.push('shared/tools')
// 添加资源的额外路径
paths.resources.push('shared/resources')
// 添加提示词的额外路径
paths.prompts.push('shared/prompts')
})
},
})
路径结构
paths 对象具有以下结构:
{
tools: string[] // 工具目录路径数组
resources: string[] // 资源目录路径数组
prompts: string[] // 提示词目录路径数组
handlers: string[] // 处理器目录路径数组
}
所有路径均相对于每个 Nuxt 层的 server/ 目录。
示例:共享定义
在多个 Nuxt 层之间共享定义:
project/
├── shared/
│ ├── tools/
│ │ └── common-tool.ts
│ └── resources/
│ └── common-resource.ts
└── apps/
├── web/
│ └── server/
│ └── mcp/
│ └── tools/
│ └── web-tool.ts
└── api/
└── server/
└── mcp/
└── tools/
└── api-tool.ts
配置 hook 以包含共享定义:
nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxtjs/mcp-toolkit'],
hooks: {
'mcp:definitions:paths'(paths) {
// 包含来自项目根目录的共享工具
paths.tools.push('../../shared/tools')
paths.resources.push('../../shared/resources')
paths.prompts.push('../../shared/prompts')
},
},
})
示例:多个源目录
扫描多个目录以查找定义:
nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxtjs/mcp-toolkit'],
mcp: {
dir: 'mcp', // 默认目录
},
hooks: {
'mcp:definitions:paths'(paths) {
// 添加额外的工具目录
paths.tools.push('legacy-tools')
paths.tools.push('new-tools')
// 添加额外的资源目录
paths.resources.push('external-resources')
},
},
})
这将扫描:
server/mcp/tools/(默认)server/legacy-tools/server/new-tools/server/mcp/resources/(默认)server/external-resources/
示例:特定层的路径
在 Nuxt 层设置中,按层配置路径:
layers/api/nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxtjs/mcp-toolkit'],
hooks: {
'mcp:definitions:paths'(paths) {
// 仅包含特定于 API 的工具
paths.tools = ['api/tools']
paths.resources = ['api/resources']
},
},
})
路径解析
路径相对于以下位置进行解析:
- 当前 Nuxt 层的
server/目录 - 项目根目录(用于绝对路径)
// 相对于 server/
paths.tools.push('custom/tools')
// 从项目根目录开始的绝对路径
paths.tools.push('/absolute/path/to/tools')
最佳实践
- 使用描述性的目录名称:明确每个目录包含的内容
- 保持路径有序:将相关的定义分组在一起
- 记录自定义路径:添加注释说明为何使用自定义路径
- 测试路径解析:确保路径在所有环境中都能正确解析
- 考虑层结构:在复杂的多应用设置中使用层