UNPKG

breathe-api

Version:

Model Context Protocol server for Breathe HR APIs with Swagger/OpenAPI support - also works with custom APIs

96 lines 3.29 kB
import { resourceManager } from '../utils/resource-manager.js'; import { BaseError } from '../utils/errors.js'; export async function handleListResources(_request) { try { const resources = await resourceManager.listResources(); const mcpResources = resources.map(res => ({ uri: res.uri, name: res.name, description: res.description, mimeType: res.mimeType })); return { resources: mcpResources }; } catch (error) { throw new BaseError(`Failed to list resources: ${error.message}`, 'RESOURCE_LIST_ERROR', { error: error.message }); } } export async function handleReadResource(request) { try { const { uri } = request.params; const content = await resourceManager.readResource(uri); const mcpContent = content.text ? { uri: content.uri, mimeType: content.mimeType, text: content.text } : { uri: content.uri, mimeType: content.mimeType, blob: content.blob || '' }; return { contents: [mcpContent] }; } catch (error) { throw new BaseError(`Failed to read resource: ${error.message}`, 'RESOURCE_READ_ERROR', { uri: request.params.uri, error: error.message }); } } export async function handleListResourceTemplates(_request) { try { const templates = resourceManager.getResourceTemplates(); const mcpTemplates = templates.map(template => ({ uriTemplate: template.uriTemplate, name: template.name, description: template.description, mimeType: template.mimeType })); return { resourceTemplates: mcpTemplates }; } catch (error) { throw new BaseError(`Failed to list resource templates: ${error.message}`, 'RESOURCE_TEMPLATE_ERROR', { error: error.message }); } } export async function handleResourceSubscribe(uri, callback) { let intervalId = null; let lastContent = null; const checkForUpdates = async () => { try { const content = await resourceManager.readResource(uri); const currentContent = content.text || content.blob || ''; if (currentContent !== lastContent) { lastContent = currentContent; const mcpContent = content.text ? { uri: content.uri, mimeType: content.mimeType, text: content.text } : { uri: content.uri, mimeType: content.mimeType, blob: content.blob || '' }; callback(mcpContent); } } catch (error) { console.error(`Error checking resource updates for ${uri}:`, error); } }; checkForUpdates(); intervalId = setInterval(checkForUpdates, 30000); return () => { if (intervalId) { clearInterval(intervalId); intervalId = null; } }; } //# sourceMappingURL=handler.js.map