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,154 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ export function registerNewsletterTools(server) {
4
+ // 1. List newsletters
5
+ server.registerTool("neuron_list_newsletters", {
6
+ title: "List Newsletters",
7
+ description: "List all WhatsApp Channel newsletters for the organization. Optionally filter by WhatsApp session channel ID.",
8
+ inputSchema: z.object({
9
+ channelId: z.string().optional().describe("Filter newsletters by WhatsApp session channel ID"),
10
+ page: z.number().int().positive().optional().describe("Page number for pagination"),
11
+ limit: z.number().int().positive().optional().describe("Number of items per page"),
12
+ }),
13
+ annotations: { readOnlyHint: true },
14
+ }, async (args) => {
15
+ try {
16
+ const response = await api("GET", "/newsletters", undefined, {
17
+ channelId: args.channelId,
18
+ page: args.page,
19
+ limit: args.limit,
20
+ });
21
+ return jsonResult(response);
22
+ }
23
+ catch (error) {
24
+ return errorResult(error);
25
+ }
26
+ });
27
+ // 2. Create newsletter
28
+ server.registerTool("neuron_create_newsletter", {
29
+ title: "Create Newsletter",
30
+ description: "Create a new WhatsApp Channel (newsletter) for one-way broadcast updates. Requires a connected Baileys session.",
31
+ inputSchema: z.object({
32
+ channelId: z.string().describe("The WhatsApp session channel ID to create the newsletter on"),
33
+ name: z.string().describe("Name of the newsletter"),
34
+ description: z.string().optional().describe("Description of the newsletter"),
35
+ }),
36
+ }, async (args) => {
37
+ try {
38
+ const response = await api("POST", "/newsletters", args);
39
+ return jsonResult(response);
40
+ }
41
+ catch (error) {
42
+ return errorResult(error);
43
+ }
44
+ });
45
+ // 3. Get newsletter
46
+ server.registerTool("neuron_get_newsletter", {
47
+ title: "Get Newsletter",
48
+ description: "Get details of a specific WhatsApp Channel newsletter",
49
+ inputSchema: z.object({
50
+ id: z.string().describe("The unique identifier of the newsletter"),
51
+ }),
52
+ annotations: { readOnlyHint: true },
53
+ }, async (args) => {
54
+ try {
55
+ const response = await api("GET", `/newsletters/${args.id}`);
56
+ return jsonResult(response);
57
+ }
58
+ catch (error) {
59
+ return errorResult(error);
60
+ }
61
+ });
62
+ // 4. Update newsletter
63
+ server.registerTool("neuron_update_newsletter", {
64
+ title: "Update Newsletter",
65
+ description: "Update the name or description of a WhatsApp Channel newsletter",
66
+ inputSchema: z.object({
67
+ id: z.string().describe("The unique identifier of the newsletter to update"),
68
+ name: z.string().optional().describe("New name for the newsletter"),
69
+ description: z.string().optional().describe("New description for the newsletter"),
70
+ }),
71
+ }, async (args) => {
72
+ try {
73
+ const { id, ...updateData } = args;
74
+ const response = await api("PUT", `/newsletters/${id}`, updateData);
75
+ return jsonResult(response);
76
+ }
77
+ catch (error) {
78
+ return errorResult(error);
79
+ }
80
+ });
81
+ // 5. Delete newsletter
82
+ server.registerTool("neuron_delete_newsletter", {
83
+ title: "Delete Newsletter",
84
+ description: "Delete a WhatsApp Channel newsletter. This action cannot be undone.",
85
+ inputSchema: z.object({
86
+ id: z.string().describe("The unique identifier of the newsletter to delete"),
87
+ }),
88
+ }, async (args) => {
89
+ try {
90
+ const response = await api("DELETE", `/newsletters/${args.id}`);
91
+ return jsonResult(response);
92
+ }
93
+ catch (error) {
94
+ return errorResult(error);
95
+ }
96
+ });
97
+ // 6. Post to newsletter
98
+ server.registerTool("neuron_post_to_newsletter", {
99
+ title: "Post to Newsletter",
100
+ description: "Post a message (text, image, video, or document) to a WhatsApp Channel newsletter. All subscribers will receive the message. Provide at least one of text or mediaUrl.",
101
+ inputSchema: z.object({
102
+ id: z.string().describe("The unique identifier of the newsletter"),
103
+ text: z.string().optional().describe("The message text or caption to post"),
104
+ messageType: z.enum(["text", "image", "video", "document"]).default("text").describe("The type of message to send"),
105
+ mediaUrl: z.string().optional().describe("URL of the media file to attach (image, video, or document)"),
106
+ }),
107
+ }, async (args) => {
108
+ try {
109
+ const body = {
110
+ text: args.text,
111
+ messageType: args.messageType,
112
+ mediaUrl: args.mediaUrl,
113
+ };
114
+ const response = await api("POST", `/newsletters/${args.id}/post`, body);
115
+ return jsonResult(response);
116
+ }
117
+ catch (error) {
118
+ return errorResult(error);
119
+ }
120
+ });
121
+ // 7. Refresh newsletter metadata
122
+ server.registerTool("neuron_refresh_newsletter", {
123
+ title: "Refresh Newsletter",
124
+ description: "Re-fetch metadata (name, description, subscriber count) for a WhatsApp Channel newsletter from WhatsApp",
125
+ inputSchema: z.object({
126
+ id: z.string().describe("The unique identifier of the newsletter to refresh"),
127
+ }),
128
+ }, async (args) => {
129
+ try {
130
+ const response = await api("POST", `/newsletters/${args.id}/refresh`);
131
+ return jsonResult(response);
132
+ }
133
+ catch (error) {
134
+ return errorResult(error);
135
+ }
136
+ });
137
+ // 8. Sync newsletters from WhatsApp
138
+ server.registerTool("neuron_sync_newsletters", {
139
+ title: "Sync Newsletters",
140
+ description: "Sync/import WhatsApp Channels from a connected WhatsApp session into Neuron. This discovers channels created outside Neuron.",
141
+ inputSchema: z.object({
142
+ channelId: z.string().describe("The WhatsApp session channel ID to sync newsletters from"),
143
+ }),
144
+ }, async (args) => {
145
+ try {
146
+ const response = await api("POST", "/newsletters/sync", { channelId: args.channelId });
147
+ return jsonResult(response);
148
+ }
149
+ catch (error) {
150
+ return errorResult(error);
151
+ }
152
+ });
153
+ }
154
+ //# sourceMappingURL=newsletters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"newsletters.js","sourceRoot":"","sources":["../../src/tools/newsletters.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 registerOrganizationTools(server: McpServer): void;
@@ -0,0 +1,205 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ export function registerOrganizationTools(server) {
4
+ // Get Organization
5
+ server.registerTool("neuron_get_organization", {
6
+ title: "Get Organization",
7
+ description: "Get details of a specific organization by ID",
8
+ inputSchema: z.object({
9
+ orgId: z.string().describe("ID of the organization to retrieve"),
10
+ }),
11
+ annotations: {
12
+ readOnlyHint: true,
13
+ },
14
+ }, async (params) => {
15
+ try {
16
+ const result = await api("GET", `/organizations/${params.orgId}`);
17
+ return jsonResult(result);
18
+ }
19
+ catch (error) {
20
+ return errorResult(error);
21
+ }
22
+ });
23
+ // Update Organization
24
+ server.registerTool("neuron_update_organization", {
25
+ title: "Update Organization",
26
+ description: "Update organization details such as name",
27
+ inputSchema: z.object({
28
+ orgId: z.string().describe("ID of the organization to update"),
29
+ name: z.string().optional().describe("New name for the organization"),
30
+ }),
31
+ annotations: {
32
+ destructiveHint: false,
33
+ },
34
+ }, async (params) => {
35
+ try {
36
+ const { orgId, ...body } = params;
37
+ const result = await api("PUT", `/organizations/${orgId}`, body);
38
+ return jsonResult(result);
39
+ }
40
+ catch (error) {
41
+ return errorResult(error);
42
+ }
43
+ });
44
+ // Update WhatsApp Credentials
45
+ server.registerTool("neuron_update_whatsapp_credentials", {
46
+ title: "Update WhatsApp Credentials",
47
+ description: "Update WhatsApp Business API credentials for the organization",
48
+ inputSchema: z.object({
49
+ orgId: z.string().describe("ID of the organization"),
50
+ whatsappPhoneNumberId: z.string().describe("WhatsApp phone number ID from Meta Business"),
51
+ whatsappBusinessAccountId: z.string().describe("WhatsApp Business Account ID from Meta"),
52
+ whatsappAccessToken: z.string().describe("WhatsApp access token for API authentication"),
53
+ }),
54
+ annotations: {
55
+ destructiveHint: false,
56
+ },
57
+ }, async (params) => {
58
+ try {
59
+ const { orgId, ...body } = params;
60
+ const result = await api("PUT", `/organizations/${orgId}/whatsapp`, body);
61
+ return jsonResult(result);
62
+ }
63
+ catch (error) {
64
+ return errorResult(error);
65
+ }
66
+ });
67
+ // Set Default Channel
68
+ server.registerTool("neuron_set_default_channel", {
69
+ title: "Set Default WhatsApp Channel",
70
+ description: "Set the default WhatsApp channel for the organization. Used by neuron_send_whatsapp for auto-resolving " +
71
+ "which channel to send through. Pass null to clear.",
72
+ inputSchema: z.object({
73
+ orgId: z.string().describe("ID of the organization"),
74
+ channelId: z.string().nullable().describe("Channel ID to set as default, or null to clear"),
75
+ }),
76
+ }, async (params) => {
77
+ try {
78
+ const result = await api("PUT", `/organizations/${params.orgId}/default-channel`, {
79
+ channelId: params.channelId,
80
+ });
81
+ return jsonResult(result);
82
+ }
83
+ catch (error) {
84
+ return errorResult(error);
85
+ }
86
+ });
87
+ // List Members
88
+ server.registerTool("neuron_list_members", {
89
+ title: "List Organization Members",
90
+ description: "Get a list of all members in the organization",
91
+ inputSchema: z.object({
92
+ orgId: z.string().describe("ID of the organization"),
93
+ }),
94
+ annotations: {
95
+ readOnlyHint: true,
96
+ },
97
+ }, async (params) => {
98
+ try {
99
+ const result = await api("GET", `/organizations/${params.orgId}/members`);
100
+ return jsonResult(result);
101
+ }
102
+ catch (error) {
103
+ return errorResult(error);
104
+ }
105
+ });
106
+ // Invite Member
107
+ server.registerTool("neuron_invite_member", {
108
+ title: "Invite Organization Member",
109
+ description: "Invite a new member to the organization with email, name, and optional role",
110
+ inputSchema: z.object({
111
+ orgId: z.string().describe("ID of the organization"),
112
+ email: z.string().email().describe("Email address of the member to invite"),
113
+ name: z.string().describe("Full name of the member"),
114
+ role: z.string().optional().describe("Role of the member (e.g., 'admin', 'agent', 'viewer')"),
115
+ canViewConversations: z.boolean().optional().describe("Whether the member can view conversations (default: true)"),
116
+ }),
117
+ annotations: {
118
+ destructiveHint: false,
119
+ },
120
+ }, async (params) => {
121
+ try {
122
+ const { orgId, ...body } = params;
123
+ const result = await api("POST", `/organizations/${orgId}/members`, body);
124
+ return jsonResult(result);
125
+ }
126
+ catch (error) {
127
+ return errorResult(error);
128
+ }
129
+ });
130
+ // List Invitations
131
+ server.registerTool("neuron_list_invitations", {
132
+ title: "List Invitations",
133
+ description: "List all pending invitations for the organization",
134
+ inputSchema: z.object({
135
+ orgId: z.string().describe("ID of the organization"),
136
+ }),
137
+ annotations: { readOnlyHint: true },
138
+ }, async (params) => {
139
+ try {
140
+ const result = await api("GET", `/organizations/${params.orgId}/invitations`);
141
+ return jsonResult(result);
142
+ }
143
+ catch (error) {
144
+ return errorResult(error);
145
+ }
146
+ });
147
+ // Revoke Invitation
148
+ server.registerTool("neuron_revoke_invitation", {
149
+ title: "Revoke Invitation",
150
+ description: "Revoke a pending invitation so it can no longer be accepted",
151
+ inputSchema: z.object({
152
+ orgId: z.string().describe("ID of the organization"),
153
+ invitationId: z.string().describe("ID of the invitation to revoke"),
154
+ }),
155
+ annotations: { destructiveHint: true },
156
+ }, async (params) => {
157
+ try {
158
+ const result = await api("DELETE", `/organizations/${params.orgId}/invitations/${params.invitationId}`);
159
+ return jsonResult(result);
160
+ }
161
+ catch (error) {
162
+ return errorResult(error);
163
+ }
164
+ });
165
+ // Update Member Permissions
166
+ server.registerTool("neuron_update_member", {
167
+ title: "Update Member Permissions",
168
+ description: "Update a member's permissions such as conversation access",
169
+ inputSchema: z.object({
170
+ orgId: z.string().describe("ID of the organization"),
171
+ userId: z.string().describe("ID of the member to update"),
172
+ canViewConversations: z.boolean().describe("Whether the member can view conversations"),
173
+ }),
174
+ }, async (params) => {
175
+ try {
176
+ const { orgId, userId, ...body } = params;
177
+ const result = await api("PATCH", `/organizations/${orgId}/members/${userId}`, body);
178
+ return jsonResult(result);
179
+ }
180
+ catch (error) {
181
+ return errorResult(error);
182
+ }
183
+ });
184
+ // Remove Member
185
+ server.registerTool("neuron_remove_member", {
186
+ title: "Remove Organization Member",
187
+ description: "Remove a member from the organization",
188
+ inputSchema: z.object({
189
+ orgId: z.string().describe("ID of the organization"),
190
+ userId: z.string().describe("ID of the user to remove from the organization"),
191
+ }),
192
+ annotations: {
193
+ destructiveHint: true,
194
+ },
195
+ }, async (params) => {
196
+ try {
197
+ const result = await api("DELETE", `/organizations/${params.orgId}/members/${params.userId}`);
198
+ return jsonResult(result);
199
+ }
200
+ catch (error) {
201
+ return errorResult(error);
202
+ }
203
+ });
204
+ }
205
+ //# sourceMappingURL=organizations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organizations.js","sourceRoot":"","sources":["../../src/tools/organizations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Register outbound webhook tools (event-driven webhooks that fire on bot events)
4
+ */
5
+ export declare function registerOutboundWebhookTools(server: McpServer): void;
@@ -0,0 +1,143 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ const eventTypes = [
4
+ "message.created",
5
+ "message.assistant",
6
+ "conversation.created",
7
+ "conversation.escalated",
8
+ "conversation.closed",
9
+ "bot.paused",
10
+ "bot.resumed",
11
+ ];
12
+ /**
13
+ * Register outbound webhook tools (event-driven webhooks that fire on bot events)
14
+ */
15
+ export function registerOutboundWebhookTools(server) {
16
+ // 1. Create Outbound Webhook
17
+ server.registerTool("neuron_create_outbound_webhook", {
18
+ title: "Create Outbound Webhook",
19
+ description: "Create a new outbound webhook that fires HTTP requests when bot events occur. " +
20
+ "Events: message.created, message.assistant, conversation.created, conversation.escalated, " +
21
+ "conversation.closed, bot.paused, bot.resumed.",
22
+ inputSchema: z.object({
23
+ botId: z.string().describe("The ID of the bot to create the outbound webhook for"),
24
+ name: z.string().describe("Name of the webhook"),
25
+ url: z.string().describe("The URL to send webhook events to"),
26
+ eventTypes: z
27
+ .array(z.enum(eventTypes))
28
+ .describe("Which events should trigger this webhook"),
29
+ filterPrompt: z
30
+ .string()
31
+ .optional()
32
+ .describe("Optional LLM prompt to filter which events are sent (e.g. only forward escalations)"),
33
+ }),
34
+ annotations: {
35
+ openWorldHint: true,
36
+ },
37
+ }, async (args) => {
38
+ const { botId, ...body } = args;
39
+ const response = await api("POST", `/webhooks/outbound/bot/${botId}`, body);
40
+ if (response.success) {
41
+ return jsonResult(response.data);
42
+ }
43
+ else {
44
+ return errorResult(response.error || "Failed to create outbound webhook");
45
+ }
46
+ });
47
+ // 2. List Outbound Webhooks
48
+ server.registerTool("neuron_list_outbound_webhooks", {
49
+ title: "List Outbound Webhooks",
50
+ description: "List all outbound webhooks configured for a specific bot",
51
+ inputSchema: z.object({
52
+ botId: z.string().describe("The ID of the bot to list outbound webhooks for"),
53
+ }),
54
+ annotations: {
55
+ readOnlyHint: true,
56
+ openWorldHint: true,
57
+ },
58
+ }, async (args) => {
59
+ const response = await api("GET", `/webhooks/outbound/bot/${args.botId}`);
60
+ if (response.success) {
61
+ return jsonResult(response.data);
62
+ }
63
+ else {
64
+ return errorResult(response.error || "Failed to list outbound webhooks");
65
+ }
66
+ });
67
+ // 3. Update Outbound Webhook
68
+ server.registerTool("neuron_update_outbound_webhook", {
69
+ title: "Update Outbound Webhook",
70
+ description: "Update an existing outbound webhook configuration",
71
+ inputSchema: z.object({
72
+ id: z.string().describe("The ID of the outbound webhook to update"),
73
+ name: z.string().optional().describe("Updated name"),
74
+ url: z.string().optional().describe("Updated URL"),
75
+ eventTypes: z
76
+ .array(z.enum(eventTypes))
77
+ .optional()
78
+ .describe("Updated event types"),
79
+ filterPrompt: z.string().optional().describe("Updated filter prompt"),
80
+ }),
81
+ annotations: {
82
+ openWorldHint: true,
83
+ },
84
+ }, async (args) => {
85
+ const { id, ...body } = args;
86
+ const response = await api("PUT", `/webhooks/outbound/${id}`, body);
87
+ if (response.success) {
88
+ return jsonResult(response.data);
89
+ }
90
+ else {
91
+ return errorResult(response.error || "Failed to update outbound webhook");
92
+ }
93
+ });
94
+ // 4. Delete Outbound Webhook
95
+ server.registerTool("neuron_delete_outbound_webhook", {
96
+ title: "Delete Outbound Webhook",
97
+ description: "Delete an outbound webhook",
98
+ inputSchema: z.object({
99
+ id: z.string().describe("The ID of the outbound webhook to delete"),
100
+ }),
101
+ annotations: {
102
+ destructiveHint: true,
103
+ openWorldHint: true,
104
+ },
105
+ }, async (args) => {
106
+ const response = await api("DELETE", `/webhooks/outbound/${args.id}`);
107
+ if (response.success) {
108
+ return jsonResult(response.data || { message: "Outbound webhook deleted successfully" });
109
+ }
110
+ else {
111
+ return errorResult(response.error || "Failed to delete outbound webhook");
112
+ }
113
+ });
114
+ // 5. Get Outbound Webhook Logs
115
+ server.registerTool("neuron_get_outbound_webhook_logs", {
116
+ title: "Get Outbound Webhook Logs",
117
+ description: "Retrieve delivery logs for an outbound webhook to monitor and debug event delivery",
118
+ inputSchema: z.object({
119
+ id: z.string().describe("The ID of the outbound webhook to get logs for"),
120
+ page: z.number().optional().describe("Page number for pagination (default: 1)"),
121
+ limit: z.number().optional().describe("Number of logs per page (default: 20)"),
122
+ }),
123
+ annotations: {
124
+ readOnlyHint: true,
125
+ openWorldHint: true,
126
+ },
127
+ }, async (args) => {
128
+ const { id, page, limit } = args;
129
+ const params = {};
130
+ if (page !== undefined)
131
+ params.page = String(page);
132
+ if (limit !== undefined)
133
+ params.limit = String(limit);
134
+ const response = await api("GET", `/webhooks/outbound/${id}/logs`, undefined, params);
135
+ if (response.success) {
136
+ return jsonResult(response.data);
137
+ }
138
+ else {
139
+ return errorResult(response.error || "Failed to get outbound webhook logs");
140
+ }
141
+ });
142
+ }
143
+ //# sourceMappingURL=outbound-webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound-webhooks.js","sourceRoot":"","sources":["../../src/tools/outbound-webhooks.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 registerPayoutTools(server: McpServer): void;
@@ -0,0 +1,86 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ export function registerPayoutTools(server) {
4
+ server.registerTool("neuron_verify_bank_account", {
5
+ title: "Verify Bank Account",
6
+ description: "Verify a Nigerian bank account number via Paystack",
7
+ inputSchema: z.object({
8
+ bankCode: z.string().describe("Bank code (e.g. '058' for GTBank)"),
9
+ accountNumber: z.string().describe("10-digit bank account number"),
10
+ }),
11
+ annotations: { readOnlyHint: true },
12
+ }, async (params) => {
13
+ try {
14
+ const result = await api("POST", "/payouts/verify-account", params);
15
+ return jsonResult(result);
16
+ }
17
+ catch (error) {
18
+ return errorResult(error);
19
+ }
20
+ });
21
+ server.registerTool("neuron_save_bank_account", {
22
+ title: "Save Bank Account",
23
+ description: "Save a verified bank account for payouts",
24
+ inputSchema: z.object({
25
+ bankCode: z.string().describe("Bank code"),
26
+ bankName: z.string().describe("Bank name (e.g. 'Guaranty Trust Bank')"),
27
+ accountNumber: z.string().describe("10-digit account number"),
28
+ accountName: z.string().describe("Account holder name from verification"),
29
+ }),
30
+ }, async (params) => {
31
+ try {
32
+ const result = await api("POST", "/payouts/bank-account", params);
33
+ return jsonResult(result);
34
+ }
35
+ catch (error) {
36
+ return errorResult(error);
37
+ }
38
+ });
39
+ server.registerTool("neuron_get_bank_account", {
40
+ title: "Get Bank Account",
41
+ description: "Get the saved bank account for payouts",
42
+ inputSchema: z.object({}),
43
+ annotations: { readOnlyHint: true },
44
+ }, async () => {
45
+ try {
46
+ const result = await api("GET", "/payouts/bank-account");
47
+ return jsonResult(result);
48
+ }
49
+ catch (error) {
50
+ return errorResult(error);
51
+ }
52
+ });
53
+ server.registerTool("neuron_request_payout", {
54
+ title: "Request Payout",
55
+ description: "Request a payout from your wallet to your saved bank account",
56
+ inputSchema: z.object({
57
+ amount: z.number().int().positive().describe("Amount in kobo (e.g. 100000 = ₦1,000)"),
58
+ }),
59
+ }, async (params) => {
60
+ try {
61
+ const result = await api("POST", "/payouts/request", params);
62
+ return jsonResult(result);
63
+ }
64
+ catch (error) {
65
+ return errorResult(error);
66
+ }
67
+ });
68
+ server.registerTool("neuron_list_payouts", {
69
+ title: "List Payouts",
70
+ description: "List payout history",
71
+ inputSchema: z.object({
72
+ page: z.number().int().positive().optional(),
73
+ limit: z.number().int().positive().optional(),
74
+ }),
75
+ annotations: { readOnlyHint: true },
76
+ }, async (params) => {
77
+ try {
78
+ const result = await api("GET", "/payouts", undefined, params);
79
+ return jsonResult(result);
80
+ }
81
+ catch (error) {
82
+ return errorResult(error);
83
+ }
84
+ });
85
+ }
86
+ //# sourceMappingURL=payouts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payouts.js","sourceRoot":"","sources":["../../src/tools/payouts.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 registerPoolTools(server: McpServer): void;