UNPKG

ultimate-mcp-server

Version:

The definitive all-in-one Model Context Protocol server for AI-assisted coding across 30+ platforms

81 lines 2.79 kB
import { Logger } from "../utils/logger.js"; export class PromptRegistry { prompts = new Map(); logger; constructor() { this.logger = new Logger("PromptRegistry"); } register(prompt) { if (this.prompts.has(prompt.name)) { throw new Error(`Prompt ${prompt.name} is already registered`); } this.prompts.set(prompt.name, prompt); this.logger.info(`Registered prompt: ${prompt.name}`); } unregister(name) { this.prompts.delete(name); this.logger.info(`Unregistered prompt: ${name}`); } async listPrompts() { return Array.from(this.prompts.values()).map((prompt) => ({ name: prompt.name, description: prompt.description, arguments: prompt.arguments?.map((arg) => ({ name: arg.name, description: arg.description, required: arg.required, })), })); } async getPrompt(name, args) { const prompt = this.prompts.get(name); if (!prompt) { throw new Error(`Prompt ${name} not found`); } try { // Validate required arguments if (prompt.arguments) { for (const arg of prompt.arguments) { if (arg.required && (!args || !(arg.name in args))) { throw new Error(`Missing required argument: ${arg.name}`); } } } // Apply defaults for missing optional arguments const finalArgs = { ...args }; if (prompt.arguments) { for (const arg of prompt.arguments) { if (!arg.required && arg.default !== undefined && !(arg.name in finalArgs)) { finalArgs[arg.name] = arg.default; } } } // Execute prompt handler const result = await prompt.handler(finalArgs); return { description: prompt.description, messages: result.messages.map((msg) => ({ role: msg.role, content: { type: "text", text: msg.content, }, })), }; } catch (error) { this.logger.error(`Failed to get prompt ${name}:`, error); throw error; } } getPromptCount() { return this.prompts.size; } getPromptDefinition(name) { return this.prompts.get(name); } getPromptsByTag(tag) { return Array.from(this.prompts.values()).filter((prompt) => prompt.tags?.includes(tag)); } } //# sourceMappingURL=prompt-registry.js.map