@botuyo/mcp 0.2.8 → 0.2.10
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/create_from_template.d.ts +4 -0
- package/dist/tools/create_from_template.js +55 -0
- package/dist/tools/create_from_template.js.map +1 -0
- package/dist/tools/export_agent_json.d.ts +4 -0
- package/dist/tools/export_agent_json.js +21 -0
- package/dist/tools/export_agent_json.js.map +1 -0
- package/dist/tools/import_agent_json.d.ts +4 -0
- package/dist/tools/import_agent_json.js +47 -0
- package/dist/tools/import_agent_json.js.map +1 -0
- package/dist/tools/index.js +12 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list_templates.d.ts +4 -0
- package/dist/tools/list_templates.js +18 -0
- package/dist/tools/list_templates.js.map +1 -0
- package/dist/tools/switch_tenant.d.ts +1 -0
- package/dist/tools/switch_tenant.js +16 -7
- package/dist/tools/switch_tenant.js.map +1 -1
- package/dist/tools/upsert_stage.js +55 -7
- package/dist/tools/upsert_stage.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { BotuyoApiClient } from '../client.js';
|
|
3
|
+
export declare const CREATE_FROM_TEMPLATE_TOOL: Tool;
|
|
4
|
+
export declare function createFromTemplateHandler(client: BotuyoApiClient, args: Record<string, unknown>): Promise<any>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export const CREATE_FROM_TEMPLATE_TOOL = {
|
|
2
|
+
name: 'create_from_template',
|
|
3
|
+
description: `Create a new agent from a pre-built template.
|
|
4
|
+
|
|
5
|
+
Templates contain pre-configured stages, connections (graph flow), tools, and channel overrides
|
|
6
|
+
for specific industries. Business data (name, phone, email, services) is automatically
|
|
7
|
+
hydrated into the template placeholders.
|
|
8
|
+
|
|
9
|
+
Use list_templates first to see available templates.
|
|
10
|
+
|
|
11
|
+
Requires role: owner, admin, or developer.`,
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
templateId: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
description: 'Template ID from list_templates (e.g. "beauty-salon", "dental-clinic", "restaurant-bar")'
|
|
18
|
+
},
|
|
19
|
+
businessName: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
description: 'Business name — will replace {{businessName}} in the template'
|
|
22
|
+
},
|
|
23
|
+
contactPhone: {
|
|
24
|
+
type: 'string',
|
|
25
|
+
description: 'Optional contact phone number'
|
|
26
|
+
},
|
|
27
|
+
contactEmail: {
|
|
28
|
+
type: 'string',
|
|
29
|
+
description: 'Optional contact email'
|
|
30
|
+
},
|
|
31
|
+
address: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'Optional business address'
|
|
34
|
+
},
|
|
35
|
+
services: {
|
|
36
|
+
type: 'array',
|
|
37
|
+
description: 'Optional list of services with name, duration (minutes), and price',
|
|
38
|
+
items: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
properties: {
|
|
41
|
+
name: { type: 'string' },
|
|
42
|
+
duration: { type: 'number', description: 'Duration in minutes' },
|
|
43
|
+
price: { type: 'number', description: 'Price (optional)' }
|
|
44
|
+
},
|
|
45
|
+
required: ['name', 'duration']
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
required: ['templateId', 'businessName']
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
export async function createFromTemplateHandler(client, args) {
|
|
53
|
+
return client.post('/api/v1/mcp/agents/from-template', args);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=create_from_template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_from_template.js","sourceRoot":"","sources":["../../src/tools/create_from_template.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,yBAAyB,GAAS;IAC7C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE;;;;;;;;2CAQ4B;IACzC,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0FAA0F;aACxG;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+DAA+D;aAC7E;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+BAA+B;aAC7C;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;aACtC;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2BAA2B;aACzC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,oEAAoE;gBACjF,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;wBAChE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;qBAC3D;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;iBAC/B;aACF;SACF;QACD,QAAQ,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC;KACzC;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,MAAuB,EAAE,IAA6B;IACpG,OAAO,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAA;AAC9D,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 EXPORT_AGENT_JSON_TOOL: Tool;
|
|
4
|
+
export declare function exportAgentJsonHandler(client: BotuyoApiClient, args: Record<string, unknown>): Promise<any>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const EXPORT_AGENT_JSON_TOOL = {
|
|
2
|
+
name: 'export_agent_json',
|
|
3
|
+
description: `Export the full agent configuration as clean, editable JSON.
|
|
4
|
+
|
|
5
|
+
Returns the complete agentConfig including identity, stages, connections (graph edges),
|
|
6
|
+
channelFlows, enabledTools, channels, and all other settings.
|
|
7
|
+
|
|
8
|
+
Use import_agent_json to re-import after editing.`,
|
|
9
|
+
inputSchema: {
|
|
10
|
+
type: 'object',
|
|
11
|
+
properties: {
|
|
12
|
+
agentId: { type: 'string', description: 'The MongoDB ID of the agent to export' }
|
|
13
|
+
},
|
|
14
|
+
required: ['agentId']
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export async function exportAgentJsonHandler(client, args) {
|
|
18
|
+
const agentId = args.agentId;
|
|
19
|
+
return client.get(`/api/v1/mcp/agents/${agentId}/export`);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=export_agent_json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export_agent_json.js","sourceRoot":"","sources":["../../src/tools/export_agent_json.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,sBAAsB,GAAS;IAC1C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE;;;;;kDAKmC;IAChD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;SAClF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAuB,EAAE,IAA6B;IACjG,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAA;IACtC,OAAO,MAAM,CAAC,GAAG,CAAC,sBAAsB,OAAO,SAAS,CAAC,CAAA;AAC3D,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 IMPORT_AGENT_JSON_TOOL: Tool;
|
|
4
|
+
export declare function importAgentJsonHandler(client: BotuyoApiClient, args: Record<string, unknown>): Promise<any>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export const IMPORT_AGENT_JSON_TOOL = {
|
|
2
|
+
name: 'import_agent_json',
|
|
3
|
+
description: `Import/replace an agent's full configuration from a JSON object.
|
|
4
|
+
|
|
5
|
+
This REPLACES the entire agentConfig — use export_agent_json first to get the current config,
|
|
6
|
+
edit it, then use this tool to apply the changes.
|
|
7
|
+
|
|
8
|
+
The agentConfig must include at least 'name' and 'identity'.
|
|
9
|
+
All fields (stages, connections, channelFlows, enabledTools, etc.) will be overwritten.
|
|
10
|
+
|
|
11
|
+
Requires role: owner, admin, or developer.`,
|
|
12
|
+
inputSchema: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
agentId: { type: 'string', description: 'The MongoDB ID of the agent to update' },
|
|
16
|
+
agentConfig: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
description: 'The full agentConfig object to replace the existing one. Must include name and identity.',
|
|
19
|
+
properties: {
|
|
20
|
+
name: { type: 'string', description: 'Agent display name' },
|
|
21
|
+
identity: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
description: 'Agent identity (tone, language, objective, customInstructions)',
|
|
24
|
+
properties: {
|
|
25
|
+
tone: { type: 'string' },
|
|
26
|
+
language: { type: 'string' },
|
|
27
|
+
objective: { type: 'string' },
|
|
28
|
+
customInstructions: { type: 'string' }
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
stages: { type: 'array', description: 'Array of stage objects with id, name, type, instruction' },
|
|
32
|
+
connections: { type: 'array', description: 'Array of connection edges: { id, from, to, type, condition? }' },
|
|
33
|
+
channelFlows: { type: 'object', description: 'Per-channel flow overrides: { channelName: { connections: [...] } }' },
|
|
34
|
+
enabledTools: { type: 'array', items: { type: 'string' }, description: 'Tool IDs to enable' },
|
|
35
|
+
channels: { type: 'array', items: { type: 'string' }, description: 'Channels: web, whatsapp, phone, etc.' }
|
|
36
|
+
},
|
|
37
|
+
required: ['name', 'identity']
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
required: ['agentId', 'agentConfig']
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
export async function importAgentJsonHandler(client, args) {
|
|
44
|
+
const { agentId, agentConfig } = args;
|
|
45
|
+
return client.put(`/api/v1/mcp/agents/${agentId}/import`, { agentConfig });
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=import_agent_json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import_agent_json.js","sourceRoot":"","sources":["../../src/tools/import_agent_json.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,sBAAsB,GAAS;IAC1C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE;;;;;;;;2CAQ4B;IACzC,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;YACjF,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0FAA0F;gBACvG,UAAU,EAAE;oBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;oBAC3D,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,gEAAgE;wBAC7E,UAAU,EAAE;4BACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BAC5B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BAC7B,kBAAkB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBACvC;qBACF;oBACD,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,yDAAyD,EAAE;oBACjG,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,+DAA+D,EAAE;oBAC5G,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qEAAqE,EAAE;oBACpH,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,oBAAoB,EAAE;oBAC7F,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,sCAAsC,EAAE;iBAC5G;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;aAC/B;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;KACrC;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAuB,EAAE,IAA6B;IACjG,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;IACrC,OAAO,MAAM,CAAC,GAAG,CAAC,sBAAsB,OAAiB,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;AACtF,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -12,6 +12,10 @@ import { LIST_TOOLS_TOOL, listToolsHandler } from './list_available_tools.js';
|
|
|
12
12
|
import { UPDATE_ENABLED_TOOLS_TOOL, updateEnabledToolsHandler } from './update_enabled_tools.js';
|
|
13
13
|
import { PUBLISH_AGENT_TOOL, publishAgentHandler } from './publish_agent.js';
|
|
14
14
|
import { SWITCH_TENANT_TOOL, switchTenantHandler } from './switch_tenant.js';
|
|
15
|
+
import { EXPORT_AGENT_JSON_TOOL, exportAgentJsonHandler } from './export_agent_json.js';
|
|
16
|
+
import { IMPORT_AGENT_JSON_TOOL, importAgentJsonHandler } from './import_agent_json.js';
|
|
17
|
+
import { LIST_TEMPLATES_TOOL, listTemplatesHandler } from './list_templates.js';
|
|
18
|
+
import { CREATE_FROM_TEMPLATE_TOOL, createFromTemplateHandler } from './create_from_template.js';
|
|
15
19
|
export const ALL_TOOLS = [
|
|
16
20
|
LIST_AGENTS_TOOL,
|
|
17
21
|
GET_AGENT_TOOL,
|
|
@@ -23,6 +27,10 @@ export const ALL_TOOLS = [
|
|
|
23
27
|
UPDATE_ENABLED_TOOLS_TOOL,
|
|
24
28
|
PUBLISH_AGENT_TOOL,
|
|
25
29
|
SWITCH_TENANT_TOOL,
|
|
30
|
+
EXPORT_AGENT_JSON_TOOL,
|
|
31
|
+
IMPORT_AGENT_JSON_TOOL,
|
|
32
|
+
LIST_TEMPLATES_TOOL,
|
|
33
|
+
CREATE_FROM_TEMPLATE_TOOL,
|
|
26
34
|
];
|
|
27
35
|
export const TOOL_HANDLERS = {
|
|
28
36
|
list_agents: listAgentsHandler,
|
|
@@ -35,5 +43,9 @@ export const TOOL_HANDLERS = {
|
|
|
35
43
|
update_enabled_tools: updateEnabledToolsHandler,
|
|
36
44
|
publish_agent: publishAgentHandler,
|
|
37
45
|
switch_tenant: switchTenantHandler,
|
|
46
|
+
export_agent_json: exportAgentJsonHandler,
|
|
47
|
+
import_agent_json: importAgentJsonHandler,
|
|
48
|
+
list_templates: listTemplatesHandler,
|
|
49
|
+
create_from_template: createFromTemplateHandler,
|
|
38
50
|
};
|
|
39
51
|
//# 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;
|
|
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;AAEhG,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;CAC1B,CAAA;AAID,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD,WAAW,EAAE,iBAAiB;IAC9B,SAAS,EAAE,eAAe;IAC1B,gBAAgB,EAAE,qBAAqB;IACvC,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,kBAAkB;IAChC,YAAY,EAAE,kBAAkB;IAChC,oBAAoB,EAAE,gBAAgB;IACtC,oBAAoB,EAAE,yBAAyB;IAC/C,aAAa,EAAE,mBAAmB;IAClC,aAAa,EAAE,mBAAmB;IAClC,iBAAiB,EAAE,sBAAsB;IACzC,iBAAiB,EAAE,sBAAsB;IACzC,cAAc,EAAE,oBAAoB;IACpC,oBAAoB,EAAE,yBAAyB;CAChD,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 LIST_TEMPLATES_TOOL: Tool;
|
|
4
|
+
export declare function listTemplatesHandler(client: BotuyoApiClient, _args: Record<string, unknown>): Promise<any>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const LIST_TEMPLATES_TOOL = {
|
|
2
|
+
name: 'list_templates',
|
|
3
|
+
description: `List all available agent templates for quick agent creation.
|
|
4
|
+
|
|
5
|
+
Returns templates organized by industry vertical (beauty, clinic, restaurant, fitness, etc.).
|
|
6
|
+
Each template includes pre-configured stages, connections (graph flow), tools, and channel overrides.
|
|
7
|
+
|
|
8
|
+
Use create_from_template to create an agent from any template.`,
|
|
9
|
+
inputSchema: {
|
|
10
|
+
type: 'object',
|
|
11
|
+
properties: {},
|
|
12
|
+
required: []
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
export async function listTemplatesHandler(client, _args) {
|
|
16
|
+
return client.get('/api/v1/mcp/templates');
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=list_templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_templates.js","sourceRoot":"","sources":["../../src/tools/list_templates.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACvC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE;;;;;+DAKgD;IAC7D,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAuB,EAAE,KAA8B;IAChG,OAAO,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;AAC5C,CAAC"}
|
|
@@ -4,7 +4,7 @@ export const SWITCH_TENANT_TOOL = {
|
|
|
4
4
|
description: 'Switch the active tenant for this MCP session. ' +
|
|
5
5
|
'If no tenantId is provided, lists all available tenants for the user. ' +
|
|
6
6
|
'If a tenantId is provided, switches to that tenant. ' +
|
|
7
|
-
'
|
|
7
|
+
'The switch takes effect immediately for subsequent tool calls.',
|
|
8
8
|
inputSchema: {
|
|
9
9
|
type: 'object',
|
|
10
10
|
properties: {
|
|
@@ -30,19 +30,28 @@ export async function switchTenantHandler(client, args) {
|
|
|
30
30
|
}
|
|
31
31
|
const tenantIds = user.tenantIds || [];
|
|
32
32
|
const roles = user.roles || [];
|
|
33
|
-
// If no tenantId provided, list available tenants
|
|
33
|
+
// If no tenantId provided, list available tenants with names
|
|
34
34
|
if (!args.tenantId) {
|
|
35
|
-
const tenants = tenantIds.map((tid) =>
|
|
36
|
-
tenantId
|
|
37
|
-
|
|
38
|
-
isActive
|
|
35
|
+
const tenants = await Promise.all(tenantIds.map(async (tid) => {
|
|
36
|
+
const role = roles.find((r) => r.tenantId === tid)?.role || 'member';
|
|
37
|
+
const isActive = tid === creds.tenantId;
|
|
38
|
+
let name = isActive ? (creds.tenantName || tid) : tid;
|
|
39
|
+
// Try to resolve tenant name
|
|
40
|
+
if (!isActive || name === tid) {
|
|
41
|
+
try {
|
|
42
|
+
const tRes = await client.get(`/api/v1/tenants/${tid}`);
|
|
43
|
+
name = tRes.data?.name || tRes.data?.tenant?.name || tid;
|
|
44
|
+
}
|
|
45
|
+
catch { /* keep tid */ }
|
|
46
|
+
}
|
|
47
|
+
return { tenantId: tid, name, role, isActive };
|
|
39
48
|
}));
|
|
40
49
|
return {
|
|
41
50
|
success: true,
|
|
42
51
|
activeTenantId: creds.tenantId,
|
|
43
52
|
activeTenantName: creds.tenantName,
|
|
44
53
|
tenants,
|
|
45
|
-
hint: 'Call switch_tenant with a tenantId to switch.
|
|
54
|
+
hint: 'Call switch_tenant with a tenantId to switch.'
|
|
46
55
|
};
|
|
47
56
|
}
|
|
48
57
|
// Switch to the specified tenant
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch_tenant.js","sourceRoot":"","sources":["../../src/tools/switch_tenant.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE7E,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,iDAAiD;QACjD,wEAAwE;QACxE,sDAAsD;QACtD,
|
|
1
|
+
{"version":3,"file":"switch_tenant.js","sourceRoot":"","sources":["../../src/tools/switch_tenant.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE7E,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,iDAAiD;QACjD,wEAAwE;QACxE,sDAAsD;QACtD,gEAAgE;IAClE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6DAA6D;aAC3E;SACF;QACD,QAAQ,EAAE,EAAE;KACb;CACF,CAAA;AAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,wBAAwB,CAAA;AAEtE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAuB,EAAE,IAA6B;IAC9F,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAA;IACrC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kDAAkD,EAAE,CAAA;IACtF,CAAC;IAED,6BAA6B;IAC7B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAAM,cAAc,CAAC,CAAA;IACnD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAA;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAA;IACnE,CAAC;IAED,MAAM,SAAS,GAAa,IAAI,CAAC,SAAS,IAAI,EAAE,CAAA;IAChD,MAAM,KAAK,GAA8C,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;IAEzE,6DAA6D;IAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;YACpE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,EAAE,IAAI,IAAI,QAAQ,CAAA;YACpE,MAAM,QAAQ,GAAG,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAA;YACvC,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;YAErD,6BAA6B;YAC7B,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAM,mBAAmB,GAAG,EAAE,CAAC,CAAA;oBAC5D,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,GAAG,CAAA;gBAC1D,CAAC;gBAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;YAC5B,CAAC;YAED,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;QAChD,CAAC,CAAC,CAAC,CAAA;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,KAAK,CAAC,QAAQ;YAC9B,gBAAgB,EAAE,KAAK,CAAC,UAAU;YAClC,OAAO;YACP,IAAI,EAAE,+CAA+C;SACtD,CAAA;IACH,CAAC;IAED,iCAAiC;IACjC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAkB,CAAA;IAE9C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,UAAU,cAAc,iCAAiC;YAChE,gBAAgB,EAAE,SAAS;SAC5B,CAAA;IACH,CAAC;IAED,IAAI,cAAc,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAA;IAChF,CAAC;IAED,yBAAyB;IACzB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAM,yBAAyB,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAA;IAEjG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,0BAA0B,EAAE,CAAA;IACjF,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAA;IACrC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,cAAc,CAAC,EAAE,IAAI,IAAI,QAAQ,CAAA;IAE/G,yBAAyB;IACzB,IAAI,UAAU,GAAG,cAAc,CAAA;IAC/B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,mBAAmB,cAAc,EAAE,EAAE;YAC3E,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,QAAQ,EAAE,EAAE;SACjD,CAAC,CAAA;QACF,MAAM,UAAU,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAQ,CAAA;QAClD,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAChD,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAA;QACnC,CAAC;aAAM,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACzC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uBAAuB;IACzB,CAAC;IAED,uBAAuB;IACvB,MAAM,eAAe,CAAC;QACpB,GAAG,KAAK;QACR,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,cAAc;QACxB,UAAU;QACV,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACjC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;KACxE,CAAC,CAAA;IAEF,0EAA0E;IAC1E,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAEzB,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,uBAAuB,UAAU,MAAM,OAAO,kCAAkC;QACzF,QAAQ,EAAE,cAAc;QACxB,UAAU;QACV,IAAI,EAAE,OAAO;KACd,CAAA;AACH,CAAC"}
|
|
@@ -3,11 +3,12 @@ export const UPSERT_STAGE_TOOL = {
|
|
|
3
3
|
description: `Create or update a named stage in an agent's conversation flow.
|
|
4
4
|
|
|
5
5
|
A stage defines what the agent does at a particular step in the conversation.
|
|
6
|
-
|
|
6
|
+
Stages are nodes in a graph connected by edges (connections).
|
|
7
7
|
|
|
8
8
|
Examples of stage names: "welcomeStage", "salesStage", "hostStage", "checkoutStage"
|
|
9
9
|
|
|
10
10
|
The stage config is merged with existing stages — existing stages you don't specify are kept unchanged.
|
|
11
|
+
Connections and channelFlows replace existing values when provided.
|
|
11
12
|
|
|
12
13
|
Requires role: owner, admin, or developer.`,
|
|
13
14
|
inputSchema: {
|
|
@@ -17,13 +18,52 @@ Requires role: owner, admin, or developer.`,
|
|
|
17
18
|
stageName: { type: 'string', description: 'Name key for this stage (e.g. "welcomeStage", "salesStage")' },
|
|
18
19
|
stageConfig: {
|
|
19
20
|
type: 'object',
|
|
20
|
-
description: 'Full stage configuration object.
|
|
21
|
+
description: 'Full stage configuration object.',
|
|
21
22
|
properties: {
|
|
22
23
|
label: { type: 'string', description: 'Human-readable label for this stage' },
|
|
23
24
|
instruction: { type: 'string', description: 'Instructions for the AI in this stage' },
|
|
25
|
+
type: { type: 'string', description: 'Node type: start, action, router, or end (default: action)' },
|
|
24
26
|
tools: { type: 'array', items: { type: 'string' }, description: 'Tool IDs available in this stage' },
|
|
25
|
-
trigger: { type: 'string', description: 'Optional trigger condition' },
|
|
26
|
-
channels: { type: 'array', items: { type: 'string' }, description: 'Channels where this stage is active' }
|
|
27
|
+
trigger: { type: 'string', description: 'Optional trigger condition (legacy)' },
|
|
28
|
+
channels: { type: 'array', items: { type: 'string' }, description: 'Channels where this stage is active (legacy)' }
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
connections: {
|
|
32
|
+
type: 'array',
|
|
33
|
+
description: 'Graph edges between stages. Replaces ALL existing connections.',
|
|
34
|
+
items: {
|
|
35
|
+
type: 'object',
|
|
36
|
+
properties: {
|
|
37
|
+
id: { type: 'string', description: 'Unique connection ID (e.g. "c1", "c2")' },
|
|
38
|
+
from: { type: 'string', description: 'Source stage ID' },
|
|
39
|
+
to: { type: 'string', description: 'Target stage ID' },
|
|
40
|
+
type: { type: 'string', description: '"default" (always follow) or "conditional" (LLM evaluates)' },
|
|
41
|
+
condition: { type: 'string', description: 'Natural language condition (for conditional type)' }
|
|
42
|
+
},
|
|
43
|
+
required: ['id', 'from', 'to', 'type']
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
channelFlows: {
|
|
47
|
+
type: 'object',
|
|
48
|
+
description: 'Per-channel flow overrides. Key = channel name, value = { connections: [...] }. Replaces ALL existing channelFlows.',
|
|
49
|
+
additionalProperties: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
connections: {
|
|
53
|
+
type: 'array',
|
|
54
|
+
items: {
|
|
55
|
+
type: 'object',
|
|
56
|
+
properties: {
|
|
57
|
+
id: { type: 'string' },
|
|
58
|
+
from: { type: 'string' },
|
|
59
|
+
to: { type: 'string' },
|
|
60
|
+
type: { type: 'string' },
|
|
61
|
+
condition: { type: 'string' }
|
|
62
|
+
},
|
|
63
|
+
required: ['id', 'from', 'to', 'type']
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
27
67
|
}
|
|
28
68
|
}
|
|
29
69
|
},
|
|
@@ -31,9 +71,17 @@ Requires role: owner, admin, or developer.`,
|
|
|
31
71
|
}
|
|
32
72
|
};
|
|
33
73
|
export async function upsertStageHandler(client, args) {
|
|
34
|
-
const { agentId, stageName, stageConfig } = args;
|
|
35
|
-
|
|
74
|
+
const { agentId, stageName, stageConfig, connections, channelFlows } = args;
|
|
75
|
+
const payload = {
|
|
36
76
|
stages: { [stageName]: stageConfig }
|
|
37
|
-
}
|
|
77
|
+
};
|
|
78
|
+
// Include connections and channelFlows if provided
|
|
79
|
+
if (connections !== undefined) {
|
|
80
|
+
payload.connections = connections;
|
|
81
|
+
}
|
|
82
|
+
if (channelFlows !== undefined) {
|
|
83
|
+
payload.channelFlows = channelFlows;
|
|
84
|
+
}
|
|
85
|
+
return client.put(`/api/v1/mcp/agents/${agentId}`, payload);
|
|
38
86
|
}
|
|
39
87
|
//# sourceMappingURL=upsert_stage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upsert_stage.js","sourceRoot":"","sources":["../../src/tools/upsert_stage.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"upsert_stage.js","sourceRoot":"","sources":["../../src/tools/upsert_stage.ts"],"names":[],"mappings":"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"}
|