示例
常见模式
使用 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: 'Validate common input formats like email and URL',
inputSchema: {
value: z.string().describe('Value to validate'),
type: z.enum(['email', 'url']).describe('Type of validation'),
},
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 ? 'Valid email address' : 'Invalid email format'
}
else if (type === 'url') {
try {
new URL(value)
isValid = true
message = 'Valid URL'
}
catch {
message = 'Invalid URL format'
}
}
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: 'Generate a URL-friendly slug from a title',
inputSchema: {
title: z.string().describe('Title to convert to slug'),
separator: z.enum(['-', '_']).default('-').describe('Word separator'),
},
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: 'Convert between JSON and YAML formats',
inputSchema: {
content: z.string().describe('Content to convert'),
from: z.enum(['json', 'yaml']).describe('Source format'),
to: z.enum(['json', 'yaml']).describe('Target format'),
},
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: 'Check if a URL endpoint is reachable',
inputSchema: {
url: z.string().url().describe('URL to check'),
timeout: z.number().default(5000).describe('Timeout in milliseconds'),
},
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,
},
}
}
},
})