示例

集成外部 API

集成外部 API 并在 MCP 工具中使用 Nuxt 服务器工具。

获取外部数据

这是一个从公共 API 获取数据的简单工具:

server/mcp/tools/get-weather.ts
import { z } from 'zod'
import { defineMcpTool } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpTool({
  description: '获取某个城市的当前天气',
  inputSchema: {
    city: z.string().describe('城市名称'),
  },
  cache: '15m',
  handler: async ({ city }) => {
    return await $fetch(`https://wttr.in/${city}?format=j1`)
  },
})

使用 Nuxt 服务器工具

要在你的处理程序中使用 useEvent() 等 Nuxt 服务器工具,请在 Nitro 中启用 asyncContext

nuxt.config.ts
export default defineNuxtConfig({
  nitro: {
    experimental: {
      asyncContext: true,
    },
  },
})

然后你就可以访问 H3 事件并使用 Nuxt 服务器组合式函数:

server/mcp/tools/get-page.ts
import { z } from 'zod'
import { useEvent, createError } from 'h3'
import { queryCollection } from '@nuxt/content/server'
import { defineMcpTool } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpTool({
  description: '获取一个文档页面',
  inputSchema: {
    path: z.string().describe('页面路径'),
  },
  cache: '1h',
  handler: async ({ path }) => {
    const event = useEvent()

    const page = await queryCollection(event, 'docs')
      .where('path', '=', path)
      .first()

    if (!page) throw createError({ statusCode: 404, message: '未找到页面' })
    return page
  },
})
启用 asyncContext 后,useEvent() 会被自动导入。

后续步骤