@boundless-oss/atlas
Version:
Atlas - MCP Server for comprehensive startup project management
393 lines (373 loc) • 13.7 kB
text/typescript
/**
* Few-Shot Prompting Examples
* Implements MCP Design Guide Section 3.2 principles for guided tool selection
*/
export interface ToolSelectionExample {
userRequest: string;
context?: string;
correctToolCall: {
tool: string;
parameters: Record<string, any>;
};
reasoning: string;
commonMistakes?: string[];
}
export interface ExampleCategory {
category: string;
description: string;
examples: ToolSelectionExample[];
}
/**
* Comprehensive few-shot examples for tool selection guidance
*/
export const TOOL_SELECTION_EXAMPLES: ExampleCategory[] = [
{
category: 'Project Management',
description: 'Examples for project initialization and management tasks',
examples: [
{
userRequest: 'I want to start a new project for a SaaS application with user management',
correctToolCall: {
tool: 'initialize_atlas_project',
parameters: {
projectName: 'user-management-saas',
projectType: 'saas',
includeClaudeConfig: true
}
},
reasoning: 'Project initialization is the first step for any new project. The tool sets up the Atlas marker file and basic configuration.',
commonMistakes: [
'Using create_kanban_board first without project initialization',
'Using create_agile_sprint without setting up the project structure'
]
},
{
userRequest: 'Check if this directory is already set up as an Atlas project',
correctToolCall: {
tool: 'check_project_status',
parameters: {}
},
reasoning: 'Before doing any project operations, check if Atlas is already initialized to avoid conflicts.',
commonMistakes: [
'Assuming the project is not initialized and running init commands',
'Using find_atlas_project when a simple status check is needed'
]
}
]
},
{
category: 'Agile Planning',
description: 'Examples for agile methodology and sprint planning',
examples: [
{
userRequest: 'I need to plan a 2-week sprint for implementing user authentication',
context: 'Project already has a backlog with user stories',
correctToolCall: {
tool: 'create_sprint_interactive',
parameters: {
action: 'start'
}
},
reasoning: 'Interactive sprint creation guides through proper capacity planning and story selection, ensuring comprehensive sprint setup.',
commonMistakes: [
'Using create_agile_sprint without proper planning',
'Starting with add_story before creating the sprint structure'
]
},
{
userRequest: 'Add a user story: As a user, I want to reset my password so I can regain access to my account',
correctToolCall: {
tool: 'add_story',
parameters: {
title: 'Password Reset Functionality',
description: 'As a user, I want to reset my password so I can regain access to my account',
storyPoints: 5,
priority: 'high',
acceptanceCriteria: [
'User can request password reset via email',
'Reset link expires after 24 hours',
'New password must meet security requirements',
'User receives confirmation after successful reset'
]
}
},
reasoning: 'User stories should be well-formed with clear acceptance criteria and appropriate story point estimates.',
commonMistakes: [
'Not including acceptance criteria',
'Using unclear or overly technical story titles',
'Estimating without considering complexity properly'
]
},
{
userRequest: 'Create an epic for the entire user management system',
correctToolCall: {
tool: 'create_epic_interactive',
parameters: {
action: 'start'
}
},
reasoning: 'Interactive epic creation ensures comprehensive business context, success criteria, and planning considerations are captured.',
commonMistakes: [
'Using simple create_epic without considering business value',
'Creating epics that are too small or too large',
'Not defining clear success criteria'
]
}
]
},
{
category: 'Kanban Management',
description: 'Examples for visual task management with Kanban boards',
examples: [
{
userRequest: 'Set up a Kanban board for our development team workflow',
correctToolCall: {
tool: 'create_board_interactive',
parameters: {
action: 'start'
}
},
reasoning: 'Interactive board creation helps design the optimal workflow for the specific team and project needs.',
commonMistakes: [
'Using generic create_kanban_board without considering team workflow',
'Creating boards before understanding the process flow'
]
},
{
userRequest: 'Add a bug fix task to the development board',
correctToolCall: {
tool: 'add_kanban_task',
parameters: {
boardName: 'Development',
title: 'Fix login validation bug',
description: 'Users are able to login with invalid email formats, bypassing client-side validation',
column: 'Backlog',
priority: 'high',
tags: ['bug', 'security', 'frontend']
}
},
reasoning: 'Bugs should be clearly described with steps to reproduce and appropriate priority and tags for filtering.',
commonMistakes: [
'Not specifying the board name',
'Using vague descriptions',
'Not setting appropriate priority for bugs'
]
},
{
userRequest: 'Move the authentication task from "In Progress" to "Review"',
correctToolCall: {
tool: 'move_kanban_task',
parameters: {
boardName: 'Development',
taskId: 'auth-task-123',
column: 'Review'
}
},
reasoning: 'Task movement reflects workflow progression and requires specific task identification.',
commonMistakes: [
'Not providing the correct task ID',
'Moving to non-existent columns',
'Forgetting to specify the board name'
]
}
]
},
{
category: 'Development Workflow',
description: 'Examples for TDD and development process management',
examples: [
{
userRequest: 'I want to implement a new feature for user profile updates',
correctToolCall: {
tool: 'start_tdd_session',
parameters: {
featureName: 'User Profile Updates',
description: 'Allow users to update their profile information including name, email, and avatar'
}
},
reasoning: 'TDD sessions ensure proper test-first development and enforce the red-green-refactor cycle.',
commonMistakes: [
'Starting with create_feature instead of TDD session',
'Writing implementation code before tests',
'Not following the TDD cycle'
]
},
{
userRequest: 'Check if I am following TDD properly in my current work',
correctToolCall: {
tool: 'check_tdd_status',
parameters: {}
},
reasoning: 'Regular TDD status checks ensure compliance with test-driven development practices.',
commonMistakes: [
'Assuming TDD compliance without checking',
'Running tests instead of checking TDD workflow status'
]
},
{
userRequest: 'Run all tests to make sure my changes don\'t break anything',
correctToolCall: {
tool: 'run_tests',
parameters: {
scope: 'all',
coverage: true
}
},
reasoning: 'Comprehensive test runs ensure no regressions and provide coverage feedback.',
commonMistakes: [
'Running only unit tests when integration tests are needed',
'Not checking test coverage',
'Skipping tests before committing changes'
]
}
]
},
{
category: 'Memory and Context',
description: 'Examples for managing project knowledge and context',
examples: [
{
userRequest: 'Remember that we decided to use JWT tokens for authentication',
correctToolCall: {
tool: 'store_memory',
parameters: {
content: 'Authentication decision: Use JWT tokens for stateless authentication, with refresh token rotation for security',
type: 'architecture-decision',
tags: ['authentication', 'jwt', 'security', 'architecture']
}
},
reasoning: 'Important decisions should be stored with appropriate tags for future retrieval and context.',
commonMistakes: [
'Not tagging memories appropriately',
'Storing too little context',
'Not categorizing the memory type'
]
},
{
userRequest: 'What authentication approach did we decide on for this project?',
correctToolCall: {
tool: 'search_memories',
parameters: {
query: 'authentication decision JWT',
tags: ['authentication', 'architecture'],
limit: 5
}
},
reasoning: 'Memory search should use relevant keywords and tags to find architectural decisions.',
commonMistakes: [
'Using too broad search terms',
'Not using tags to filter results',
'Not providing enough context in the query'
]
}
]
},
{
category: 'Security Operations',
description: 'Examples for security scanning and vulnerability management',
examples: [
{
userRequest: 'Scan the codebase for potential security vulnerabilities',
correctToolCall: {
tool: 'perform_security_scan',
parameters: {
scope: 'full',
includeVulnerabilities: true,
includeDependencies: true
}
},
reasoning: 'Comprehensive security scans should check both code vulnerabilities and dependency issues.',
commonMistakes: [
'Only scanning code without checking dependencies',
'Not including vulnerability databases',
'Running superficial scans'
]
},
{
userRequest: 'Check if we have any hardcoded secrets in our code',
correctToolCall: {
tool: 'scan_for_secrets',
parameters: {
scope: 'all-files',
includeComments: true,
checkHistory: false
}
},
reasoning: 'Secret scanning should be comprehensive but focused on current state rather than git history for performance.',
commonMistakes: [
'Not scanning comments where secrets might be left',
'Scanning git history unnecessarily',
'Not checking configuration files'
]
}
]
}
];
/**
* Get relevant examples for a specific tool or category
*/
export function getExamplesForTool(toolName: string): ToolSelectionExample[] {
const allExamples = TOOL_SELECTION_EXAMPLES.flatMap(category => category.examples);
return allExamples.filter(example => example.correctToolCall.tool === toolName);
}
/**
* Get examples for a category
*/
export function getExamplesForCategory(categoryName: string): ToolSelectionExample[] {
const category = TOOL_SELECTION_EXAMPLES.find(cat => cat.category === categoryName);
return category ? category.examples : [];
}
/**
* Find the most relevant examples based on user request keywords
*/
export function findRelevantExamples(
userRequest: string,
maxExamples: number = 3
): ToolSelectionExample[] {
const allExamples = TOOL_SELECTION_EXAMPLES.flatMap(category => category.examples);
const keywords = userRequest.toLowerCase().split(/\s+/);
// Score examples based on keyword matches
const scoredExamples = allExamples.map(example => {
let score = 0;
const exampleText = (example.userRequest + ' ' + example.reasoning).toLowerCase();
keywords.forEach(keyword => {
if (exampleText.includes(keyword)) {
score += 1;
}
});
return { example, score };
});
// Return top examples sorted by score
return scoredExamples
.filter(item => item.score > 0)
.sort((a, b) => b.score - a.score)
.slice(0, maxExamples)
.map(item => item.example);
}
/**
* Format examples for inclusion in prompts
*/
export function formatExamplesForPrompt(examples: ToolSelectionExample[]): string {
if (examples.length === 0) {
return '';
}
let formatted = '**Examples of Correct Tool Usage:**\n\n';
examples.forEach((example, index) => {
formatted += `**Example ${index + 1}:**\n`;
formatted += `User Request: "${example.userRequest}"\n`;
if (example.context) {
formatted += `Context: ${example.context}\n`;
}
formatted += `Correct Tool Call: \`${example.correctToolCall.tool}\`\n`;
formatted += `Parameters: \`${JSON.stringify(example.correctToolCall.parameters, null, 2)}\`\n`;
formatted += `Reasoning: ${example.reasoning}\n`;
if (example.commonMistakes && example.commonMistakes.length > 0) {
formatted += `Common Mistakes to Avoid:\n`;
example.commonMistakes.forEach(mistake => {
formatted += `- ${mistake}\n`;
});
}
formatted += '\n';
});
return formatted;
}