进阶主题

TypeScript

Nuxt MCP 模块中的类型安全与 TypeScript 特性。

类型安全

Nuxt MCP 模块提供完整的 TypeScript 支持,具备全面的类型推断和类型安全。

自动导入

所有辅助函数和类型都会在你的服务器文件中自动导入:

函数:

  • defineMcpTool, defineMcpResource, defineMcpPrompt, defineMcpHandler
  • textResult, jsonResult, errorResult, imageResult, audioResult
  • completable, extractToolNames
  • useMcpSession, 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
})

下一步

  • 工具 - 了解如何创建工具
  • 资源 - 了解如何创建资源
  • 提示词 - 了解如何创建提示词