Zod object schema for input validation
Prompt definition with name, description, optional input schema, and generate handler
The prompt definition (for re-export and type inference)
// prompts/explain.ts - Prompt with typed arguments
import { definePrompt } from 'mcp-server-framework';
import { z } from 'zod';
export const explainPrompt = definePrompt({
name: 'explain-concept',
description: 'Explain a technical concept clearly',
input: z.object({
topic: z.string().describe('The topic to explain'),
level: z.enum(['beginner', 'intermediate', 'expert'])
.default('intermediate')
.describe('Target expertise level'),
}),
generate: async ({ topic, level }) => [
{
role: 'user',
content: `Please explain ${topic} for someone at ${level} level.
Include:
- A clear definition
- Key concepts
- Practical examples
- Common misconceptions`,
},
],
});
// prompts/code-review.ts - Multi-turn prompt
import { definePrompt } from 'mcp-server-framework';
import { z } from 'zod';
export const codeReviewPrompt = definePrompt({
name: 'code-review',
description: 'Start a code review conversation',
input: z.object({
code: z.string().describe('The code to review'),
language: z.string().describe('Programming language'),
}),
generate: async ({ code, language }) => [
{
role: 'user',
content: `Please review this ${language} code:\n\n\`\`\`${language}\n${code}\n\`\`\``,
},
{
role: 'assistant',
content: 'I\'ll analyze this code for best practices, potential bugs, and improvements.',
},
],
});
// prompts/greeting.ts - No-argument prompt
import { definePrompt } from 'mcp-server-framework';
export const greetingPrompt = definePrompt({
name: 'greeting',
description: 'Standard greeting prompt',
generate: async () => [
{
role: 'user',
content: 'Hello! How can you help me today?',
},
],
});
Define a prompt with automatic registration.
This is the recommended way to define prompts in the framework. The prompt is automatically registered in the global registry when defined.