neuron-mcp-server 1.0.0 → 1.1.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.
Files changed (150) hide show
  1. package/.env +13 -0
  2. package/AI_PERSONALITY_DESIGN_RESEARCH.md +1020 -0
  3. package/Dockerfile +18 -0
  4. package/README.md +146 -131
  5. package/dist/client.d.ts +6 -0
  6. package/dist/client.js +50 -12
  7. package/dist/client.js.map +1 -1
  8. package/dist/index.js +51 -7
  9. package/dist/index.js.map +1 -1
  10. package/dist/tools/ai.js +9 -3
  11. package/dist/tools/ai.js.map +1 -1
  12. package/dist/tools/approvals.d.ts +2 -0
  13. package/dist/tools/approvals.js +181 -0
  14. package/dist/tools/approvals.js.map +1 -0
  15. package/dist/tools/audit.js +7 -4
  16. package/dist/tools/audit.js.map +1 -1
  17. package/dist/tools/auth.js +119 -19
  18. package/dist/tools/auth.js.map +1 -1
  19. package/dist/tools/billing.js +22 -6
  20. package/dist/tools/billing.js.map +1 -1
  21. package/dist/tools/blog.js +98 -34
  22. package/dist/tools/blog.js.map +1 -1
  23. package/dist/tools/bot-api-keys.js +27 -12
  24. package/dist/tools/bot-api-keys.js.map +1 -1
  25. package/dist/tools/bot-api.js +53 -27
  26. package/dist/tools/bot-api.js.map +1 -1
  27. package/dist/tools/bots.js +116 -68
  28. package/dist/tools/bots.js.map +1 -1
  29. package/dist/tools/broadcasts.js +78 -38
  30. package/dist/tools/broadcasts.js.map +1 -1
  31. package/dist/tools/builtin-tools.js +19 -12
  32. package/dist/tools/builtin-tools.js.map +1 -1
  33. package/dist/tools/campaigns.js +149 -61
  34. package/dist/tools/campaigns.js.map +1 -1
  35. package/dist/tools/channels.js +163 -53
  36. package/dist/tools/channels.js.map +1 -1
  37. package/dist/tools/contact-lists.js +111 -51
  38. package/dist/tools/contact-lists.js.map +1 -1
  39. package/dist/tools/contacts.js +117 -44
  40. package/dist/tools/contacts.js.map +1 -1
  41. package/dist/tools/conversations.js +95 -50
  42. package/dist/tools/conversations.js.map +1 -1
  43. package/dist/tools/flows.d.ts +2 -0
  44. package/dist/tools/flows.js +242 -0
  45. package/dist/tools/flows.js.map +1 -0
  46. package/dist/tools/group-management.d.ts +2 -0
  47. package/dist/tools/group-management.js +239 -0
  48. package/dist/tools/group-management.js.map +1 -0
  49. package/dist/tools/leads.d.ts +2 -0
  50. package/dist/tools/leads.js +100 -0
  51. package/dist/tools/leads.js.map +1 -0
  52. package/dist/tools/list-campaigns.d.ts +2 -0
  53. package/dist/tools/list-campaigns.js +152 -0
  54. package/dist/tools/list-campaigns.js.map +1 -0
  55. package/dist/tools/list-pool.js +250 -33
  56. package/dist/tools/list-pool.js.map +1 -1
  57. package/dist/tools/media.js +12 -7
  58. package/dist/tools/media.js.map +1 -1
  59. package/dist/tools/newsletters.js +106 -26
  60. package/dist/tools/newsletters.js.map +1 -1
  61. package/dist/tools/organizations.js +76 -35
  62. package/dist/tools/organizations.js.map +1 -1
  63. package/dist/tools/outbound-webhooks.js +32 -20
  64. package/dist/tools/outbound-webhooks.js.map +1 -1
  65. package/dist/tools/payouts.js +44 -17
  66. package/dist/tools/payouts.js.map +1 -1
  67. package/dist/tools/personas.d.ts +2 -0
  68. package/dist/tools/personas.js +141 -0
  69. package/dist/tools/personas.js.map +1 -0
  70. package/dist/tools/polls.d.ts +2 -0
  71. package/dist/tools/polls.js +30 -0
  72. package/dist/tools/polls.js.map +1 -0
  73. package/dist/tools/pool.js +101 -43
  74. package/dist/tools/pool.js.map +1 -1
  75. package/dist/tools/products.d.ts +2 -0
  76. package/dist/tools/products.js +277 -0
  77. package/dist/tools/products.js.map +1 -0
  78. package/dist/tools/profile-privacy.d.ts +2 -0
  79. package/dist/tools/profile-privacy.js +195 -0
  80. package/dist/tools/profile-privacy.js.map +1 -0
  81. package/dist/tools/reflections.js +25 -13
  82. package/dist/tools/reflections.js.map +1 -1
  83. package/dist/tools/scheduled-messages.d.ts +2 -0
  84. package/dist/tools/scheduled-messages.js +124 -0
  85. package/dist/tools/scheduled-messages.js.map +1 -0
  86. package/dist/tools/social-channels.d.ts +2 -0
  87. package/dist/tools/social-channels.js +318 -0
  88. package/dist/tools/social-channels.js.map +1 -0
  89. package/dist/tools/tasks.d.ts +2 -0
  90. package/dist/tools/tasks.js +155 -0
  91. package/dist/tools/tasks.js.map +1 -0
  92. package/dist/tools/tools.js +86 -40
  93. package/dist/tools/tools.js.map +1 -1
  94. package/dist/tools/wallets.js +34 -12
  95. package/dist/tools/wallets.js.map +1 -1
  96. package/dist/tools/webhooks.js +35 -20
  97. package/dist/tools/webhooks.js.map +1 -1
  98. package/dist/tools/whatsapp-actions.d.ts +2 -0
  99. package/dist/tools/whatsapp-actions.js +186 -0
  100. package/dist/tools/whatsapp-actions.js.map +1 -0
  101. package/package.json +4 -31
  102. package/scripts/setup-delivahere-bot.ts +804 -0
  103. package/scripts/test-delivahere-bot.ts +128 -0
  104. package/scripts/update-letschop-prompt.ts +194 -0
  105. package/server.json +26 -0
  106. package/smithery.yaml +19 -0
  107. package/src/client.ts +169 -0
  108. package/src/index.ts +256 -0
  109. package/src/tools/ai.ts +35 -0
  110. package/src/tools/approvals.ts +231 -0
  111. package/src/tools/audit.ts +49 -0
  112. package/src/tools/auth.ts +536 -0
  113. package/src/tools/billing.ts +79 -0
  114. package/src/tools/blog.ts +264 -0
  115. package/src/tools/bot-api-keys.ts +87 -0
  116. package/src/tools/bot-api.ts +193 -0
  117. package/src/tools/bots.ts +320 -0
  118. package/src/tools/broadcasts.ts +224 -0
  119. package/src/tools/builtin-tools.ts +108 -0
  120. package/src/tools/campaigns.ts +429 -0
  121. package/src/tools/channels.ts +520 -0
  122. package/src/tools/contact-lists.ts +320 -0
  123. package/src/tools/contacts.ts +395 -0
  124. package/src/tools/conversations.ts +349 -0
  125. package/src/tools/flows.ts +298 -0
  126. package/src/tools/group-management.ts +265 -0
  127. package/src/tools/knowledge-bases.ts +451 -0
  128. package/src/tools/leads.ts +104 -0
  129. package/src/tools/list-campaigns.ts +190 -0
  130. package/src/tools/list-pool.ts +389 -0
  131. package/src/tools/media.ts +50 -0
  132. package/src/tools/newsletters.ts +271 -0
  133. package/src/tools/organizations.ts +287 -0
  134. package/src/tools/outbound-webhooks.ts +181 -0
  135. package/src/tools/payouts.ts +133 -0
  136. package/src/tools/personas.ts +145 -0
  137. package/src/tools/polls.ts +32 -0
  138. package/src/tools/pool.ts +293 -0
  139. package/src/tools/products.ts +280 -0
  140. package/src/tools/profile-privacy.ts +215 -0
  141. package/src/tools/reflections.ts +124 -0
  142. package/src/tools/scheduled-messages.ts +144 -0
  143. package/src/tools/social-channels.ts +396 -0
  144. package/src/tools/tasks.ts +198 -0
  145. package/src/tools/tools.ts +255 -0
  146. package/src/tools/wallets.ts +107 -0
  147. package/src/tools/webhooks.ts +166 -0
  148. package/src/tools/whatsapp-actions.ts +203 -0
  149. package/tsconfig.json +20 -0
  150. package/LICENSE +0 -21
