结构与选项
处理器结构
一个处理器定义由以下内容组成:
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'handler-name', // 唯一标识符
})
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'handler-name',
version: '1.0.0', // 处理器版本
description: 'Admin tools', // 客户端显示的 serverInfo 描述
instructions: 'Always …', // 面向 LLM 的系统提示指导
icons: [ ... ], // 客户端 UI 中显示的服务器图标
route: '/mcp/custom', // 自定义路由
browserRedirect: '/', // 浏览器重定向 URL
middleware: async (event) => { ... }, // 请求拦截
tools: [ ... ], // 工具数组
resources: [ ... ], // 资源数组
prompts: [ ... ], // 提示数组
experimental_codeMode: true, // 启用代码模式(实验性)
})
处理器选项
name(必需)
处理器的唯一标识符。name 决定处理器将挂载到哪里。默认情况下,处理器可通过 /mcp/:name 访问。
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'migration', // 处理器挂载在 /mcp/migration
})
version(可选)
处理器的版本。默认为模块配置的版本。
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'migration',
version: '2.0.0',
})
description(可选)
在 MCP 初始化期间作为 serverInfo 的一部分发送的、人类可读的描述。客户端使用它在 UI 中识别该处理器(服务器列表、安装提示、工具提示)。若未设置,则回退到 nuxt.config.ts 中的 mcp.description。
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'admin',
description: 'Admin tools — destructive operations gated by Bearer auth.',
})
instructions(可选)
面向 AI 代理的操作指导——通常由客户端注入到模型的系统提示中。可用于描述工作流、约束或工具之间的关系(使用 description 来标识处理器)。若未设置,则回退到 nuxt.config.ts 中的 mcp.instructions。
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'admin',
instructions: 'Always call list-users before delete-user. Confirm with the operator before any destructive action.',
})
icons(可选)
客户端在其 UI 中显示的图标。每个条目需要 src 和 mimeType,可选 sizes 和 theme('light' | 'dark')。若未设置,则回退到 nuxt.config.ts 中的 mcp.icons。
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'admin',
icons: [
{ src: 'https://example.com/admin.png', mimeType: 'image/png', sizes: ['64x64'] },
],
})
route(可选)
处理器的自定义路由。默认为 /mcp/:name。
index.ts),请改用 nuxt.config.ts 中的 mcp.route。import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'migration',
route: '/api/mcp/migration', // 自定义路由
})
browserRedirect(可选)
当浏览器访问处理器端点时重定向到的 URL。默认为模块配置的 browserRedirect。
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'migration',
browserRedirect: '/docs/migration',
})
middleware(可选)
在请求处理前后拦截请求的函数。适用于身份验证、日志记录和设置上下文。
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'custom',
middleware: async (event) => {
event.context.userId = 'user-123'
},
})
experimental_codeMode(可选)
启用代码模式,让 LLM 在一次 JavaScript 执行中编排多个工具调用。传入 true 使用默认值,或传入一个选项对象:
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
name: 'custom',
experimental_codeMode: {
progressive: true,
memoryLimit: 128,
},
})
代码模式需要 secure-exec 和 Node.js >=18.16.0。
tools(可选)
支持三种形式——请选择最符合你使用场景的一种:
// server/mcp/handlers/admin/index.ts
import { defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
// `tools` 省略 → handlers/admin/tools/ 下的每个工具
// 都会自动注册(文件夹约定)。
export default defineMcpHandler({
middleware: requireAdmin,
})
import { defineMcpTool, defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
const tool1 = defineMcpTool({ ... })
const tool2 = defineMcpTool({ ... })
export default defineMcpHandler({
name: 'custom',
tools: [tool1, tool2],
})
import { defineMcpHandler, getMcpTools } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpHandler({
// 每个标记为 'searchable' 的工具,不受文件夹影响。
tools: event => getMcpTools({ event, tags: ['searchable'] }),
})
resources(可选)
与tools相同的形式:省略则使用文件夹约定自动归属,传入数组,或传入 event => getMcpResources({ event, ... })。
import { defineMcpResource, defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
const resource1 = defineMcpResource({ ... })
const resource2 = defineMcpResource({ ... })
export default defineMcpHandler({
name: 'custom',
resources: [resource1, resource2],
})
prompts(可选)
与tools相同的形式:省略则使用文件夹约定自动归属,传入数组,或传入 event => getMcpPrompts({ event, ... })。
import { defineMcpPrompt, defineMcpHandler } from '@nuxtjs/mcp-toolkit/server'
const prompt1 = defineMcpPrompt({ ... })
const prompt2 = defineMcpPrompt({ ... })
export default defineMcpHandler({
name: 'custom',
prompts: [prompt1, prompt2],
})