@velaro/mcp-server 0.6.82 → 0.6.83
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/package.json +1 -1
- package/server.js +68 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@velaro/mcp-server",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.83",
|
|
4
4
|
"description": "Velaro MCP server — connect Claude and other AI agents directly to your Velaro account: KB, workflows, bots, conversations, contacts, routing, and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/server.js
CHANGED
|
@@ -492,6 +492,38 @@ const TOOLS = [
|
|
|
492
492
|
description: 'List all KB topics. Call this first to find the topicId needed for creating articles.',
|
|
493
493
|
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
494
494
|
},
|
|
495
|
+
{
|
|
496
|
+
name: 'kb_list_categories',
|
|
497
|
+
description: 'List KB categories. Topics hang under a category; use with kb_create_topic.',
|
|
498
|
+
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
name: 'kb_create_category',
|
|
502
|
+
description: 'Create a KB category. Seed the topic tree (category -> topic) BEFORE creating articles when the right topic does not exist.',
|
|
503
|
+
inputSchema: {
|
|
504
|
+
type: 'object',
|
|
505
|
+
properties: {
|
|
506
|
+
name: { type: 'string', description: 'Category name' },
|
|
507
|
+
priority: { type: 'number', description: 'Display priority (lower sorts first)' },
|
|
508
|
+
icon: { type: 'string', description: 'Optional icon name' },
|
|
509
|
+
},
|
|
510
|
+
required: ['name'],
|
|
511
|
+
},
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
name: 'kb_create_topic',
|
|
515
|
+
description: 'Create a KB topic under a category and return its id for kb_create_article.',
|
|
516
|
+
inputSchema: {
|
|
517
|
+
type: 'object',
|
|
518
|
+
properties: {
|
|
519
|
+
name: { type: 'string', description: 'Topic name' },
|
|
520
|
+
slug: { type: 'string', description: 'URL slug' },
|
|
521
|
+
categoryId: { type: 'string', description: 'Category id from kb_list_categories' },
|
|
522
|
+
priority: { type: 'number', description: 'Display priority (lower sorts first)' },
|
|
523
|
+
},
|
|
524
|
+
required: ['name', 'slug'],
|
|
525
|
+
},
|
|
526
|
+
},
|
|
495
527
|
{
|
|
496
528
|
name: 'kb_search_articles',
|
|
497
529
|
description: 'Search KB articles. Returns id, title, slug, topicName, hitCount, isPublished, and public URL.',
|
|
@@ -4354,6 +4386,16 @@ For multiSelect dynamic options: the variable named in dynamicOptionsVariable mu
|
|
|
4354
4386
|
description: 'Backfill SiteSubscription rows from active Subscription rows in the messaging DB. Skips sites that already have a live SiteSubscription. Run once to seed historical state before reconciliation. Superadmin only.',
|
|
4355
4387
|
inputSchema: { type: 'object', properties: {} },
|
|
4356
4388
|
},
|
|
4389
|
+
{
|
|
4390
|
+
name: 'entitlement_backfill_sap_tiers',
|
|
4391
|
+
description: 'Grant the four SAP add-on packages (Sales, Service, Finance, Supply Chain) to existing SAP sites after the package split. Dry run by default; pass apply=true to write. Superadmin only.',
|
|
4392
|
+
inputSchema: { type: 'object', properties: { apply: { type: 'boolean', description: 'true writes the grants; default is a dry run' } } },
|
|
4393
|
+
},
|
|
4394
|
+
{
|
|
4395
|
+
name: 'entitlement_backfill_legacy_write_tiers',
|
|
4396
|
+
description: 'Grant EnableServiceNowWrite / EnableAccelaWrite / EnableQuickBooksWrite to existing sites after the dead OR-gate sweep so write skills are not lost. Dry run by default; pass apply=true to write. Superadmin only.',
|
|
4397
|
+
inputSchema: { type: 'object', properties: { apply: { type: 'boolean', description: 'true writes the grants; default is a dry run' } } },
|
|
4398
|
+
},
|
|
4357
4399
|
{
|
|
4358
4400
|
name: 'entitlement_reconcile',
|
|
4359
4401
|
description: 'Diff Subscription.cs bool flags vs the entitlements API for a site. Returns deltaCount and the specific deltas. Zero deltas = site is ready for entitlements cutover. Superadmin only.',
|
|
@@ -5336,6 +5378,22 @@ async function handleTool(name, args) {
|
|
|
5336
5378
|
|| 'No topics found.';
|
|
5337
5379
|
}
|
|
5338
5380
|
|
|
5381
|
+
case 'kb_list_categories': {
|
|
5382
|
+
const data = await api('GET', '/api/kb/categories');
|
|
5383
|
+
const cats = data?.categories ?? [];
|
|
5384
|
+
return cats.map(c => `[${c.id}] ${c.name} (priority ${c.displayPriority})`).join('\n') || 'No categories found.';
|
|
5385
|
+
}
|
|
5386
|
+
|
|
5387
|
+
case 'kb_create_category': {
|
|
5388
|
+
const c = await api('POST', '/api/kb/categories', { name: args.name, displayPriority: args.priority ?? 0, icon: args.icon });
|
|
5389
|
+
return `Category created: [${c.id}] ${c.name}`;
|
|
5390
|
+
}
|
|
5391
|
+
|
|
5392
|
+
case 'kb_create_topic': {
|
|
5393
|
+
const t = await api('POST', '/api/kb/topics', { name: args.name, slug: args.slug, categoryId: args.categoryId, displayPriority: args.priority ?? 0 });
|
|
5394
|
+
return `Topic created: [${t.id}] ${t.name} (slug ${t.slug})`;
|
|
5395
|
+
}
|
|
5396
|
+
|
|
5339
5397
|
case 'kb_search_articles': {
|
|
5340
5398
|
const data = await api('POST', '/api/kb/articles/search', {
|
|
5341
5399
|
searchTerm: args.searchTerm,
|
|
@@ -9558,6 +9616,16 @@ async function handleTool(name, args) {
|
|
|
9558
9616
|
return `✅ Backfill complete: ${result.inserted} inserted, ${result.skipped} already existed, ${result.unknownPlan} skipped (unknown plan).`;
|
|
9559
9617
|
}
|
|
9560
9618
|
|
|
9619
|
+
case 'entitlement_backfill_sap_tiers': {
|
|
9620
|
+
const result = await api('POST', `/Entitlements/admin/backfill-sap-tiers?dryRun=${args.apply ? 'false' : 'true'}`);
|
|
9621
|
+
return `${args.apply ? 'APPLIED' : 'DRY RUN'}: ${JSON.stringify(result, null, 2)}`;
|
|
9622
|
+
}
|
|
9623
|
+
|
|
9624
|
+
case 'entitlement_backfill_legacy_write_tiers': {
|
|
9625
|
+
const result = await api('POST', `/Entitlements/admin/backfill-legacy-write-tiers?dryRun=${args.apply ? 'false' : 'true'}`);
|
|
9626
|
+
return `${args.apply ? 'APPLIED' : 'DRY RUN'}: ${JSON.stringify(result, null, 2)}`;
|
|
9627
|
+
}
|
|
9628
|
+
|
|
9561
9629
|
case 'entitlement_reconcile': {
|
|
9562
9630
|
if (!args.siteId) throw new Error('siteId is required');
|
|
9563
9631
|
const result = await api('GET', `/Entitlements/admin/reconcile/${args.siteId}`);
|