进阶主题
TypeScript
Nuxt MCP 模块中的类型安全与 TypeScript 特性。
类型安全
Nuxt MCP 模块提供完整的 TypeScript 支持,具备全面的类型推断和类型安全。
自动导入
所有辅助函数和类型都会在你的服务器文件中自动导入:
函数:
defineMcpTool,defineMcpResource,defineMcpPrompt,defineMcpHandlertextResult,jsonResult,errorResult,imageResult,audioResultcompletable,extractToolNamesuseMcpSession,useMcpServer
类型:
McpToolExtra— 传递给工具处理器的额外参数(中止信号、认证信息、会话 ID、元数据)McpPromptExtra— 传递给提示词处理器的额外参数McpResourceExtra— 传递给资源处理器的额外参数
import { z } from 'zod'
export default defineMcpTool({
name: 'example',
inputSchema: {
message: z.string(),
},
handler: async ({ message }, extra: McpToolExtra) => {
// message 的类型为 string
// 可使用 extra.signal、extra.authInfo、extra.sessionId
},
})
你可以在配置中设置 autoImports: false 来完全禁用自动导入,并改为从 @nuxtjs/mcp-toolkit/server 显式导入。
类型推断
工具输入类型
输入类型会根据你的 inputSchema 自动推断:
import { z } from 'zod'
import { defineMcpTool } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpTool({
name: 'example',
inputSchema: {
name: z.string(),
age: z.number(),
email: z.string().email().optional(),
},
handler: async ({ name, age, email }) => {
// name: string
// age: number
// email: string | undefined
},
})
工具输出类型
输出类型会根据 outputSchema 进行推断:
import { z } from 'zod'
import { defineMcpTool } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpTool({
name: 'example',
inputSchema: {
value: z.number(),
},
outputSchema: {
result: z.number(),
doubled: z.number(),
},
handler: async ({ value }) => {
const result = value * 2
return {
structuredContent: {
result, // TypeScript 知道这是 number 类型
doubled: result * 2, // TypeScript 知道这是 number 类型
},
}
},
})
提示词参数类型
提示词参数类型会根据 inputSchema 进行推断:
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpPrompt({
name: 'example',
inputSchema: {
text: z.string(),
maxLength: z.string().optional(),
},
handler: async ({ text, maxLength }) => {
// text: string
// maxLength: string | undefined
},
})
运行时配置类型
访问具有类型提示的运行时配置:
server/api/config.ts
export default defineEventHandler((event) => {
const config = useRuntimeConfig(event).mcp
// config 的类型包含:
// - enabled: boolean
// - route: string
// - browserRedirect: string
// - name: string
// - version: string
// - dir: string
return config
})