notifyme-csm-mcp 1.0.6 → 1.0.8
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/dist/index.js +85 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -120,7 +120,11 @@ const TOOLS = [
|
|
|
120
120
|
leadSource: { type: "string", description: "How we found them, e.g. \"WS Vancouver 2026\"" },
|
|
121
121
|
locationCity: { type: "string", description: "City" },
|
|
122
122
|
locationCountry: { type: "string", description: "Country" },
|
|
123
|
-
linkedInCompanyUrl: { type: "string", description: "LinkedIn
|
|
123
|
+
linkedInCompanyUrl: { type: "string", description: "LinkedIn COMPANY page URL" },
|
|
124
|
+
contactTitle: { type: "string", description: "Primary contact's job title, e.g. \"VP, E-Commerce\"" },
|
|
125
|
+
contactLinkedInUrl: { type: "string", description: "Primary contact's PERSONAL LinkedIn profile URL (distinct from the company page)" },
|
|
126
|
+
contactSource: { type: "string", description: "Where/how the contact was found, e.g. \"LinkedIn search 2026-06-10\"" },
|
|
127
|
+
contactVerified: { type: "boolean", description: "Whether the title/profile match was confirmed (false = unverified)" },
|
|
124
128
|
},
|
|
125
129
|
required: ["name", "type"],
|
|
126
130
|
},
|
|
@@ -155,7 +159,7 @@ const TOOLS = [
|
|
|
155
159
|
},
|
|
156
160
|
{
|
|
157
161
|
name: "update_company",
|
|
158
|
-
description: "Update
|
|
162
|
+
description: "Update any company field — identity (name, domain, website, description), pipeline (priority, status, tags, leadSource), location, LinkedIn company page, and the primary contact incl. person-level enrichment (name, email, phone, title, personal LinkedIn URL, source, verified). All fields optional — only pass what you want to change.",
|
|
159
163
|
inputSchema: {
|
|
160
164
|
type: "object",
|
|
161
165
|
properties: {
|
|
@@ -164,6 +168,21 @@ const TOOLS = [
|
|
|
164
168
|
status: { type: "string", enum: ["active", "inactive", "churned", "prospective", "archived"], description: "Lifecycle status (replaces the older `state` arg)." },
|
|
165
169
|
state: { type: "string", description: "[Deprecated] alias for `status` — kept for back-compat. Prefer `status`." },
|
|
166
170
|
tags: { type: "array", items: { type: "string" }, description: "Tags array (replaces existing)" },
|
|
171
|
+
name: { type: "string", description: "Company name" },
|
|
172
|
+
domain: { type: "string", description: "Primary domain, e.g. acme.com" },
|
|
173
|
+
website: { type: "string", description: "Full website URL" },
|
|
174
|
+
description: { type: "string", description: "Short description of the company" },
|
|
175
|
+
leadSource: { type: "string", description: "How we found them, e.g. \"WS Vancouver 2026\"" },
|
|
176
|
+
locationCity: { type: "string", description: "City" },
|
|
177
|
+
locationCountry: { type: "string", description: "Country" },
|
|
178
|
+
linkedInCompanyUrl: { type: "string", description: "LinkedIn COMPANY page URL" },
|
|
179
|
+
contactName: { type: "string", description: "Primary contact full name" },
|
|
180
|
+
contactEmail: { type: "string", description: "Primary contact email" },
|
|
181
|
+
contactPhone: { type: "string", description: "Primary contact phone" },
|
|
182
|
+
contactTitle: { type: "string", description: "Primary contact's job title, e.g. \"VP, E-Commerce\"" },
|
|
183
|
+
contactLinkedInUrl: { type: "string", description: "Primary contact's PERSONAL LinkedIn profile URL (distinct from the company page)" },
|
|
184
|
+
contactSource: { type: "string", description: "Where/how the contact was found, e.g. \"LinkedIn search 2026-06-10\"" },
|
|
185
|
+
contactVerified: { type: "boolean", description: "Whether the title/profile match was confirmed (false = unverified)" },
|
|
167
186
|
},
|
|
168
187
|
required: ["id"],
|
|
169
188
|
},
|
|
@@ -388,6 +407,47 @@ const TOOLS = [
|
|
|
388
407
|
required: ["domain"],
|
|
389
408
|
},
|
|
390
409
|
},
|
|
410
|
+
{
|
|
411
|
+
name: "get_funnel_entities",
|
|
412
|
+
description: "List the actual companies behind a Reports funnel stage count — e.g. which agencies were 'Approached' in the last 7 days (the number you see on Reports → Funnel View). 'Approached' = received an email, LinkedIn outreach, Gmail thread, or note in the window. Returns each company's name, id, and type, and the total count (which matches the funnel).",
|
|
413
|
+
inputSchema: {
|
|
414
|
+
type: "object",
|
|
415
|
+
properties: {
|
|
416
|
+
entityType: {
|
|
417
|
+
type: "string",
|
|
418
|
+
enum: ["agency", "merchant", "both"],
|
|
419
|
+
description: "Which entities to include (default: agency).",
|
|
420
|
+
},
|
|
421
|
+
timeframe: {
|
|
422
|
+
type: "string",
|
|
423
|
+
enum: ["last7days", "last30days", "last90days", "mtd", "qtd", "ytd"],
|
|
424
|
+
description: "Reporting window (default: last7days).",
|
|
425
|
+
},
|
|
426
|
+
stage: {
|
|
427
|
+
type: "string",
|
|
428
|
+
description: "Funnel stage / pipeline column name (default: 'approached'). e.g. 'approached', 'meeting scheduled', 'meeting attended', 'qualified', 'won'.",
|
|
429
|
+
},
|
|
430
|
+
},
|
|
431
|
+
},
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
name: "link_merchant_to_agency",
|
|
435
|
+
description: "Link a merchant to an agency (create the agency→merchant 'manages' pair) so the merchant rolls up under that agency in Agency Analytics. Look up both ids first with search_companies / list_companies. Idempotent; a merchant's existing managing-agency link is replaced. An agency only appears in analytics once it manages at least one merchant.",
|
|
436
|
+
inputSchema: {
|
|
437
|
+
type: "object",
|
|
438
|
+
properties: {
|
|
439
|
+
agencyCompanyId: {
|
|
440
|
+
type: "number",
|
|
441
|
+
description: "companies.id of the agency (its type must be 'agency').",
|
|
442
|
+
},
|
|
443
|
+
merchantCompanyId: {
|
|
444
|
+
type: "number",
|
|
445
|
+
description: "companies.id of the merchant (its type must be 'merchant').",
|
|
446
|
+
},
|
|
447
|
+
},
|
|
448
|
+
required: ["agencyCompanyId", "merchantCompanyId"],
|
|
449
|
+
},
|
|
450
|
+
},
|
|
391
451
|
// ── Kanban ────────────────────────────────────────────────────────────────
|
|
392
452
|
{
|
|
393
453
|
name: "list_kanban_columns",
|
|
@@ -468,8 +528,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
468
528
|
break;
|
|
469
529
|
}
|
|
470
530
|
case "update_company": {
|
|
471
|
-
//
|
|
472
|
-
//
|
|
531
|
+
// Full pass-through: every field create_company accepts (plus the
|
|
532
|
+
// person-level contact enrichment fields) is updatable. `status` is
|
|
533
|
+
// canonical, `state` a back-compat alias — server resolves precedence.
|
|
473
534
|
const { id, ...updates } = args;
|
|
474
535
|
data = await api("PATCH", `/companies/${id}`, updates);
|
|
475
536
|
break;
|
|
@@ -579,6 +640,26 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
579
640
|
data = await api("GET", `/storeleads?${new URLSearchParams({ domain })}`);
|
|
580
641
|
break;
|
|
581
642
|
}
|
|
643
|
+
case "get_funnel_entities": {
|
|
644
|
+
const a = args;
|
|
645
|
+
const qs = new URLSearchParams();
|
|
646
|
+
if (a.entityType)
|
|
647
|
+
qs.set("entityType", String(a.entityType));
|
|
648
|
+
if (a.timeframe)
|
|
649
|
+
qs.set("timeframe", String(a.timeframe));
|
|
650
|
+
if (a.stage)
|
|
651
|
+
qs.set("stage", String(a.stage));
|
|
652
|
+
data = await api("GET", `/funnel-entities?${qs.toString()}`);
|
|
653
|
+
break;
|
|
654
|
+
}
|
|
655
|
+
case "link_merchant_to_agency": {
|
|
656
|
+
const a = args;
|
|
657
|
+
data = await api("POST", "/agencies/link-merchant", {
|
|
658
|
+
agencyCompanyId: a.agencyCompanyId,
|
|
659
|
+
merchantCompanyId: a.merchantCompanyId,
|
|
660
|
+
});
|
|
661
|
+
break;
|
|
662
|
+
}
|
|
582
663
|
// ── Kanban ─────────────────────────────────────────────────────────────
|
|
583
664
|
case "list_kanban_columns": {
|
|
584
665
|
data = await api("GET", "/kanban/columns");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "notifyme-csm-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "NotifyMe CSM — MCP server for LLM integrations (Claude Code, Cursor, etc.)",
|
|
5
5
|
"_versionPolicy": "The version field above is a placeholder and is NEVER updated in git. The real published version lives only on npm — run `npm view notifyme-csm-mcp version` to check. To publish a new release, use the GitHub workflow `Publish MCP` (Actions tab → Publish notifyme-csm-mcp → Run workflow). This prevents recurring merge conflicts across feature/dev/main branches that used to plague every PR.",
|
|
6
6
|
"type": "module",
|