Skip to main content
Glama

vibe_learn

Identify and categorize recurring errors with solutions to prevent repeated mistakes. Utilizes pattern recognition to enhance learning and streamline decision-making processes.

Instructions

Pattern recognition system that tracks common errors and solutions to prevent recurring issues

Input Schema

NameRequiredDescriptionDefault
categoryYesCategory (standard categories: Complex Solution Bias, Feature Creep, Premature Implementation, Misalignment, Overtooling, Preference, Success, Other)
mistakeYesOne-sentence description of the learning entry
sessionIdNoOptional session ID for state management
solutionNoHow it was corrected (if applicable)
typeNoType of learning entry

Input Schema (JSON Schema)

{ "properties": { "category": { "description": "Category (standard categories: Complex Solution Bias, Feature Creep, Premature Implementation, Misalignment, Overtooling, Preference, Success, Other)", "enum": [ "Complex Solution Bias", "Feature Creep", "Premature Implementation", "Misalignment", "Overtooling", "Preference", "Success", "Other" ], "type": "string" }, "mistake": { "description": "One-sentence description of the learning entry", "type": "string" }, "sessionId": { "description": "Optional session ID for state management", "type": "string" }, "solution": { "description": "How it was corrected (if applicable)", "type": "string" }, "type": { "description": "Type of learning entry", "enum": [ "mistake", "preference", "success" ], "type": "string" } }, "required": [ "mistake", "category" ], "type": "object" }

Implementation Reference

  • Primary handler function executing the core logic of the vibe_learn tool: validates input, enforces single-sentence format, checks for duplicates, stores learning entry, and returns category summary.
    export async function vibeLearnTool(input: VibeLearnInput): Promise<VibeLearnOutput> { try { // Validate input if (!input.mistake) { throw new Error('Mistake description is required'); } if (!input.category) { throw new Error('Mistake category is required'); } const entryType: LearningType = input.type ?? 'mistake'; if (entryType !== 'preference' && !input.solution) { throw new Error('Solution is required for this entry type'); } // Enforce single-sentence constraints const mistake = enforceOneSentence(input.mistake); const solution = input.solution ? enforceOneSentence(input.solution) : undefined; // Normalize category to one of our standard categories if possible const category = normalizeCategory(input.category); // Check for similar mistake const existing = getLearningEntries()[category] || []; const alreadyKnown = existing.some(e => isSimilar(e.mistake, mistake)); // Add mistake to log if new let entry: LearningEntry | undefined; if (!alreadyKnown) { entry = addLearningEntry(mistake, category, solution, entryType); } // Get category summaries const categorySummary = getLearningCategorySummary(); // Find current tally for this category const categoryData = categorySummary.find(m => m.category === category); const currentTally = categoryData?.count || 1; // Get top 3 categories const topCategories = categorySummary.slice(0, 3); return { added: !alreadyKnown, alreadyKnown, currentTally, topCategories }; } catch (error) { console.error('Error in vibe_learn tool:', error); return { added: false, alreadyKnown: false, currentTally: 0, topCategories: [] }; } }
  • TypeScript interfaces defining input and output schemas for the vibe_learn tool.
    export interface VibeLearnInput { mistake: string; category: string; solution?: string; type?: LearningType; sessionId?: string; } export interface VibeLearnOutput { added: boolean; currentTally: number; alreadyKnown?: boolean; topCategories: Array<{ category: string; count: number; recentExample: LearningEntry; }>; }
  • src/index.ts:131-167 (registration)
    Tool registration in the MCP listTools handler, including name, description, and JSON schema for input validation.
    name: 'vibe_learn', description: 'Pattern recognition system that tracks common errors and solutions to prevent recurring issues', inputSchema: { type: 'object', properties: { mistake: { type: 'string', description: 'One-sentence description of the learning entry', examples: ['Skipped writing tests'] }, category: { type: 'string', description: `Category (standard categories: ${STANDARD_CATEGORIES.join(', ')})`, enum: STANDARD_CATEGORIES, examples: ['Premature Implementation'] }, solution: { type: 'string', description: 'How it was corrected (if applicable)', examples: ['Added regression tests'] }, type: { type: 'string', enum: ['mistake', 'preference', 'success'], description: 'Type of learning entry', examples: ['mistake'] }, sessionId: { type: 'string', description: 'Optional session ID for state management', examples: ['session-123'] } }, required: ['mistake', 'category'], additionalProperties: false } },
  • MCP protocol handler for callTool requests to 'vibe_learn': parses arguments, validates, calls vibeLearnTool, formats output.
    case 'vibe_learn': { const missing: string[] = []; if (!args || typeof args.mistake !== 'string') missing.push('mistake'); if (!args || typeof args.category !== 'string') missing.push('category'); if (missing.length) { const example = '{"mistake":"Skipped tests","category":"Feature Creep"}'; const message = IS_DISCOVERY ? `discovery: missing [${missing.join(', ')}]; example: ${example}` : `Missing: ${missing.join(', ')}. Example: ${example}`; throw new McpError(ErrorCode.InvalidParams, message); } const input: VibeLearnInput = { mistake: args.mistake, category: args.category, solution: typeof args.solution === 'string' ? args.solution : undefined, type: ['mistake', 'preference', 'success'].includes(args.type as string) ? (args.type as LearningType) : undefined, sessionId: typeof args.sessionId === 'string' ? args.sessionId : undefined }; const result = await vibeLearnTool(input); return { content: [{ type: 'text', text: formatVibeLearnOutput(result) }] }; }
  • Supporting helper functions used by the handler: enforceOneSentence for input normalization, isSimilar for duplicate detection, normalizeCategory for standardization.
    } /** * Ensure text is a single sentence */ function enforceOneSentence(text: string): string {

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PV-Bhat/vibe-check-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server