Prompts
Authoring & structure
Names, roles, arguments, and the shape of a prompt definition.
Auto-Generated Name and Title
You can omit name and title - they will be automatically generated from the filename:
server/mcp/prompts/greeting.ts
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpPrompt({
// name and title are auto-generated from filename:
// name: 'greeting'
// title: 'Greeting'
description: 'Generate a personalized greeting message',
handler: async () => {
// ...
},
})
The filename greeting.ts automatically becomes:
name:greeting(kebab-case)title:Greeting(title case)
You can still provide name or title explicitly to override the auto-generated values.
Simple Prompt (No Arguments)
Create a prompt without arguments. Handlers can return a simple string — it will be automatically wrapped into a single user message:
server/mcp/prompts/greeting.ts
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpPrompt({
name: 'greeting',
title: 'Greeting',
description: 'Generate a personalized greeting message',
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?`
},
})
Default Role
When a handler returns a string, it is wrapped with the user role by default. Use the role option to change this:
server/mcp/prompts/code-reviewer.ts
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpPrompt({
role: 'assistant',
description: 'Code review assistant persona',
handler: async () => 'I am a code review assistant. Share your code and I will review it for best practices.',
})
The
role option only affects string returns. When returning a full GetPromptResult, define roles directly in the messages array.Prompt with Arguments
Create a prompt that accepts arguments:
server/mcp/prompts/summarize.ts
import { z } from 'zod'
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpPrompt({
name: 'summarize',
title: 'Text Summarizer',
description: 'Summarize any text content',
inputSchema: {
text: z.string().describe('The text to summarize'),
maxLength: z.string().optional().describe('Maximum length of summary in words'),
},
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 `Summary (${maxWords} words): ${summary}${words.length > maxWords ? '...' : ''}`
},
})
Prompt Structure
A prompt definition consists of:
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpPrompt({
name: 'prompt-name', // Unique identifier
handler: async () => 'Your prompt text here',
})
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpPrompt({
name: 'prompt-name',
role: 'assistant', // Role for string returns (default: 'user')
handler: async () => 'I am an assistant persona.',
})
import { defineMcpPrompt } from '@nuxtjs/mcp-toolkit/server'
export default defineMcpPrompt({
name: 'prompt-name',
title: 'Prompt Title', // Human-readable title
description: 'Description', // What the prompt does
inputSchema: { ... }, // Zod schema for arguments
handler: async (args) => { // Handler with arguments
return `Prompt text with ${args.param}`
},
})