示例

常见模式

使用 Nuxt MCP 模块的真实示例和模式。

概述

本页面演示了使用 Nuxt MCP 模块的常见模式和真实示例。

输入验证工具

验证电子邮件和 URL 等用户输入:

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

export default defineMcpTool({
  description: '验证常见输入格式,如电子邮件和 URL',
  inputSchema: {
    value: z.string().describe('要验证的值'),
    type: z.enum(['email', 'url']).describe('验证类型'),
  },
  outputSchema: {
    isValid: z.boolean(),
    message: z.string(),
  },
  handler: async ({ value, type }) => {
    let isValid = false
    let message = ''

    if (type === 'email') {
      const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
      isValid = emailRegex.test(value)
      message = isValid ? '有效的电子邮件地址' : '无效的电子邮件格式'
    }
    else if (type === 'url') {
      try {
        new URL(value)
        isValid = true
        message = '有效的 URL'
      }
      catch {
        message = '无效的 URL 格式'
      }
    }

    return {
      structuredContent: { isValid, message },
    }
  },
})

生成 Slug 工具

从标题生成对 URL 友好的 slug:

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

export default defineMcpTool({
  description: '从标题生成对 URL 友好的 slug',
  inputSchema: {
    title: z.string().describe('要转换为 slug 的标题'),
    separator: z.enum(['-', '_']).default('-').describe('单词分隔符'),
  },
  outputSchema: {
    slug: z.string(),
  },
  handler: async ({ title, separator }) => {
    const slug = title
      .toLowerCase()
      .normalize('NFD')
      .replace(/[\u0300-\u036F]/g, '') // 移除重音符号
      .replace(/[^a-z0-9\s-]/g, '') // 移除特殊字符
      .trim()
      .replace(/\s+/g, separator) // 替换空格
      .replace(new RegExp(`${separator}+`, 'g'), separator) // 移除重复的分隔符

    return {
      structuredContent: { slug },
    }
  },
})

格式转换工具

在 JSON 和 YAML 格式之间进行转换:

server/mcp/tools/convert-format.ts
import { z } from 'zod'
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml'
import { defineMcpTool } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpTool({
  description: '在 JSON 和 YAML 格式之间进行转换',
  inputSchema: {
    content: z.string().describe('要转换的内容'),
    from: z.enum(['json', 'yaml']).describe('源格式'),
    to: z.enum(['json', 'yaml']).describe('目标格式'),
  },
  handler: async ({ content, from, to }) => {
    let data: unknown
    if (from === 'json') {
      data = JSON.parse(content)
    }
    else {
      data = parseYaml(content)
    }

    if (to === 'json') return JSON.stringify(data, null, 2)
    return stringifyYaml(data)
  },
})

健康检查工具

检查 API 或服务是否可用:

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

export default defineMcpTool({
  description: '检查 URL 端点是否可访问',
  inputSchema: {
    url: z.string().url().describe('要检查的 URL'),
    timeout: z.number().default(5000).describe('超时时间(毫秒)'),
  },
  outputSchema: {
    status: z.enum(['healthy', 'unhealthy']),
    responseTime: z.number().optional(),
    statusCode: z.number().optional(),
  },
  handler: async ({ url, timeout }) => {
    const start = Date.now()

    try {
      const response = await $fetch.raw(url, {
        timeout,
        method: 'HEAD',
      })

      const responseTime = Date.now() - start

      return {
        structuredContent: {
          status: 'healthy' as const,
          responseTime,
          statusCode: response.status,
        },
      }
    }
    catch (error) {
      const responseTime = Date.now() - start

      return {
        structuredContent: {
          status: 'unhealthy' as const,
          responseTime,
        },
      }
    }
  },
})

下一步