UNPKG

drawio-mcp-server

Version:

Provides Draw.io services to MCP Clients

41 lines (40 loc) 1.43 kB
import { strip_internal_fields } from "./events.js"; export function build_channel({ bus, id_generator, log }, event_name, handler) { const fn = async (_args, _extra) => { const request_id = id_generator.generate(); // const event_name = `get-selected-cell`; const reply_name = `${event_name}.${request_id}`; bus.send_to_extension({ __event: event_name, __request_id: request_id, ..._args, }); log.debug(`[${event_name}] emitted, waiting for reply @${reply_name}`); const p = new Promise((resolve, _reject) => { log.debug(`[${event_name}] waiting for response @${reply_name}`); bus.on_reply_from_extension(reply_name, (reply) => { // bus.on(reply_name, (args) => { log.debug(`[${reply_name}] received response`, reply); const data = strip_internal_fields(reply); const response = handler(data); resolve(response); }); }); return p; }; return fn; } export function default_tool(name, context) { const fn = build_channel(context, name, (reply) => { const response = { content: [ { type: "text", text: JSON.stringify(reply), }, ], }; return response; }); return fn; }