提示词

模式与高级用法

真实世界示例、组织方式、类型安全、最佳实践和条件注册。

使用场景

Prompt 特别适用于:

1. 初始化与上手

帮助新开发者或 AI 助手理解如何使用你的代码库:

server/mcp/prompts/setup-guide.ts
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpPrompt({
  description: '为此项目提供完整的初始化说明',
  handler: async () => `你正在为这个 Nuxt 项目进行初始化。以下是你需要了解的内容:

1. 安装依赖:\`pnpm install\`
2. 启动开发服务器:\`pnpm dev\`
3. 项目结构遵循 Nuxt 约定
4. MCP 工具可在 server/mcp/ 中使用

告诉我你想构建什么!`,
})

2. 代码审查标准

确保代码审查标准一致:

server/mcp/prompts/review-standards.ts
import { z } from 'zod'
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpPrompt({
  description: '应用团队代码审查标准',
  inputSchema: {
    focus: z.enum(['security', 'performance', 'maintainability', 'all']).default('all'),
  },
  handler: async ({ focus }) => `你是一名遵循我们团队标准的代码审查员。重点关注:${focus}
审查我提供的代码,检查最佳实践和潜在问题。`,
})

3. 文档生成

标准化文档格式:

server/mcp/prompts/generate-docs.ts
import { z } from 'zod'
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpPrompt({
  description: '按团队格式生成文档',
  inputSchema: {
    type: z.enum(['api', 'component', 'function']).describe('要记录的内容'),
  },
  handler: async ({ type }) => {
    const templates = {
      api: '按以下内容记录此 API 端点:端点、方法、参数、响应格式和示例。',
      component: '按以下内容记录此 Vue 组件:props、emits、slots 和使用示例。',
      function: '按以下内容记录此函数:参数、返回值和使用示例。',
    }

    return templates[type]
  },
})

4. 排障工作流

为常见问题提供调试指导:

server/mcp/prompts/debug-helper.ts
import { z } from 'zod'
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpPrompt({
  description: '帮助调试常见问题',
  inputSchema: {
    area: z.enum(['api', 'auth', 'database', 'frontend']).describe('问题所在领域'),
  },
  handler: async ({ area }) => `你正在调试一个 ${area} 问题。请提出澄清性问题并建议诊断步骤。`,
})

分组与标签

使用 grouptags 来组织你的 prompts 以便分类。这些字段的工作方式与 tools 相同。

server/mcp/prompts/onboarding/setup-guide.ts
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpPrompt({
  tags: ['getting-started'],
  description: '帮助新开发者设置项目',
  handler: async () => '你正在设置这个项目...',
})

将文件放在 prompts/onboarding/ 中会自动推断出 group: 'onboarding'

Prompt 的 grouptags 会存储在定义对象上,但尚未包含在 prompts/list 协议响应中。当 MCP SDK 采用 SEP-1300 时将支持这一点。

文件组织

将你的 prompts 组织在 server/mcp/prompts/ 目录中。支持平铺和嵌套两种布局:

server/
└── mcp/
    └── prompts/
        ├── greeting.ts
        ├── summarize.ts
        ├── onboarding/
        │   └── setup-guide.ts
        └── debugging/
            └── troubleshoot.ts

每个文件都应导出一个默认的 prompt 定义。子目录会自动设置 group

类型安全

该模块提供完整的 TypeScript 类型推断:

// 参数类型会根据 inputSchema 推断
handler: async ({ text, maxLength }) => {
  // text 的类型是 string
  // maxLength 的类型是 string | undefined
}

最佳实践

1. 为 AI 理解而设计

编写能为 AI 提供清晰上下文和期望的 prompts:

// Good:清晰的上下文和说明
handler: async ({ code }) =>
  `你是一名资深开发者,正在审查 Nuxt 应用的代码。

请根据 Vue 3 最佳实践审查这段代码:\n\n${code}`

// Less effective:说明模糊
handler: async ({ code }) => code

2. 使用描述性参数

始终在 Zod 字段上使用 .describe(),帮助用户和 AI 理解预期内容:

inputSchema: {
  // Good:清晰的描述
  language: z.enum(['typescript', 'javascript']).describe('代码的编程语言'),
  strict: z.boolean().default(true).describe('是否强制执行严格的 TypeScript 规则'),

  // Less helpful:没有描述
  lang: z.string(),
  s: z.boolean(),
}

3. 使用对话流程

使用用户和助手消息来引导 AI:

// Effective:用户提供上下文,助手确认
messages: [
  { role: 'user', content: { type: 'text', text: '你是一位无障碍访问专家。请审查这段 HTML 是否存在 a11y 问题。' } },
  { role: 'assistant', content: { type: 'text', text: '我会分析这段 HTML 的可访问性问题。' } },
]

4. 保持 Prompt 聚焦

每个 prompt 都应有单一、明确的目的。创建多个 prompts,而不是一个复杂的 prompt:

// Good:分离的聚焦 prompts
// server/mcp/prompts/review-security.ts
// server/mcp/prompts/review-performance.ts
// server/mcp/prompts/review-style.ts

// Less maintainable:试图包揽一切的复杂 prompt

5. 提供默认值

对可选参数使用 .default() 以提升易用性:

inputSchema: {
  format: z.enum(['brief', 'detailed']).default('detailed').describe('输出格式'),
  language: z.string().default('en').describe('响应语言'),
}

6. 在复杂 Prompt 中包含示例

对于需要特定输出格式的 prompts,加入示例:

handler: async () => `按照以下格式生成提交信息:

type(scope): description

示例:
feat(auth): add OAuth2 login support

类型:feat、fix、docs、style、refactor、test、chore`

条件注册

你可以使用 enabled 守卫来控制 prompt 是否对客户端可见:

server/mcp/prompts/admin-prompt.ts
export default defineMcpPrompt({
  name: 'admin-prompt',
  description: '仅管理员可用的 prompt',
  enabled: event => event.context.user?.role === 'admin',
  handler: async () => '管理员说明...',
})
有关基于认证过滤的详细文档,请参阅 Dynamic Definitions 指南。

下一步