@botuyo/mcp 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tools/__tests__/associate_knowledge.spec.d.ts +1 -0
- package/dist/tools/__tests__/associate_knowledge.spec.js +23 -0
- package/dist/tools/__tests__/associate_knowledge.spec.js.map +1 -0
- package/dist/tools/__tests__/configure_agent_tool.spec.d.ts +1 -0
- package/dist/tools/__tests__/configure_agent_tool.spec.js +36 -0
- package/dist/tools/__tests__/configure_agent_tool.spec.js.map +1 -0
- package/dist/tools/__tests__/create_agent.spec.d.ts +1 -0
- package/dist/tools/__tests__/create_agent.spec.js +23 -0
- package/dist/tools/__tests__/create_agent.spec.js.map +1 -0
- package/dist/tools/__tests__/create_from_template.spec.d.ts +1 -0
- package/dist/tools/__tests__/create_from_template.spec.js +21 -0
- package/dist/tools/__tests__/create_from_template.spec.js.map +1 -0
- package/dist/tools/__tests__/delete_agent.spec.d.ts +1 -0
- package/dist/tools/__tests__/delete_agent.spec.js +31 -0
- package/dist/tools/__tests__/delete_agent.spec.js.map +1 -0
- package/dist/tools/__tests__/delete_knowledge_doc.spec.d.ts +1 -0
- package/dist/tools/__tests__/delete_knowledge_doc.spec.js +17 -0
- package/dist/tools/__tests__/delete_knowledge_doc.spec.js.map +1 -0
- package/dist/tools/__tests__/example_agent.spec.d.ts +1 -0
- package/dist/tools/__tests__/example_agent.spec.js +12 -0
- package/dist/tools/__tests__/example_agent.spec.js.map +1 -0
- package/dist/tools/__tests__/export_agent_json.spec.d.ts +1 -0
- package/dist/tools/__tests__/export_agent_json.spec.js +30 -0
- package/dist/tools/__tests__/export_agent_json.spec.js.map +1 -0
- package/dist/tools/__tests__/get_agent.spec.d.ts +1 -0
- package/dist/tools/__tests__/get_agent.spec.js +19 -0
- package/dist/tools/__tests__/get_agent.spec.js.map +1 -0
- package/dist/tools/__tests__/get_agent_status.spec.d.ts +1 -0
- package/dist/tools/__tests__/get_agent_status.spec.js +16 -0
- package/dist/tools/__tests__/get_agent_status.spec.js.map +1 -0
- package/dist/tools/__tests__/get_tool_config.spec.d.ts +1 -0
- package/dist/tools/__tests__/get_tool_config.spec.js +17 -0
- package/dist/tools/__tests__/get_tool_config.spec.js.map +1 -0
- package/dist/tools/__tests__/import_agent_json.spec.d.ts +1 -0
- package/dist/tools/__tests__/import_agent_json.spec.js +28 -0
- package/dist/tools/__tests__/import_agent_json.spec.js.map +1 -0
- package/dist/tools/__tests__/list_agents.spec.d.ts +1 -0
- package/dist/tools/__tests__/list_agents.spec.js +16 -0
- package/dist/tools/__tests__/list_agents.spec.js.map +1 -0
- package/dist/tools/__tests__/list_available_tools.spec.d.ts +1 -0
- package/dist/tools/__tests__/list_available_tools.spec.js +16 -0
- package/dist/tools/__tests__/list_available_tools.spec.js.map +1 -0
- package/dist/tools/__tests__/list_base_tools.spec.d.ts +1 -0
- package/dist/tools/__tests__/list_base_tools.spec.js +29 -0
- package/dist/tools/__tests__/list_base_tools.spec.js.map +1 -0
- package/dist/tools/__tests__/list_knowledge_docs.spec.d.ts +1 -0
- package/dist/tools/__tests__/list_knowledge_docs.spec.js +22 -0
- package/dist/tools/__tests__/list_knowledge_docs.spec.js.map +1 -0
- package/dist/tools/__tests__/list_templates.spec.d.ts +1 -0
- package/dist/tools/__tests__/list_templates.spec.js +16 -0
- package/dist/tools/__tests__/list_templates.spec.js.map +1 -0
- package/dist/tools/__tests__/list_tool_configs.spec.d.ts +1 -0
- package/dist/tools/__tests__/list_tool_configs.spec.js +31 -0
- package/dist/tools/__tests__/list_tool_configs.spec.js.map +1 -0
- package/dist/tools/__tests__/publish_agent.spec.d.ts +1 -0
- package/dist/tools/__tests__/publish_agent.spec.js +18 -0
- package/dist/tools/__tests__/publish_agent.spec.js.map +1 -0
- package/dist/tools/__tests__/remove_tool_config.spec.d.ts +1 -0
- package/dist/tools/__tests__/remove_tool_config.spec.js +26 -0
- package/dist/tools/__tests__/remove_tool_config.spec.js.map +1 -0
- package/dist/tools/__tests__/switch_tenant.spec.d.ts +1 -0
- package/dist/tools/__tests__/switch_tenant.spec.js +32 -0
- package/dist/tools/__tests__/switch_tenant.spec.js.map +1 -0
- package/dist/tools/__tests__/update_agent.spec.d.ts +1 -0
- package/dist/tools/__tests__/update_agent.spec.js +23 -0
- package/dist/tools/__tests__/update_agent.spec.js.map +1 -0
- package/dist/tools/__tests__/update_enabled_tools.spec.d.ts +1 -0
- package/dist/tools/__tests__/update_enabled_tools.spec.js +18 -0
- package/dist/tools/__tests__/update_enabled_tools.spec.js.map +1 -0
- package/dist/tools/__tests__/upsert_stage.spec.d.ts +1 -0
- package/dist/tools/__tests__/upsert_stage.spec.js +27 -0
- package/dist/tools/__tests__/upsert_stage.spec.js.map +1 -0
- package/dist/tools/configure_agent_tool.d.ts +4 -0
- package/dist/tools/configure_agent_tool.js +41 -0
- package/dist/tools/configure_agent_tool.js.map +1 -0
- package/dist/tools/get_tool_config.d.ts +4 -0
- package/dist/tools/get_tool_config.js +20 -0
- package/dist/tools/get_tool_config.js.map +1 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list_base_tools.d.ts +4 -0
- package/dist/tools/list_base_tools.js +32 -0
- package/dist/tools/list_base_tools.js.map +1 -0
- package/dist/tools/list_tool_configs.d.ts +6 -0
- package/dist/tools/list_tool_configs.js +59 -0
- package/dist/tools/list_tool_configs.js.map +1 -0
- package/dist/tools/remove_tool_config.d.ts +4 -0
- package/dist/tools/remove_tool_config.js +22 -0
- package/dist/tools/remove_tool_config.js.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { removeToolConfigHandler } from '../remove_tool_config.js';
|
|
3
|
+
class MockDeleteClient {
|
|
4
|
+
paths = [];
|
|
5
|
+
async delete(path) {
|
|
6
|
+
this.paths.push(path);
|
|
7
|
+
return { success: true };
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
describe('removeToolConfigHandler', () => {
|
|
11
|
+
it('should perform DELETE request with removeFromEnabled=true', async () => {
|
|
12
|
+
const client = new MockDeleteClient();
|
|
13
|
+
await removeToolConfigHandler(client, { agentId: 'a1', toolName: 't1', removeFromEnabled: true });
|
|
14
|
+
expect(client.paths[0]).toBe('/api/v1/mcp/agents/a1/tools/t1/config?removeFromEnabled=true');
|
|
15
|
+
});
|
|
16
|
+
it('should perform DELETE request without query param if removeFromEnabled is omitted', async () => {
|
|
17
|
+
const client = new MockDeleteClient();
|
|
18
|
+
await removeToolConfigHandler(client, { agentId: 'a1', toolName: 't1' });
|
|
19
|
+
expect(client.paths[0]).toBe('/api/v1/mcp/agents/a1/tools/t1/config');
|
|
20
|
+
});
|
|
21
|
+
it('should throw if missing arguments', async () => {
|
|
22
|
+
const client = new MockDeleteClient();
|
|
23
|
+
await expect(removeToolConfigHandler(client, { agentId: 'a1' })).rejects.toThrow('agentId and toolName are required');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=remove_tool_config.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove_tool_config.spec.js","sourceRoot":"","sources":["../../../src/tools/__tests__/remove_tool_config.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAElE,MAAM,gBAAgB;IACb,KAAK,GAAa,EAAE,CAAA;IAC3B,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAS,CAAA;QAC5C,MAAM,uBAAuB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;QACjG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAS,CAAA;QAC5C,MAAM,uBAAuB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QACxE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAS,CAAA;QAC5C,MAAM,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAA;IACvH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { vi, describe, it, expect } from 'vitest';
|
|
2
|
+
import { switchTenantHandler } from '../switch_tenant.js';
|
|
3
|
+
vi.mock('../commands/credentials.js', () => ({
|
|
4
|
+
readCredentials: vi.fn(() => ({ token: 'mock-token', tenantId: 't1' })),
|
|
5
|
+
saveCredentials: vi.fn()
|
|
6
|
+
}));
|
|
7
|
+
global.fetch = vi.fn(() => Promise.resolve({
|
|
8
|
+
json: () => Promise.resolve({ success: true, data: { name: 'Target Tenant Name' } })
|
|
9
|
+
}));
|
|
10
|
+
class MockClient {
|
|
11
|
+
methodCalls = [];
|
|
12
|
+
async get(path) {
|
|
13
|
+
this.methodCalls.push({ method: 'GET', path });
|
|
14
|
+
if (path === '/api/auth/me')
|
|
15
|
+
return { success: true, data: { user: { tenantIds: ['t1', 't2'], roles: [] } } };
|
|
16
|
+
return { success: true, data: {} };
|
|
17
|
+
}
|
|
18
|
+
async post(path, payload) {
|
|
19
|
+
this.methodCalls.push({ method: 'POST', path, payload });
|
|
20
|
+
return { success: true, data: { token: 'new-token' } };
|
|
21
|
+
}
|
|
22
|
+
setToken() { }
|
|
23
|
+
}
|
|
24
|
+
describe('switchTenantHandler', () => {
|
|
25
|
+
it('should list tenants when no tenantId provided', async () => {
|
|
26
|
+
const client = new MockClient();
|
|
27
|
+
const res = await switchTenantHandler(client, {});
|
|
28
|
+
expect(res.success).toBe(true);
|
|
29
|
+
expect(res.tenants.length).toBe(2);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=switch_tenant.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch_tenant.spec.js","sourceRoot":"","sources":["../../../src/tools/__tests__/switch_tenant.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAEzD,EAAE,CAAC,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;CACzB,CAAC,CAAC,CAAA;AAEH,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IACzC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC;CACrF,CAAC,CAAQ,CAAA;AAEV,MAAM,UAAU;IACP,WAAW,GAAU,EAAE,CAAA;IAC9B,KAAK,CAAC,GAAG,CAAC,IAAY;QACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9C,IAAI,IAAI,KAAK,cAAc;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;QAC7G,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IACpC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,OAAY;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAA;IACxD,CAAC;IACD,QAAQ,KAAI,CAAC;CACd;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,MAAM,GAAG,IAAI,UAAU,EAAS,CAAA;QACtC,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACjD,MAAM,CAAE,GAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,CAAE,GAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { updateAgentHandler } from '../update_agent.js';
|
|
3
|
+
class MockClient {
|
|
4
|
+
methodCalls = [];
|
|
5
|
+
async put(path, payload) {
|
|
6
|
+
this.methodCalls.push({ path, payload });
|
|
7
|
+
return { success: true };
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
describe('updateAgentHandler', () => {
|
|
11
|
+
it('should call PUT /api/v1/mcp/agents/:id', async () => {
|
|
12
|
+
const client = new MockClient();
|
|
13
|
+
const args = { agentId: 'a1', name: 'New Name', identity: { tone: 'friendly' } };
|
|
14
|
+
await updateAgentHandler(client, args);
|
|
15
|
+
expect(client.methodCalls[0].path).toBe('/api/v1/mcp/agents/a1');
|
|
16
|
+
expect(client.methodCalls[0].payload.name).toBe('New Name');
|
|
17
|
+
expect(client.methodCalls[0].payload.identity.tone).toBe('friendly');
|
|
18
|
+
});
|
|
19
|
+
it('should require agentId', async () => {
|
|
20
|
+
await expect(updateAgentHandler({}, {})).rejects.toThrow();
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=update_agent.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update_agent.spec.js","sourceRoot":"","sources":["../../../src/tools/__tests__/update_agent.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,UAAU;IACP,WAAW,GAAU,EAAE,CAAA;IAC9B,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,OAAY;QAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,MAAM,GAAG,IAAI,UAAU,EAAS,CAAA;QACtC,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAA;QAEhF,MAAM,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEtC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;QAChE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC3D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,MAAM,CAAC,kBAAkB,CAAC,EAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;IACnE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { updateEnabledToolsHandler } from '../update_enabled_tools.js';
|
|
3
|
+
class MockPutClient {
|
|
4
|
+
methodCalls = [];
|
|
5
|
+
async put(path, payload) {
|
|
6
|
+
this.methodCalls.push({ path, payload });
|
|
7
|
+
return { success: true };
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
describe('updateEnabledToolsHandler', () => {
|
|
11
|
+
it('should call PUT to replace enabled tools', async () => {
|
|
12
|
+
const client = new MockPutClient();
|
|
13
|
+
await updateEnabledToolsHandler(client, { agentId: 'a1', toolIds: ['t1', 't2'] });
|
|
14
|
+
expect(client.methodCalls[0].path).toBe('/api/v1/mcp/agents/a1');
|
|
15
|
+
expect(client.methodCalls[0].payload.enabledTools).toEqual(['t1', 't2']);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=update_enabled_tools.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update_enabled_tools.spec.js","sourceRoot":"","sources":["../../../src/tools/__tests__/update_enabled_tools.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAEtE,MAAM,aAAa;IACV,WAAW,GAAU,EAAE,CAAA;IAC9B,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,OAAY;QAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,IAAI,aAAa,EAAS,CAAA;QACzC,MAAM,yBAAyB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;QAEjF,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;QAChE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { upsertStageHandler } from '../upsert_stage.js';
|
|
3
|
+
class MockPutClient {
|
|
4
|
+
methodCalls = [];
|
|
5
|
+
async put(path, payload) {
|
|
6
|
+
this.methodCalls.push({ path, payload });
|
|
7
|
+
return { success: true };
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
describe('upsertStageHandler', () => {
|
|
11
|
+
it('should PUT merged stage, connections and channelFlows', async () => {
|
|
12
|
+
const client = new MockPutClient();
|
|
13
|
+
const args = {
|
|
14
|
+
agentId: 'a1',
|
|
15
|
+
stageName: 'start',
|
|
16
|
+
stageConfig: { instruction: 'Hello' },
|
|
17
|
+
connections: [{ id: 'c1', from: 'start', to: 'end', type: 'default' }],
|
|
18
|
+
channelFlows: { web: { connections: [] } }
|
|
19
|
+
};
|
|
20
|
+
await upsertStageHandler(client, args);
|
|
21
|
+
expect(client.methodCalls[0].path).toBe('/api/v1/mcp/agents/a1');
|
|
22
|
+
expect(client.methodCalls[0].payload.stages.start.instruction).toBe('Hello');
|
|
23
|
+
expect(client.methodCalls[0].payload.connections[0].id).toBe('c1');
|
|
24
|
+
expect(client.methodCalls[0].payload.channelFlows.web).toBeDefined();
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=upsert_stage.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upsert_stage.spec.js","sourceRoot":"","sources":["../../../src/tools/__tests__/upsert_stage.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,aAAa;IACV,WAAW,GAAU,EAAE,CAAA;IAC9B,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,OAAY;QAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,MAAM,GAAG,IAAI,aAAa,EAAS,CAAA;QACzC,MAAM,IAAI,GAAG;YACX,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;YACrC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACtE,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE;SAC3C,CAAA;QAED,MAAM,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEtC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;QAChE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IACtE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { BotuyoApiClient } from '../client.js';
|
|
3
|
+
export declare const CONFIGURE_AGENT_TOOL: Tool;
|
|
4
|
+
export declare function configureAgentToolHandler(client: BotuyoApiClient, args: Record<string, unknown>): Promise<any>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export const CONFIGURE_AGENT_TOOL = {
|
|
2
|
+
name: 'configure_agent_tool',
|
|
3
|
+
description: `Crea o actualiza la config de un tool para un agente. Si la tool no está en \`enabledTools\`, la agrega automáticamente.
|
|
4
|
+
|
|
5
|
+
Usa esta herramienta para configurar tools nativas (ej. \`send_email\`) o para crear tool factories (instancias virtuales de tools base como \`sync_document\`).`,
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
agentId: { type: 'string', description: 'ID del agente' },
|
|
10
|
+
toolName: { type: 'string', description: 'Nombre del tool (existente o nombre nuevo para factory)' },
|
|
11
|
+
baseTool: { type: 'string', description: 'Tool base para crear una factory (ej. "sync_document", "call_webhook")' },
|
|
12
|
+
connector: { type: 'string', description: 'Conector a usar si es factory (ej. "google_sheets", "notion")' },
|
|
13
|
+
params: { type: 'object', description: 'Parámetros invisibles al LLM (ej. templateId, spreadsheetId)' },
|
|
14
|
+
fields: {
|
|
15
|
+
type: 'array',
|
|
16
|
+
items: { type: 'object' },
|
|
17
|
+
description: 'Campos tipados (override del declaration). Array de IToolField con name, type, label, required, enumValues, validation, etc.'
|
|
18
|
+
},
|
|
19
|
+
instruction: { type: 'string', description: 'Guía para el LLM (1 línea explicando qué hace esta tool específica)' }
|
|
20
|
+
},
|
|
21
|
+
required: ['agentId', 'toolName']
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export async function configureAgentToolHandler(client, args) {
|
|
25
|
+
const { agentId, toolName, baseTool, connector, params, fields, instruction } = args;
|
|
26
|
+
if (!agentId || !toolName) {
|
|
27
|
+
throw new Error('agentId and toolName are required');
|
|
28
|
+
}
|
|
29
|
+
const payload = {
|
|
30
|
+
toolName,
|
|
31
|
+
baseTool,
|
|
32
|
+
connector,
|
|
33
|
+
params,
|
|
34
|
+
fields,
|
|
35
|
+
instruction
|
|
36
|
+
};
|
|
37
|
+
// Se asume endpoint: PUT /api/v1/mcp/agents/:agentId/tools/config
|
|
38
|
+
const result = await client.put(`/api/v1/mcp/agents/${agentId}/tools/config`, payload);
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=configure_agent_tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure_agent_tool.js","sourceRoot":"","sources":["../../src/tools/configure_agent_tool.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAS;IACxC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE;;iKAEkJ;IAC/J,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;YACzD,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yDAAyD,EAAE;YACpG,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wEAAwE,EAAE;YACnH,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+DAA+D,EAAE;YAC3G,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8DAA8D,EAAE;YACvG,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,8HAA8H;aAC5I;YACD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qEAAqE,EAAE;SACpH;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;KAClC;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,MAAuB,EAAE,IAA6B;IACpG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,IAAW,CAAA;IAE3F,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IAED,MAAM,OAAO,GAAG;QACd,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,MAAM;QACN,MAAM;QACN,WAAW;KACZ,CAAA;IAED,kEAAkE;IAClE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,sBAAsB,OAAO,eAAe,EAAE,OAAO,CAAC,CAAA;IACtF,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { BotuyoApiClient } from '../client.js';
|
|
3
|
+
export declare const GET_TOOL_CONFIG_TOOL: Tool;
|
|
4
|
+
export declare function getToolConfigHandler(client: BotuyoApiClient, args: Record<string, unknown>): Promise<any>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const GET_TOOL_CONFIG_TOOL = {
|
|
2
|
+
name: 'get_tool_config',
|
|
3
|
+
description: 'Ver el config completo de un tool (formato JSON).',
|
|
4
|
+
inputSchema: {
|
|
5
|
+
type: 'object',
|
|
6
|
+
properties: {
|
|
7
|
+
agentId: { type: 'string' },
|
|
8
|
+
toolName: { type: 'string' }
|
|
9
|
+
},
|
|
10
|
+
required: ['agentId', 'toolName']
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
export async function getToolConfigHandler(client, args) {
|
|
14
|
+
const { agentId, toolName } = args;
|
|
15
|
+
if (!agentId || !toolName)
|
|
16
|
+
throw new Error('agentId and toolName are required');
|
|
17
|
+
const result = await client.get(`/api/v1/mcp/agents/${agentId}/tools/${toolName}/config`);
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=get_tool_config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_tool_config.js","sourceRoot":"","sources":["../../src/tools/get_tool_config.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAS;IACxC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,mDAAmD;IAChE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC7B;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;KAClC;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAuB,EAAE,IAA6B;IAC/F,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;IAClC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IAE/E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,sBAAsB,OAAO,UAAU,QAAQ,SAAS,CAAC,CAAA;IACzF,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -21,6 +21,11 @@ import { DELETE_AGENT_TOOL, deleteAgentHandler } from './delete_agent.js';
|
|
|
21
21
|
import { LIST_KNOWLEDGE_DOCS_TOOL, listKnowledgeDocsHandler } from './list_knowledge_docs.js';
|
|
22
22
|
import { DELETE_KNOWLEDGE_DOC_TOOL, deleteKnowledgeDocHandler } from './delete_knowledge_doc.js';
|
|
23
23
|
import { ASSOCIATE_KNOWLEDGE_TOOL, associateKnowledgeHandler } from './associate_knowledge.js';
|
|
24
|
+
import { CONFIGURE_AGENT_TOOL, configureAgentToolHandler } from './configure_agent_tool.js';
|
|
25
|
+
import { LIST_TOOL_CONFIGS_TOOL, listToolConfigsHandler } from './list_tool_configs.js';
|
|
26
|
+
import { REMOVE_TOOL_CONFIG_TOOL, removeToolConfigHandler } from './remove_tool_config.js';
|
|
27
|
+
import { GET_TOOL_CONFIG_TOOL, getToolConfigHandler } from './get_tool_config.js';
|
|
28
|
+
import { LIST_BASE_TOOLS_TOOL, listBaseToolsHandler } from './list_base_tools.js';
|
|
24
29
|
export const ALL_TOOLS = [
|
|
25
30
|
LIST_AGENTS_TOOL,
|
|
26
31
|
GET_AGENT_TOOL,
|
|
@@ -41,6 +46,11 @@ export const ALL_TOOLS = [
|
|
|
41
46
|
LIST_KNOWLEDGE_DOCS_TOOL,
|
|
42
47
|
DELETE_KNOWLEDGE_DOC_TOOL,
|
|
43
48
|
ASSOCIATE_KNOWLEDGE_TOOL,
|
|
49
|
+
CONFIGURE_AGENT_TOOL,
|
|
50
|
+
LIST_TOOL_CONFIGS_TOOL,
|
|
51
|
+
REMOVE_TOOL_CONFIG_TOOL,
|
|
52
|
+
GET_TOOL_CONFIG_TOOL,
|
|
53
|
+
LIST_BASE_TOOLS_TOOL,
|
|
44
54
|
];
|
|
45
55
|
export const TOOL_HANDLERS = {
|
|
46
56
|
list_agents: listAgentsHandler,
|
|
@@ -62,5 +72,10 @@ export const TOOL_HANDLERS = {
|
|
|
62
72
|
list_knowledge_documents: listKnowledgeDocsHandler,
|
|
63
73
|
delete_knowledge_document: deleteKnowledgeDocHandler,
|
|
64
74
|
associate_knowledge_to_agent: associateKnowledgeHandler,
|
|
75
|
+
configure_agent_tool: configureAgentToolHandler,
|
|
76
|
+
list_tool_configs: listToolConfigsHandler,
|
|
77
|
+
remove_tool_config: removeToolConfigHandler,
|
|
78
|
+
get_tool_config: getToolConfigHandler,
|
|
79
|
+
list_base_tools: listBaseToolsHandler,
|
|
65
80
|
};
|
|
66
81
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,8BAA8B;AAC9B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC7E,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/E,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAC7F,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAE9F,MAAM,CAAC,MAAM,SAAS,GAAW;IAC/B,gBAAgB;IAChB,cAAc;IACd,qBAAqB;IACrB,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,yBAAyB;IACzB,kBAAkB;IAClB,kBAAkB;IAClB,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,yBAAyB;IACzB,kBAAkB;IAClB,iBAAiB;IACjB,wBAAwB;IACxB,yBAAyB;IACzB,wBAAwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { BotuyoApiClient } from '../client.js';
|
|
3
|
+
export declare const LIST_BASE_TOOLS_TOOL: Tool;
|
|
4
|
+
export declare function listBaseToolsHandler(client: BotuyoApiClient, _args: Record<string, unknown>): Promise<any>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const LIST_BASE_TOOLS_TOOL = {
|
|
2
|
+
name: 'list_base_tools',
|
|
3
|
+
description: 'Lista los base tools disponibles para crear factories y los connectors que soportan.',
|
|
4
|
+
inputSchema: {
|
|
5
|
+
type: 'object',
|
|
6
|
+
properties: {}
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
export async function listBaseToolsHandler(client, _args) {
|
|
10
|
+
const result = await client.get('/api/v1/mcp/tools/base');
|
|
11
|
+
if (result && result.success && result.data) {
|
|
12
|
+
let output = 'Base tools disponibles para factory:\n\n';
|
|
13
|
+
const baseTools = result.data;
|
|
14
|
+
for (const [baseToolName, info] of Object.entries(baseTools)) {
|
|
15
|
+
const tl = info;
|
|
16
|
+
output += ` ${baseToolName}\n`;
|
|
17
|
+
if (tl.connectors && tl.connectors.length > 0) {
|
|
18
|
+
output += ` Connectors: ${tl.connectors.join(', ')}\n`;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
output += ` Connectors: —\n`;
|
|
22
|
+
}
|
|
23
|
+
if (tl.description) {
|
|
24
|
+
output += ` Descripción: ${tl.description}\n`;
|
|
25
|
+
}
|
|
26
|
+
output += '\n';
|
|
27
|
+
}
|
|
28
|
+
return { text: output };
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=list_base_tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_base_tools.js","sourceRoot":"","sources":["../../src/tools/list_base_tools.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAS;IACxC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,sFAAsF;IACnG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;KACf;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAuB,EAAE,KAA8B;IAChG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;IAEzD,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,MAAM,GAAG,0CAA0C,CAAA;QACvD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAA;QAE7B,KAAK,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,MAAM,EAAE,GAAG,IAAW,CAAA;YACtB,MAAM,IAAI,KAAK,YAAY,IAAI,CAAA;YAC/B,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,mBAAmB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;YAC3D,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,qBAAqB,CAAA;YACjC,CAAC;YACD,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM,IAAI,oBAAoB,EAAE,CAAC,WAAW,IAAI,CAAA;YAClD,CAAC;YACD,MAAM,IAAI,IAAI,CAAA;QAChB,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { BotuyoApiClient } from '../client.js';
|
|
3
|
+
export declare const LIST_TOOL_CONFIGS_TOOL: Tool;
|
|
4
|
+
export declare function listToolConfigsHandler(client: BotuyoApiClient, args: Record<string, unknown>): Promise<{
|
|
5
|
+
text: string;
|
|
6
|
+
}>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export const LIST_TOOL_CONFIGS_TOOL = {
|
|
2
|
+
name: 'list_tool_configs',
|
|
3
|
+
description: 'Lista las configs de tools de un agente, separando tools nativas y configuradas/factories.',
|
|
4
|
+
inputSchema: {
|
|
5
|
+
type: 'object',
|
|
6
|
+
properties: {
|
|
7
|
+
agentId: { type: 'string', description: 'ID del agente' }
|
|
8
|
+
},
|
|
9
|
+
required: ['agentId']
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export async function listToolConfigsHandler(client, args) {
|
|
13
|
+
const agentId = args.agentId;
|
|
14
|
+
if (!agentId)
|
|
15
|
+
throw new Error('agentId is required');
|
|
16
|
+
// Obtener el agente para leer su toolConfigs y enabledTools
|
|
17
|
+
const result = await client.get(`/api/v1/mcp/agents/${agentId}`);
|
|
18
|
+
if (!result || !result.success || !result.data) {
|
|
19
|
+
throw new Error('Could not fetch agent configuration');
|
|
20
|
+
}
|
|
21
|
+
const agent = result.data;
|
|
22
|
+
const enabledTools = agent.enabledTools || [];
|
|
23
|
+
const toolConfigs = agent.toolConfigs || {};
|
|
24
|
+
const configuredTools = Object.keys(toolConfigs);
|
|
25
|
+
const nativeTools = enabledTools.filter(t => !configuredTools.includes(t));
|
|
26
|
+
let output = `Tools del agente "${agent.name || agentId}":\n\n`;
|
|
27
|
+
output += ` Tools nativas (sin config):\n`;
|
|
28
|
+
if (nativeTools.length === 0) {
|
|
29
|
+
output += ` (Ninguna)\n`;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
nativeTools.forEach(t => {
|
|
33
|
+
output += ` • ${t}\n`;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
output += `\n Tools configuradas:\n`;
|
|
37
|
+
if (configuredTools.length === 0) {
|
|
38
|
+
output += ` (Ninguna)\n`;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
configuredTools.forEach(toolName => {
|
|
42
|
+
const config = toolConfigs[toolName];
|
|
43
|
+
const isFactory = config.baseTool ? `[factory: ${config.baseTool}${config.connector ? ` → ${config.connector}` : ''}]` : '';
|
|
44
|
+
output += ` • ${toolName} ${isFactory}\n`;
|
|
45
|
+
if (config.params) {
|
|
46
|
+
output += ` └ params: ${Object.keys(config.params).join(', ')}\n`;
|
|
47
|
+
}
|
|
48
|
+
if (config.fields && Array.isArray(config.fields)) {
|
|
49
|
+
const fieldSummaries = config.fields.map((f) => `${f.name} (${f.type})`).join(', ');
|
|
50
|
+
output += ` └ fields: ${fieldSummaries} — ${config.fields.length} campos\n`;
|
|
51
|
+
}
|
|
52
|
+
if (config.instruction) {
|
|
53
|
+
output += ` └ instruction: "${config.instruction}"\n`;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return { text: output };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=list_tool_configs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_tool_configs.js","sourceRoot":"","sources":["../../src/tools/list_tool_configs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { BotuyoApiClient } from '../client.js';
|
|
3
|
+
export declare const REMOVE_TOOL_CONFIG_TOOL: Tool;
|
|
4
|
+
export declare function removeToolConfigHandler(client: BotuyoApiClient, args: Record<string, unknown>): Promise<any>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const REMOVE_TOOL_CONFIG_TOOL = {
|
|
2
|
+
name: 'remove_tool_config',
|
|
3
|
+
description: 'Elimina la configuración de un tool. Si es factory, también la remueve de enabledTools por defecto.',
|
|
4
|
+
inputSchema: {
|
|
5
|
+
type: 'object',
|
|
6
|
+
properties: {
|
|
7
|
+
agentId: { type: 'string' },
|
|
8
|
+
toolName: { type: 'string' },
|
|
9
|
+
removeFromEnabled: { type: 'boolean', description: 'default: true para factory, false para native' }
|
|
10
|
+
},
|
|
11
|
+
required: ['agentId', 'toolName']
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
export async function removeToolConfigHandler(client, args) {
|
|
15
|
+
const { agentId, toolName, removeFromEnabled } = args;
|
|
16
|
+
if (!agentId || !toolName)
|
|
17
|
+
throw new Error('agentId and toolName are required');
|
|
18
|
+
const query = removeFromEnabled !== undefined ? `?removeFromEnabled=${removeFromEnabled}` : '';
|
|
19
|
+
const result = await client.delete(`/api/v1/mcp/agents/${agentId}/tools/${toolName}/config${query}`);
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=remove_tool_config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove_tool_config.js","sourceRoot":"","sources":["../../src/tools/remove_tool_config.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,uBAAuB,GAAS;IAC3C,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,qGAAqG;IAClH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,iBAAiB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,+CAA+C,EAAE;SACrG;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;KAClC;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAuB,EAAE,IAA6B;IAClG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAA;IACrD,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IAE/E,MAAM,KAAK,GAAG,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9F,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,sBAAsB,OAAO,UAAU,QAAQ,UAAU,KAAK,EAAE,CAAC,CAAA;IAEpG,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botuyo/mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "BotUyo MCP Server — create and manage AI agents via Model Context Protocol",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"build": "tsc",
|
|
23
23
|
"dev": "tsc -w",
|
|
24
24
|
"start": "node dist/index.js",
|
|
25
|
+
"test": "vitest run",
|
|
25
26
|
"inspect": "npx @modelcontextprotocol/inspector node dist/index.js",
|
|
26
27
|
"prepublishOnly": "npm run build"
|
|
27
28
|
},
|
|
@@ -34,7 +35,8 @@
|
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
37
|
"@types/node": "^22.0.0",
|
|
37
|
-
"typescript": "^5.3.3"
|
|
38
|
+
"typescript": "^5.3.3",
|
|
39
|
+
"vitest": "^4.1.1"
|
|
38
40
|
},
|
|
39
41
|
"engines": {
|
|
40
42
|
"node": ">=18"
|