UNPKG

ultimate-mcp-server

Version:

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

65 lines 2.32 kB
import { Logger } from "../utils/logger.js"; export class ResourceRegistry { resources = new Map(); logger; constructor() { this.logger = new Logger("ResourceRegistry"); } register(resource) { if (this.resources.has(resource.uri)) { throw new Error(`Resource ${resource.uri} is already registered`); } this.resources.set(resource.uri, resource); this.logger.info(`Registered resource: ${resource.uri}`); } unregister(uri) { this.resources.delete(uri); this.logger.info(`Unregistered resource: ${uri}`); } async listResources() { return Array.from(this.resources.values()).map((resource) => ({ uri: resource.uri, name: resource.name, description: resource.description, mimeType: resource.mimeType, })); } async readResource(uri) { const resource = this.resources.get(uri); if (!resource) { throw new Error(`Resource ${uri} not found`); } try { const content = await resource.handler(); // Handle different content types if (typeof content === "string") { return { text: content, mimeType: resource.mimeType }; } else if (content && typeof content === "object" && "text" in content) { return { text: content.text, mimeType: content.mimeType || resource.mimeType }; } else { return { text: JSON.stringify(content, null, 2), mimeType: "application/json" }; } } catch (error) { this.logger.error(`Failed to read resource ${uri}:`, error); throw error; } } getResourceCount() { return this.resources.size; } getResource(uri) { return this.resources.get(uri); } getResourcesByTag(tag) { return Array.from(this.resources.values()).filter((resource) => resource.tags?.includes(tag)); } // Pattern matching for dynamic resources findMatchingResources(pattern) { const regex = new RegExp(pattern); return Array.from(this.resources.values()).filter((resource) => regex.test(resource.uri)); } } //# sourceMappingURL=resource-registry.js.map