Skip to main content
Glama
apolosan

Design Patterns MCP Server

by apolosan
cloud-patterns.test.ts5.97 kB
import { describe, it, expect, beforeAll, afterAll } from 'vitest'; import { DatabaseManager } from '../../src/services/database-manager'; import { createPatternSeeder } from '../../src/services/pattern-seeder'; import path from 'path'; async function createFullSchema(dbManager: DatabaseManager): Promise<void> { // Drop existing tables to ensure clean schema dbManager.execute('DROP TABLE IF EXISTS pattern_embeddings'); dbManager.execute('DROP TABLE IF EXISTS pattern_relationships'); dbManager.execute('DROP TABLE IF EXISTS pattern_implementations'); dbManager.execute('DROP TABLE IF EXISTS patterns'); // Create patterns table with all columns including examples dbManager.execute(` CREATE TABLE patterns ( id TEXT PRIMARY KEY, name TEXT NOT NULL, category TEXT NOT NULL, description TEXT NOT NULL, when_to_use TEXT, benefits TEXT, drawbacks TEXT, use_cases TEXT, complexity TEXT NOT NULL, tags TEXT, examples TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ) `); // Create pattern_implementations table dbManager.execute(` CREATE TABLE IF NOT EXISTS pattern_implementations ( id TEXT PRIMARY KEY, pattern_id TEXT NOT NULL, language TEXT NOT NULL, approach TEXT NOT NULL, code TEXT NOT NULL, explanation TEXT NOT NULL, dependencies TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (pattern_id) REFERENCES patterns(id) ON DELETE CASCADE ) `); // Create pattern_relationships table dbManager.execute(` CREATE TABLE IF NOT EXISTS pattern_relationships ( id TEXT PRIMARY KEY, source_pattern_id TEXT NOT NULL, target_pattern_id TEXT NOT NULL, type TEXT NOT NULL, strength REAL DEFAULT 1.0, description TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (source_pattern_id) REFERENCES patterns(id) ON DELETE CASCADE, FOREIGN KEY (target_pattern_id) REFERENCES patterns(id) ON DELETE CASCADE ) `); // Create pattern_embeddings table dbManager.execute(` CREATE TABLE IF NOT EXISTS pattern_embeddings ( pattern_id TEXT PRIMARY KEY, embedding TEXT NOT NULL, model TEXT NOT NULL, strategy TEXT NOT NULL, dimensions INTEGER NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) `); // Create indexes dbManager.execute('CREATE INDEX IF NOT EXISTS idx_patterns_category ON patterns(category)'); dbManager.execute('CREATE INDEX IF NOT EXISTS idx_patterns_complexity ON patterns(complexity)'); dbManager.execute( 'CREATE INDEX IF NOT EXISTS idx_pattern_implementations_pattern_id ON pattern_implementations(pattern_id)' ); dbManager.execute( 'CREATE INDEX IF NOT EXISTS idx_pattern_implementations_language ON pattern_implementations(language)' ); dbManager.execute( 'CREATE INDEX IF NOT EXISTS idx_pattern_relationships_source ON pattern_relationships(source_pattern_id)' ); dbManager.execute( 'CREATE INDEX IF NOT EXISTS idx_pattern_relationships_target ON pattern_relationships(target_pattern_id)' ); dbManager.execute( 'CREATE INDEX IF NOT EXISTS idx_pattern_relationships_type ON pattern_relationships(type)' ); } describe('Cloud-Native Patterns', () => { let dbManager: DatabaseManager; beforeAll(async () => { // Initialize test database dbManager = new DatabaseManager({ filename: ':memory:', options: { readonly: false }, }); await dbManager.initialize(); // Create full schema manually (since migrations fail on in-memory DBs with existing tables) await createFullSchema(dbManager); // Seed patterns for testing const seeder = createPatternSeeder(dbManager, { patternsPath: path.resolve(__dirname, '../../data/patterns'), batchSize: 10, skipExisting: false, }); const result = await seeder.seedAll(); if (!result.success) { throw new Error(`Failed to seed patterns: ${result.message}`); } }); afterAll(async () => { if (dbManager) { await dbManager.close(); } }); it('should recommend Circuit Breaker for fault tolerance', () => { const circuitBreaker = dbManager.queryOne( 'SELECT * FROM patterns WHERE name = ? AND category = ?', ['Circuit Breaker', 'Cloud-Native'] ); expect(circuitBreaker).toBeTruthy(); expect(circuitBreaker!.name).toBe('Circuit Breaker'); expect(circuitBreaker!.category).toBe('Cloud-Native'); }); it('should recommend Retry Pattern for fault tolerance', () => { const retryPattern = dbManager.queryOne( 'SELECT * FROM patterns WHERE name = ? AND category = ?', ['Retry Pattern', 'Cloud-Native'] ); expect(retryPattern).toBeTruthy(); expect(retryPattern!.name).toBe('Retry Pattern'); expect(retryPattern!.category).toBe('Cloud-Native'); }); it('should recommend Bulkhead Pattern for resource isolation', () => { const bulkhead = dbManager.queryOne('SELECT * FROM patterns WHERE name = ? AND category = ?', [ 'Bulkhead Pattern', 'Cloud-Native', ]); expect(bulkhead).toBeTruthy(); expect(bulkhead!.name).toBe('Bulkhead Pattern'); expect(bulkhead!.category).toBe('Cloud-Native'); }); it('should recommend Timeout Pattern for resource protection', () => { const timeout = dbManager.queryOne('SELECT * FROM patterns WHERE name = ? AND category = ?', [ 'Timeout Pattern', 'Cloud-Native', ]); expect(timeout).toBeTruthy(); expect(timeout!.name).toBe('Timeout Pattern'); expect(timeout!.category).toBe('Cloud-Native'); }); it('should include Kubernetes patterns', () => { const cloudPatterns = dbManager.query('SELECT * FROM patterns WHERE category = ?', [ 'Cloud-Native', ]); expect(cloudPatterns.length).toBeGreaterThan(5); }); });

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/apolosan/design_patterns_mcp'

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