neuron-mcp-server 1.0.0
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/LICENSE +21 -0
- package/README.md +178 -0
- package/dist/client.d.ts +34 -0
- package/dist/client.js +104 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +190 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/ai.d.ts +2 -0
- package/dist/tools/ai.js +25 -0
- package/dist/tools/ai.js.map +1 -0
- package/dist/tools/audit.d.ts +2 -0
- package/dist/tools/audit.js +40 -0
- package/dist/tools/audit.js.map +1 -0
- package/dist/tools/auth.d.ts +2 -0
- package/dist/tools/auth.js +348 -0
- package/dist/tools/auth.js.map +1 -0
- package/dist/tools/billing.d.ts +2 -0
- package/dist/tools/billing.js +51 -0
- package/dist/tools/billing.js.map +1 -0
- package/dist/tools/blog.d.ts +2 -0
- package/dist/tools/blog.js +174 -0
- package/dist/tools/blog.js.map +1 -0
- package/dist/tools/bot-api-keys.d.ts +2 -0
- package/dist/tools/bot-api-keys.js +60 -0
- package/dist/tools/bot-api-keys.js.map +1 -0
- package/dist/tools/bot-api.d.ts +2 -0
- package/dist/tools/bot-api.js +120 -0
- package/dist/tools/bot-api.js.map +1 -0
- package/dist/tools/bots.d.ts +2 -0
- package/dist/tools/bots.js +228 -0
- package/dist/tools/bots.js.map +1 -0
- package/dist/tools/broadcasts.d.ts +2 -0
- package/dist/tools/broadcasts.js +156 -0
- package/dist/tools/broadcasts.js.map +1 -0
- package/dist/tools/builtin-tools.d.ts +5 -0
- package/dist/tools/builtin-tools.js +81 -0
- package/dist/tools/builtin-tools.js.map +1 -0
- package/dist/tools/campaigns.d.ts +2 -0
- package/dist/tools/campaigns.js +277 -0
- package/dist/tools/campaigns.js.map +1 -0
- package/dist/tools/channels.d.ts +2 -0
- package/dist/tools/channels.js +334 -0
- package/dist/tools/channels.js.map +1 -0
- package/dist/tools/contact-lists.d.ts +2 -0
- package/dist/tools/contact-lists.js +214 -0
- package/dist/tools/contact-lists.js.map +1 -0
- package/dist/tools/contacts.d.ts +2 -0
- package/dist/tools/contacts.js +265 -0
- package/dist/tools/contacts.js.map +1 -0
- package/dist/tools/conversations.d.ts +5 -0
- package/dist/tools/conversations.js +270 -0
- package/dist/tools/conversations.js.map +1 -0
- package/dist/tools/knowledge-bases.d.ts +6 -0
- package/dist/tools/knowledge-bases.js +398 -0
- package/dist/tools/knowledge-bases.js.map +1 -0
- package/dist/tools/list-pool.d.ts +2 -0
- package/dist/tools/list-pool.js +120 -0
- package/dist/tools/list-pool.js.map +1 -0
- package/dist/tools/media.d.ts +2 -0
- package/dist/tools/media.js +39 -0
- package/dist/tools/media.js.map +1 -0
- package/dist/tools/newsletters.d.ts +2 -0
- package/dist/tools/newsletters.js +154 -0
- package/dist/tools/newsletters.js.map +1 -0
- package/dist/tools/organizations.d.ts +2 -0
- package/dist/tools/organizations.js +205 -0
- package/dist/tools/organizations.js.map +1 -0
- package/dist/tools/outbound-webhooks.d.ts +5 -0
- package/dist/tools/outbound-webhooks.js +143 -0
- package/dist/tools/outbound-webhooks.js.map +1 -0
- package/dist/tools/payouts.d.ts +2 -0
- package/dist/tools/payouts.js +86 -0
- package/dist/tools/payouts.js.map +1 -0
- package/dist/tools/pool.d.ts +2 -0
- package/dist/tools/pool.js +202 -0
- package/dist/tools/pool.js.map +1 -0
- package/dist/tools/reflections.d.ts +5 -0
- package/dist/tools/reflections.js +90 -0
- package/dist/tools/reflections.js.map +1 -0
- package/dist/tools/tools.d.ts +5 -0
- package/dist/tools/tools.js +174 -0
- package/dist/tools/tools.js.map +1 -0
- package/dist/tools/wallets.d.ts +2 -0
- package/dist/tools/wallets.js +68 -0
- package/dist/tools/wallets.js.map +1 -0
- package/dist/tools/webhooks.d.ts +5 -0
- package/dist/tools/webhooks.js +124 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { api, jsonResult, errorResult } from "../client.js";
|
|
3
|
+
export function registerBotApiKeyTools(server) {
|
|
4
|
+
// Create API Key
|
|
5
|
+
server.registerTool("neuron_create_api_key", {
|
|
6
|
+
title: "Create API Key",
|
|
7
|
+
description: "Generate a new API key for a bot to enable programmatic access. The key will have an 'nrn_' prefix and can optionally expire at a specified date.",
|
|
8
|
+
annotations: {},
|
|
9
|
+
inputSchema: z.object({
|
|
10
|
+
botId: z.string().describe("The unique identifier of the bot for which to create the API key"),
|
|
11
|
+
name: z.string().describe("A descriptive name for the API key to identify its purpose"),
|
|
12
|
+
expiresAt: z.string().optional().describe("Optional ISO 8601 date-time when the key should expire (e.g., '2026-12-31T23:59:59Z')"),
|
|
13
|
+
}),
|
|
14
|
+
}, async (params) => {
|
|
15
|
+
try {
|
|
16
|
+
const { botId, ...keyData } = params;
|
|
17
|
+
const result = await api("POST", `bots/${botId}/api-keys`, keyData);
|
|
18
|
+
return jsonResult(result);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return errorResult(error);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
// List API Keys
|
|
25
|
+
server.registerTool("neuron_list_api_keys", {
|
|
26
|
+
title: "List API Keys",
|
|
27
|
+
description: "Retrieve all API keys associated with a specific bot including their names, creation dates, expiration dates, and revocation status.",
|
|
28
|
+
annotations: {},
|
|
29
|
+
inputSchema: z.object({
|
|
30
|
+
botId: z.string().describe("The unique identifier of the bot whose API keys to retrieve"),
|
|
31
|
+
}),
|
|
32
|
+
}, async (params) => {
|
|
33
|
+
try {
|
|
34
|
+
const result = await api("GET", `bots/${params.botId}/api-keys`);
|
|
35
|
+
return jsonResult(result);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
return errorResult(error);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
// Revoke API Key
|
|
42
|
+
server.registerTool("neuron_revoke_api_key", {
|
|
43
|
+
title: "Revoke API Key",
|
|
44
|
+
description: "Revoke an API key to immediately invalidate it and prevent further use. This action cannot be undone.",
|
|
45
|
+
annotations: {},
|
|
46
|
+
inputSchema: z.object({
|
|
47
|
+
botId: z.string().describe("The unique identifier of the bot that owns the API key"),
|
|
48
|
+
keyId: z.string().describe("The unique identifier of the API key to revoke"),
|
|
49
|
+
}),
|
|
50
|
+
}, async (params) => {
|
|
51
|
+
try {
|
|
52
|
+
const result = await api("DELETE", `bots/${params.botId}/api-keys/${params.keyId}`);
|
|
53
|
+
return jsonResult(result);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
return errorResult(error);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=bot-api-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot-api-keys.js","sourceRoot":"","sources":["../../src/tools/bot-api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,iBAAiB;IACjB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,mJAAmJ;QAChK,WAAW,EAAE,EAGZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;YAC9F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YACvF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;SACnI,CAAC;KACH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,QAAQ,KAAK,WAAW,EAAE,OAAO,CAAC,CAAC;YACpE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gBAAgB;IAChB,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,sIAAsI;QACnJ,WAAW,EAAE,EAGZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;SAC1F,CAAC;KACH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,QAAQ,MAAM,CAAC,KAAK,WAAW,CAAC,CAAC;YACjE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iBAAiB;IACjB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,uGAAuG;QACpH,WAAW,EAAE,EAGZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;YACpF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;SAC7E,CAAC;KACH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,QAAQ,MAAM,CAAC,KAAK,aAAa,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACpF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { api, jsonResult, errorResult } from "../client.js";
|
|
3
|
+
export function registerBotApiTools(server) {
|
|
4
|
+
// Bot API Chat
|
|
5
|
+
server.registerTool("neuron_bot_api_chat", {
|
|
6
|
+
title: "Bot API Chat",
|
|
7
|
+
description: "Send a chat message to the bot API as a contact and receive an AI-generated response. Requires a valid API key with 'nrn_' prefix.",
|
|
8
|
+
annotations: {},
|
|
9
|
+
inputSchema: z.object({
|
|
10
|
+
apiKey: z.string().describe("The bot API key starting with 'nrn_' prefix for authentication"),
|
|
11
|
+
message: z.string().describe("The message text to send to the bot"),
|
|
12
|
+
contactPhone: z.string().describe("The phone number of the contact sending the message (E.164 format recommended)"),
|
|
13
|
+
contactName: z.string().optional().describe("Optional name of the contact for context"),
|
|
14
|
+
}),
|
|
15
|
+
}, async (params) => {
|
|
16
|
+
try {
|
|
17
|
+
const { apiKey, ...chatData } = params;
|
|
18
|
+
const result = await api("POST", "bot-api/chat", chatData, undefined, { Authorization: `Bearer ${apiKey}` });
|
|
19
|
+
return jsonResult(result);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return errorResult(error);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
// Bot API Send
|
|
26
|
+
server.registerTool("neuron_bot_api_send", {
|
|
27
|
+
title: "Bot API Send",
|
|
28
|
+
description: "Send an outbound message through the bot API to a specified phone number. Supports text and media messages. Requires a valid API key.",
|
|
29
|
+
annotations: {},
|
|
30
|
+
inputSchema: z.object({
|
|
31
|
+
apiKey: z.string().describe("The bot API key starting with 'nrn_' prefix for authentication"),
|
|
32
|
+
to: z.string().describe("The recipient's phone number (E.164 format recommended)"),
|
|
33
|
+
message: z.string().describe("The message text to send"),
|
|
34
|
+
messageType: z.string().optional().describe("Optional message type (e.g., 'text', 'image', 'video', 'audio', 'document')"),
|
|
35
|
+
mediaUrl: z.string().optional().describe("Optional URL to media file if sending media message"),
|
|
36
|
+
channelId: z.string().optional().describe("Optional channel ID to send from a specific WhatsApp number. Uses the bot's primary number if omitted."),
|
|
37
|
+
}),
|
|
38
|
+
}, async (params) => {
|
|
39
|
+
try {
|
|
40
|
+
const { apiKey, ...sendData } = params;
|
|
41
|
+
const result = await api("POST", "bot-api/send", sendData, undefined, { Authorization: `Bearer ${apiKey}` });
|
|
42
|
+
return jsonResult(result);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return errorResult(error);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
// Bot API List Conversations
|
|
49
|
+
server.registerTool("neuron_bot_api_list_conversations", {
|
|
50
|
+
title: "Bot API List Conversations",
|
|
51
|
+
description: "Retrieve a list of conversations managed by the bot. Supports filtering by status and pagination. Requires a valid API key.",
|
|
52
|
+
annotations: {},
|
|
53
|
+
inputSchema: z.object({
|
|
54
|
+
apiKey: z.string().describe("The bot API key starting with 'nrn_' prefix for authentication"),
|
|
55
|
+
status: z.string().optional().describe("Optional filter by conversation status (e.g., 'active', 'closed', 'pending')"),
|
|
56
|
+
page: z.number().positive().optional().describe("Optional page number for pagination (default: 1)"),
|
|
57
|
+
limit: z.number().positive().optional().describe("Optional number of conversations per page (default: 20)"),
|
|
58
|
+
}),
|
|
59
|
+
}, async (params) => {
|
|
60
|
+
try {
|
|
61
|
+
const { apiKey, status, page, limit } = params;
|
|
62
|
+
const queryParams = {};
|
|
63
|
+
if (status)
|
|
64
|
+
queryParams.status = status;
|
|
65
|
+
if (page)
|
|
66
|
+
queryParams.page = page.toString();
|
|
67
|
+
if (limit)
|
|
68
|
+
queryParams.limit = limit.toString();
|
|
69
|
+
const result = await api("GET", "bot-api/conversations", undefined, queryParams, { Authorization: `Bearer ${apiKey}` });
|
|
70
|
+
return jsonResult(result);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
return errorResult(error);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
// Bot API Get Messages
|
|
77
|
+
server.registerTool("neuron_bot_api_get_messages", {
|
|
78
|
+
title: "Bot API Get Messages",
|
|
79
|
+
description: "Retrieve message history for a specific conversation with pagination support. Requires a valid API key.",
|
|
80
|
+
annotations: {},
|
|
81
|
+
inputSchema: z.object({
|
|
82
|
+
apiKey: z.string().describe("The bot API key starting with 'nrn_' prefix for authentication"),
|
|
83
|
+
conversationId: z.string().describe("The unique identifier of the conversation"),
|
|
84
|
+
before: z.string().optional().describe("Optional cursor for pagination - retrieve messages before this message ID or timestamp"),
|
|
85
|
+
limit: z.number().positive().optional().describe("Optional maximum number of messages to retrieve (default: 50)"),
|
|
86
|
+
}),
|
|
87
|
+
}, async (params) => {
|
|
88
|
+
try {
|
|
89
|
+
const { apiKey, conversationId, before, limit } = params;
|
|
90
|
+
const queryParams = {};
|
|
91
|
+
if (before)
|
|
92
|
+
queryParams.before = before;
|
|
93
|
+
if (limit)
|
|
94
|
+
queryParams.limit = limit.toString();
|
|
95
|
+
const result = await api("GET", `bot-api/conversations/${conversationId}/messages`, undefined, queryParams, { Authorization: `Bearer ${apiKey}` });
|
|
96
|
+
return jsonResult(result);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return errorResult(error);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
// Bot API Get Bot
|
|
103
|
+
server.registerTool("neuron_bot_api_get_bot", {
|
|
104
|
+
title: "Bot API Get Bot",
|
|
105
|
+
description: "Retrieve information about the bot associated with the provided API key including its configuration and status.",
|
|
106
|
+
annotations: {},
|
|
107
|
+
inputSchema: z.object({
|
|
108
|
+
apiKey: z.string().describe("The bot API key starting with 'nrn_' prefix for authentication"),
|
|
109
|
+
}),
|
|
110
|
+
}, async (params) => {
|
|
111
|
+
try {
|
|
112
|
+
const result = await api("GET", "bot-api/bot", undefined, undefined, { Authorization: `Bearer ${params.apiKey}` });
|
|
113
|
+
return jsonResult(result);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
return errorResult(error);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=bot-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot-api.js","sourceRoot":"","sources":["../../src/tools/bot-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,eAAe;IACf,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,oIAAoI;QACjJ,WAAW,EAAE,EAIZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;YAC7F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YACnE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gFAAgF,CAAC;YACnH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACxF,CAAC;KACH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,MAAM,EACN,cAAc,EACd,QAAQ,EACR,SAAS,EACT,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,CACtC,CAAC;YACF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,eAAe;IACf,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,uIAAuI;QACpJ,WAAW,EAAE,EAIZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;YAC7F,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YAClF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;YAC1H,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;YAC/F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wGAAwG,CAAC;SACpJ,CAAC;KACH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,MAAM,EACN,cAAc,EACd,QAAQ,EACR,SAAS,EACT,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,CACtC,CAAC;YACF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,6BAA6B;IAC7B,MAAM,CAAC,YAAY,CACjB,mCAAmC,EACnC;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,6HAA6H;QAC1I,WAAW,EAAE,EAIZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;YAC7F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;YACtH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YACnG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;SAC5G,CAAC;KACH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;YAC/C,MAAM,WAAW,GAA2B,EAAE,CAAC;YAC/C,IAAI,MAAM;gBAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACxC,IAAI,IAAI;gBAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7C,IAAI,KAAK;gBAAE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAEhD,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,KAAK,EACL,uBAAuB,EACvB,SAAS,EACT,WAAW,EACX,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,CACtC,CAAC;YACF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,yGAAyG;QACtH,WAAW,EAAE,EAIZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;YAC7F,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wFAAwF,CAAC;YAChI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;SAClH,CAAC;KACH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;YACzD,MAAM,WAAW,GAA2B,EAAE,CAAC;YAC/C,IAAI,MAAM;gBAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;YACxC,IAAI,KAAK;gBAAE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAEhD,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,KAAK,EACL,yBAAyB,cAAc,WAAW,EAClD,SAAS,EACT,WAAW,EACX,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,CACtC,CAAC;YACF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,kBAAkB;IAClB,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,iHAAiH;QAC9H,WAAW,EAAE,EAIZ;QACD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;SAC9F,CAAC;KACH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,KAAK,EACL,aAAa,EACb,SAAS,EACT,SAAS,EACT,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE,CAC7C,CAAC;YACF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { api, jsonResult, errorResult } from "../client.js";
|
|
3
|
+
export function registerBotTools(server) {
|
|
4
|
+
// Create Bot
|
|
5
|
+
server.registerTool("neuron_create_bot", {
|
|
6
|
+
title: "Create Bot",
|
|
7
|
+
description: "Create a new bot with specified configuration including name, system prompt, and optional parameters like model, temperature, and phone number.",
|
|
8
|
+
annotations: {},
|
|
9
|
+
inputSchema: z.object({
|
|
10
|
+
name: z.string().describe("The name of the bot"),
|
|
11
|
+
systemPrompt: z.string().describe("The system prompt that defines the bot's behavior and personality"),
|
|
12
|
+
assignment: z.string().optional().describe("One-sentence role definition (max 2000 chars)"),
|
|
13
|
+
responsibilities: z.array(z.string()).optional().describe("Array of responsibility descriptions"),
|
|
14
|
+
llmModel: z.string().optional().describe("OpenRouter model ID (e.g., google/gemini-2.5-flash-lite-preview-09-2025, openrouter/auto)"),
|
|
15
|
+
llmTemperature: z.number().min(0).max(2).optional().describe("Temperature parameter for response randomness (0-2)"),
|
|
16
|
+
maxTokens: z.number().positive().optional().describe("Maximum tokens for responses"),
|
|
17
|
+
escalationPrompt: z.string().optional().describe("Prompt template for human handoff (max 5000 chars)"),
|
|
18
|
+
greetingMessage: z.string().optional().describe("Auto-greeting when a new conversation starts (max 2000 chars)"),
|
|
19
|
+
fallbackMessage: z.string().optional().describe("Fallback message when bot cannot understand (max 2000 chars)"),
|
|
20
|
+
whatsappChannelId: z.string().optional().describe("UUID of the WhatsApp channel to associate with the bot"),
|
|
21
|
+
}),
|
|
22
|
+
}, async (params) => {
|
|
23
|
+
try {
|
|
24
|
+
const result = await api("POST", "bots", {
|
|
25
|
+
name: params.name,
|
|
26
|
+
systemPrompt: params.systemPrompt,
|
|
27
|
+
assignment: params.assignment,
|
|
28
|
+
responsibilities: params.responsibilities,
|
|
29
|
+
llmModel: params.llmModel,
|
|
30
|
+
llmTemperature: params.llmTemperature,
|
|
31
|
+
maxTokens: params.maxTokens,
|
|
32
|
+
escalationPrompt: params.escalationPrompt,
|
|
33
|
+
greetingMessage: params.greetingMessage,
|
|
34
|
+
fallbackMessage: params.fallbackMessage,
|
|
35
|
+
whatsappChannelId: params.whatsappChannelId,
|
|
36
|
+
});
|
|
37
|
+
return jsonResult(result);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
return errorResult(error);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
// List Bots
|
|
44
|
+
server.registerTool("neuron_list_bots", {
|
|
45
|
+
title: "List Bots",
|
|
46
|
+
description: "Retrieve a list of all bots in the system with their configurations and status.",
|
|
47
|
+
annotations: {},
|
|
48
|
+
inputSchema: z.object({}),
|
|
49
|
+
}, async () => {
|
|
50
|
+
try {
|
|
51
|
+
const result = await api("GET", "bots");
|
|
52
|
+
return jsonResult(result);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
return errorResult(error);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
// Get Bot
|
|
59
|
+
server.registerTool("neuron_get_bot", {
|
|
60
|
+
title: "Get Bot",
|
|
61
|
+
description: "Retrieve detailed information about a specific bot by ID including its configuration, status, and associated resources.",
|
|
62
|
+
annotations: {},
|
|
63
|
+
inputSchema: z.object({
|
|
64
|
+
id: z.string().describe("The unique identifier of the bot"),
|
|
65
|
+
}),
|
|
66
|
+
}, async (params) => {
|
|
67
|
+
try {
|
|
68
|
+
const result = await api("GET", `bots/${params.id}`);
|
|
69
|
+
return jsonResult(result);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return errorResult(error);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
// Update Bot
|
|
76
|
+
server.registerTool("neuron_update_bot", {
|
|
77
|
+
title: "Update Bot",
|
|
78
|
+
description: "Update an existing bot's configuration including name, system prompt, model parameters, and phone number association.",
|
|
79
|
+
annotations: {},
|
|
80
|
+
inputSchema: z.object({
|
|
81
|
+
id: z.string().describe("The unique identifier of the bot to update"),
|
|
82
|
+
name: z.string().optional().describe("The new name of the bot"),
|
|
83
|
+
systemPrompt: z.string().optional().describe("The new system prompt for the bot"),
|
|
84
|
+
assignment: z.string().optional().describe("One-sentence role definition (max 2000 chars)"),
|
|
85
|
+
responsibilities: z.array(z.string()).optional().describe("Array of responsibility descriptions"),
|
|
86
|
+
llmModel: z.string().optional().describe("OpenRouter model ID (e.g., google/gemini-2.5-flash-lite-preview-09-2025, openrouter/auto)"),
|
|
87
|
+
llmTemperature: z.number().min(0).max(2).optional().describe("The new temperature parameter (0-2)"),
|
|
88
|
+
maxTokens: z.number().positive().optional().describe("The new maximum tokens limit"),
|
|
89
|
+
escalationPrompt: z.string().optional().describe("Prompt template for human handoff (max 5000 chars)"),
|
|
90
|
+
greetingMessage: z.string().optional().describe("Auto-greeting when a new conversation starts (max 2000 chars)"),
|
|
91
|
+
fallbackMessage: z.string().optional().describe("Fallback message when bot cannot understand (max 2000 chars)"),
|
|
92
|
+
whatsappChannelId: z.string().optional().describe("UUID of the WhatsApp channel to associate with the bot"),
|
|
93
|
+
}),
|
|
94
|
+
}, async (params) => {
|
|
95
|
+
try {
|
|
96
|
+
const { id, ...updateData } = params;
|
|
97
|
+
const result = await api("PUT", `bots/${id}`, updateData);
|
|
98
|
+
return jsonResult(result);
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
return errorResult(error);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
// Delete Bot
|
|
105
|
+
server.registerTool("neuron_delete_bot", {
|
|
106
|
+
title: "Delete Bot",
|
|
107
|
+
description: "Permanently delete a bot and all its associated data. This action cannot be undone.",
|
|
108
|
+
annotations: {},
|
|
109
|
+
inputSchema: z.object({
|
|
110
|
+
id: z.string().describe("The unique identifier of the bot to delete"),
|
|
111
|
+
}),
|
|
112
|
+
}, async (params) => {
|
|
113
|
+
try {
|
|
114
|
+
const result = await api("DELETE", `bots/${params.id}`);
|
|
115
|
+
return jsonResult(result);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return errorResult(error);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
// Pause Bot
|
|
122
|
+
server.registerTool("neuron_pause_bot", {
|
|
123
|
+
title: "Pause Bot",
|
|
124
|
+
description: "Pause a bot's operations temporarily. The bot will stop responding to messages until resumed.",
|
|
125
|
+
annotations: {},
|
|
126
|
+
inputSchema: z.object({
|
|
127
|
+
id: z.string().describe("The unique identifier of the bot to pause"),
|
|
128
|
+
}),
|
|
129
|
+
}, async (params) => {
|
|
130
|
+
try {
|
|
131
|
+
const result = await api("POST", `bots/${params.id}/pause`);
|
|
132
|
+
return jsonResult(result);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return errorResult(error);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
// Resume Bot
|
|
139
|
+
server.registerTool("neuron_resume_bot", {
|
|
140
|
+
title: "Resume Bot",
|
|
141
|
+
description: "Resume a paused bot's operations. The bot will start responding to messages again.",
|
|
142
|
+
annotations: {},
|
|
143
|
+
inputSchema: z.object({
|
|
144
|
+
id: z.string().describe("The unique identifier of the bot to resume"),
|
|
145
|
+
}),
|
|
146
|
+
}, async (params) => {
|
|
147
|
+
try {
|
|
148
|
+
const result = await api("POST", `bots/${params.id}/resume`);
|
|
149
|
+
return jsonResult(result);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return errorResult(error);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
// Get Bot Analytics
|
|
156
|
+
server.registerTool("neuron_get_bot_analytics", {
|
|
157
|
+
title: "Get Bot Analytics",
|
|
158
|
+
description: "Retrieve analytics and usage statistics for a specific bot including message counts, response times, and conversation metrics.",
|
|
159
|
+
annotations: {},
|
|
160
|
+
inputSchema: z.object({
|
|
161
|
+
id: z.string().describe("The unique identifier of the bot"),
|
|
162
|
+
}),
|
|
163
|
+
}, async (params) => {
|
|
164
|
+
try {
|
|
165
|
+
const result = await api("GET", `bots/${params.id}/analytics`);
|
|
166
|
+
return jsonResult(result);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
return errorResult(error);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
// Attach Knowledge Base
|
|
173
|
+
server.registerTool("neuron_attach_knowledge_base", {
|
|
174
|
+
title: "Attach Knowledge Base",
|
|
175
|
+
description: "Attach a knowledge base to a bot to enhance its responses with specific domain knowledge. Optional priority determines retrieval order.",
|
|
176
|
+
annotations: {},
|
|
177
|
+
inputSchema: z.object({
|
|
178
|
+
id: z.string().describe("The unique identifier of the bot"),
|
|
179
|
+
knowledgeBaseId: z.string().describe("The unique identifier of the knowledge base to attach"),
|
|
180
|
+
priority: z.number().optional().describe("Optional priority level for knowledge base retrieval (higher priority is checked first)"),
|
|
181
|
+
}),
|
|
182
|
+
}, async (params) => {
|
|
183
|
+
try {
|
|
184
|
+
const { id, ...attachData } = params;
|
|
185
|
+
const result = await api("POST", `bots/${id}/knowledge-bases`, attachData);
|
|
186
|
+
return jsonResult(result);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
return errorResult(error);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
// List Bot Knowledge Bases
|
|
193
|
+
server.registerTool("neuron_list_bot_knowledge_bases", {
|
|
194
|
+
title: "List Bot Knowledge Bases",
|
|
195
|
+
description: "Retrieve all knowledge bases attached to a specific bot along with their priorities and metadata.",
|
|
196
|
+
annotations: {},
|
|
197
|
+
inputSchema: z.object({
|
|
198
|
+
id: z.string().describe("The unique identifier of the bot"),
|
|
199
|
+
}),
|
|
200
|
+
}, async (params) => {
|
|
201
|
+
try {
|
|
202
|
+
const result = await api("GET", `bots/${params.id}/knowledge-bases`);
|
|
203
|
+
return jsonResult(result);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
return errorResult(error);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
// Detach Knowledge Base
|
|
210
|
+
server.registerTool("neuron_detach_knowledge_base", {
|
|
211
|
+
title: "Detach Knowledge Base",
|
|
212
|
+
description: "Remove a knowledge base from a bot. The bot will no longer use this knowledge base for responses.",
|
|
213
|
+
annotations: {},
|
|
214
|
+
inputSchema: z.object({
|
|
215
|
+
id: z.string().describe("The unique identifier of the bot"),
|
|
216
|
+
kbId: z.string().describe("The unique identifier of the knowledge base to detach"),
|
|
217
|
+
}),
|
|
218
|
+
}, async (params) => {
|
|
219
|
+
try {
|
|
220
|
+
const result = await api("DELETE", `bots/${params.id}/knowledge-bases/${params.kbId}`);
|
|
221
|
+
return jsonResult(result);
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
return errorResult(error);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=bots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bots.js","sourceRoot":"","sources":["../../src/tools/bots.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { api, jsonResult, errorResult } from "../client.js";
|
|
3
|
+
export function registerBroadcastsTools(server) {
|
|
4
|
+
// List broadcasts
|
|
5
|
+
server.registerTool("neuron_list_broadcasts", {
|
|
6
|
+
title: "List Broadcasts",
|
|
7
|
+
description: "List all broadcasts with optional filtering by status and pagination",
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
status: z.string().optional().describe("Filter by broadcast status (e.g., 'draft', 'sent', 'scheduled')"),
|
|
10
|
+
page: z.number().int().positive().optional().describe("Page number for pagination"),
|
|
11
|
+
limit: z.number().int().positive().optional().describe("Number of broadcasts per page"),
|
|
12
|
+
}),
|
|
13
|
+
annotations: { readOnlyHint: true },
|
|
14
|
+
}, async (params) => {
|
|
15
|
+
try {
|
|
16
|
+
const result = await api("GET", "/broadcasts", undefined, {
|
|
17
|
+
status: params.status,
|
|
18
|
+
page: params.page,
|
|
19
|
+
limit: params.limit,
|
|
20
|
+
});
|
|
21
|
+
return jsonResult(result);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return errorResult(error);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
// Create broadcast
|
|
28
|
+
server.registerTool("neuron_create_broadcast", {
|
|
29
|
+
title: "Create Broadcast",
|
|
30
|
+
description: "Create a new broadcast message. Provide recipients directly OR use recipientSources to resolve from contact lists. Channel is auto-resolved if not specified.",
|
|
31
|
+
inputSchema: z.object({
|
|
32
|
+
channelId: z.string().optional().describe("ID of the WhatsApp channel (optional — auto-resolved if omitted)"),
|
|
33
|
+
name: z.string().describe("Name/label for the broadcast"),
|
|
34
|
+
message: z.string().describe("The message content to broadcast"),
|
|
35
|
+
messageType: z.string().optional().describe("Type of message (e.g., 'text', 'image', 'document')"),
|
|
36
|
+
mediaUrl: z.string().optional().describe("URL of media to attach (for image/document message types)"),
|
|
37
|
+
recipients: z.array(z.object({
|
|
38
|
+
phone: z.string().describe("Recipient phone number"),
|
|
39
|
+
contactName: z.string().optional().describe("Recipient contact name"),
|
|
40
|
+
})).optional().describe("Direct list of recipients (alternative to recipientSources)"),
|
|
41
|
+
recipientSources: z.object({
|
|
42
|
+
listIds: z.array(z.string()).optional().describe("Contact list IDs or slugs to include"),
|
|
43
|
+
phones: z.array(z.string()).optional().describe("Individual phone numbers to include"),
|
|
44
|
+
filters: z.object({
|
|
45
|
+
tags: z.array(z.string()).optional().describe("Only include contacts with these tags"),
|
|
46
|
+
}).optional().describe("Additional filters to apply"),
|
|
47
|
+
excludeListIds: z.array(z.string()).optional().describe("Contact list IDs or slugs to exclude"),
|
|
48
|
+
}).optional().describe("Resolve recipients from contact lists, with filtering and exclusion"),
|
|
49
|
+
}),
|
|
50
|
+
}, async (params) => {
|
|
51
|
+
try {
|
|
52
|
+
const result = await api("POST", "/broadcasts", params);
|
|
53
|
+
return jsonResult(result);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
return errorResult(error);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
// Get broadcast
|
|
60
|
+
server.registerTool("neuron_get_broadcast", {
|
|
61
|
+
title: "Get Broadcast",
|
|
62
|
+
description: "Get detailed information about a specific broadcast by ID",
|
|
63
|
+
inputSchema: z.object({
|
|
64
|
+
id: z.string().describe("The unique identifier of the broadcast"),
|
|
65
|
+
}),
|
|
66
|
+
annotations: { readOnlyHint: true },
|
|
67
|
+
}, async (params) => {
|
|
68
|
+
try {
|
|
69
|
+
const result = await api("GET", `/broadcasts/${params.id}`);
|
|
70
|
+
return jsonResult(result);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
return errorResult(error);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
// Get broadcast recipients
|
|
77
|
+
server.registerTool("neuron_get_broadcast_recipients", {
|
|
78
|
+
title: "Get Broadcast Recipients",
|
|
79
|
+
description: "Get the list of recipients for a specific broadcast with delivery status",
|
|
80
|
+
inputSchema: z.object({
|
|
81
|
+
id: z.string().describe("The unique identifier of the broadcast"),
|
|
82
|
+
status: z.string().optional().describe("Filter by recipient delivery status"),
|
|
83
|
+
page: z.number().int().positive().optional().describe("Page number for pagination"),
|
|
84
|
+
limit: z.number().int().positive().optional().describe("Number of recipients per page"),
|
|
85
|
+
}),
|
|
86
|
+
annotations: { readOnlyHint: true },
|
|
87
|
+
}, async (params) => {
|
|
88
|
+
try {
|
|
89
|
+
const { id, ...query } = params;
|
|
90
|
+
const result = await api("GET", `/broadcasts/${id}/recipients`, undefined, {
|
|
91
|
+
status: query.status,
|
|
92
|
+
page: query.page,
|
|
93
|
+
limit: query.limit,
|
|
94
|
+
});
|
|
95
|
+
return jsonResult(result);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
return errorResult(error);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
// Update broadcast
|
|
102
|
+
server.registerTool("neuron_update_broadcast", {
|
|
103
|
+
title: "Update Broadcast",
|
|
104
|
+
description: "Update an existing broadcast's details (before sending)",
|
|
105
|
+
inputSchema: z.object({
|
|
106
|
+
id: z.string().describe("The unique identifier of the broadcast to update"),
|
|
107
|
+
name: z.string().optional().describe("New name for the broadcast"),
|
|
108
|
+
message: z.string().optional().describe("New message content"),
|
|
109
|
+
messageType: z.string().optional().describe("New message type"),
|
|
110
|
+
mediaUrl: z.string().optional().describe("New media URL"),
|
|
111
|
+
}),
|
|
112
|
+
}, async (params) => {
|
|
113
|
+
try {
|
|
114
|
+
const { id, ...body } = params;
|
|
115
|
+
const result = await api("PUT", `/broadcasts/${id}`, body);
|
|
116
|
+
return jsonResult(result);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
return errorResult(error);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
// Delete broadcast
|
|
123
|
+
server.registerTool("neuron_delete_broadcast", {
|
|
124
|
+
title: "Delete Broadcast",
|
|
125
|
+
description: "Delete a broadcast. This action cannot be undone.",
|
|
126
|
+
inputSchema: z.object({
|
|
127
|
+
id: z.string().describe("The unique identifier of the broadcast to delete"),
|
|
128
|
+
}),
|
|
129
|
+
annotations: { destructiveHint: true },
|
|
130
|
+
}, async (params) => {
|
|
131
|
+
try {
|
|
132
|
+
const result = await api("DELETE", `/broadcasts/${params.id}`);
|
|
133
|
+
return jsonResult(result);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
return errorResult(error);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
// Send broadcast
|
|
140
|
+
server.registerTool("neuron_send_broadcast", {
|
|
141
|
+
title: "Send Broadcast",
|
|
142
|
+
description: "Send a broadcast to all its recipients. The broadcast must be in draft status.",
|
|
143
|
+
inputSchema: z.object({
|
|
144
|
+
id: z.string().describe("The unique identifier of the broadcast to send"),
|
|
145
|
+
}),
|
|
146
|
+
}, async (params) => {
|
|
147
|
+
try {
|
|
148
|
+
const result = await api("POST", `/broadcasts/${params.id}/send`);
|
|
149
|
+
return jsonResult(result);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return errorResult(error);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=broadcasts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcasts.js","sourceRoot":"","sources":["../../src/tools/broadcasts.ts"],"names":[],"mappings":"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"}
|