Ctrl K
ComunidadGuías…

lib/mcp-query-bridge.js

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
var descriptors = require('./yoke/sdk-mcp-descriptors').extractMcpDescriptors;
function createQueryBridge(ctx) {
  function valid() {
    if (!ctx.valid()) throw new Error('MCP tools require the current authorized query.');
  }
  function list() {
    if (!ctx.valid()) return [];
    var servers = descriptors(ctx.getServers()) || [], tools = [];
    servers.forEach(function (server) {
      server.tools.forEach(function (tool) { tools.push(Object.assign({ server: server.serverName }, tool)); });
    });
    return tools;
  }
  async function call(serverName, toolName, args) {
    valid();
    var server = ctx.getServers()[serverName], tool = server && server.instance && server.instance._registeredTools[toolName];
    if (!tool || typeof (tool.handler || tool.callback) !== 'function') throw new Error('MCP tool is unavailable.');
    var result = await (tool.handler || tool.callback)(args || {});
    valid(); return result;
  }
  function dynamicDefs() {
    return list().map(function (tool) {
      return { name: 'mcp__' + tool.server + '__' + tool.name, permissionName: 'mcp__' + tool.server + '__' + tool.name,
        description: tool.description, inputSchema: tool.inputSchema, queryBound: true,
        handler: function (args) { return call(tool.server, tool.name, args); } };
    });
  }
  return { list: list, call: call, dynamicDefs: dynamicDefs };
}
module.exports = { createQueryBridge: createQueryBridge };