资源
元数据、内容与错误
资源元数据、MIME 类型、二进制载荷和错误响应。
资源元数据
添加一个 metadata 块,帮助客户端正确渲染资源。它包含 MIME 类型、行为注解,以及你希望在 resources/list 中展示的任何额外字段:
server/mcp/resources/readme.ts
import { defineMcpResource } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpResource({
name: 'readme',
description: '项目 README 文件',
file: 'README.md',
metadata: {
mimeType: 'text/markdown',
annotations: {
audience: ['user', 'assistant'],
priority: 0.8,
lastModified: new Date().toISOString(),
},
},
})
| Field | Type | Description |
|---|---|---|
metadata.mimeType | string | 提示客户端内容类型。当你使用 file: '…' 时会自动检测;对于自定义 URI,请显式设置。 |
metadata.annotations.audience | ('user' | 'assistant')[] | 谁应该看到这个资源——用户、AI,或两者。 |
metadata.annotations.priority | number (0–1) | 当客户端必须选择要包含哪些资源时,建议的重要程度。 |
metadata.annotations.lastModified | string (ISO 8601) | 资源最后一次变更的时间——客户端可将其用于缓存。 |
你放入 metadata 的其他任何内容,都会在列表响应中原样转发到 _meta 下,因此你可以为自己的 UI 携带自定义字段。
内容类型
资源可以返回不同的 MIME 类型:
return {
contents: [{
uri: uri.toString(),
mimeType: 'text/markdown',
text: '# Markdown 内容',
}],
}
return {
contents: [{
uri: uri.toString(),
mimeType: 'application/json',
text: JSON.stringify({ key: 'value' }),
}],
}
return {
contents: [{
uri: uri.toString(),
mimeType: 'image/png',
blob: Buffer.from(binaryData),
}],
}
错误处理
在处理程序中优雅地处理错误:
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: 'readme',
uri: 'file:///README.md',
handler: async (uri: URL) => {
try {
const filePath = fileURLToPath(uri)
const content = await readFile(filePath, 'utf-8')
return {
contents: [{
uri: uri.toString(),
mimeType: 'text/markdown',
text: content,
}],
}
}
catch (error) {
return {
contents: [{
uri: uri.toString(),
mimeType: 'text/plain',
text: `错误:${error instanceof Error ? error.message : String(error)}`,
}],
isError: true,
}
}
},
})