MCP Prompts
Prompts in MCP are reusable templates that help AI assistants generate contextually appropriate responses. They provide a structured way to define common interaction patterns and workflows.
Overview
An MCP prompt is a template that:
- Defines structure: Specifies message format and roles
- Accepts parameters: Uses variable substitution
- Provides context: Includes relevant information
- Guides AI: Directs assistant behavior
Prompt Structure
interface MCPPrompt {
name: string // Unique identifier
description: string // What the prompt does
template: string // Template with {{variables}}
arguments?: PromptArgument[] // Parameter definitions
}
interface PromptArgument {
name: string
description: string
required?: boolean
type?: 'string' | 'number' | 'boolean'
default?: any
}
Creating Prompts
Basic Prompt
export default class MyPlugin {
async activate(context) {
const { mcp } = context
mcp.registerPrompt({
name: 'summarizeNote',
description: 'Generate a summary of a note',
template: `Summarize the following note:\n\nTitle: {{title}}\n\nContent:\n{{content}}\n\nProvide a concise 2-3 sentence summary.`,
arguments: [
{
name: 'title',
description: 'Note title',
required: true,
type: 'string'
},
{
name: 'content',
description: 'Note content',
required: true,
type: 'string'
}
]
})
}
}
Using Prompt Builder
import { MCPPromptBuilder } from '@lokus/mcp'
const prompt = new MCPPromptBuilder()
.setName('codeReview')
.setDescription('Request code review with specific focus areas')
.setTemplate(`Review the following code:\n\n\`\`\`{{language}}\n{{code}}\n\`\`\`\n\nFocus on: {{focusAreas}}\n\nProvide specific, actionable feedback.`)
.setArguments([
{
name: 'code',
description: 'Code to review',
required: true,
type: 'string'
},
{
name: 'language',
description: 'Programming language',
required: false,
type: 'string',
default: 'javascript'
},
{
name: 'focusAreas',
description: 'Areas to focus on (e.g., performance, security)',
required: false,
type: 'string',
default: 'code quality and best practices'
}
])
.build()
mcp.registerPrompt(prompt)
Using Prompts
Client-Side
import { MCPClient } from '@lokus/mcp'
const client = new MCPClient('my-client')
await client.connect(transport)
// List available prompts
const prompts = await client.listPrompts()
console.log('Available prompts:', prompts.prompts.map(p => p.name))
// Get rendered prompt
const result = await client.getPrompt('summarizeNote', {
title: 'Project Plan',
content: 'We need to build a new feature...'
})
console.log('Rendered prompt:', result.messages[0].content.text)
// Use with AI
const aiResponse = await ai.sendMessage(result.messages)
Common Prompt Patterns
Note Analysis
mcp.registerPrompt({
name: 'analyzeNote',
description: 'Analyze note structure and suggest improvements',
template: `Analyze this note and provide suggestions:
Title: {{title}}
Content:
{{content}}
Please provide:
1. Structural analysis
2. Content organization suggestions
3. Missing sections or information
4. Overall quality assessment`,
arguments: [
{ name: 'title', required: true, type: 'string' },
{ name: 'content', required: true, type: 'string' }
]
})
Task Generation
mcp.registerPrompt({
name: 'generateTasks',
description: 'Generate actionable tasks from project description',
template: `Based on this project description, generate a list of specific, actionable tasks:
Project: {{projectName}}
Description: {{description}}
Timeline: {{timeline}}
Generate 5-10 tasks with:
- Clear action items
- Estimated effort
- Dependencies
- Priority level`,
arguments: [
{ name: 'projectName', required: true, type: 'string' },
{ name: 'description', required: true, type: 'string' },
{ name: 'timeline', required: false, type: 'string', default: 'not specified' }
]
})
Code Generation
mcp.registerPrompt({
name: 'generateComponent',
description: 'Generate React component based on specifications',
template: `Generate a React component with the following specifications:
Component Name: {{componentName}}
Type: {{componentType}}
Props: {{props}}
Features: {{features}}
Requirements:
- Use TypeScript
- Include PropTypes
- Add JSDoc comments
- Follow best practices
- Include basic styling`,
arguments: [
{ name: 'componentName', required: true, type: 'string' },
{ name: 'componentType', required: false, type: 'string', default: 'functional' },
{ name: 'props', required: false, type: 'string', default: 'none' },
{ name: 'features', required: false, type: 'string', default: 'basic rendering' }
]
})
Advanced Prompt Features
Multi-Step Prompts
mcp.registerPrompt({
name: 'documentationWorkflow',
description: 'Multi-step documentation generation workflow',
template: `Step 1: Analyze the code
{{code}}
Step 2: Identify key components and their purposes
Step 3: Generate documentation sections:
- Overview
- API Reference
- Usage Examples
- Configuration Options
Step 4: Format in {{format}} format
Additional context: {{context}}`,
arguments: [
{ name: 'code', required: true, type: 'string' },
{ name: 'format', required: false, type: 'string', default: 'Markdown' },
{ name: 'context', required: false, type: 'string', default: 'none' }
]
})
Context-Aware Prompts
export default class ContextualPromptsPlugin {
async activate(context) {
const { mcp, workspace, editor } = context
mcp.registerPrompt({
name: 'improveCurrentNote',
description: 'Suggest improvements for the currently open note',
template: async () => {
// Get current context
const currentNote = await editor.getCurrentNote()
const relatedNotes = await workspace.findRelatedNotes(currentNote.id)
return `Improve this note:
Current Note:
Title: ${currentNote.title}
Content:
${currentNote.content}
Related Notes:
${relatedNotes.map(n => `- ${n.title}`).join('\n')}
Suggest:
1. Content improvements
2. Additional links to related notes
3. Better structure or organization
4. Missing information to add`
},
arguments: []
})
}
}
Best Practices
1. Template Design
- Clear instructions
- Structured format
- Relevant context
- Specific requirements
- Example outputs
2. Variable Usage
- Descriptive names
- Required vs optional
- Default values
- Type safety
- Validation
3. Documentation
- Clear descriptions
- Usage examples
- Expected outputs
- Limitations
- Best practices
Next Steps
Related Documentation: