Skip to main content
Glama
prompt-indexing.service.ts5.44 kB
#!/usr/bin/env node import { IPromptRepository } from '../ports/prompt-repository.interface'; import { ICatalogRepository } from '../ports/catalog-repository.interface'; import { Prompt } from '../entities/prompt.entity'; export class PromptIndexingService { constructor( private promptRepository: IPromptRepository, private catalogRepository: ICatalogRepository ) {} async indexPrompt(promptId: string): Promise<void> { try { console.log(`Indexing prompt: ${promptId}`); // Get prompt from repository const prompt = await this.promptRepository.findById(promptId); if (!prompt) { console.warn(`Prompt not found for indexing: ${promptId}`); return; } // Update search index (this could be enhanced with Elasticsearch or similar) // For now, we'll just log the indexing console.log(`Indexed prompt: ${prompt.name} (${prompt.category})`); // Update metadata with indexing timestamp const updatedMetadata = { ...prompt.metadata, lastIndexed: new Date().toISOString(), indexedVersion: prompt.version }; // Save updated prompt with metadata const updatedPrompt = new Prompt( prompt.id, prompt.name, prompt.description, prompt.template, prompt.category, prompt.tags, prompt.variables, prompt.version, prompt.createdAt, prompt.updatedAt, prompt.isLatest, updatedMetadata ); await this.promptRepository.save(updatedPrompt); } catch (error) { console.error(`Error indexing prompt ${promptId}:`, error); throw error; } } async removeFromIndex(promptId: string): Promise<void> { try { console.log(`Removing prompt from index: ${promptId}`); // Remove from search index // For now, we'll just log the removal console.log(`Removed prompt from index: ${promptId}`); } catch (error) { console.error(`Error removing prompt from index ${promptId}:`, error); throw error; } } async reindexAll(): Promise<void> { try { console.log('Starting full reindex...'); // Get all latest prompts const prompts = await this.promptRepository.findLatestVersions(1000); for (const prompt of prompts) { await this.indexPrompt(prompt.id); } console.log(`Reindexed ${prompts.length} prompts`); } catch (error) { console.error('Error during full reindex:', error); throw error; } } async syncFromCatalog(): Promise<void> { try { console.log('Syncing prompts from catalog...'); // Get catalog index const catalog = await this.catalogRepository.getCatalogIndex(); if (!catalog.categories) { console.log('No categories found in catalog'); return; } let syncedCount = 0; // Process each category for (const [category, categoryPrompts] of Object.entries(catalog.categories)) { if (typeof categoryPrompts === 'object' && categoryPrompts !== null) { for (const [promptName, promptData] of Object.entries(categoryPrompts as any)) { try { // Get prompt template from catalog const template = await this.catalogRepository.getPromptTemplate(category, promptName); // Create or update prompt in repository const promptId = `${category}_${promptName}`; const existingPrompt = await this.promptRepository.findById(promptId); if (existingPrompt) { // Update existing prompt const updatedPrompt = new Prompt( existingPrompt.id, existingPrompt.name, existingPrompt.description, template, category, existingPrompt.tags, existingPrompt.variables, existingPrompt.version, existingPrompt.createdAt, new Date(), existingPrompt.isLatest, existingPrompt.metadata ); await this.promptRepository.save(updatedPrompt); } else { // Create new prompt const newPrompt = new Prompt( promptId, promptName, (promptData as any).description || '', template, category, (promptData as any).tags || [], (promptData as any).variables || [], 'latest', new Date(), new Date(), true, { source: 'catalog', syncedAt: new Date().toISOString() } ); await this.promptRepository.save(newPrompt); } syncedCount++; } catch (error) { console.error(`Error syncing prompt ${category}/${promptName}:`, error); } } } } console.log(`Synced ${syncedCount} prompts from catalog`); } catch (error) { console.error('Error syncing from catalog:', error); throw error; } } }

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/sparesparrow/mcp-prompts'

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