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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +178 -0
  3. package/dist/client.d.ts +34 -0
  4. package/dist/client.js +104 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/index.d.ts +20 -0
  7. package/dist/index.js +190 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/tools/ai.d.ts +2 -0
  10. package/dist/tools/ai.js +25 -0
  11. package/dist/tools/ai.js.map +1 -0
  12. package/dist/tools/audit.d.ts +2 -0
  13. package/dist/tools/audit.js +40 -0
  14. package/dist/tools/audit.js.map +1 -0
  15. package/dist/tools/auth.d.ts +2 -0
  16. package/dist/tools/auth.js +348 -0
  17. package/dist/tools/auth.js.map +1 -0
  18. package/dist/tools/billing.d.ts +2 -0
  19. package/dist/tools/billing.js +51 -0
  20. package/dist/tools/billing.js.map +1 -0
  21. package/dist/tools/blog.d.ts +2 -0
  22. package/dist/tools/blog.js +174 -0
  23. package/dist/tools/blog.js.map +1 -0
  24. package/dist/tools/bot-api-keys.d.ts +2 -0
  25. package/dist/tools/bot-api-keys.js +60 -0
  26. package/dist/tools/bot-api-keys.js.map +1 -0
  27. package/dist/tools/bot-api.d.ts +2 -0
  28. package/dist/tools/bot-api.js +120 -0
  29. package/dist/tools/bot-api.js.map +1 -0
  30. package/dist/tools/bots.d.ts +2 -0
  31. package/dist/tools/bots.js +228 -0
  32. package/dist/tools/bots.js.map +1 -0
  33. package/dist/tools/broadcasts.d.ts +2 -0
  34. package/dist/tools/broadcasts.js +156 -0
  35. package/dist/tools/broadcasts.js.map +1 -0
  36. package/dist/tools/builtin-tools.d.ts +5 -0
  37. package/dist/tools/builtin-tools.js +81 -0
  38. package/dist/tools/builtin-tools.js.map +1 -0
  39. package/dist/tools/campaigns.d.ts +2 -0
  40. package/dist/tools/campaigns.js +277 -0
  41. package/dist/tools/campaigns.js.map +1 -0
  42. package/dist/tools/channels.d.ts +2 -0
  43. package/dist/tools/channels.js +334 -0
  44. package/dist/tools/channels.js.map +1 -0
  45. package/dist/tools/contact-lists.d.ts +2 -0
  46. package/dist/tools/contact-lists.js +214 -0
  47. package/dist/tools/contact-lists.js.map +1 -0
  48. package/dist/tools/contacts.d.ts +2 -0
  49. package/dist/tools/contacts.js +265 -0
  50. package/dist/tools/contacts.js.map +1 -0
  51. package/dist/tools/conversations.d.ts +5 -0
  52. package/dist/tools/conversations.js +270 -0
  53. package/dist/tools/conversations.js.map +1 -0
  54. package/dist/tools/knowledge-bases.d.ts +6 -0
  55. package/dist/tools/knowledge-bases.js +398 -0
  56. package/dist/tools/knowledge-bases.js.map +1 -0
  57. package/dist/tools/list-pool.d.ts +2 -0
  58. package/dist/tools/list-pool.js +120 -0
  59. package/dist/tools/list-pool.js.map +1 -0
  60. package/dist/tools/media.d.ts +2 -0
  61. package/dist/tools/media.js +39 -0
  62. package/dist/tools/media.js.map +1 -0
  63. package/dist/tools/newsletters.d.ts +2 -0
  64. package/dist/tools/newsletters.js +154 -0
  65. package/dist/tools/newsletters.js.map +1 -0
  66. package/dist/tools/organizations.d.ts +2 -0
  67. package/dist/tools/organizations.js +205 -0
  68. package/dist/tools/organizations.js.map +1 -0
  69. package/dist/tools/outbound-webhooks.d.ts +5 -0
  70. package/dist/tools/outbound-webhooks.js +143 -0
  71. package/dist/tools/outbound-webhooks.js.map +1 -0
  72. package/dist/tools/payouts.d.ts +2 -0
  73. package/dist/tools/payouts.js +86 -0
  74. package/dist/tools/payouts.js.map +1 -0
  75. package/dist/tools/pool.d.ts +2 -0
  76. package/dist/tools/pool.js +202 -0
  77. package/dist/tools/pool.js.map +1 -0
  78. package/dist/tools/reflections.d.ts +5 -0
  79. package/dist/tools/reflections.js +90 -0
  80. package/dist/tools/reflections.js.map +1 -0
  81. package/dist/tools/tools.d.ts +5 -0
  82. package/dist/tools/tools.js +174 -0
  83. package/dist/tools/tools.js.map +1 -0
  84. package/dist/tools/wallets.d.ts +2 -0
  85. package/dist/tools/wallets.js +68 -0
  86. package/dist/tools/wallets.js.map +1 -0
  87. package/dist/tools/webhooks.d.ts +5 -0
  88. package/dist/tools/webhooks.js +124 -0
  89. package/dist/tools/webhooks.js.map +1 -0
  90. package/package.json +61 -0