@@ -0,0 +1,124 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ export function registerScheduledMessageTools(server) {
4
+ // List scheduled messages
5
+ server.registerTool("neuron_list_scheduled_messages", {
6
+ title: "List Scheduled Messages",
7
+ description: "Retrieve a paginated list of scheduled messages for the current organization, with optional filtering by status (scheduled, sent, failed, cancelled).",
8
+ inputSchema: z.object({
9
+ status: z
10
+ .string()
11
+ .optional()
12
+ .describe("Filter by status: 'scheduled', 'sent', 'failed', or 'cancelled'"),
13
+ page: z
14
+ .number()
15
+ .int()
16
+ .positive()
17
+ .optional()
18
+ .describe("Page number for pagination (default: 1)"),
19
+ limit: z
20
+ .number()
21
+ .int()
22
+ .positive()
23
+ .optional()
24
+ .describe("Number of items per page (default: 20)"),
25
+ }),
26
+ annotations: {
27
+ readOnlyHint: true,
28
+ destructiveHint: false,
29
+ idempotentHint: true,
30
+ openWorldHint: false,
31
+ },
32
+ }, async (params) => {
33
+ try {
34
+ const result = await api("GET", "/scheduled-messages", undefined, {
35
+ status: params.status,
36
+ page: params.page,
37
+ limit: params.limit,
38
+ });
39
+ return jsonResult(result);
40
+ }
41
+ catch (error) {
42
+ return errorResult(error);
43
+ }
44
+ });
45
+ // Get a scheduled message
46
+ server.registerTool("neuron_get_scheduled_message", {
47
+ title: "Get Scheduled Message",
48
+ description: "Retrieve detailed information about a specific scheduled message, including its status, send time, and message content.",
49
+ inputSchema: z.object({
50
+ id: z.string().describe("Unique identifier (UUID) of the scheduled message"),
51
+ }),
52
+ annotations: {
53
+ readOnlyHint: true,
54
+ destructiveHint: false,
55
+ idempotentHint: true,
56
+ openWorldHint: false,
57
+ },
58
+ }, async (params) => {
59
+ try {
60
+ const result = await api("GET", `/scheduled-messages/${params.id}`);
61
+ return jsonResult(result);
62
+ }
63
+ catch (error) {
64
+ return errorResult(error);
65
+ }
66
+ });
67
+ // Update a scheduled message
68
+ server.registerTool("neuron_update_scheduled_message", {
69
+ title: "Update Scheduled Message",
70
+ description: "Update the message content, media, or send time of a scheduled message. Only messages with status 'scheduled' can be updated.",
71
+ inputSchema: z.object({
72
+ id: z.string().describe("Unique identifier (UUID) of the scheduled message to update"),
73
+ message: z.string().optional().describe("New message text content"),
74
+ messageType: z
75
+ .string()
76
+ .optional()
77
+ .describe("New message type: 'text', 'image', 'audio', 'video', or 'document'"),
78
+ mediaUrl: z.string().optional().describe("New media URL to attach"),
79
+ contactName: z.string().optional().describe("Updated display name for the recipient"),
80
+ sendAt: z
81
+ .string()
82
+ .optional()
83
+ .describe("New ISO 8601 date-time for scheduled delivery (must be in the future)"),
84
+ }),
85
+ annotations: {
86
+ readOnlyHint: false,
87
+ destructiveHint: false,
88
+ idempotentHint: true,
89
+ openWorldHint: false,
90
+ },
91
+ }, async (params) => {
92
+ try {
93
+ const { id, ...body } = params;
94
+ const result = await api("PUT", `/scheduled-messages/${id}`, body);
95
+ return jsonResult(result);
96
+ }
97
+ catch (error) {
98
+ return errorResult(error);
99
+ }
100
+ });
101
+ // Cancel a scheduled message
102
+ server.registerTool("neuron_cancel_scheduled_message", {
103
+ title: "Cancel Scheduled Message",
104
+ description: "Cancel a scheduled message to prevent it from being sent. Only messages with status 'scheduled' can be cancelled. This action cannot be undone.",
105
+ inputSchema: z.object({
106
+ id: z.string().describe("Unique identifier (UUID) of the scheduled message to cancel"),
107
+ }),
108
+ annotations: {
109
+ readOnlyHint: false,
110
+ destructiveHint: true,
111
+ idempotentHint: true,
112
+ openWorldHint: false,
113
+ },
114
+ }, async (params) => {
115
+ try {
116
+ const result = await api("DELETE", `/scheduled-messages/${params.id}`);
117
+ return jsonResult(result);
118
+ }
119
+ catch (error) {
120
+ return errorResult(error);
121
+ }
122
+ });
123
+ }
124
+ //# sourceMappingURL=scheduled-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled-messages.js","sourceRoot":"","sources":["../../src/tools/scheduled-messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSocialChannelsTools(server: McpServer): void;
@@ -0,0 +1,318 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ export function registerSocialChannelsTools(server) {
4
+ // 1. List social channels
5
+ server.registerTool("neuron_list_social_channels", {
6
+ title: "List Social Channels",
7
+ description: "Retrieve all social media channels (Instagram, Twitter/X) configured in the current organization.",
8
+ annotations: {
9
+ readOnlyHint: true,
10
+ destructiveHint: false,
11
+ idempotentHint: true,
12
+ openWorldHint: false,
13
+ },
14
+ inputSchema: z.object({}),
15
+ }, async () => {
16
+ try {
17
+ const response = await api("GET", "/social-channels");
18
+ return jsonResult(response);
19
+ }
20
+ catch (error) {
21
+ return errorResult(error);
22
+ }
23
+ });
24
+ // 2. Create a social channel
25
+ server.registerTool("neuron_create_social_channel", {
26
+ title: "Create Social Channel",
27
+ description: "Create a new social media channel with platform credentials. Supports Instagram and Twitter/X. Credentials should be the full session JSON including account, cookies, headers, and platform-specific tokens.",
28
+ annotations: {
29
+ readOnlyHint: false,
30
+ destructiveHint: false,
31
+ idempotentHint: false,
32
+ openWorldHint: false,
33
+ },
34
+ inputSchema: z.object({
35
+ platform: z
36
+ .enum(["instagram", "twitter"])
37
+ .describe("Social media platform: 'instagram' or 'twitter'"),
38
+ label: z
39
+ .string()
40
+ .describe("Display name for the channel (e.g., 'Brand IG Account')"),
41
+ username: z
42
+ .string()
43
+ .optional()
44
+ .describe("Social media username (without @)"),
45
+ credentials: z
46
+ .string()
47
+ .optional()
48
+ .describe("Session credentials as JSON string with account, session.cookies, session.headers, etc."),
49
+ }),
50
+ }, async (args) => {
51
+ try {
52
+ let creds;
53
+ if (args.credentials) {
54
+ try {
55
+ creds = JSON.parse(args.credentials);
56
+ }
57
+ catch {
58
+ return errorResult(new Error("Invalid JSON in credentials parameter"));
59
+ }
60
+ }
61
+ const response = await api("POST", "/social-channels", {
62
+ platform: args.platform,
63
+ label: args.label,
64
+ username: args.username,
65
+ credentials: creds,
66
+ });
67
+ return jsonResult(response);
68
+ }
69
+ catch (error) {
70
+ return errorResult(error);
71
+ }
72
+ });
73
+ // 3. Get social channel details
74
+ server.registerTool("neuron_get_social_channel", {
75
+ title: "Get Social Channel",
76
+ description: "Retrieve detailed information about a specific social media channel, including its platform, credentials status, and connection state.",
77
+ annotations: {
78
+ readOnlyHint: true,
79
+ destructiveHint: false,
80
+ idempotentHint: true,
81
+ openWorldHint: false,
82
+ },
83
+ inputSchema: z.object({
84
+ id: z.string().describe("Unique identifier (UUID) of the social channel"),
85
+ }),
86
+ }, async (args) => {
87
+ try {
88
+ const response = await api("GET", `/social-channels/${args.id}`);
89
+ return jsonResult(response);
90
+ }
91
+ catch (error) {
92
+ return errorResult(error);
93
+ }
94
+ });
95
+ // 4. Update social channel
96
+ server.registerTool("neuron_update_social_channel", {
97
+ title: "Update Social Channel",
98
+ description: "Update an existing social media channel. Can update label, username, or refresh credentials.",
99
+ annotations: {
100
+ readOnlyHint: false,
101
+ destructiveHint: false,
102
+ idempotentHint: true,
103
+ openWorldHint: false,
104
+ },
105
+ inputSchema: z.object({
106
+ id: z
107
+ .string()
108
+ .describe("Unique identifier (UUID) of the social channel to update"),
109
+ label: z
110
+ .string()
111
+ .optional()
112
+ .describe("New display name for the channel"),
113
+ username: z
114
+ .string()
115
+ .optional()
116
+ .describe("Updated social media username"),
117
+ credentials: z
118
+ .string()
119
+ .optional()
120
+ .describe("Updated session credentials as JSON string"),
121
+ }),
122
+ }, async (args) => {
123
+ try {
124
+ const { id, ...updateData } = args;
125
+ const body = {};
126
+ if (updateData.label)
127
+ body.label = updateData.label;
128
+ if (updateData.username)
129
+ body.username = updateData.username;
130
+ if (updateData.credentials) {
131
+ try {
132
+ body.credentials = JSON.parse(updateData.credentials);
133
+ }
134
+ catch {
135
+ return errorResult(new Error("Invalid JSON in credentials parameter"));
136
+ }
137
+ }
138
+ const response = await api("PUT", `/social-channels/${id}`, body);
139
+ return jsonResult(response);
140
+ }
141
+ catch (error) {
142
+ return errorResult(error);
143
+ }
144
+ });
145
+ // 5. Delete social channel
146
+ server.registerTool("neuron_delete_social_channel", {
147
+ title: "Delete Social Channel",
148
+ description: "Permanently delete a social media channel and disconnect any active sessions. This action cannot be undone.",
149
+ annotations: {
150
+ readOnlyHint: false,
151
+ destructiveHint: true,
152
+ idempotentHint: true,
153
+ openWorldHint: false,
154
+ },
155
+ inputSchema: z.object({
156
+ id: z
157
+ .string()
158
+ .describe("Unique identifier (UUID) of the social channel to delete"),
159
+ }),
160
+ }, async (args) => {
161
+ try {
162
+ const response = await api("DELETE", `/social-channels/${args.id}`);
163
+ return jsonResult(response);
164
+ }
165
+ catch (error) {
166
+ return errorResult(error);
167
+ }
168
+ });
169
+ // 6. Start social channel session
170
+ server.registerTool("neuron_start_social_channel_session", {
171
+ title: "Start Social Channel Session",
172
+ description: "Start or reconnect a social media session for the channel. Initializes the platform client with stored credentials.",
173
+ annotations: {
174
+ readOnlyHint: false,
175
+ destructiveHint: false,
176
+ idempotentHint: true,
177
+ openWorldHint: false,
178
+ },
179
+ inputSchema: z.object({
180
+ id: z
181
+ .string()
182
+ .describe("Unique identifier (UUID) of the social channel to start"),
183
+ }),
184
+ }, async (args) => {
185
+ try {
186
+ const response = await api("POST", `/social-channels/${args.id}/session/start`);
187
+ return jsonResult(response);
188
+ }
189
+ catch (error) {
190
+ return errorResult(error);
191
+ }
192
+ });
193
+ // 7. Stop social channel session
194
+ server.registerTool("neuron_stop_social_channel_session", {
195
+ title: "Stop Social Channel Session",
196
+ description: "Stop the active session for a social media channel. The channel can be restarted later.",
197
+ annotations: {
198
+ readOnlyHint: false,
199
+ destructiveHint: false,
200
+ idempotentHint: true,
201
+ openWorldHint: false,
202
+ },
203
+ inputSchema: z.object({
204
+ id: z
205
+ .string()
206
+ .describe("Unique identifier (UUID) of the social channel to stop"),
207
+ }),
208
+ }, async (args) => {
209
+ try {
210
+ const response = await api("POST", `/social-channels/${args.id}/session/stop`);
211
+ return jsonResult(response);
212
+ }
213
+ catch (error) {
214
+ return errorResult(error);
215
+ }
216
+ });
217
+ // 8. Get social channel session status
218
+ server.registerTool("neuron_get_social_channel_status", {
219
+ title: "Get Social Channel Status",
220
+ description: "Retrieve the current session status for a social media channel (e.g., connected, disconnected, error).",
221
+ annotations: {
222
+ readOnlyHint: true,
223
+ destructiveHint: false,
224
+ idempotentHint: true,
225
+ openWorldHint: false,
226
+ },
227
+ inputSchema: z.object({
228
+ id: z.string().describe("Unique identifier (UUID) of the social channel"),
229
+ }),
230
+ }, async (args) => {
231
+ try {
232
+ const response = await api("GET", `/social-channels/${args.id}/session/status`);
233
+ return jsonResult(response);
234
+ }
235
+ catch (error) {
236
+ return errorResult(error);
237
+ }
238
+ });
239
+ // 9. Validate social channel credentials
240
+ server.registerTool("neuron_validate_social_channel", {
241
+ title: "Validate Social Channel",
242
+ description: "Test whether the stored credentials for a social channel are still valid by making a test API call to the platform.",
243
+ annotations: {
244
+ readOnlyHint: true,
245
+ destructiveHint: false,
246
+ idempotentHint: true,
247
+ openWorldHint: false,
248
+ },
249
+ inputSchema: z.object({
250
+ id: z
251
+ .string()
252
+ .describe("Unique identifier (UUID) of the social channel to validate"),
253
+ }),
254
+ }, async (args) => {
255
+ try {
256
+ const response = await api("POST", `/social-channels/${args.id}/validate`);
257
+ return jsonResult(response);
258
+ }
259
+ catch (error) {
260
+ return errorResult(error);
261
+ }
262
+ });
263
+ // 10. Assign bot to social channel
264
+ server.registerTool("neuron_assign_bot_to_social_channel", {
265
+ title: "Assign Bot to Social Channel",
266
+ description: "Assign a bot to handle interactions on a specific social media channel. The bot will be able to use the channel's credentials for social media actions.",
267
+ annotations: {
268
+ readOnlyHint: false,
269
+ destructiveHint: false,
270
+ idempotentHint: true,
271
+ openWorldHint: false,
272
+ },
273
+ inputSchema: z.object({
274
+ id: z
275
+ .string()
276
+ .describe("Unique identifier (UUID) of the social channel"),
277
+ botId: z
278
+ .string()
279
+ .describe("Unique identifier (UUID) of the bot to assign"),
280
+ }),
281
+ }, async (args) => {
282
+ try {
283
+ const response = await api("POST", `/social-channels/${args.id}/assign-bot`, { botId: args.botId });
284
+ return jsonResult(response);
285
+ }
286
+ catch (error) {
287
+ return errorResult(error);
288
+ }
289
+ });
290
+ // 11. Unassign bot from social channel
291
+ server.registerTool("neuron_unassign_bot_from_social_channel", {
292
+ title: "Unassign Bot from Social Channel",
293
+ description: "Remove the bot assignment from a social media channel. The bot will lose access to the channel's social media credentials.",
294
+ annotations: {
295
+ readOnlyHint: false,
296
+ destructiveHint: true,
297
+ idempotentHint: true,
298
+ openWorldHint: false,
299
+ },
300
+ inputSchema: z.object({
301
+ id: z
302
+ .string()
303
+ .describe("Unique identifier (UUID) of the social channel to unassign the bot from"),
304
+ botId: z
305
+ .string()
306
+ .describe("Unique identifier (UUID) of the bot to unassign"),
307
+ }),
308
+ }, async (args) => {
309
+ try {
310
+ const response = await api("DELETE", `/social-channels/${args.id}/assign-bot`, { botId: args.botId });
311
+ return jsonResult(response);
312
+ }
313
+ catch (error) {
314
+ return errorResult(error);
315
+ }
316
+ });
317
+ }
318
+ //# sourceMappingURL=social-channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-channels.js","sourceRoot":"","sources":["../../src/tools/social-channels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerTaskTools(server: McpServer): void;
@@ -0,0 +1,155 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ const scheduleKind = z
4
+ .enum(["cron", "interval", "once", "manual"])
5
+ .describe("cron = recurring at a clock time (slot); interval = every N minutes; once = a single future moment; manual = only runs on demand.");
6
+ const scheduleShape = z
7
+ .record(z.unknown())
8
+ .optional()
9
+ .describe("Schedule payload matching scheduleKind. cron: { time: 'HH:MM', days?: number[] } (0=Sunday..6=Saturday; empty/omitted = every day). interval: { everyMinutes: number }. once: { runAt: ISO8601 string }. manual: {}.");
10
+ const configShape = z
11
+ .object({
12
+ channelId: z.string().optional().describe("WhatsApp channel UUID to act on (defaults to the bot's primary)."),
13
+ maxActions: z.number().int().optional().describe("Hard cap on outbound actions per run (default 25)."),
14
+ noRepeatDays: z.number().int().optional().describe("Never re-message the same contact within this many days (default 14)."),
15
+ requiresApproval: z.boolean().optional().describe("Ask an admin on WhatsApp to approve before the task sends."),
16
+ approvalPhone: z.string().optional().describe("Admin phone (international format) to send the approval prompt to."),
17
+ dryRun: z.boolean().optional().describe("Simulate the run without actually sending messages."),
18
+ })
19
+ .optional()
20
+ .describe("Safety / execution config for the task.");
21
+ const READ = { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false };
22
+ const WRITE = { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false };
23
+ export function registerTaskTools(server) {
24
+ server.registerTool("neuron_list_tasks", {
25
+ title: "List Bot Tasks",
26
+ description: "List all scheduled tasks for a bot. A task is a natural-language instruction the bot carries out autonomously on a schedule (e.g. 're-engage stale contacts every morning at 8am').",
27
+ inputSchema: z.object({ botId: z.string().describe("UUID of the bot") }),
28
+ annotations: READ,
29
+ }, async ({ botId }) => {
30
+ try {
31
+ return jsonResult(await api("GET", `/tasks/bot/${botId}`));
32
+ }
33
+ catch (error) {
34
+ return errorResult(error);
35
+ }
36
+ });
37
+ server.registerTool("neuron_create_task", {
38
+ title: "Create Bot Task",
39
+ description: "Create a scheduled autonomous task for a bot. The instruction is a self-contained, natural-language directive the bot executes with its tools (find stale conversations, message contacts, schedule follow-ups, etc.). Sends are always screened against Do-Not-Contact, a per-run cap, and a no-repeat window.",
40
+ inputSchema: z.object({
41
+ botId: z.string().describe("UUID of the bot"),
42
+ title: z.string().describe("Short title for the task"),
43
+ instruction: z.string().describe("What the task should do, in natural language (self-contained; preserve any exact message copy verbatim)."),
44
+ scheduleKind,
45
+ schedule: scheduleShape,
46
+ timezone: z.string().optional().describe("IANA timezone (e.g. Africa/Lagos). Defaults to UTC."),
47
+ enabled: z.boolean().optional().describe("Whether the task is active (default true)."),
48
+ config: configShape,
49
+ }),
50
+ annotations: WRITE,
51
+ }, async ({ botId, ...body }) => {
52
+ try {
53
+ return jsonResult(await api("POST", `/tasks/bot/${botId}`, body));
54
+ }
55
+ catch (error) {
56
+ return errorResult(error);
57
+ }
58
+ });
59
+ server.registerTool("neuron_update_task", {
60
+ title: "Update Bot Task",
61
+ description: "Update a scheduled task's instruction, schedule, timezone, enabled state, or config. Only provided fields change.",
62
+ inputSchema: z.object({
63
+ id: z.string().describe("UUID of the task"),
64
+ title: z.string().optional(),
65
+ instruction: z.string().optional(),
66
+ scheduleKind: scheduleKind.optional(),
67
+ schedule: scheduleShape,
68
+ timezone: z.string().optional(),
69
+ enabled: z.boolean().optional(),
70
+ config: configShape,
71
+ }),
72
+ annotations: WRITE,
73
+ }, async ({ id, ...body }) => {
74
+ try {
75
+ return jsonResult(await api("PUT", `/tasks/${id}`, body));
76
+ }
77
+ catch (error) {
78
+ return errorResult(error);
79
+ }
80
+ });
81
+ server.registerTool("neuron_delete_task", {
82
+ title: "Delete Bot Task",
83
+ description: "Delete a scheduled task. This is a soft delete — the task stops running immediately.",
84
+ inputSchema: z.object({ id: z.string().describe("UUID of the task") }),
85
+ annotations: { ...WRITE, destructiveHint: true },
86
+ }, async ({ id }) => {
87
+ try {
88
+ return jsonResult(await api("DELETE", `/tasks/${id}`));
89
+ }
90
+ catch (error) {
91
+ return errorResult(error);
92
+ }
93
+ });
94
+ server.registerTool("neuron_toggle_task", {
95
+ title: "Toggle Bot Task",
96
+ description: "Pause or resume a scheduled task (flips its enabled state and reschedules the next run).",
97
+ inputSchema: z.object({ id: z.string().describe("UUID of the task") }),
98
+ annotations: WRITE,
99
+ }, async ({ id }) => {
100
+ try {
101
+ return jsonResult(await api("POST", `/tasks/${id}/toggle`));
102
+ }
103
+ catch (error) {
104
+ return errorResult(error);
105
+ }
106
+ });
107
+ server.registerTool("neuron_run_task", {
108
+ title: "Run Bot Task Now",
109
+ description: "Trigger a task to run immediately (in addition to its normal schedule). Returns once the run is queued.",
110
+ inputSchema: z.object({ id: z.string().describe("UUID of the task") }),
111
+ annotations: WRITE,
112
+ }, async ({ id }) => {
113
+ try {
114
+ return jsonResult(await api("POST", `/tasks/${id}/run`));
115
+ }
116
+ catch (error) {
117
+ return errorResult(error);
118
+ }
119
+ });
120
+ server.registerTool("neuron_get_task_runs", {
121
+ title: "Get Bot Task Run History",
122
+ description: "Retrieve the paginated execution history for a task — each run's status, AI summary, tool steps, and stats (messages sent, contacts processed).",
123
+ inputSchema: z.object({
124
+ id: z.string().describe("UUID of the task"),
125
+ page: z.number().int().positive().optional().describe("Page number (default 1)"),
126
+ limit: z.number().int().positive().optional().describe("Items per page (default 20)"),
127
+ }),
128
+ annotations: READ,
129
+ }, async ({ id, page, limit }) => {
130
+ try {
131
+ return jsonResult(await api("GET", `/tasks/${id}/runs`, undefined, { page, limit }));
132
+ }
133
+ catch (error) {
134
+ return errorResult(error);
135
+ }
136
+ });
137
+ server.registerTool("neuron_draft_task", {
138
+ title: "Draft Bot Task with AI",
139
+ description: "Turn a plain-English description into a structured task spec (title, instruction, scheduleKind, schedule, timezone, config) WITHOUT creating it. Use the returned draft as input to neuron_create_task after any edits.",
140
+ inputSchema: z.object({
141
+ botId: z.string().describe("UUID of the bot"),
142
+ prompt: z.string().describe("Plain-English description of the task, e.g. 'every morning at 8am, message 10 people we haven't heard from in 10+ days with our intro offer'."),
143
+ timezone: z.string().optional().describe("IANA timezone to assume (e.g. Africa/Lagos)."),
144
+ }),
145
+ annotations: READ,
146
+ }, async ({ botId, prompt, timezone }) => {
147
+ try {
148
+ return jsonResult(await api("POST", `/tasks/bot/${botId}/ai-draft`, { prompt, timezone }));
149
+ }
150
+ catch (error) {
151
+ return errorResult(error);
152
+ }
153
+ });
154
+ }
155
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}