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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Neuron (https://neuron.ng)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,178 @@
1
+ # Neuron MCP Server
2
+
3
+ > WhatsApp automation platform with 120+ MCP tools for AI-powered chatbots, broadcasts, campaigns, and more.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/neuron-mcp-server)](https://www.npmjs.com/package/neuron-mcp-server)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ ## What is Neuron?
9
+
10
+ [Neuron](https://neuron.ng) is an AI-powered WhatsApp automation platform. This MCP server exposes **120+ tools** that let AI coding assistants — Claude Code, Cursor, Windsurf, and other MCP-compatible clients — manage your entire WhatsApp business programmatically.
11
+
12
+ Build chatbots, send broadcasts, manage contacts, create campaigns, publish newsletters, and more — all through natural language with your AI assistant.
13
+
14
+ ## Quick Start
15
+
16
+ ### Option 1: Remote Server (Recommended — zero install)
17
+
18
+ Add to your MCP client config:
19
+
20
+ ```json
21
+ {
22
+ "mcpServers": {
23
+ "neuron": {
24
+ "type": "url",
25
+ "url": "https://mcp.neuron.ng/mcp"
26
+ }
27
+ }
28
+ }
29
+ ```
30
+
31
+ No installation required. Works immediately with any MCP client that supports Streamable HTTP.
32
+
33
+ ### Option 2: Local Server (via npm)
34
+
35
+ Run directly with npx:
36
+
37
+ ```bash
38
+ npx neuron-mcp-server
39
+ ```
40
+
41
+ Or install globally:
42
+
43
+ ```bash
44
+ npm install -g neuron-mcp-server
45
+ ```
46
+
47
+ Claude Code config (`~/.claude/mcp.json`):
48
+
49
+ ```json
50
+ {
51
+ "mcpServers": {
52
+ "neuron": {
53
+ "command": "npx",
54
+ "args": ["-y", "neuron-mcp-server"]
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ ## Authentication
61
+
62
+ Three ways to authenticate:
63
+
64
+ ### 1. Browser Login (Recommended)
65
+
66
+ Call `neuron_login()` with no arguments. The server returns a URL — open it in your browser to authorize securely. No credentials are shared with the AI.
67
+
68
+ ### 2. MCP Token
69
+
70
+ Generate a token from your Neuron dashboard (**Settings > MCP Tokens**), then:
71
+
72
+ ```
73
+ neuron_login({ token: "your-mcp-token" })
74
+ ```
75
+
76
+ ### 3. Environment Variable
77
+
78
+ Set `NEURON_AUTH_TOKEN` for unattended/CI use:
79
+
80
+ ```bash
81
+ NEURON_AUTH_TOKEN=your-token npx neuron-mcp-server
82
+ ```
83
+
84
+ ## Available Tools (120+)
85
+
86
+ | Category | Tools | Description |
87
+ |----------|-------|-------------|
88
+ | **Authentication** | 8 | Login, register, org switching, profile management |
89
+ | **Bot Management** | 7 | Create and manage AI chatbots with configurable LLM models |
90
+ | **Conversations** | 11 | Message management, human takeover, send WhatsApp messages |
91
+ | **Knowledge Bases** | 14 | Upload documents, semantic search, sync, ingest content |
92
+ | **Contacts** | 12 | CRUD operations, import/export, semantic search, sync |
93
+ | **Contact Lists** | 11 | Segmentation, merge, membership management |
94
+ | **Channels** | 17 | WhatsApp connections, QR pairing, session management |
95
+ | **Broadcasts** | 7 | Bulk messaging to contact lists |
96
+ | **Campaigns** | 14 | Sponsored campaigns, marketplace, funding |
97
+ | **Newsletters** | 8 | WhatsApp Channel/newsletter management |
98
+ | **Webhooks** | 8 | Inbound and outbound webhook management |
99
+ | **Custom Tools** | 6 | HTTP API tools for bots with secret injection |
100
+ | **Blog** | 6 | Content publishing |
101
+ | **Organizations** | 7 | Team management, audit logs, member invitations |
102
+ | **Billing & Wallet** | 12 | Subscriptions, wallet, payouts, bank accounts |
103
+ | **Marketplace** | 8 | Publish and install bots and contact lists |
104
+ | **Reflections** | 4 | Self-learning bot improvement suggestions |
105
+ | **Media & AI** | 2 | Upload media, AI text rewriting |
106
+
107
+ ## Environment Variables
108
+
109
+ | Variable | Description | Default |
110
+ |----------|-------------|---------|
111
+ | `NEURON_API_URL` | API base URL | `https://api.neuron.ng/api/v1` |
112
+ | `NEURON_AUTH_TOKEN` | Pre-set auth token | — |
113
+ | `MCP_TRANSPORT` | Transport mode: `stdio` or `http` | `stdio` |
114
+ | `PORT` | HTTP server port (when using `http` transport) | `3001` |
115
+
116
+ ## IDE Setup
117
+
118
+ ### Claude Code
119
+
120
+ Add to `~/.claude/mcp.json`:
121
+
122
+ ```json
123
+ {
124
+ "mcpServers": {
125
+ "neuron": {
126
+ "command": "npx",
127
+ "args": ["-y", "neuron-mcp-server"]
128
+ }
129
+ }
130
+ }
131
+ ```
132
+
133
+ Or use the remote server:
134
+
135
+ ```json
136
+ {
137
+ "mcpServers": {
138
+ "neuron": {
139
+ "type": "url",
140
+ "url": "https://mcp.neuron.ng/mcp"
141
+ }
142
+ }
143
+ }
144
+ ```
145
+
146
+ ### Cursor
147
+
148
+ **Settings > MCP Servers > Add Streamable HTTP**
149
+
150
+ URL: `https://mcp.neuron.ng/mcp`
151
+
152
+ ### Windsurf
153
+
154
+ **Settings > AI > MCP Servers > Add**
155
+
156
+ Use either the remote URL or local npx command.
157
+
158
+ ## Development
159
+
160
+ ```bash
161
+ git clone https://github.com/conquext/neuron-mcp-server.git
162
+ cd neuron-mcp-server
163
+ npm install
164
+ npm run dev
165
+ ```
166
+
167
+ ## Links
168
+
169
+ - **Website:** [neuron.ng](https://neuron.ng)
170
+ - **Documentation:** [neuron.ng/docs](https://neuron.ng/docs)
171
+ - **MCP Server Docs:** [neuron.ng/docs/mcp-server](https://neuron.ng/docs/mcp-server)
172
+ - **npm:** [npmjs.com/package/neuron-mcp-server](https://www.npmjs.com/package/neuron-mcp-server)
173
+
174
+ Free to start — no credit card required.
175
+
176
+ ## License
177
+
178
+ [MIT](LICENSE)
@@ -0,0 +1,34 @@
1
+ export declare function setAuthToken(token: string): void;
2
+ export declare function getAuthToken(): string;
3
+ export declare function getBaseUrl(): string;
4
+ interface ApiResponse<T = unknown> {
5
+ success: boolean;
6
+ data?: T;
7
+ error?: {
8
+ message: string;
9
+ code: string;
10
+ details?: unknown;
11
+ };
12
+ }
13
+ export declare function api<T = unknown>(method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", endpoint: string, data?: unknown, params?: Record<string, string | number | undefined>, headers?: Record<string, string>): Promise<ApiResponse<T>>;
14
+ export declare function handleError(error: unknown): string;
15
+ export declare function jsonResult(data: unknown): {
16
+ content: Array<{
17
+ type: "text";
18
+ text: string;
19
+ }>;
20
+ };
21
+ export declare function textResult(text: string): {
22
+ content: Array<{
23
+ type: "text";
24
+ text: string;
25
+ }>;
26
+ };
27
+ export declare function errorResult(error: unknown): {
28
+ content: Array<{
29
+ type: "text";
30
+ text: string;
31
+ }>;
32
+ isError: true;
33
+ };
34
+ export {};
package/dist/client.js ADDED
@@ -0,0 +1,104 @@
1
+ import axios, { AxiosError } from "axios";
2
+ import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { homedir } from "node:os";
5
+ // Resolve API URL: prefer NEURON_API_URL if it points to a real server (not Docker-internal hostnames)
6
+ const envUrl = process.env.NEURON_API_URL || "";
7
+ const isDockerInternal = envUrl.includes("neuron-api:") || (envUrl.includes("localhost") && !envUrl.includes("https://"));
8
+ const BASE_URL = isDockerInternal ? "https://api.neuron.ng/api/v1" : (envUrl || "https://api.neuron.ng/api/v1");
9
+ const TOKEN_CACHE_DIR = join(homedir(), ".neuron");
10
+ const TOKEN_CACHE_FILE = join(TOKEN_CACHE_DIR, "mcp-token-cache.json");
11
+ function readCachedToken() {
12
+ try {
13
+ const raw = readFileSync(TOKEN_CACHE_FILE, "utf-8");
14
+ const cache = JSON.parse(raw);
15
+ if (cache.baseUrl === BASE_URL && cache.token) {
16
+ return cache.token;
17
+ }
18
+ }
19
+ catch {
20
+ // No cache or unreadable — that's fine
21
+ }
22
+ return "";
23
+ }
24
+ function writeCachedToken(token) {
25
+ try {
26
+ mkdirSync(TOKEN_CACHE_DIR, { recursive: true, mode: 0o700 });
27
+ writeFileSync(TOKEN_CACHE_FILE, JSON.stringify({ baseUrl: BASE_URL, token }), { mode: 0o600 });
28
+ }
29
+ catch {
30
+ // Non-critical — best effort
31
+ }
32
+ }
33
+ let authToken = process.env.NEURON_AUTH_TOKEN || readCachedToken();
34
+ export function setAuthToken(token) {
35
+ authToken = token;
36
+ writeCachedToken(token);
37
+ }
38
+ export function getAuthToken() {
39
+ return authToken;
40
+ }
41
+ export function getBaseUrl() {
42
+ return BASE_URL;
43
+ }
44
+ export async function api(method, endpoint, data, params, headers) {
45
+ try {
46
+ const cleanParams = {};
47
+ if (params) {
48
+ for (const [k, v] of Object.entries(params)) {
49
+ if (v !== undefined)
50
+ cleanParams[k] = v;
51
+ }
52
+ }
53
+ const cleanEndpoint = endpoint.replace(/^\/+/, "");
54
+ const response = await axios({
55
+ method,
56
+ url: `${BASE_URL}/${cleanEndpoint}`,
57
+ data,
58
+ params: Object.keys(cleanParams).length > 0 ? cleanParams : undefined,
59
+ timeout: 60000,
60
+ headers: {
61
+ "Content-Type": "application/json",
62
+ Accept: "application/json",
63
+ ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),
64
+ ...headers,
65
+ },
66
+ });
67
+ return response.data;
68
+ }
69
+ catch (error) {
70
+ if (error instanceof AxiosError && error.response?.data) {
71
+ return error.response.data;
72
+ }
73
+ throw error;
74
+ }
75
+ }
76
+ export function handleError(error) {
77
+ if (error instanceof AxiosError) {
78
+ if (error.response) {
79
+ const body = error.response.data;
80
+ const msg = body?.error?.message || `HTTP ${error.response.status}`;
81
+ return `Error: ${msg}`;
82
+ }
83
+ const url = error.config?.url || BASE_URL;
84
+ if (error.code === "ECONNABORTED")
85
+ return `Error: Request timed out connecting to ${url}`;
86
+ if (error.code === "ECONNREFUSED") {
87
+ return `Error: Connection refused to ${url}. Try: neuron_login({ token: "your-mcp-token" }) with a token from the Neuron dashboard.`;
88
+ }
89
+ if (error.code === "ENOTFOUND")
90
+ return `Error: DNS lookup failed for ${url}. Check your network connection.`;
91
+ return `Error: Network error (${error.code || "unknown"}): ${error.message} — URL: ${url}`;
92
+ }
93
+ return `Error: ${error instanceof Error ? error.message : String(error)}`;
94
+ }
95
+ export function jsonResult(data) {
96
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
97
+ }
98
+ export function textResult(text) {
99
+ return { content: [{ type: "text", text }] };
100
+ }
101
+ export function errorResult(error) {
102
+ return { content: [{ type: "text", text: handleError(error) }], isError: true };
103
+ }
104
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Neuron MCP Server
4
+ *
5
+ * Exposes the full Neuron AI chatbot platform as MCP tools.
6
+ * Supports 120+ tools covering bots, conversations, knowledge bases,
7
+ * tools, webhooks, built-in tools, reflections, channels, contacts,
8
+ * broadcasts, billing, media, AI, marketplace, and more.
9
+ *
10
+ * Environment variables:
11
+ * NEURON_API_URL - Base URL (default: https://api.neuron.ng/api/v1)
12
+ * NEURON_AUTH_TOKEN - Pre-set JWT or API key for authentication
13
+ * MCP_TRANSPORT - "http" for Streamable HTTP, "stdio" (default) for stdio
14
+ * PORT - HTTP server port (default: 3001)
15
+ *
16
+ * Transports:
17
+ * stdio - For local Claude Code / IDE integration (default)
18
+ * http - For remote connections (Claude.ai custom connectors)
19
+ */
20
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,190 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Neuron MCP Server
4
+ *
5
+ * Exposes the full Neuron AI chatbot platform as MCP tools.
6
+ * Supports 120+ tools covering bots, conversations, knowledge bases,
7
+ * tools, webhooks, built-in tools, reflections, channels, contacts,
8
+ * broadcasts, billing, media, AI, marketplace, and more.
9
+ *
10
+ * Environment variables:
11
+ * NEURON_API_URL - Base URL (default: https://api.neuron.ng/api/v1)
12
+ * NEURON_AUTH_TOKEN - Pre-set JWT or API key for authentication
13
+ * MCP_TRANSPORT - "http" for Streamable HTTP, "stdio" (default) for stdio
14
+ * PORT - HTTP server port (default: 3001)
15
+ *
16
+ * Transports:
17
+ * stdio - For local Claude Code / IDE integration (default)
18
+ * http - For remote connections (Claude.ai custom connectors)
19
+ */
20
+ import { config } from "dotenv";
21
+ import { fileURLToPath } from "node:url";
22
+ import { dirname, resolve } from "node:path";
23
+ // Load .env from mcp-server directory (not CWD which may be the project root)
24
+ const __dirname = dirname(fileURLToPath(import.meta.url));
25
+ config({ path: resolve(__dirname, "../.env") });
26
+ import { randomUUID } from "node:crypto";
27
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
28
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
29
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
30
+ import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js";
31
+ import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
32
+ import { registerAuthTools } from "./tools/auth.js";
33
+ import { registerBotTools } from "./tools/bots.js";
34
+ import { registerBotApiKeyTools } from "./tools/bot-api-keys.js";
35
+ import { registerBotApiTools } from "./tools/bot-api.js";
36
+ import { registerConversationTools } from "./tools/conversations.js";
37
+ import { registerKnowledgeBaseTools } from "./tools/knowledge-bases.js";
38
+ import { registerToolsTools } from "./tools/tools.js";
39
+ import { registerWebhooksTools } from "./tools/webhooks.js";
40
+ import { registerReflectionsTools } from "./tools/reflections.js";
41
+ import { registerChannelsTools } from "./tools/channels.js";
42
+ import { registerPoolTools } from "./tools/pool.js";
43
+ import { registerOrganizationTools } from "./tools/organizations.js";
44
+ import { registerAuditTools } from "./tools/audit.js";
45
+ import { registerBuiltinToolsTools } from "./tools/builtin-tools.js";
46
+ import { registerOutboundWebhookTools } from "./tools/outbound-webhooks.js";
47
+ import { registerContactsTools } from "./tools/contacts.js";
48
+ import { registerContactListsTools } from "./tools/contact-lists.js";
49
+ import { registerBroadcastsTools } from "./tools/broadcasts.js";
50
+ import { registerBillingTools } from "./tools/billing.js";
51
+ import { registerMediaTools } from "./tools/media.js";
52
+ import { registerAiTools } from "./tools/ai.js";
53
+ import { registerCampaignTools } from "./tools/campaigns.js";
54
+ import { registerWalletTools } from "./tools/wallets.js";
55
+ import { registerPayoutTools } from "./tools/payouts.js";
56
+ import { registerBlogTools } from "./tools/blog.js";
57
+ import { registerNewsletterTools } from "./tools/newsletters.js";
58
+ import { registerListPoolTools } from "./tools/list-pool.js";
59
+ function createServer() {
60
+ const server = new McpServer({
61
+ name: "neuron-mcp-server",
62
+ version: "1.0.0",
63
+ });
64
+ // Register all tool groups
65
+ registerAuthTools(server);
66
+ registerBotTools(server);
67
+ registerBotApiKeyTools(server);
68
+ registerBotApiTools(server);
69
+ registerConversationTools(server);
70
+ registerKnowledgeBaseTools(server);
71
+ registerToolsTools(server);
72
+ registerWebhooksTools(server);
73
+ registerReflectionsTools(server);
74
+ registerChannelsTools(server);
75
+ registerPoolTools(server);
76
+ registerOrganizationTools(server);
77
+ registerAuditTools(server);
78
+ registerBuiltinToolsTools(server);
79
+ registerOutboundWebhookTools(server);
80
+ registerContactsTools(server);
81
+ registerContactListsTools(server);
82
+ registerBroadcastsTools(server);
83
+ registerBillingTools(server);
84
+ registerMediaTools(server);
85
+ registerAiTools(server);
86
+ registerCampaignTools(server);
87
+ registerWalletTools(server);
88
+ registerPayoutTools(server);
89
+ registerBlogTools(server);
90
+ registerNewsletterTools(server);
91
+ registerListPoolTools(server);
92
+ return server;
93
+ }
94
+ async function startStdio() {
95
+ const server = createServer();
96
+ const transport = new StdioServerTransport();
97
+ await server.connect(transport);
98
+ console.error("Neuron MCP server running via stdio");
99
+ }
100
+ async function startHttp() {
101
+ const PORT = parseInt(process.env.PORT || "3001", 10);
102
+ const app = createMcpExpressApp({ host: "0.0.0.0" });
103
+ const transports = {};
104
+ function createTransport() {
105
+ const transport = new StreamableHTTPServerTransport({
106
+ sessionIdGenerator: () => randomUUID(),
107
+ onsessioninitialized: (sid) => {
108
+ transports[sid] = transport;
109
+ console.error(`Session initialized: ${sid}`);
110
+ },
111
+ });
112
+ transport.onclose = () => {
113
+ const sid = transport.sessionId;
114
+ if (sid && transports[sid]) {
115
+ delete transports[sid];
116
+ }
117
+ };
118
+ return transport;
119
+ }
120
+ app.all("/mcp", async (req, res) => {
121
+ try {
122
+ const sessionId = req.headers["mcp-session-id"];
123
+ let transport;
124
+ if (sessionId && transports[sessionId]) {
125
+ // Known session — reuse existing transport
126
+ transport = transports[sessionId];
127
+ }
128
+ else if (req.method === "POST" && isInitializeRequest(req.body)) {
129
+ // New or re-initializing client — create a fresh session
130
+ // (handles both no session ID and stale session ID after server restart)
131
+ transport = createTransport();
132
+ const server = createServer();
133
+ await server.connect(transport);
134
+ }
135
+ else if (sessionId && !transports[sessionId]) {
136
+ // Stale session ID with a non-initialize request — tell client to re-initialize
137
+ res.status(404).json({
138
+ jsonrpc: "2.0",
139
+ error: { code: -32000, message: "Session expired. Please reconnect." },
140
+ id: null,
141
+ });
142
+ return;
143
+ }
144
+ else {
145
+ res.status(400).json({
146
+ jsonrpc: "2.0",
147
+ error: { code: -32000, message: "Bad Request: No valid session ID provided" },
148
+ id: null,
149
+ });
150
+ return;
151
+ }
152
+ await transport.handleRequest(req, res, req.body);
153
+ }
154
+ catch (error) {
155
+ console.error("Error handling MCP request:", error);
156
+ if (!res.headersSent) {
157
+ res.status(500).json({
158
+ jsonrpc: "2.0",
159
+ error: { code: -32603, message: "Internal server error" },
160
+ id: null,
161
+ });
162
+ }
163
+ }
164
+ });
165
+ app.listen(PORT, "0.0.0.0", () => {
166
+ console.error(`Neuron MCP server listening on http://0.0.0.0:${PORT}/mcp`);
167
+ });
168
+ process.on("SIGINT", async () => {
169
+ console.error("Shutting down...");
170
+ for (const sid of Object.keys(transports)) {
171
+ await transports[sid].close().catch(() => { });
172
+ delete transports[sid];
173
+ }
174
+ process.exit(0);
175
+ });
176
+ }
177
+ const mode = process.env.MCP_TRANSPORT || "stdio";
178
+ if (mode === "http") {
179
+ startHttp().catch((error) => {
180
+ console.error("Server error:", error);
181
+ process.exit(1);
182
+ });
183
+ }
184
+ else {
185
+ startStdio().catch((error) => {
186
+ console.error("Server error:", error);
187
+ process.exit(1);
188
+ });
189
+ }
190
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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 registerAiTools(server: McpServer): void;
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ export function registerAiTools(server) {
4
+ // Rewrite text
5
+ server.registerTool("neuron_rewrite_text", {
6
+ title: "Rewrite Text",
7
+ description: "Use AI to rewrite or transform text based on an optional instruction (e.g., make it more formal, translate, summarize)",
8
+ inputSchema: z.object({
9
+ text: z.string().describe("The text to rewrite"),
10
+ instruction: z.string().optional().describe("Instructions for how to rewrite the text (e.g., 'make it more professional', 'translate to Spanish')"),
11
+ }),
12
+ }, async (params) => {
13
+ try {
14
+ const result = await api("POST", "/ai/rewrite", {
15
+ text: params.text,
16
+ instruction: params.instruction,
17
+ });
18
+ return jsonResult(result);
19
+ }
20
+ catch (error) {
21
+ return errorResult(error);
22
+ }
23
+ });
24
+ }
25
+ //# sourceMappingURL=ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/tools/ai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,eAAe;IACf,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,wHAAwH;QACrI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sGAAsG,CAAC;SACpJ,CAAC;KACH,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE;gBAC9C,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,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;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerAuditTools(server: McpServer): void;
@@ -0,0 +1,40 @@
1
+ import { z } from "zod";
2
+ import { api, jsonResult, errorResult } from "../client.js";
3
+ export function registerAuditTools(server) {
4
+ // List Audit Logs
5
+ server.registerTool("neuron_list_audit_logs", {
6
+ title: "List Audit Logs",
7
+ description: "Retrieve audit logs with optional filtering by page, limit, action, and resource type",
8
+ inputSchema: z.object({
9
+ page: z.number().int().positive().optional().describe("Page number for pagination (starts at 1)"),
10
+ limit: z.number().int().positive().optional().describe("Number of records per page"),
11
+ action: z.string().optional().describe("Filter by action type (e.g., 'CREATE', 'UPDATE', 'DELETE')"),
12
+ resourceType: z.string().optional().describe("Filter by resource type (e.g., 'USER', 'ORGANIZATION', 'CAMPAIGN')"),
13
+ }),
14
+ annotations: {
15
+ readOnlyHint: true,
16
+ },
17
+ }, async (params) => {
18
+ try {
19
+ const queryParams = {};
20
+ if (params.page !== undefined) {
21
+ queryParams.page = params.page;
22
+ }
23
+ if (params.limit !== undefined) {
24
+ queryParams.limit = params.limit;
25
+ }
26
+ if (params.action !== undefined) {
27
+ queryParams.action = params.action;
28
+ }
29
+ if (params.resourceType !== undefined) {
30
+ queryParams.resourceType = params.resourceType;
31
+ }
32
+ const result = await api("GET", "/audit", undefined, queryParams);
33
+ return jsonResult(result);
34
+ }
35
+ catch (error) {
36
+ return errorResult(error);
37
+ }
38
+ });
39
+ }
40
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,kBAAkB;IAClB,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,uFAAuF;QACpG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACjG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACpF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YACpG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;SACnH,CAAC;QACF,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;SACnB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,WAAW,GAAoC,EAAE,CAAC;YAExD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACjC,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YACnC,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACrC,CAAC;YACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACtC,WAAW,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;YACjD,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAClE,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 registerAuthTools(server: McpServer): void;