@@ -0,0 +1,398 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ /**
4
+ * Register knowledge base management tools for the Neuron MCP server.
5
+ * Provides CRUD operations for knowledge bases, entries, and search capabilities.
6
+ */
7
+ export function registerKnowledgeBaseTools(server) {
8
+ // 1. Create Knowledge Base
9
+ server.registerTool("neuron_create_knowledge_base", {
10
+ title: "Create Knowledge Base",
11
+ description: "Create a new knowledge base to store and organize information, documents, and entries.",
12
+ inputSchema: z.object({
13
+ name: z.string().describe("Name of the knowledge base"),
14
+ description: z.string().optional().describe("Optional description of the knowledge base purpose"),
15
+ rootInstruction: z.string().optional().describe("Optional root instruction or context for the knowledge base"),
16
+ }),
17
+ annotations: {
18
+ readOnlyHint: false,
19
+ destructiveHint: false,
20
+ idempotentHint: false,
21
+ openWorldHint: false,
22
+ },
23
+ }, async (params) => {
24
+ try {
25
+ const result = await api("POST", "knowledge-bases", {
26
+ name: params.name,
27
+ description: params.description,
28
+ rootInstruction: params.rootInstruction,
29
+ });
30
+ return jsonResult(result);
31
+ }
32
+ catch (error) {
33
+ return errorResult(error);
34
+ }
35
+ });
36
+ // 2. List Knowledge Bases
37
+ server.registerTool("neuron_list_knowledge_bases", {
38
+ title: "List Knowledge Bases",
39
+ description: "Retrieve all knowledge bases accessible to the current user.",
40
+ inputSchema: z.object({}),
41
+ annotations: {
42
+ readOnlyHint: true,
43
+ destructiveHint: false,
44
+ idempotentHint: true,
45
+ openWorldHint: false,
46
+ },
47
+ }, async () => {
48
+ try {
49
+ const result = await api("GET", "knowledge-bases");
50
+ return jsonResult(result);
51
+ }
52
+ catch (error) {
53
+ return errorResult(error);
54
+ }
55
+ });
56
+ // 3. Get Knowledge Base
57
+ server.registerTool("neuron_get_knowledge_base", {
58
+ title: "Get Knowledge Base",
59
+ description: "Retrieve detailed information about a specific knowledge base by its ID.",
60
+ inputSchema: z.object({
61
+ id: z.string().describe("Unique identifier of the knowledge base"),
62
+ }),
63
+ annotations: {
64
+ readOnlyHint: true,
65
+ destructiveHint: false,
66
+ idempotentHint: true,
67
+ openWorldHint: false,
68
+ },
69
+ }, async (params) => {
70
+ try {
71
+ const result = await api("GET", `knowledge-bases/${params.id}`);
72
+ return jsonResult(result);
73
+ }
74
+ catch (error) {
75
+ return errorResult(error);
76
+ }
77
+ });
78
+ // 4. Update Knowledge Base
79
+ server.registerTool("neuron_update_knowledge_base", {
80
+ title: "Update Knowledge Base",
81
+ description: "Update the properties of an existing knowledge base such as name, description, or root instruction.",
82
+ inputSchema: z.object({
83
+ id: z.string().describe("Unique identifier of the knowledge base to update"),
84
+ name: z.string().optional().describe("New name for the knowledge base"),
85
+ description: z.string().optional().describe("New description for the knowledge base"),
86
+ rootInstruction: z.string().optional().describe("New root instruction or context"),
87
+ }),
88
+ annotations: {
89
+ readOnlyHint: false,
90
+ destructiveHint: false,
91
+ idempotentHint: true,
92
+ openWorldHint: false,
93
+ },
94
+ }, async (params) => {
95
+ try {
96
+ const result = await api("PUT", `knowledge-bases/${params.id}`, {
97
+ name: params.name,
98
+ description: params.description,
99
+ rootInstruction: params.rootInstruction,
100
+ });
101
+ return jsonResult(result);
102
+ }
103
+ catch (error) {
104
+ return errorResult(error);
105
+ }
106
+ });
107
+ // 5. Delete Knowledge Base
108
+ server.registerTool("neuron_delete_knowledge_base", {
109
+ title: "Delete Knowledge Base",
110
+ description: "Permanently delete a knowledge base and all its associated entries and documents.",
111
+ inputSchema: z.object({
112
+ id: z.string().describe("Unique identifier of the knowledge base to delete"),
113
+ }),
114
+ annotations: {
115
+ readOnlyHint: false,
116
+ destructiveHint: true,
117
+ idempotentHint: true,
118
+ openWorldHint: false,
119
+ },
120
+ }, async (params) => {
121
+ try {
122
+ const result = await api("DELETE", `knowledge-bases/${params.id}`);
123
+ return jsonResult(result);
124
+ }
125
+ catch (error) {
126
+ return errorResult(error);
127
+ }
128
+ });
129
+ // 6. Create Knowledge Base Entry
130
+ server.registerTool("neuron_create_kb_entry", {
131
+ title: "Create Knowledge Base Entry",
132
+ description: "Add a new entry (note, document, or information piece) to a knowledge base.",
133
+ inputSchema: z.object({
134
+ id: z.string().describe("Unique identifier of the knowledge base"),
135
+ title: z.string().describe("Title of the entry"),
136
+ content: z.string().describe("Content or body of the entry"),
137
+ source: z.enum(["manual", "document", "url"]).optional().describe("Source type of the entry (default: manual)"),
138
+ folder: z.string().optional().describe("Folder to organize the entry: 'general', 'skills', 'contexts', 'documents', or 'faqs' (default: general)"),
139
+ metadata: z.record(z.unknown()).optional().describe("Optional metadata key-value pairs for the entry"),
140
+ }),
141
+ annotations: {
142
+ readOnlyHint: false,
143
+ destructiveHint: false,
144
+ idempotentHint: false,
145
+ openWorldHint: false,
146
+ },
147
+ }, async (params) => {
148
+ try {
149
+ const result = await api("POST", `knowledge-bases/${params.id}/entries`, {
150
+ title: params.title,
151
+ content: params.content,
152
+ source: params.source,
153
+ folder: params.folder,
154
+ metadata: params.metadata,
155
+ });
156
+ return jsonResult(result);
157
+ }
158
+ catch (error) {
159
+ return errorResult(error);
160
+ }
161
+ });
162
+ // 7. List Knowledge Base Entries
163
+ server.registerTool("neuron_list_kb_entries", {
164
+ title: "List Knowledge Base Entries",
165
+ description: "Retrieve entries from a knowledge base with optional filtering and pagination.",
166
+ inputSchema: z.object({
167
+ id: z.string().describe("Unique identifier of the knowledge base"),
168
+ page: z.number().optional().describe("Page number for pagination (starts at 1)"),
169
+ limit: z.number().optional().describe("Maximum number of entries to return per page"),
170
+ folder: z.string().optional().describe("Filter entries by folder ('general', 'skills', 'contexts', 'documents', 'faqs')"),
171
+ source: z.string().optional().describe("Filter entries by source type ('manual', 'document', 'url')"),
172
+ }),
173
+ annotations: {
174
+ readOnlyHint: true,
175
+ destructiveHint: false,
176
+ idempotentHint: true,
177
+ openWorldHint: false,
178
+ },
179
+ }, async (params) => {
180
+ try {
181
+ const queryParams = {};
182
+ if (params.page !== undefined)
183
+ queryParams.page = String(params.page);
184
+ if (params.limit !== undefined)
185
+ queryParams.limit = String(params.limit);
186
+ if (params.folder)
187
+ queryParams.folder = params.folder;
188
+ if (params.source)
189
+ queryParams.source = params.source;
190
+ const result = await api("GET", `knowledge-bases/${params.id}/entries`, undefined, queryParams);
191
+ return jsonResult(result);
192
+ }
193
+ catch (error) {
194
+ return errorResult(error);
195
+ }
196
+ });
197
+ // 8. Update Knowledge Base Entry
198
+ server.registerTool("neuron_update_kb_entry", {
199
+ title: "Update Knowledge Base Entry",
200
+ description: "Update the content, title, folder, or source of an existing knowledge base entry.",
201
+ inputSchema: z.object({
202
+ kbId: z.string().describe("Unique identifier of the knowledge base"),
203
+ entryId: z.string().describe("Unique identifier of the entry to update"),
204
+ title: z.string().optional().describe("New title for the entry"),
205
+ content: z.string().optional().describe("New content for the entry"),
206
+ source: z.enum(["manual", "document", "url"]).optional().describe("New source type for the entry"),
207
+ folder: z.string().optional().describe("New folder: 'general', 'skills', 'contexts', 'documents', or 'faqs'"),
208
+ metadata: z.record(z.unknown()).optional().describe("New metadata key-value pairs"),
209
+ }),
210
+ annotations: {
211
+ readOnlyHint: false,
212
+ destructiveHint: false,
213
+ idempotentHint: true,
214
+ openWorldHint: false,
215
+ },
216
+ }, async (params) => {
217
+ try {
218
+ const result = await api("PUT", `knowledge-bases/${params.kbId}/entries/${params.entryId}`, {
219
+ title: params.title,
220
+ content: params.content,
221
+ source: params.source,
222
+ folder: params.folder,
223
+ metadata: params.metadata,
224
+ });
225
+ return jsonResult(result);
226
+ }
227
+ catch (error) {
228
+ return errorResult(error);
229
+ }
230
+ });
231
+ // 9. Delete Knowledge Base Entry
232
+ server.registerTool("neuron_delete_kb_entry", {
233
+ title: "Delete Knowledge Base Entry",
234
+ description: "Permanently delete a specific entry from a knowledge base.",
235
+ inputSchema: z.object({
236
+ kbId: z.string().describe("Unique identifier of the knowledge base"),
237
+ entryId: z.string().describe("Unique identifier of the entry to delete"),
238
+ }),
239
+ annotations: {
240
+ readOnlyHint: false,
241
+ destructiveHint: true,
242
+ idempotentHint: true,
243
+ openWorldHint: false,
244
+ },
245
+ }, async (params) => {
246
+ try {
247
+ const result = await api("DELETE", `knowledge-bases/${params.kbId}/entries/${params.entryId}`);
248
+ return jsonResult(result);
249
+ }
250
+ catch (error) {
251
+ return errorResult(error);
252
+ }
253
+ });
254
+ // 10. Upload Document
255
+ server.registerTool("neuron_upload_document", {
256
+ title: "Upload Document",
257
+ description: "Upload a text document to a knowledge base. The document will be automatically chunked and indexed for semantic search.",
258
+ inputSchema: z.object({
259
+ id: z.string().describe("Unique identifier of the knowledge base"),
260
+ content: z.string().describe("Text content of the document to upload"),
261
+ filename: z.string().describe("Name of the file being uploaded"),
262
+ folder: z.string().optional().describe("Folder path to organize the document within the knowledge base"),
263
+ }),
264
+ annotations: {
265
+ readOnlyHint: false,
266
+ destructiveHint: false,
267
+ idempotentHint: false,
268
+ openWorldHint: false,
269
+ },
270
+ }, async (params) => {
271
+ try {
272
+ const result = await api("POST", `knowledge-bases/${params.id}/upload`, {
273
+ content: params.content,
274
+ filename: params.filename,
275
+ folder: params.folder,
276
+ });
277
+ return jsonResult(result);
278
+ }
279
+ catch (error) {
280
+ return errorResult(error);
281
+ }
282
+ });
283
+ // 11. Search Knowledge
284
+ server.registerTool("neuron_search_knowledge", {
285
+ title: "Search Knowledge",
286
+ description: "Perform semantic search across all entries and documents in a knowledge base to find relevant information.",
287
+ inputSchema: z.object({
288
+ id: z.string().describe("Unique identifier of the knowledge base to search"),
289
+ q: z.string().describe("Search query text to find relevant entries"),
290
+ limit: z.number().optional().describe("Maximum number of search results to return"),
291
+ }),
292
+ annotations: {
293
+ readOnlyHint: true,
294
+ destructiveHint: false,
295
+ idempotentHint: true,
296
+ openWorldHint: false,
297
+ },
298
+ }, async (params) => {
299
+ try {
300
+ const queryParams = {
301
+ q: params.q,
302
+ };
303
+ if (params.limit !== undefined)
304
+ queryParams.limit = String(params.limit);
305
+ const result = await api("GET", `knowledge-bases/${params.id}/search`, undefined, queryParams);
306
+ return jsonResult(result);
307
+ }
308
+ catch (error) {
309
+ return errorResult(error);
310
+ }
311
+ });
312
+ // 12. List Knowledge Base Bots
313
+ server.registerTool("neuron_list_kb_bots", {
314
+ title: "List Knowledge Base Bots",
315
+ description: "Retrieve all bots that are connected to or using a specific knowledge base.",
316
+ inputSchema: z.object({
317
+ id: z.string().describe("Unique identifier of the knowledge base"),
318
+ }),
319
+ annotations: {
320
+ readOnlyHint: true,
321
+ destructiveHint: false,
322
+ idempotentHint: true,
323
+ openWorldHint: false,
324
+ },
325
+ }, async (params) => {
326
+ try {
327
+ const result = await api("GET", `knowledge-bases/${params.id}/bots`);
328
+ return jsonResult(result);
329
+ }
330
+ catch (error) {
331
+ return errorResult(error);
332
+ }
333
+ });
334
+ // 13. Ingest Knowledge
335
+ server.registerTool("neuron_ingest_knowledge", {
336
+ title: "Ingest Knowledge",
337
+ description: "Ingest content into a knowledge base. Supports deduplication via externalId and optional LLM processing (summarize, extract_facts, or custom instruction).",
338
+ inputSchema: z.object({
339
+ knowledgeBaseId: z.string().describe("Knowledge base ID to ingest into"),
340
+ title: z.string().describe("Title for the knowledge entry"),
341
+ content: z.string().describe("Content to ingest"),
342
+ externalId: z.string().optional().describe("Unique external ID for deduplication (e.g. file path, URL)"),
343
+ sourceUrl: z.string().optional().describe("Source URL for reference"),
344
+ source: z.enum(["api", "mcp"]).default("mcp").describe("Source type (default: mcp)"),
345
+ folder: z.string().optional().describe("Folder: 'general', 'skills', 'contexts', 'documents', or 'faqs' (default: general)"),
346
+ processing: z.object({
347
+ mode: z.enum(["raw", "summarize", "extract_facts", "custom"]).default("raw").describe("Processing mode"),
348
+ instruction: z.string().optional().describe("Custom instruction (only used with 'custom' mode)"),
349
+ }).optional().describe("Optional LLM processing before storage"),
350
+ }),
351
+ annotations: {
352
+ readOnlyHint: false,
353
+ destructiveHint: false,
354
+ idempotentHint: true,
355
+ openWorldHint: false,
356
+ },
357
+ }, async (params) => {
358
+ try {
359
+ const result = await api("POST", `knowledge-bases/${params.knowledgeBaseId}/entries`, {
360
+ title: params.title,
361
+ content: params.content,
362
+ source: params.source || "mcp",
363
+ folder: params.folder || "general",
364
+ metadata: {
365
+ ...(params.externalId ? { externalId: params.externalId } : {}),
366
+ ...(params.sourceUrl ? { sourceUrl: params.sourceUrl } : {}),
367
+ },
368
+ });
369
+ return jsonResult(result);
370
+ }
371
+ catch (error) {
372
+ return errorResult(error);
373
+ }
374
+ });
375
+ // 14. Sync Knowledge
376
+ server.registerTool("neuron_sync_knowledge", {
377
+ title: "Sync Knowledge",
378
+ description: "Trigger a synchronization operation to refresh embeddings, reindex content, or update the knowledge base state.",
379
+ inputSchema: z.object({
380
+ id: z.string().describe("Unique identifier of the knowledge base to synchronize"),
381
+ }),
382
+ annotations: {
383
+ readOnlyHint: false,
384
+ destructiveHint: false,
385
+ idempotentHint: true,
386
+ openWorldHint: false,
387
+ },
388
+ }, async (params) => {
389
+ try {
390
+ const result = await api("POST", `knowledge-bases/${params.id}/sync`);
391
+ return jsonResult(result);
392
+ }
393
+ catch (error) {
394
+ return errorResult(error);
395
+ }
396
+ });
397
+ }
398
+ //# sourceMappingURL=knowledge-bases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-bases.js","sourceRoot":"","sources":["../../src/tools/knowledge-bases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,wFAAwF;QACrG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACvD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YACjG,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;SAC/G,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE;gBAClD,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC,CAAC;YACH,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,0BAA0B;IAC1B,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACnD,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,wBAAwB;IACxB,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,0EAA0E;QACvF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SACnE,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,mBAAmB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,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,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,qGAAqG;QAClH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YAC5E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACvE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YACrF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SACnF,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,mBAAmB,MAAM,CAAC,EAAE,EAAE,EAAE;gBAC9D,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC,CAAC;YACH,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,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,mFAAmF;QAChG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;SAC7E,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,mBAAmB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACnE,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,iCAAiC;IACjC,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,6EAA6E;QAC1F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YAC5D,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YAC/G,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0GAA0G,CAAC;YAClJ,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;SACvG,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,mBAAmB,MAAM,CAAC,EAAE,UAAU,EAAE;gBACvE,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAC;YACH,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,iCAAiC;IACjC,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,gFAAgF;QAC7F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YAChF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACrF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iFAAiF,CAAC;YACzH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;SACtG,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,WAAW,GAA2B,EAAE,CAAC;YAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;gBAAE,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAAE,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzE,IAAI,MAAM,CAAC,MAAM;gBAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACtD,IAAI,MAAM,CAAC,MAAM;gBAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAEtD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,mBAAmB,MAAM,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAChG,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,iCAAiC;IACjC,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,mFAAmF;QAChG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAChE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YACpE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAClG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;YAC7G,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;SACpF,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,mBAAmB,MAAM,CAAC,IAAI,YAAY,MAAM,CAAC,OAAO,EAAE,EAAE;gBAC1F,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAC;YACH,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,iCAAiC;IACjC,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACzE,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,mBAAmB,MAAM,CAAC,IAAI,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/F,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,sBAAsB;IACtB,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,yHAAyH;QACtI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YAClE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;YACtE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YAChE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;SACzG,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,mBAAmB,MAAM,CAAC,EAAE,SAAS,EAAE;gBACtE,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;YACH,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,yBAAyB,EACzB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,4GAA4G;QACzH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YAC5E,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACpE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;SACpF,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,WAAW,GAA2B;gBAC1C,CAAC,EAAE,MAAM,CAAC,CAAC;aACZ,CAAC;YACF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAAE,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEzE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,mBAAmB,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAC/F,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,+BAA+B;IAC/B,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,6EAA6E;QAC1F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SACnE,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,mBAAmB,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YACrE,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,yBAAyB,EACzB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,4JAA4J;QACzK,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACjD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YACxG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACrE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACpF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;YAC5H,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;gBACnB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBACxG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;aACjG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SACjE,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,mBAAmB,MAAM,CAAC,eAAe,UAAU,EAAE;gBACpF,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;gBAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;gBAClC,QAAQ,EAAE;oBACR,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/D,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7D;aACF,CAAC,CAAC;YACH,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,qBAAqB;IACrB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,iHAAiH;QAC9H,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;SAClF,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,mBAAmB,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YACtE,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,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerListPoolTools(server: McpServer): void;
@@ -0,0 +1,120 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ export function registerListPoolTools(server) {
4
+ // Browse pool
5
+ server.registerTool("neuron_browse_list_pool", {
6
+ title: "Browse List Pool",
7
+ description: "Browse verified contact lists available in the marketplace pool. Filter by category or region.",
8
+ inputSchema: z.object({
9
+ category: z.string().optional().describe("Filter by category (e.g., 'delivery', 'tech', 'consumers')"),
10
+ region: z.string().optional().describe("Filter by region"),
11
+ search: z.string().optional().describe("Search by description or category"),
12
+ page: z.number().optional().describe("Page number"),
13
+ limit: z.number().optional().describe("Items per page"),
14
+ }),
15
+ annotations: { readOnlyHint: true },
16
+ }, async (params) => {
17
+ try {
18
+ const result = await api("GET", "/list-pool", undefined, {
19
+ category: params.category,
20
+ region: params.region,
21
+ search: params.search,
22
+ page: params.page,
23
+ limit: params.limit,
24
+ });
25
+ return jsonResult(result);
26
+ }
27
+ catch (error) {
28
+ return errorResult(error);
29
+ }
30
+ });
31
+ // Submit to pool
32
+ server.registerTool("neuron_submit_to_list_pool", {
33
+ title: "Submit List to Pool",
34
+ description: "Submit a contact list to the marketplace pool for advertisers to use.",
35
+ inputSchema: z.object({
36
+ listId: z.string().describe("Contact list ID to submit"),
37
+ channelId: z.string().describe("WhatsApp channel ID for sending"),
38
+ category: z.string().describe("Category (e.g., 'delivery', 'tech', 'consumers')"),
39
+ description: z.string().optional().describe("Description of the audience"),
40
+ demographics: z.object({
41
+ regions: z.array(z.string()).optional(),
42
+ tags: z.array(z.string()).optional(),
43
+ }).optional().describe("Demographic information"),
44
+ pricePerDelivery: z.number().describe("Price per delivery in kobo"),
45
+ }),
46
+ }, async (params) => {
47
+ try {
48
+ const result = await api("POST", "/list-pool", params);
49
+ return jsonResult(result);
50
+ }
51
+ catch (error) {
52
+ return errorResult(error);
53
+ }
54
+ });
55
+ // Create ad request
56
+ server.registerTool("neuron_create_ad_request", {
57
+ title: "Create Ad Request",
58
+ description: "Create an ad request to distribute a message to contacts in pool lists matching target demographics.",
59
+ inputSchema: z.object({
60
+ message: z.string().describe("The ad message content"),
61
+ messageType: z.string().optional().describe("Message type (text, image, video, document)"),
62
+ mediaUrl: z.string().optional().describe("Media URL for non-text messages"),
63
+ targetDemographics: z.object({
64
+ categories: z.array(z.string()).optional().describe("Target categories"),
65
+ regions: z.array(z.string()).optional().describe("Target regions"),
66
+ }).describe("Demographics to match against pool entries"),
67
+ targetGoal: z.number().describe("Target number of deliveries"),
68
+ budget: z.number().describe("Total budget in kobo"),
69
+ }),
70
+ }, async (params) => {
71
+ try {
72
+ const result = await api("POST", "/ad-requests", params);
73
+ return jsonResult(result);
74
+ }
75
+ catch (error) {
76
+ return errorResult(error);
77
+ }
78
+ });
79
+ // List ad requests
80
+ server.registerTool("neuron_list_ad_requests", {
81
+ title: "List Ad Requests",
82
+ description: "List your ad requests with optional status filter.",
83
+ inputSchema: z.object({
84
+ status: z.string().optional().describe("Filter by status (draft, pending_review, approved, active, paused, completed, rejected)"),
85
+ page: z.number().optional(),
86
+ limit: z.number().optional(),
87
+ }),
88
+ annotations: { readOnlyHint: true },
89
+ }, async (params) => {
90
+ try {
91
+ const result = await api("GET", "/ad-requests", undefined, {
92
+ status: params.status,
93
+ page: params.page,
94
+ limit: params.limit,
95
+ });
96
+ return jsonResult(result);
97
+ }
98
+ catch (error) {
99
+ return errorResult(error);
100
+ }
101
+ });
102
+ // Get ad request analytics
103
+ server.registerTool("neuron_get_ad_request_analytics", {
104
+ title: "Get Ad Request Analytics",
105
+ description: "Get delivery analytics and breakdown for an ad request.",
106
+ inputSchema: z.object({
107
+ adRequestId: z.string().describe("The ad request ID"),
108
+ }),
109
+ annotations: { readOnlyHint: true },
110
+ }, async (params) => {
111
+ try {
112
+ const result = await api("GET", `/ad-requests/${params.adRequestId}/analytics`);
113
+ return jsonResult(result);
114
+ }
115
+ catch (error) {
116
+ return errorResult(error);
117
+ }
118
+ });
119
+ }
120
+ //# sourceMappingURL=list-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-pool.js","sourceRoot":"","sources":["../../src/tools/list-pool.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 registerMediaTools(server: McpServer): void;
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { jsonResult, errorResult, getAuthToken } from "../client.js";
3
+ import axios from "axios";
4
+ import FormData from "form-data";
5
+ const BASE_URL = process.env.NEURON_API_URL || "https://api.neuron.ng/api/v1";
6
+ export function registerMediaTools(server) {
7
+ // Upload media
8
+ server.registerTool("neuron_upload_media", {
9
+ title: "Upload Media",
10
+ description: "Upload a media file (image, document, audio, video) by providing its base64-encoded content. Returns a URL that can be used in messages and broadcasts.",
11
+ inputSchema: z.object({
12
+ base64: z.string().describe("Base64-encoded file content"),
13
+ filename: z.string().describe("Original filename including extension (e.g., 'photo.jpg')"),
14
+ mimetype: z.string().describe("MIME type of the file (e.g., 'image/jpeg', 'application/pdf')"),
15
+ }),
16
+ }, async (params) => {
17
+ try {
18
+ const buffer = Buffer.from(params.base64, "base64");
19
+ const form = new FormData();
20
+ form.append("file", buffer, {
21
+ filename: params.filename,
22
+ contentType: params.mimetype,
23
+ });
24
+ const token = getAuthToken();
25
+ const response = await axios.post(`${BASE_URL}/media/upload`, form, {
26
+ headers: {
27
+ ...form.getHeaders(),
28
+ ...(token ? { Authorization: `Bearer ${token}` } : {}),
29
+ },
30
+ timeout: 60000,
31
+ });
32
+ return jsonResult(response.data);
33
+ }
34
+ catch (error) {
35
+ return errorResult(error);
36
+ }
37
+ });
38
+ }
39
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/tools/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AAEjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,8BAA8B,CAAC;AAE9E,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,eAAe;IACf,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,yJAAyJ;QACtK,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YAC1D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;YAC1F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;SAC/F,CAAC;KACH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE;gBAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,WAAW,EAAE,MAAM,CAAC,QAAQ;aAC7B,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,eAAe,EAAE,IAAI,EAAE;gBAClE,OAAO,EAAE;oBACP,GAAG,IAAI,CAAC,UAAU,EAAE;oBACpB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvD;gBACD,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerNewsletterTools(server: McpServer): void;