提示词
输入、处理器与消息
Zod 参数、处理器返回类型、角色和多消息提示。
输入模式
使用 Zod 定义并验证提示参数:
server/mcp/prompts/translate.ts
import { z } from 'zod'
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpPrompt({
name: 'translate',
inputSchema: {
// 必需的字符串参数
text: z.string().describe('待翻译文本'),
// 必需的枚举参数
targetLanguage: z.enum(['en', 'fr', 'es', 'de']).describe('目标语言'),
// 可选参数
sourceLanguage: z.string().optional().describe('源语言(如果未提供则自动检测)'),
// 带默认值的可选参数
formality: z.enum(['formal', 'informal']).default('formal'),
},
handler: async ({ text, targetLanguage, sourceLanguage, formality }) => {
// 实现
},
})
常见参数类型
| Zod 类型 | 示例 | 描述 |
|---|---|---|
z.string() | z.string().min(1) | 带验证的字符串 |
z.enum() | z.enum(['a', 'b']) | 枚举 |
z.optional() | z.string().optional() | 可选字段 |
z.default() | z.string().default('value') | 带默认值的字段 |
注意:提示参数必须是字符串。请使用
z.string(),并在需要时在处理器中将其转换为其他类型。参数自动补全
使用 completable() 包裹模式字段,以便在客户端填写提示参数时提供自动补全建议:
server/mcp/prompts/review-code.ts
export default defineMcpPrompt({
description: '审查代码最佳实践',
inputSchema: {
language: completable(
z.string().describe('编程语言'),
value => ['typescript', 'javascript', 'python', 'rust', 'go']
.filter(lang => lang.startsWith(value)),
),
},
handler: async ({ language }) => {
return `请审查以下 ${language} 代码的最佳实践和潜在问题。`
},
})
completable 辅助函数会自动导入,并从 MCP SDK 中重新导出。回调会接收当前输入值,并返回匹配的建议。
处理器函数
处理器会接收已验证的参数(如果提供了 inputSchema)并返回一个提示结果。
返回类型
处理器支持两种返回类型:
// 返回字符串 — 自动包装为单个用户消息
handler: async () => '你是一个乐于助人的助手。'
// 带参数
handler: async ({ topic }) => `帮我理解 ${topic}。`
// 返回完整的 MCP 结果,用于多消息或助手角色提示
handler: async () => ({
messages: [
{ role: 'user', content: { type: 'text', text: '请审查这段代码。' } },
{ role: 'assistant', content: { type: 'text', text: '我会审查它。' } },
],
})
当返回字符串时,它会根据
role 选项(默认为 'user')自动包装为 { messages: [{ role, content: { type: 'text', text: '...' } }] }。处理器参数
// 没有 inputSchema — 无参数
handler: async () => '消息文本'
// 有 inputSchema — 接收已验证的参数
handler: async (args, extra) => {
// args: 与 inputSchema 匹配的已验证参数
// extra: 请求处理器的额外信息
return `包含 ${args.param} 的消息`
}
消息角色
提示可以返回不同角色的消息:
return {
messages: [{
role: 'user',
content: {
type: 'text',
text: '带有说明的用户消息',
},
}],
}
return {
messages: [{
role: 'assistant',
content: {
type: 'text',
text: '预填充的助手回复',
},
}],
}
注意:MCP 规范仅支持
user 和 assistant 角色。若要提供上下文或说明,请将它们包含在 user 消息文本中。多条消息
返回多条消息以创建对话流程:
server/mcp/prompts/conversation.ts
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpPrompt({
name: 'conversation-starter',
inputSchema: {
topic: z.string().describe('对话主题'),
},
handler: async ({ topic }) => {
return {
messages: [
{
role: 'user',
content: {
type: 'text',
text: `你是一个乐于助人的助手。让我们来讨论 ${topic}。`,
},
},
{
role: 'assistant',
content: {
type: 'text',
text: `我很乐意和你讨论 ${topic}。`,
},
},
],
}
},
})