@mickdarling/dollhousemcp
Version:
DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.
40 lines • 3.99 kB
JavaScript
/**
* Tool Registry for managing MCP tool definitions and handlers
*/
export class ToolRegistry {
tools = new Map();
/**
* Register a tool with its definition and handler
*/
register(tool, handler) {
if (handler) {
tool.handler = handler;
}
this.tools.set(tool.name, tool);
}
/**
* Register multiple tools at once
*/
registerMany(tools) {
tools.forEach(({ tool, handler }) => this.register(tool, handler));
}
/**
* Get all registered tools (for ListToolsRequest)
*/
getAllTools() {
return Array.from(this.tools.values()).map(({ handler, ...tool }) => tool);
}
/**
* Get a specific tool handler
*/
getHandler(name) {
return this.tools.get(name)?.handler;
}
/**
* Check if a tool exists
*/
has(name) {
return this.tools.has(name);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9vbFJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZlci90b29scy9Ub29sUmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFZSCxNQUFNLE9BQU8sWUFBWTtJQUNmLEtBQUssR0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUV2RDs7T0FFRztJQUNILFFBQVEsQ0FBQyxJQUFvQixFQUFFLE9BQXFCO1FBQ2xELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsS0FBNkQ7UUFDeEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxJQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxJQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRvb2wgUmVnaXN0cnkgZm9yIG1hbmFnaW5nIE1DUCB0b29sIGRlZmluaXRpb25zIGFuZCBoYW5kbGVyc1xuICovXG5cbmltcG9ydCB7IFRvb2wgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xIYW5kbGVyIHtcbiAgKGFyZ3M6IGFueSk6IFByb21pc2U8YW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb29sRGVmaW5pdGlvbiBleHRlbmRzIFRvb2wge1xuICBoYW5kbGVyPzogVG9vbEhhbmRsZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUb29sUmVnaXN0cnkge1xuICBwcml2YXRlIHRvb2xzOiBNYXA8c3RyaW5nLCBUb29sRGVmaW5pdGlvbj4gPSBuZXcgTWFwKCk7XG4gIFxuICAvKipcbiAgICogUmVnaXN0ZXIgYSB0b29sIHdpdGggaXRzIGRlZmluaXRpb24gYW5kIGhhbmRsZXJcbiAgICovXG4gIHJlZ2lzdGVyKHRvb2w6IFRvb2xEZWZpbml0aW9uLCBoYW5kbGVyPzogVG9vbEhhbmRsZXIpOiB2b2lkIHtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgdG9vbC5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICB9XG4gICAgdGhpcy50b29scy5zZXQodG9vbC5uYW1lLCB0b29sKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFJlZ2lzdGVyIG11bHRpcGxlIHRvb2xzIGF0IG9uY2VcbiAgICovXG4gIHJlZ2lzdGVyTWFueSh0b29sczogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcj86IFRvb2xIYW5kbGVyIH0+KTogdm9pZCB7XG4gICAgdG9vbHMuZm9yRWFjaCgoeyB0b29sLCBoYW5kbGVyIH0pID0+IHRoaXMucmVnaXN0ZXIodG9vbCwgaGFuZGxlcikpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGFsbCByZWdpc3RlcmVkIHRvb2xzIChmb3IgTGlzdFRvb2xzUmVxdWVzdClcbiAgICovXG4gIGdldEFsbFRvb2xzKCk6IFRvb2xbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50b29scy52YWx1ZXMoKSkubWFwKCh7IGhhbmRsZXIsIC4uLnRvb2wgfSkgPT4gdG9vbCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgYSBzcGVjaWZpYyB0b29sIGhhbmRsZXJcbiAgICovXG4gIGdldEhhbmRsZXIobmFtZTogc3RyaW5nKTogVG9vbEhhbmRsZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRvb2xzLmdldChuYW1lKT8uaGFuZGxlcjtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdG9vbCBleGlzdHNcbiAgICovXG4gIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b29scy5oYXMobmFtZSk7XG4gIH1cbn0iXX0=