资源
静态资源与结构
基于文件的资源、命名,以及 defineMcpResource 的结构。
静态资源
静态资源具有固定的 URI,不会改变。
简单文件资源
暴露本地文件最简单的方法是使用 file 属性。这会自动处理 URI 生成、MIME 类型检测和文件读取。
server/mcp/resources/readme.ts
import { defineMcpResource } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpResource({
name: 'readme',
description: '项目 README 文件',
file: 'README.md', // 相对于项目根目录
})
这将生成:
- URI:
file:///path/to/project/README.md - 处理器:自动读取文件内容
- MIME 类型:自动检测(例如,
text/markdown)
自定义静态资源
如需更多控制,你可以手动定义 uri 和 handler:
server/mcp/resources/custom-readme.ts
import { readFile } from 'node:fs/promises'
import { fileURLToPath } from 'node:url'
import { defineMcpResource } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpResource({
name: 'custom-readme',
title: 'README',
description: '项目 README 文件',
uri: 'file:///README.md',
metadata: {
mimeType: 'text/markdown',
},
handler: async (uri: URL) => {
const filePath = fileURLToPath(uri)
const content = await readFile(filePath, 'utf-8')
return {
contents: [{
uri: uri.toString(),
mimeType: 'text/markdown',
text: content,
}],
}
},
})
自动生成的名称和标题
你可以省略 name 和 title——它们会根据文件名自动生成:
server/mcp/resources/project-readme.ts
import { defineMcpResource } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpResource({
// name 和 title 会根据文件名自动生成:
// name: 'project-readme'
// title: 'Project Readme'
file: 'README.md'
})
文件名 project-readme.ts 会自动变为:
name:project-readme(kebab-case)title:Project Readme(title case)
你仍然可以显式提供 name 或 title 来覆盖自动生成的值。
资源结构
一个资源定义由以下部分组成:
import { defineMcpResource } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpResource({
name: 'resource-name',
file: 'path/to/file.txt', // 本地文件路径
metadata: { ... }
})
import { defineMcpResource } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpResource({
name: 'resource-name', // 唯一标识符
uri: 'uri://...', // 静态 URI 或 ResourceTemplate
handler: async (uri) => { // 处理函数
return { contents: [...] }
},
})