Skip to main content
Glama
apolosan

Design Patterns MCP Server

by apolosan

search_patterns

Find relevant design patterns by keyword or semantic search to solve programming challenges and implement effective software solutions.

Instructions

Search patterns by keyword or semantic similarity

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesSearch query
searchTypeNohybrid

Implementation Reference

  • Primary handler for the 'search_patterns' tool. Processes input arguments, performs semantic search using SemanticSearchService, formats results as markdown text content, and returns MCP-compatible response.
    private async handleSearchPatterns(args: any): Promise<any> { const query = { text: args.query, filters: args.filters || {}, options: { limit: args.limit || 10, includeMetadata: true, }, }; const results = await this.semanticSearch.search(query); return { content: [ { type: 'text', text: `Search results for "${args.query}":\n\n` + results .map( (result, index) => `${index + 1}. **${result.pattern.name}** (${result.pattern.category})\n` + ` Score: ${(result.score * 100).toFixed(1)}%\n` + ` Description: ${result.pattern.description}\n` ) .join('\n'), }, ], }; }
  • Tool registration in the list_tools response, defining the name, description, and input schema for 'search_patterns'.
    name: 'search_patterns', description: 'Search patterns by keyword or semantic similarity', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Search query', }, searchType: { type: 'string', enum: ['keyword', 'semantic', 'hybrid'], default: 'hybrid', }, limit: { type: 'number', default: 10, }, }, required: ['query'], },
  • Alternative/complementary handler in MCPToolsHandler class supporting keyword, semantic, and hybrid search modes via adapters.
    private async handleSearchPatterns(args: any): Promise<any> { // Validate input if (!args.query || typeof args.query !== 'string' || args.query.length < 2) { throw new Error('Query must be at least 2 characters long'); } const searchType = args.search_type || 'hybrid'; const limit = Math.min(args.limit || 10, 50); try { let results: any[]; if (searchType === 'semantic') { // Use semantic search results = await this.config.semanticSearch.search(args.query, { limit, filters: args.category_filter ? { categories: [args.category_filter] } : undefined, }); } else if (searchType === 'keyword') { // Use keyword search results = await this.config.databaseManager.searchPatterns(args.query, { limit, filters: args.category_filter ? { categories: [args.category_filter] } : undefined, }); } else { // Hybrid search const semanticResults = await this.config.semanticSearch.search(args.query, { limit: Math.ceil(limit / 2), filters: args.category_filter ? { categories: [args.category_filter] } : undefined, }); const keywordResults = await this.config.databaseManager.searchPatterns(args.query, { limit: Math.ceil(limit / 2), filters: args.category_filter ? { categories: [args.category_filter] } : undefined, }); // Merge and deduplicate results results = this.mergeSearchResults(semanticResults, keywordResults, limit); } return { patterns: results, total_results: results.length, search_type: searchType, limit, timestamp: new Date().toISOString(), }; } catch (error) { throw new Error( `Pattern search failed: ${error instanceof Error ? error.message : String(error)}` ); } }
  • Tool registration in MCPToolsHandler.getTools(), including detailed input schema with validation constraints.
    name: 'search_patterns', description: 'Search patterns using keyword or semantic search', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Search query', minLength: 2, maxLength: 500, }, search_type: { type: 'string', description: 'Type of search to perform', enum: ['keyword', 'semantic', 'hybrid'], default: 'hybrid', }, category_filter: { type: 'array', items: { type: 'string', }, description: 'Filter by pattern categories', }, limit: { type: 'number', description: 'Maximum number of results', minimum: 1, maximum: 50, default: 10, }, }, required: ['query'], },
  • Database helper method for keyword-based pattern search using SQL LIKE queries.
    async searchPatterns(query: string): Promise<Pattern[]> { const searchTerm = `%${query}%`; const sql = ` SELECT * FROM patterns WHERE name LIKE ? OR description LIKE ? OR tags LIKE ? ORDER BY name `; return this.db.query<Pattern>(sql, [searchTerm, searchTerm, searchTerm]); }

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