neuron-mcp-server 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env +13 -0
- package/AI_PERSONALITY_DESIGN_RESEARCH.md +1020 -0
- package/Dockerfile +18 -0
- package/README.md +146 -131
- package/dist/client.d.ts +6 -0
- package/dist/client.js +50 -12
- package/dist/client.js.map +1 -1
- package/dist/index.js +51 -7
- package/dist/index.js.map +1 -1
- package/dist/tools/ai.js +9 -3
- package/dist/tools/ai.js.map +1 -1
- package/dist/tools/approvals.d.ts +2 -0
- package/dist/tools/approvals.js +181 -0
- package/dist/tools/approvals.js.map +1 -0
- package/dist/tools/audit.js +7 -4
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/auth.js +119 -19
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/billing.js +22 -6
- package/dist/tools/billing.js.map +1 -1
- package/dist/tools/blog.js +98 -34
- package/dist/tools/blog.js.map +1 -1
- package/dist/tools/bot-api-keys.js +27 -12
- package/dist/tools/bot-api-keys.js.map +1 -1
- package/dist/tools/bot-api.js +53 -27
- package/dist/tools/bot-api.js.map +1 -1
- package/dist/tools/bots.js +116 -68
- package/dist/tools/bots.js.map +1 -1
- package/dist/tools/broadcasts.js +78 -38
- package/dist/tools/broadcasts.js.map +1 -1
- package/dist/tools/builtin-tools.js +19 -12
- package/dist/tools/builtin-tools.js.map +1 -1
- package/dist/tools/campaigns.js +149 -61
- package/dist/tools/campaigns.js.map +1 -1
- package/dist/tools/channels.js +163 -53
- package/dist/tools/channels.js.map +1 -1
- package/dist/tools/contact-lists.js +111 -51
- package/dist/tools/contact-lists.js.map +1 -1
- package/dist/tools/contacts.js +117 -44
- package/dist/tools/contacts.js.map +1 -1
- package/dist/tools/conversations.js +95 -50
- package/dist/tools/conversations.js.map +1 -1
- package/dist/tools/flows.d.ts +2 -0
- package/dist/tools/flows.js +242 -0
- package/dist/tools/flows.js.map +1 -0
- package/dist/tools/group-management.d.ts +2 -0
- package/dist/tools/group-management.js +239 -0
- package/dist/tools/group-management.js.map +1 -0
- package/dist/tools/leads.d.ts +2 -0
- package/dist/tools/leads.js +100 -0
- package/dist/tools/leads.js.map +1 -0
- package/dist/tools/list-campaigns.d.ts +2 -0
- package/dist/tools/list-campaigns.js +152 -0
- package/dist/tools/list-campaigns.js.map +1 -0
- package/dist/tools/list-pool.js +250 -33
- package/dist/tools/list-pool.js.map +1 -1
- package/dist/tools/media.js +12 -7
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/newsletters.js +106 -26
- package/dist/tools/newsletters.js.map +1 -1
- package/dist/tools/organizations.js +76 -35
- package/dist/tools/organizations.js.map +1 -1
- package/dist/tools/outbound-webhooks.js +32 -20
- package/dist/tools/outbound-webhooks.js.map +1 -1
- package/dist/tools/payouts.js +44 -17
- package/dist/tools/payouts.js.map +1 -1
- package/dist/tools/personas.d.ts +2 -0
- package/dist/tools/personas.js +141 -0
- package/dist/tools/personas.js.map +1 -0
- package/dist/tools/polls.d.ts +2 -0
- package/dist/tools/polls.js +30 -0
- package/dist/tools/polls.js.map +1 -0
- package/dist/tools/pool.js +101 -43
- package/dist/tools/pool.js.map +1 -1
- package/dist/tools/products.d.ts +2 -0
- package/dist/tools/products.js +277 -0
- package/dist/tools/products.js.map +1 -0
- package/dist/tools/profile-privacy.d.ts +2 -0
- package/dist/tools/profile-privacy.js +195 -0
- package/dist/tools/profile-privacy.js.map +1 -0
- package/dist/tools/reflections.js +25 -13
- package/dist/tools/reflections.js.map +1 -1
- package/dist/tools/scheduled-messages.d.ts +2 -0
- package/dist/tools/scheduled-messages.js +124 -0
- package/dist/tools/scheduled-messages.js.map +1 -0
- package/dist/tools/social-channels.d.ts +2 -0
- package/dist/tools/social-channels.js +318 -0
- package/dist/tools/social-channels.js.map +1 -0
- package/dist/tools/tasks.d.ts +2 -0
- package/dist/tools/tasks.js +155 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/tools.js +86 -40
- package/dist/tools/tools.js.map +1 -1
- package/dist/tools/wallets.js +34 -12
- package/dist/tools/wallets.js.map +1 -1
- package/dist/tools/webhooks.js +35 -20
- package/dist/tools/webhooks.js.map +1 -1
- package/dist/tools/whatsapp-actions.d.ts +2 -0
- package/dist/tools/whatsapp-actions.js +186 -0
- package/dist/tools/whatsapp-actions.js.map +1 -0
- package/package.json +3 -31
- package/scripts/setup-delivahere-bot.ts +804 -0
- package/scripts/test-delivahere-bot.ts +128 -0
- package/scripts/update-letschop-prompt.ts +194 -0
- package/server.json +26 -0
- package/smithery.yaml +19 -0
- package/src/client.ts +169 -0
- package/src/index.ts +256 -0
- package/src/tools/ai.ts +35 -0
- package/src/tools/approvals.ts +231 -0
- package/src/tools/audit.ts +49 -0
- package/src/tools/auth.ts +536 -0
- package/src/tools/billing.ts +79 -0
- package/src/tools/blog.ts +264 -0
- package/src/tools/bot-api-keys.ts +87 -0
- package/src/tools/bot-api.ts +193 -0
- package/src/tools/bots.ts +320 -0
- package/src/tools/broadcasts.ts +224 -0
- package/src/tools/builtin-tools.ts +108 -0
- package/src/tools/campaigns.ts +429 -0
- package/src/tools/channels.ts +520 -0
- package/src/tools/contact-lists.ts +320 -0
- package/src/tools/contacts.ts +395 -0
- package/src/tools/conversations.ts +349 -0
- package/src/tools/flows.ts +298 -0
- package/src/tools/group-management.ts +265 -0
- package/src/tools/knowledge-bases.ts +451 -0
- package/src/tools/leads.ts +104 -0
- package/src/tools/list-campaigns.ts +190 -0
- package/src/tools/list-pool.ts +389 -0
- package/src/tools/media.ts +50 -0
- package/src/tools/newsletters.ts +271 -0
- package/src/tools/organizations.ts +287 -0
- package/src/tools/outbound-webhooks.ts +181 -0
- package/src/tools/payouts.ts +133 -0
- package/src/tools/personas.ts +145 -0
- package/src/tools/polls.ts +32 -0
- package/src/tools/pool.ts +293 -0
- package/src/tools/products.ts +280 -0
- package/src/tools/profile-privacy.ts +215 -0
- package/src/tools/reflections.ts +124 -0
- package/src/tools/scheduled-messages.ts +144 -0
- package/src/tools/social-channels.ts +396 -0
- package/src/tools/tasks.ts +198 -0
- package/src/tools/tools.ts +255 -0
- package/src/tools/wallets.ts +107 -0
- package/src/tools/webhooks.ts +166 -0
- package/src/tools/whatsapp-actions.ts +203 -0
- package/tsconfig.json +20 -0
- package/LICENSE +0 -21
package/dist/tools/billing.js
CHANGED
|
@@ -4,9 +4,14 @@ export function registerBillingTools(server) {
|
|
|
4
4
|
// Get billing info
|
|
5
5
|
server.registerTool("neuron_get_billing", {
|
|
6
6
|
title: "Get Billing Info",
|
|
7
|
-
description: "
|
|
7
|
+
description: "Retrieve the current billing information, subscription plan, and usage details for the organization.",
|
|
8
8
|
inputSchema: z.object({}),
|
|
9
|
-
annotations: {
|
|
9
|
+
annotations: {
|
|
10
|
+
readOnlyHint: true,
|
|
11
|
+
destructiveHint: false,
|
|
12
|
+
idempotentHint: true,
|
|
13
|
+
openWorldHint: false,
|
|
14
|
+
},
|
|
10
15
|
}, async () => {
|
|
11
16
|
try {
|
|
12
17
|
const result = await api("GET", "/billing");
|
|
@@ -19,10 +24,16 @@ export function registerBillingTools(server) {
|
|
|
19
24
|
// Checkout
|
|
20
25
|
server.registerTool("neuron_checkout", {
|
|
21
26
|
title: "Checkout Subscription",
|
|
22
|
-
description: "
|
|
27
|
+
description: "Initiate a checkout session for a subscription plan upgrade. Returns a checkout URL or confirmation to complete the purchase.",
|
|
23
28
|
inputSchema: z.object({
|
|
24
|
-
plan: z.enum(["pro", "business"]).describe("Subscription plan to purchase"),
|
|
29
|
+
plan: z.enum(["pro", "business"]).describe("Subscription plan to purchase: 'pro' or 'business'"),
|
|
25
30
|
}),
|
|
31
|
+
annotations: {
|
|
32
|
+
readOnlyHint: false,
|
|
33
|
+
destructiveHint: false,
|
|
34
|
+
idempotentHint: false,
|
|
35
|
+
openWorldHint: false,
|
|
36
|
+
},
|
|
26
37
|
}, async (params) => {
|
|
27
38
|
try {
|
|
28
39
|
const result = await api("POST", "/billing/checkout", { plan: params.plan });
|
|
@@ -35,9 +46,14 @@ export function registerBillingTools(server) {
|
|
|
35
46
|
// Cancel subscription
|
|
36
47
|
server.registerTool("neuron_cancel_subscription", {
|
|
37
48
|
title: "Cancel Subscription",
|
|
38
|
-
description: "Cancel the current active subscription.
|
|
49
|
+
description: "Cancel the current active subscription. Access continues until the end of the current billing period.",
|
|
39
50
|
inputSchema: z.object({}),
|
|
40
|
-
annotations: {
|
|
51
|
+
annotations: {
|
|
52
|
+
readOnlyHint: false,
|
|
53
|
+
destructiveHint: true,
|
|
54
|
+
idempotentHint: true,
|
|
55
|
+
openWorldHint: false,
|
|
56
|
+
},
|
|
41
57
|
}, async () => {
|
|
42
58
|
try {
|
|
43
59
|
const result = await api("POST", "/billing/cancel");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/tools/billing.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,oBAAoB,CAAC,MAAiB;IACpD,mBAAmB;IACnB,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/tools/billing.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,oBAAoB,CAAC,MAAiB;IACpD,mBAAmB;IACnB,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,sGAAsG;QACnH,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,UAAU,CAAC,CAAC;YAC5C,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,WAAW;IACX,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,+HAA+H;QAC5I,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;SACjG,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,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7E,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,4BAA4B,EAC5B;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,uGAAuG;QACpH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YACpD,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"}
|
package/dist/tools/blog.js
CHANGED
|
@@ -1,44 +1,73 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { api, jsonResult, errorResult } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Block content vocabulary. The backend (backend/src/lib/blog-blocks.ts) is the
|
|
5
|
+
* authoritative validator — it rejects malformed blocks with a 400 — so here we
|
|
6
|
+
* keep a permissive shape and describe the vocabulary richly for the model.
|
|
7
|
+
*/
|
|
8
|
+
const BLOCKS_SCHEMA = z.array(z.record(z.any()));
|
|
9
|
+
const BLOCKS_DESCRIPTION = [
|
|
10
|
+
"Structured layout blocks, rendered top-to-bottom as styled components. Each block is an object with a `type` and its fields:",
|
|
11
|
+
"- hero: { type:'hero', title, kicker?, subtitle?, imageUrl?, align?:'left'|'center', ctaLabel?, ctaHref? }",
|
|
12
|
+
"- richText: { type:'richText', markdown } (full GFM markdown)",
|
|
13
|
+
"- callout: { type:'callout', variant:'info'|'tip'|'warning'|'success'|'danger', title?, markdown }",
|
|
14
|
+
"- columns: { type:'columns', ratio?:'1-1'|'1-2'|'2-1', columns:[ [block,...], [block,...] ] } (exactly 2 columns of leaf blocks; no nested columns)",
|
|
15
|
+
"- codeCard: { type:'codeCard', language?, filename?, code }",
|
|
16
|
+
"- imageGrid: { type:'imageGrid', columns?:1|2|3|4, images:[{ url, alt?, caption? }] }",
|
|
17
|
+
"- quote: { type:'quote', quote, attribution? }",
|
|
18
|
+
"- embed: { type:'embed', provider:'youtube'|'loom'|'vimeo'|'generic', url, title? } (paste the normal share URL)",
|
|
19
|
+
"- cta: { type:'cta', headline, body?, buttonLabel, buttonHref, secondaryLabel?, secondaryHref?, accent?:'#hex' }",
|
|
20
|
+
"- divider: { type:'divider' }",
|
|
21
|
+
"- html: { type:'html', html, sandboxed?, height? } (custom HTML. Default is sanitized + indexable, no scripts. Set sandboxed:true to run scripts inside an isolated iframe — NOT indexed by search.)",
|
|
22
|
+
"Build magazine-style posts by composing these, e.g. a hero, then richText, then a columns block, a callout, a codeCard, and a closing cta.",
|
|
23
|
+
].join("\n");
|
|
3
24
|
export function registerBlogTools(server) {
|
|
4
25
|
// Create blog post
|
|
5
26
|
server.registerTool("neuron_create_blog_post", {
|
|
6
27
|
title: "Create Blog Post",
|
|
7
|
-
description: "Create a new blog post (
|
|
28
|
+
description: "Create a new blog post. Body can be authored two ways: (1) `content` as markdown (GFM) + inline raw HTML, or (2) `blocks` — a structured array of typed layout blocks rendered as styled components (heroes, columns, callouts, code cards, embeds, CTAs, sanitized custom HTML). Prefer `blocks` for rich, magazine-style layouts; use `content` for simple prose. If both are given, `blocks` renders and `content` is kept as a fallback.",
|
|
8
29
|
inputSchema: z.object({
|
|
9
|
-
title: z.string().describe("
|
|
10
|
-
content: z.string().describe("
|
|
11
|
-
|
|
30
|
+
title: z.string().describe("Title of the blog post (max 500 characters)"),
|
|
31
|
+
content: z.string().optional().describe("Optional markdown body (GFM + inline raw HTML). Used when `blocks` is not provided, and kept as a fallback when it is. Rich options: , <video src controls>, <iframe> embeds (16:9), <details><summary>, <mark>, <kbd>."),
|
|
32
|
+
blocks: BLOCKS_SCHEMA.optional().describe(BLOCKS_DESCRIPTION),
|
|
33
|
+
excerpt: z.string().optional().describe("Short summary or preview text for the blog post"),
|
|
12
34
|
authorType: z
|
|
13
35
|
.enum(["user", "organization"])
|
|
14
|
-
.describe("
|
|
15
|
-
coverImageUrl: z.string().optional().describe("
|
|
36
|
+
.describe("Whether the post is authored by an individual user or the organization"),
|
|
37
|
+
coverImageUrl: z.string().optional().describe("URL of the cover image displayed at the top of the post"),
|
|
16
38
|
tags: z
|
|
17
39
|
.array(z.string())
|
|
18
40
|
.optional()
|
|
19
|
-
.describe("
|
|
41
|
+
.describe("List of tag names or slugs to categorize the post"),
|
|
20
42
|
status: z
|
|
21
43
|
.enum(["draft", "published"])
|
|
22
44
|
.default("draft")
|
|
23
|
-
.describe("
|
|
45
|
+
.describe("Initial publication status of the post (default: 'draft')"),
|
|
24
46
|
seoTitle: z
|
|
25
47
|
.string()
|
|
26
48
|
.optional()
|
|
27
|
-
.describe("SEO title override
|
|
49
|
+
.describe("Custom SEO title override for search engine results"),
|
|
28
50
|
seoDescription: z
|
|
29
51
|
.string()
|
|
30
52
|
.optional()
|
|
31
|
-
.describe("Meta description
|
|
53
|
+
.describe("Meta description for search engine result snippets"),
|
|
32
54
|
seoKeywords: z
|
|
33
55
|
.array(z.string())
|
|
34
56
|
.optional()
|
|
35
|
-
.describe("SEO keywords
|
|
57
|
+
.describe("List of SEO keywords for search engine optimization"),
|
|
36
58
|
}),
|
|
59
|
+
annotations: {
|
|
60
|
+
readOnlyHint: false,
|
|
61
|
+
destructiveHint: false,
|
|
62
|
+
idempotentHint: false,
|
|
63
|
+
openWorldHint: false,
|
|
64
|
+
},
|
|
37
65
|
}, async (params) => {
|
|
38
66
|
try {
|
|
39
67
|
const result = await api("POST", "blog/posts", {
|
|
40
68
|
title: params.title,
|
|
41
69
|
content: params.content,
|
|
70
|
+
blocks: params.blocks,
|
|
42
71
|
excerpt: params.excerpt,
|
|
43
72
|
authorType: params.authorType,
|
|
44
73
|
coverImageUrl: params.coverImageUrl,
|
|
@@ -57,24 +86,30 @@ export function registerBlogTools(server) {
|
|
|
57
86
|
// List blog posts
|
|
58
87
|
server.registerTool("neuron_list_blog_posts", {
|
|
59
88
|
title: "List Blog Posts",
|
|
60
|
-
description: "
|
|
89
|
+
description: "Retrieve a paginated list of blog posts with optional filtering by status, author type, author ID, or tag.",
|
|
61
90
|
inputSchema: z.object({
|
|
62
91
|
status: z
|
|
63
92
|
.enum(["draft", "published", "hidden"])
|
|
64
93
|
.optional()
|
|
65
|
-
.describe("Filter by status"),
|
|
94
|
+
.describe("Filter posts by publication status"),
|
|
66
95
|
authorType: z
|
|
67
96
|
.enum(["user", "organization"])
|
|
68
97
|
.optional()
|
|
69
|
-
.describe("Filter by author type"),
|
|
98
|
+
.describe("Filter posts by author type"),
|
|
70
99
|
authorId: z
|
|
71
100
|
.string()
|
|
72
101
|
.optional()
|
|
73
|
-
.describe("Filter by author UUID"),
|
|
74
|
-
tag: z.string().optional().describe("Filter by tag slug"),
|
|
75
|
-
page: z.number().default(1).describe("Page number"),
|
|
76
|
-
limit: z.number().default(20).describe("
|
|
102
|
+
.describe("Filter posts by author identifier (UUID)"),
|
|
103
|
+
tag: z.string().optional().describe("Filter posts by tag slug (e.g., 'announcements')"),
|
|
104
|
+
page: z.number().default(1).describe("Page number for pagination (default: 1)"),
|
|
105
|
+
limit: z.number().default(20).describe("Number of results per page (default: 20)"),
|
|
77
106
|
}),
|
|
107
|
+
annotations: {
|
|
108
|
+
readOnlyHint: true,
|
|
109
|
+
destructiveHint: false,
|
|
110
|
+
idempotentHint: true,
|
|
111
|
+
openWorldHint: false,
|
|
112
|
+
},
|
|
78
113
|
}, async (params) => {
|
|
79
114
|
try {
|
|
80
115
|
const result = await api("GET", "blog/posts", undefined, {
|
|
@@ -94,10 +129,16 @@ export function registerBlogTools(server) {
|
|
|
94
129
|
// Get blog post
|
|
95
130
|
server.registerTool("neuron_get_blog_post", {
|
|
96
131
|
title: "Get Blog Post",
|
|
97
|
-
description: "
|
|
132
|
+
description: "Retrieve a single blog post by its URL-friendly slug, including full content and metadata.",
|
|
98
133
|
inputSchema: z.object({
|
|
99
|
-
slug: z.string().describe("
|
|
134
|
+
slug: z.string().describe("URL-friendly slug of the blog post (e.g., 'my-first-post')"),
|
|
100
135
|
}),
|
|
136
|
+
annotations: {
|
|
137
|
+
readOnlyHint: true,
|
|
138
|
+
destructiveHint: false,
|
|
139
|
+
idempotentHint: true,
|
|
140
|
+
openWorldHint: false,
|
|
141
|
+
},
|
|
101
142
|
}, async (params) => {
|
|
102
143
|
try {
|
|
103
144
|
const result = await api("GET", `blog/posts/${params.slug}`);
|
|
@@ -110,24 +151,35 @@ export function registerBlogTools(server) {
|
|
|
110
151
|
// Update blog post
|
|
111
152
|
server.registerTool("neuron_update_blog_post", {
|
|
112
153
|
title: "Update Blog Post",
|
|
113
|
-
description: "Update an existing blog post",
|
|
154
|
+
description: "Update an existing blog post's content, metadata, status, or SEO fields. Only provided fields are changed.",
|
|
114
155
|
inputSchema: z.object({
|
|
115
|
-
id: z.string().describe("
|
|
116
|
-
title: z.string().optional().describe("
|
|
117
|
-
content: z.string().optional().describe("
|
|
118
|
-
|
|
119
|
-
|
|
156
|
+
id: z.string().describe("Unique identifier (UUID) of the blog post to update"),
|
|
157
|
+
title: z.string().optional().describe("New title for the blog post"),
|
|
158
|
+
content: z.string().optional().describe("New markdown body (GFM + inline raw HTML). Supports , <video>, <iframe> embeds, <details>/<summary>, <mark>, <kbd>."),
|
|
159
|
+
blocks: BLOCKS_SCHEMA.nullable().optional().describe(`${BLOCKS_DESCRIPTION}\n\nPass null to clear blocks and revert to the markdown \`content\`. Omit to leave existing blocks unchanged.`),
|
|
160
|
+
excerpt: z.string().optional().describe("New short summary or preview text"),
|
|
161
|
+
tags: z
|
|
162
|
+
.array(z.string())
|
|
163
|
+
.optional()
|
|
164
|
+
.describe("Replace the post's tags with this list of tag names (created if missing). Empty array clears all tags; omit to leave tags unchanged."),
|
|
165
|
+
coverImageUrl: z.string().optional().describe("New URL for the cover image"),
|
|
120
166
|
status: z
|
|
121
167
|
.enum(["draft", "published", "hidden"])
|
|
122
168
|
.optional()
|
|
123
|
-
.describe("
|
|
124
|
-
seoTitle: z.string().optional().describe("SEO title"),
|
|
125
|
-
seoDescription: z.string().optional().describe("
|
|
169
|
+
.describe("New publication status for the post"),
|
|
170
|
+
seoTitle: z.string().optional().describe("New custom SEO title override"),
|
|
171
|
+
seoDescription: z.string().optional().describe("New meta description for search engines"),
|
|
126
172
|
seoKeywords: z
|
|
127
173
|
.array(z.string())
|
|
128
174
|
.optional()
|
|
129
|
-
.describe("SEO keywords"),
|
|
175
|
+
.describe("New list of SEO keywords"),
|
|
130
176
|
}),
|
|
177
|
+
annotations: {
|
|
178
|
+
readOnlyHint: false,
|
|
179
|
+
destructiveHint: false,
|
|
180
|
+
idempotentHint: true,
|
|
181
|
+
openWorldHint: false,
|
|
182
|
+
},
|
|
131
183
|
}, async (params) => {
|
|
132
184
|
try {
|
|
133
185
|
const { id, ...body } = params;
|
|
@@ -141,10 +193,16 @@ export function registerBlogTools(server) {
|
|
|
141
193
|
// Delete blog post
|
|
142
194
|
server.registerTool("neuron_delete_blog_post", {
|
|
143
195
|
title: "Delete Blog Post",
|
|
144
|
-
description: "
|
|
196
|
+
description: "Permanently delete a blog post by its ID. This action cannot be undone.",
|
|
145
197
|
inputSchema: z.object({
|
|
146
|
-
id: z.string().describe("
|
|
198
|
+
id: z.string().describe("Unique identifier (UUID) of the blog post to delete"),
|
|
147
199
|
}),
|
|
200
|
+
annotations: {
|
|
201
|
+
readOnlyHint: false,
|
|
202
|
+
destructiveHint: true,
|
|
203
|
+
idempotentHint: true,
|
|
204
|
+
openWorldHint: false,
|
|
205
|
+
},
|
|
148
206
|
}, async (params) => {
|
|
149
207
|
try {
|
|
150
208
|
await api("DELETE", `blog/posts/${params.id}`);
|
|
@@ -157,10 +215,16 @@ export function registerBlogTools(server) {
|
|
|
157
215
|
// Publish post
|
|
158
216
|
server.registerTool("neuron_publish_blog_post", {
|
|
159
217
|
title: "Publish Blog Post",
|
|
160
|
-
description: "Publish a draft
|
|
218
|
+
description: "Publish a blog post, making it publicly visible. The post must be in 'draft' status.",
|
|
161
219
|
inputSchema: z.object({
|
|
162
|
-
id: z.string().describe("
|
|
220
|
+
id: z.string().describe("Unique identifier (UUID) of the blog post to publish"),
|
|
163
221
|
}),
|
|
222
|
+
annotations: {
|
|
223
|
+
readOnlyHint: false,
|
|
224
|
+
destructiveHint: false,
|
|
225
|
+
idempotentHint: false,
|
|
226
|
+
openWorldHint: false,
|
|
227
|
+
},
|
|
164
228
|
}, async (params) => {
|
|
165
229
|
try {
|
|
166
230
|
const result = await api("POST", `blog/posts/${params.id}/publish`);
|
package/dist/tools/blog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog.js","sourceRoot":"","sources":["../../src/tools/blog.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,iBAAiB,CAAC,MAAiB;IACjD,mBAAmB;IACnB,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"blog.js","sourceRoot":"","sources":["../../src/tools/blog.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,17 @@ export function registerBotApiKeyTools(server) {
|
|
|
4
4
|
// Create API Key
|
|
5
5
|
server.registerTool("neuron_create_api_key", {
|
|
6
6
|
title: "Create API Key",
|
|
7
|
-
description: "
|
|
8
|
-
annotations: {
|
|
7
|
+
description: "Create a new API key for programmatic access to a specific bot. Store the key securely as it cannot be retrieved later.",
|
|
8
|
+
annotations: {
|
|
9
|
+
readOnlyHint: false,
|
|
10
|
+
destructiveHint: false,
|
|
11
|
+
idempotentHint: false,
|
|
12
|
+
openWorldHint: false,
|
|
13
|
+
},
|
|
9
14
|
inputSchema: z.object({
|
|
10
|
-
botId: z.string().describe("
|
|
11
|
-
name: z.string().describe("
|
|
12
|
-
expiresAt: z.string().optional().describe("
|
|
15
|
+
botId: z.string().describe("Unique identifier (UUID) of the bot to create the API key for"),
|
|
16
|
+
name: z.string().describe("Descriptive name for the API key to identify its purpose (e.g., 'Production CRM Integration')"),
|
|
17
|
+
expiresAt: z.string().optional().describe("ISO 8601 date-time when the key should expire (e.g., '2026-12-31T23:59:59Z'). Key never expires if omitted."),
|
|
13
18
|
}),
|
|
14
19
|
}, async (params) => {
|
|
15
20
|
try {
|
|
@@ -24,10 +29,15 @@ export function registerBotApiKeyTools(server) {
|
|
|
24
29
|
// List API Keys
|
|
25
30
|
server.registerTool("neuron_list_api_keys", {
|
|
26
31
|
title: "List API Keys",
|
|
27
|
-
description: "Retrieve all API keys associated with a specific bot including their names, creation dates, expiration
|
|
28
|
-
annotations: {
|
|
32
|
+
description: "Retrieve all API keys associated with a specific bot, including their names, creation dates, expiration status, and revocation status.",
|
|
33
|
+
annotations: {
|
|
34
|
+
readOnlyHint: true,
|
|
35
|
+
destructiveHint: false,
|
|
36
|
+
idempotentHint: true,
|
|
37
|
+
openWorldHint: false,
|
|
38
|
+
},
|
|
29
39
|
inputSchema: z.object({
|
|
30
|
-
botId: z.string().describe("
|
|
40
|
+
botId: z.string().describe("Unique identifier (UUID) of the bot whose API keys to retrieve"),
|
|
31
41
|
}),
|
|
32
42
|
}, async (params) => {
|
|
33
43
|
try {
|
|
@@ -41,11 +51,16 @@ export function registerBotApiKeyTools(server) {
|
|
|
41
51
|
// Revoke API Key
|
|
42
52
|
server.registerTool("neuron_revoke_api_key", {
|
|
43
53
|
title: "Revoke API Key",
|
|
44
|
-
description: "
|
|
45
|
-
annotations: {
|
|
54
|
+
description: "Permanently revoke an API key to immediately invalidate it and prevent further programmatic access. This action cannot be undone.",
|
|
55
|
+
annotations: {
|
|
56
|
+
readOnlyHint: false,
|
|
57
|
+
destructiveHint: true,
|
|
58
|
+
idempotentHint: true,
|
|
59
|
+
openWorldHint: false,
|
|
60
|
+
},
|
|
46
61
|
inputSchema: z.object({
|
|
47
|
-
botId: z.string().describe("
|
|
48
|
-
keyId: z.string().describe("
|
|
62
|
+
botId: z.string().describe("Unique identifier (UUID) of the bot that owns the API key"),
|
|
63
|
+
keyId: z.string().describe("Unique identifier (UUID) of the API key to revoke"),
|
|
49
64
|
}),
|
|
50
65
|
}, async (params) => {
|
|
51
66
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot-api-keys.js","sourceRoot":"","sources":["../../src/tools/bot-api-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,iBAAiB;IACjB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"bot-api-keys.js","sourceRoot":"","sources":["../../src/tools/bot-api-keys.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/bot-api.js
CHANGED
|
@@ -4,13 +4,18 @@ export function registerBotApiTools(server) {
|
|
|
4
4
|
// Bot API Chat
|
|
5
5
|
server.registerTool("neuron_bot_api_chat", {
|
|
6
6
|
title: "Bot API Chat",
|
|
7
|
-
description: "Send a
|
|
8
|
-
annotations: {
|
|
7
|
+
description: "Send a message to a bot via the API and receive a streaming or complete AI-generated response. Requires a valid API key with 'nrn_' prefix.",
|
|
8
|
+
annotations: {
|
|
9
|
+
readOnlyHint: false,
|
|
10
|
+
destructiveHint: false,
|
|
11
|
+
idempotentHint: false,
|
|
12
|
+
openWorldHint: false,
|
|
13
|
+
},
|
|
9
14
|
inputSchema: z.object({
|
|
10
|
-
apiKey: z.string().describe("
|
|
15
|
+
apiKey: z.string().describe("Bot API key with 'nrn_' prefix for authentication"),
|
|
11
16
|
message: z.string().describe("The message text to send to the bot"),
|
|
12
|
-
contactPhone: z.string().describe("
|
|
13
|
-
contactName: z.string().optional().describe("
|
|
17
|
+
contactPhone: z.string().describe("Phone number of the contact sending the message (E.164 format, e.g., '+2348012345678')"),
|
|
18
|
+
contactName: z.string().optional().describe("Display name of the contact for conversation context"),
|
|
14
19
|
}),
|
|
15
20
|
}, async (params) => {
|
|
16
21
|
try {
|
|
@@ -26,14 +31,20 @@ export function registerBotApiTools(server) {
|
|
|
26
31
|
server.registerTool("neuron_bot_api_send", {
|
|
27
32
|
title: "Bot API Send",
|
|
28
33
|
description: "Send an outbound message through the bot API to a specified phone number. Supports text and media messages. Requires a valid API key.",
|
|
29
|
-
annotations: {
|
|
34
|
+
annotations: {
|
|
35
|
+
readOnlyHint: false,
|
|
36
|
+
destructiveHint: false,
|
|
37
|
+
idempotentHint: false,
|
|
38
|
+
openWorldHint: false,
|
|
39
|
+
},
|
|
30
40
|
inputSchema: z.object({
|
|
31
|
-
apiKey: z.string().describe("
|
|
32
|
-
to: z.string().describe("
|
|
33
|
-
message: z.string().describe("The message text to send"),
|
|
34
|
-
messageType: z.string().optional().describe("
|
|
35
|
-
mediaUrl: z.string().optional().describe("
|
|
36
|
-
channelId: z.string().optional().describe("
|
|
41
|
+
apiKey: z.string().describe("Bot API key with 'nrn_' prefix for authentication"),
|
|
42
|
+
to: z.string().describe("Recipient's phone number (E.164 format, e.g., '+2348012345678')"),
|
|
43
|
+
message: z.string().describe("The message text to send to the recipient"),
|
|
44
|
+
messageType: z.string().optional().describe("Type of message to send: 'text', 'image', 'video', 'audio', or 'document' (default: 'text')"),
|
|
45
|
+
mediaUrl: z.string().optional().describe("Public URL of the media file to attach (required for non-text message types)"),
|
|
46
|
+
channelId: z.string().optional().describe("Unique identifier (UUID) of a specific WhatsApp channel to send from. Uses the bot's primary channel if omitted."),
|
|
47
|
+
sendAt: z.string().optional().describe("ISO 8601 date-time for scheduled delivery (e.g., '2025-12-31T10:00:00Z'). Message sends immediately if omitted."),
|
|
37
48
|
}),
|
|
38
49
|
}, async (params) => {
|
|
39
50
|
try {
|
|
@@ -48,13 +59,18 @@ export function registerBotApiTools(server) {
|
|
|
48
59
|
// Bot API List Conversations
|
|
49
60
|
server.registerTool("neuron_bot_api_list_conversations", {
|
|
50
61
|
title: "Bot API List Conversations",
|
|
51
|
-
description: "Retrieve a list of conversations managed by the bot. Supports filtering by status
|
|
52
|
-
annotations: {
|
|
62
|
+
description: "Retrieve a paginated list of conversations managed by the bot. Supports filtering by conversation status. Requires a valid API key.",
|
|
63
|
+
annotations: {
|
|
64
|
+
readOnlyHint: true,
|
|
65
|
+
destructiveHint: false,
|
|
66
|
+
idempotentHint: true,
|
|
67
|
+
openWorldHint: false,
|
|
68
|
+
},
|
|
53
69
|
inputSchema: z.object({
|
|
54
|
-
apiKey: z.string().describe("
|
|
55
|
-
status: z.string().optional().describe("
|
|
56
|
-
page: z.number().positive().optional().describe("
|
|
57
|
-
limit: z.number().positive().optional().describe("
|
|
70
|
+
apiKey: z.string().describe("Bot API key with 'nrn_' prefix for authentication"),
|
|
71
|
+
status: z.string().optional().describe("Filter by conversation status: 'active', 'closed', or 'pending'"),
|
|
72
|
+
page: z.number().positive().optional().describe("Page number for pagination (default: 1)"),
|
|
73
|
+
limit: z.number().positive().optional().describe("Number of conversations per page (default: 20)"),
|
|
58
74
|
}),
|
|
59
75
|
}, async (params) => {
|
|
60
76
|
try {
|
|
@@ -76,13 +92,18 @@ export function registerBotApiTools(server) {
|
|
|
76
92
|
// Bot API Get Messages
|
|
77
93
|
server.registerTool("neuron_bot_api_get_messages", {
|
|
78
94
|
title: "Bot API Get Messages",
|
|
79
|
-
description: "Retrieve message history for a specific conversation with pagination
|
|
80
|
-
annotations: {
|
|
95
|
+
description: "Retrieve message history for a specific conversation with cursor-based pagination. Requires a valid API key.",
|
|
96
|
+
annotations: {
|
|
97
|
+
readOnlyHint: true,
|
|
98
|
+
destructiveHint: false,
|
|
99
|
+
idempotentHint: true,
|
|
100
|
+
openWorldHint: false,
|
|
101
|
+
},
|
|
81
102
|
inputSchema: z.object({
|
|
82
|
-
apiKey: z.string().describe("
|
|
83
|
-
conversationId: z.string().describe("
|
|
84
|
-
before: z.string().optional().describe("
|
|
85
|
-
limit: z.number().positive().optional().describe("
|
|
103
|
+
apiKey: z.string().describe("Bot API key with 'nrn_' prefix for authentication"),
|
|
104
|
+
conversationId: z.string().describe("Unique identifier (UUID) of the conversation to retrieve messages from"),
|
|
105
|
+
before: z.string().optional().describe("Cursor for pagination — retrieve messages created before this message ID or ISO 8601 timestamp"),
|
|
106
|
+
limit: z.number().positive().optional().describe("Maximum number of messages to return (default: 50)"),
|
|
86
107
|
}),
|
|
87
108
|
}, async (params) => {
|
|
88
109
|
try {
|
|
@@ -102,10 +123,15 @@ export function registerBotApiTools(server) {
|
|
|
102
123
|
// Bot API Get Bot
|
|
103
124
|
server.registerTool("neuron_bot_api_get_bot", {
|
|
104
125
|
title: "Bot API Get Bot",
|
|
105
|
-
description: "Retrieve information about the bot associated with the provided API key
|
|
106
|
-
annotations: {
|
|
126
|
+
description: "Retrieve configuration and status information about the bot associated with the provided API key.",
|
|
127
|
+
annotations: {
|
|
128
|
+
readOnlyHint: true,
|
|
129
|
+
destructiveHint: false,
|
|
130
|
+
idempotentHint: true,
|
|
131
|
+
openWorldHint: false,
|
|
132
|
+
},
|
|
107
133
|
inputSchema: z.object({
|
|
108
|
-
apiKey: z.string().describe("
|
|
134
|
+
apiKey: z.string().describe("Bot API key with 'nrn_' prefix for authentication"),
|
|
109
135
|
}),
|
|
110
136
|
}, async (params) => {
|
|
111
137
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot-api.js","sourceRoot":"","sources":["../../src/tools/bot-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,eAAe;IACf,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"bot-api.js","sourceRoot":"","sources":["../../src/tools/bot-api.ts"],"names":[],"mappings":"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"}
|