drawio-mcp-server
Version:
Provides Draw.io services to MCP Clients
41 lines (40 loc) • 1.43 kB
JavaScript
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;
}