notifyme-csm-mcp 1.0.8 → 1.0.10

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 (2) hide show
  1. package/dist/index.js +54 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -420,8 +420,16 @@ const TOOLS = [
420
420
  },
421
421
  timeframe: {
422
422
  type: "string",
423
- enum: ["last7days", "last30days", "last90days", "mtd", "qtd", "ytd"],
424
- description: "Reporting window (default: last7days).",
423
+ enum: ["last7days", "last30days", "last90days", "mtd", "qtd", "ytd", "custom"],
424
+ description: "Reporting window (default: last7days). Use 'custom' with startDate/endDate for any range.",
425
+ },
426
+ startDate: {
427
+ type: "string",
428
+ description: "YYYY-MM-DD. Passing dates implies timeframe=custom. Interpreted in the server's timezone (UTC on prod).",
429
+ },
430
+ endDate: {
431
+ type: "string",
432
+ description: "YYYY-MM-DD (inclusive, end of day). Passing dates implies timeframe=custom. Interpreted in the server's timezone (UTC on prod).",
425
433
  },
426
434
  stage: {
427
435
  type: "string",
@@ -448,6 +456,33 @@ const TOOLS = [
448
456
  required: ["agencyCompanyId", "merchantCompanyId"],
449
457
  },
450
458
  },
459
+ {
460
+ name: "log_outreach",
461
+ description: "Log an outbound touch to a company — the SOURCE OF TRUTH for outreach with no dedicated integration (phone calls, WhatsApp, in-person). The 'Approached' reporting stage counts these alongside CSM emails, LinkedIn outreach logs, and Gmail threads. Notes do NOT count as outreach — log real touches here instead. Use search_companies first to get the companyId.",
462
+ inputSchema: {
463
+ type: "object",
464
+ properties: {
465
+ companyId: { type: "number", description: "companies.id of the company that was contacted" },
466
+ channel: { type: "string", enum: ["call", "whatsapp", "linkedin", "email", "other"], description: "How the touch happened. Prefer the dedicated flows for linkedin/email when possible." },
467
+ recipient: { type: "string", description: "Who was contacted (name or handle/number)" },
468
+ actionDate: { type: "string", description: "When it happened — YYYY-MM-DD or ISO datetime (default: now)" },
469
+ note: { type: "string", description: "What was said / outcome" },
470
+ },
471
+ required: ["companyId", "channel"],
472
+ },
473
+ },
474
+ {
475
+ name: "list_outreach",
476
+ description: "List a company's logged outreach touches (calls, WhatsApp, etc.), most recent first.",
477
+ inputSchema: {
478
+ type: "object",
479
+ properties: {
480
+ companyId: { type: "number", description: "Company id" },
481
+ limit: { type: "number", description: "Max results (default 20, max 100)" },
482
+ },
483
+ required: ["companyId"],
484
+ },
485
+ },
451
486
  // ── Kanban ────────────────────────────────────────────────────────────────
452
487
  {
453
488
  name: "list_kanban_columns",
@@ -647,6 +682,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
647
682
  qs.set("entityType", String(a.entityType));
648
683
  if (a.timeframe)
649
684
  qs.set("timeframe", String(a.timeframe));
685
+ if (a.startDate)
686
+ qs.set("startDate", String(a.startDate));
687
+ if (a.endDate)
688
+ qs.set("endDate", String(a.endDate));
650
689
  if (a.stage)
651
690
  qs.set("stage", String(a.stage));
652
691
  data = await api("GET", `/funnel-entities?${qs.toString()}`);
@@ -660,6 +699,19 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
660
699
  });
661
700
  break;
662
701
  }
702
+ case "log_outreach": {
703
+ const a = args;
704
+ data = await api("POST", "/outreach", a);
705
+ break;
706
+ }
707
+ case "list_outreach": {
708
+ const { companyId, limit } = args;
709
+ const qs = new URLSearchParams();
710
+ if (limit != null)
711
+ qs.set("limit", String(limit));
712
+ data = await api("GET", `/companies/${companyId}/outreach?${qs.toString()}`);
713
+ break;
714
+ }
663
715
  // ── Kanban ─────────────────────────────────────────────────────────────
664
716
  case "list_kanban_columns": {
665
717
  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.8",
3
+ "version": "1.0.10",
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",