提示词

编写与结构

名称、角色、参数以及提示词定义的形态。

自动生成的名称和标题

你可以省略 nametitle——它们将根据文件名自动生成:

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

export default defineMcpPrompt({
  // name 和 title 会根据文件名自动生成:
  // name: 'greeting'
  // title: 'Greeting'
  description: '生成个性化的问候消息',
  handler: async () => {
    // ...
  },
})

文件名 greeting.ts 会自动变为:

  • namegreeting(kebab-case)
  • titleGreeting(标题格式)

你仍然可以显式提供 nametitle 来覆盖自动生成的值。

简单提示词(无参数)

创建一个不带参数的提示词。处理函数可以返回一个简单字符串——它会被自动包装为单个用户消息:

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

export default defineMcpPrompt({
  name: 'greeting',
  title: 'Greeting',
  description: '生成个性化的问候消息',
  handler: async () => {
    const hour = new Date().getHours()
    const timeOfDay = hour < 12 ? 'morning' : hour < 18 ? 'afternoon' : 'evening'

    return `Good ${timeOfDay}! How can I help you today?`
  },
})

默认角色

当处理函数返回字符串时,默认会使用 user 角色进行包装。使用 role 选项可以更改这一点:

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

export default defineMcpPrompt({
  role: 'assistant',
  description: '代码审查助手人格',
  handler: async () => 'I am a code review assistant. Share your code and I will review it for best practices.',
})
role 选项只影响字符串返回值。当返回完整的 GetPromptResult 时,请直接在 messages 数组中定义角色。

带参数的提示词

创建一个接受参数的提示词:

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

export default defineMcpPrompt({
  name: 'summarize',
  title: '文本摘要器',
  description: '总结任何文本内容',
  inputSchema: {
    text: z.string().describe('要总结的文本'),
    maxLength: z.string().optional().describe('摘要的最大字数'),
  },
  handler: async ({ text, maxLength }) => {
    const words = text.split(/\s+/)
    const maxWords = maxLength ? Number.parseInt(maxLength) : Math.ceil(words.length * 0.3)
    const summary = words.slice(0, maxWords).join(' ')

    return `摘要(${maxWords} 个词):${summary}${words.length > maxWords ? '...' : ''}`
  },
})

提示词结构

一个提示词定义由以下部分组成:

import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'

export default defineMcpPrompt({
  name: 'prompt-name',  // 唯一标识符
  handler: async () => 'Your prompt text here',
})