资源

静态资源与结构

基于文件的资源、命名,以及 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', // 相对于项目根目录
})

这将生成:

  • URIfile:///path/to/project/README.md
  • 处理器:自动读取文件内容
  • MIME 类型:自动检测(例如,text/markdown

自定义静态资源

如需更多控制,你可以手动定义 urihandler

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,
      }],
    }
  },
})

自动生成的名称和标题

你可以省略 nametitle——它们会根据文件名自动生成:

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 会自动变为:

  • nameproject-readme(kebab-case)
  • titleProject Readme(title case)

你仍然可以显式提供 nametitle 来覆盖自动生成的值。

资源结构

一个资源定义由以下部分组成:

import { defineMcpResource } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpResource({
  name: 'resource-name',
  file: 'path/to/file.txt', // 本地文件路径
  metadata: { ... }
})