{"_id":"@cognizy/mcp","_rev":"4-6b5167648c6247ea415069a8714ea4bf","name":"@cognizy/mcp","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@cognizy/mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","cognizy","customer-service","ai","claude","anthropic"],"author":{"name":"Cognizy"},"license":"MIT","_id":"@cognizy/mcp@0.1.0","maintainers":[{"name":"wayter","email":"wayter.paulo.95@gmail.com"}],"homepage":"https://github.com/cognizy/cognizy-mcp#readme","bugs":{"url":"https://github.com/cognizy/cognizy-mcp/issues"},"bin":{"cognizy-mcp":"dist/bin/stdio.js"},"dist":{"shasum":"b1211feb4cdadbd16cf23b3653e0b28b28d4b5de","tarball":"https://registry.npmjs.org/@cognizy/mcp/-/mcp-0.1.0.tgz","fileCount":41,"integrity":"sha512-53jRPRfNmJaI6J2rsE3Kl+vOzjBbWYVhfS+eyb69cREUSBVUDTTC1YWJFkVE5yLtgf5ViEKTioWVz6K1QREFWg==","signatures":[{"sig":"MEUCIGZj+yaRPsVSfqok/Q2YFmw3uICalzFZyjhkDDCV8zNvAiEA0QJa1o8Z/0DkhGs6DaSNzY1S93mlem2BhfD+5yIbmKc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79297},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"gitHead":"f88f6590a1ef619427c0b7880b0059cf0340043d","scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"tsc","dev:http":"tsx watch src/bin/http.ts","dev:stdio":"tsx watch src/bin/stdio.ts","start:http":"node dist/bin/http.js","start:stdio":"node dist/bin/stdio.js","prepublishOnly":"npm run build && chmod +x dist/bin/stdio.js"},"_npmUser":{"name":"wayter","email":"wayter.paulo.95@gmail.com"},"repository":{"url":"git+https://github.com/cognizy/cognizy-mcp.git","type":"git"},"_npmVersion":"11.12.1","description":"MCP server for Cognizy — connect AI assistants (Claude, Cursor, ChatGPT) to your Cognizy workspace","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1779305226917_0.05772142885065046","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cognizy/mcp","version":"0.1.1","keywords":["mcp","model-context-protocol","cognizy","customer-service","ai","claude","anthropic"],"author":{"name":"Cognizy"},"license":"MIT","_id":"@cognizy/mcp@0.1.1","maintainers":[{"name":"wayter","email":"wayter.paulo.95@gmail.com"}],"homepage":"https://github.com/cognizy/cognizy-mcp#readme","bugs":{"url":"https://github.com/cognizy/cognizy-mcp/issues"},"bin":{"cognizy-mcp":"dist/bin/stdio.js"},"dist":{"shasum":"15a5538cbe0791783e2df74fddd70743f4bbd8fe","tarball":"https://registry.npmjs.org/@cognizy/mcp/-/mcp-0.1.1.tgz","fileCount":41,"integrity":"sha512-LgSg63+OnxRJaRx88+UCk39qcY3tt0ov9CaqtUh8ORJCYRw0ElsSX0F3UetbJ7d0vqiuvURcfY/04aA3ivGsDA==","signatures":[{"sig":"MEYCIQCFBecbf9BN0l3SckcqbVbU64vdlxigiNFLhwxD824kRAIhAKwjSz1LGwCcou+KRhVJ7GSqvq0iK8bqI1xZfWnCW3Ee","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83529},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"gitHead":"a004db17fac02907ec135b66a8351d1773287d51","scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"tsc","dev:http":"tsx watch src/bin/http.ts","dev:stdio":"tsx watch src/bin/stdio.ts","start:http":"node dist/bin/http.js","start:stdio":"node dist/bin/stdio.js","prepublishOnly":"npm run build && chmod +x dist/bin/stdio.js"},"_npmUser":{"name":"wayter","email":"wayter.paulo.95@gmail.com"},"repository":{"url":"git+https://github.com/cognizy/cognizy-mcp.git","type":"git"},"_npmVersion":"11.12.1","description":"MCP server for Cognizy — connect AI assistants (Claude, Cursor, ChatGPT) to your Cognizy workspace","directories":{},"_nodeVersion":"24.15.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.1_1779306365576_0.1525156407126993","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cognizy/mcp","version":"0.1.2","keywords":["mcp","model-context-protocol","cognizy","customer-service","ai","claude","anthropic"],"author":{"name":"Cognizy"},"license":"MIT","_id":"@cognizy/mcp@0.1.2","maintainers":[{"name":"wayter","email":"wayter.paulo.95@gmail.com"}],"homepage":"https://github.com/cognizy/cognizy-mcp#readme","bugs":{"url":"https://github.com/cognizy/cognizy-mcp/issues"},"bin":{"cognizy-mcp":"dist/bin/stdio.js"},"dist":{"shasum":"8c244ce5810ba9fce8c83db1941de038a8922a44","tarball":"https://registry.npmjs.org/@cognizy/mcp/-/mcp-0.1.2.tgz","fileCount":43,"integrity":"sha512-Ubhi1/e0YytRExEJNlf7OQa98d0G3pQTKbvflU9RFaj85UDTJ0eE/EiO4RVNUA5PqCWc31SCBJ4jbr/mNaIp5Q==","signatures":[{"sig":"MEQCIHsVEpt9X04E0BK8o7fTh6fxpwjygBR5W4fi9LdQvpBXAiAmR9FBn2iSgE99N/odlzTPr/AsHfRQWeVvxqcwCeml1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87967},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"gitHead":"3e73b31e9e1aa7c2748db4ab70649d93cebebe29","scripts":{"lint":"eslint src --ext .ts","test":"vitest run","build":"tsc","dev:http":"tsx watch src/bin/http.ts","dev:stdio":"tsx watch src/bin/stdio.ts","start:http":"node dist/bin/http.js","start:stdio":"node dist/bin/stdio.js","prepublishOnly":"npm run build && chmod +x dist/bin/stdio.js"},"_npmUser":{"name":"wayter","email":"wayter.paulo.95@gmail.com"},"repository":{"url":"git+https://github.com/cognizy/cognizy-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"MCP server for Cognizy — connect AI assistants (Claude, Cursor, ChatGPT) to your Cognizy workspace","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.2_1787660767696_0.21424047253239942","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cognizy/mcp","version":"0.1.3","description":"MCP server for Cognizy — connect AI assistants (Claude, Cursor, ChatGPT) to your Cognizy workspace","type":"module","bin":{"cognizy-mcp":"dist/bin/stdio.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","scripts":{"build":"tsc","dev:stdio":"tsx watch src/bin/stdio.ts","dev:http":"tsx watch src/bin/http.ts","start:stdio":"node dist/bin/stdio.js","start:http":"node dist/bin/http.js","lint":"eslint src --ext .ts","test":"vitest run","prepublishOnly":"npm run build && chmod +x dist/bin/stdio.js"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.4","zod":"^3.23.8"},"devDependencies":{"@types/node":"^22.10.2","tsx":"^4.19.2","typescript":"^5.7.2","vitest":"^2.1.8"},"engines":{"node":">=20"},"keywords":["mcp","model-context-protocol","cognizy","customer-service","ai","claude","anthropic"],"license":"MIT","author":{"name":"Cognizy"},"homepage":"https://github.com/cognizy/cognizy-mcp#readme","repository":{"type":"git","url":"git+https://github.com/cognizy/cognizy-mcp.git"},"bugs":{"url":"https://github.com/cognizy/cognizy-mcp/issues"},"publishConfig":{"access":"public"},"_id":"@cognizy/mcp@0.1.3","gitHead":"46070a58917ef4ef2a8a0acda1882b60a309c72d","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-DSipHTV9Ap+WSLrUhzBTl+hu55xVfqYD+e8u60dbnnaJ1wpAc0ESZkzbUuVD/8X44EzLktUn6IGOlIbCXSJ9cA==","shasum":"710311ca76ee8fed2fb7877fab8da23a9060df59","tarball":"https://registry.npmjs.org/@cognizy/mcp/-/mcp-0.1.3.tgz","fileCount":47,"unpackedSize":109799,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFAQaZSHbvjrTCuDEMwR/YebDVuDpKNBBrU55bNQi3mtAiBdyCUzVZcDBo9ZJcHPlz849SgDqwyzSOZgNgLOH8yewA=="}]},"_npmUser":{"name":"wayter","email":"wayter.paulo.95@gmail.com"},"directories":{},"maintainers":[{"name":"wayter","email":"wayter.paulo.95@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.3_1788266127160_0.12914568984030916"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-20T19:27:06.716Z","modified":"2026-09-01T12:35:27.605Z","0.1.0":"2026-05-20T19:27:07.057Z","0.1.1":"2026-05-20T19:46:05.741Z","0.1.2":"2026-08-25T12:26:07.850Z","0.1.3":"2026-09-01T12:35:27.365Z"},"bugs":{"url":"https://github.com/cognizy/cognizy-mcp/issues"},"author":{"name":"Cognizy"},"license":"MIT","homepage":"https://github.com/cognizy/cognizy-mcp#readme","keywords":["mcp","model-context-protocol","cognizy","customer-service","ai","claude","anthropic"],"repository":{"type":"git","url":"git+https://github.com/cognizy/cognizy-mcp.git"},"description":"MCP server for Cognizy — connect AI assistants (Claude, Cursor, ChatGPT) to your Cognizy workspace","maintainers":[{"name":"wayter","email":"wayter.paulo.95@gmail.com"}],"readme":"# @cognizy/mcp\n\n[![npm version](https://img.shields.io/npm/v/@cognizy/mcp.svg)](https://www.npmjs.com/package/@cognizy/mcp)\n[![npm downloads](https://img.shields.io/npm/dm/@cognizy/mcp.svg)](https://www.npmjs.com/package/@cognizy/mcp)\n[![license](https://img.shields.io/npm/l/@cognizy/mcp.svg)](./LICENSE)\n[![node](https://img.shields.io/node/v/@cognizy/mcp.svg)](https://nodejs.org)\n\n**Let AI assistants operate your Cognizy workspace.** Connect Claude Desktop, Cursor, ChatGPT, or any MCP client to read conversations, search your knowledge base, query analytics, manage tasks, and orchestrate scheduling/campaigns — with full audit logging and an approval flow for customer-facing actions.\n\n84 tools across 12 domains. Read-only by default. Customer-facing inbox writes require human approval before they execute; direct WhatsApp sends are queued immediately for delivery.\n\n---\n\n## Quick start\n\n### 1. Generate an API key in Cognizy\n\nIn the dashboard: **Settings → Developers → API Keys → Create**. Pick the scopes you need (see [Scopes](#scopes) below) and copy the `cgz_live_…` token.\n\n### 2. Add to your MCP client\n\n**Claude Desktop** — edit `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"cognizy\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cognizy/mcp\"],\n      \"env\": {\n        \"COGNIZY_API_KEY\": \"cgz_live_your_key_here\"\n      }\n    }\n  }\n}\n```\n\n**Cursor** — same shape in `~/.cursor/mcp.json` (or per-project `.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"cognizy\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cognizy/mcp\"],\n      \"env\": { \"COGNIZY_API_KEY\": \"cgz_live_...\" }\n    }\n  }\n}\n```\n\n**Claude Code (CLI)**:\n\n```bash\nclaude mcp add --scope user cognizy npx -- -y @cognizy/mcp \\\n  --env COGNIZY_API_KEY=cgz_live_...\n```\n\n### 3. Restart the client\n\nThe Cognizy tools show up in the tool picker. Try asking:\n\n> \"List my Cognizy agents.\"\n>\n> \"How many conversations did I close last week? Group by channel.\"\n>\n> \"Search my knowledge base for refund policy.\"\n\n---\n\n## Deployment modes\n\n### Self-hosted (stdio) — recommended for individuals\n\nThe config above runs the server on your machine via `npx`. Zero infrastructure, fastest to set up, your API key never leaves your laptop.\n\n### Hosted (HTTP) — no install required\n\nPoint your client at `https://mcp.cognizy.ai/mcp` directly:\n\n```json\n{\n  \"mcpServers\": {\n    \"cognizy\": {\n      \"url\": \"https://mcp.cognizy.ai/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer cgz_live_...\" }\n    }\n  }\n}\n```\n\nUse this when the client doesn't support stdio (web playgrounds, custom integrations) or when you want session continuity across machines.\n\n---\n\n## Available tools\n\n53 tools, grouped by domain. Each tool requires the matching scope on the API key.\n\n### Read-only (23)\n\n| Domain | Tools |\n|---|---|\n| **Agents** | `list_agents` |\n| **Conversations** | `search_conversations`, `get_conversation`, `list_messages` |\n| **Knowledge base** | `search_knowledge_base` (semantic, pgvector), `list_knowledge_bases`, `get_knowledge_base`, `list_documents`, `get_document` |\n| **Contacts** | `search_contacts`, `get_contact` |\n| **Analytics** | `get_analytics` |\n| **Tasks** | `list_task_boards`, `get_task_board`, `list_tasks`, `get_task` |\n| **Scheduling** | `list_booking_pages`, `list_appointments`, `get_appointment` |\n| **Campaigns** | `list_campaigns`, `get_campaign`, `get_campaign_analytics` |\n| **Lead-capture funnels** | `list_marketing_funnels`, `get_marketing_funnel`, `list_funnel_leads`, `get_funnel_lead_timeline`, `analyze_marketing_funnel`, `list_funnel_rules`, `get_stage_cadence` |\n| **Sales** | `list_sales_pipeline_stages`, `list_sales_deals`, `get_sales_deal`, `analyze_sales_pipeline` |\n| **WhatsApp** | `list_whatsapp_instances` |\n\n### Direct writes (22) — execute immediately, audited\n\nLow-risk, reversible. Don't reach the customer.\n\n| Domain | Tools |\n|---|---|\n| **Knowledge base** | `create_knowledge_base`, `add_document`, `bulk_add_documents` (up to 200), `update_document`, `delete_document` |\n| **Tasks** | `create_task`, `delete_task`, `update_task`, `move_task`, `assign_task`, `unassign_task`, `add_task_comment`, `add_task_label`, `remove_task_label`, `add_checklist_item`, `toggle_checklist_item`, `delete_checklist_item` |\n| **Contacts** | `add_tag_to_contact`, `remove_tag_from_contact` |\n| **Lead-capture funnels** | Create/configure funnels, stages, rules and cadences; create, move, update or delete funnel leads |\n| **Sales** | Create/configure sales stages; create, move, update or delete deals |\n| **Conversations** | `add_tag_to_conversation`, `remove_tag_from_conversation`, `assign_conversation` |\n\n### Direct WhatsApp write (1) — queued for delivery immediately\n\n| Tool | What it does |\n|---|---|\n| `send_whatsapp_message` | Queues a text message directly through the selected connected WhatsApp instance. Requires `whatsapp:send`; no dashboard approval and no inbox conversation. |\n\n### Approval-gated writes (7) — queued, OWNER/ADMIN approves\n\nCustomer-facing. Each call returns `202` with an `actionId` instead of executing. An organization admin reviews the action in the Cognizy dashboard before it fires.\n\n| Tool | What it does | TTL |\n|---|---|---|\n| `send_message_to_contact` | Send a WhatsApp/Email/Instagram/Messenger message | 4h |\n| `book_appointment` | Schedule a new appointment | 24h |\n| `cancel_appointment` | Cancel an existing appointment | 24h |\n| `reschedule_appointment` | Move an appointment to a new time | 24h |\n| `launch_campaign` | Launch a DRAFT campaign to its audience | 1h |\n| `get_pending_action_status` | Poll the status of a queued action | — |\n| `cancel_pending_action` | Drop a pending action you created | — |\n\nApproval notifications fan out to OWNER + ADMIN members of the org via the dashboard's notification bell, email with deep-link, and a header badge counter.\n\n---\n\n## Scopes\n\nScopes are enforced by the Cognizy API per request. Create your key with only what you need.\n\n| Scope | Unlocks |\n|---|---|\n| `agents:read` | `list_agents` |\n| `conversations:read` / `:write` | conversation read/write tools |\n| `messages:read` / `:write` | message read + `send_message_to_contact` |\n| `contacts:read` / `:write` | contact read + tagging |\n| `knowledge-base:read` / `:write` | KB read + create/update/delete documents |\n| `analytics:read` | `get_analytics` |\n| `tasks:read` / `:write` | task read + all task mutations |\n| `scheduling:read` / `:write` | scheduling read + book/cancel/reschedule |\n| `campaigns:read` / `:write` | campaign read + `launch_campaign` |\n| `marketing-funnels:read` / `:write` | lead-capture funnels, leads, rules, cadences and deterministic insights |\n| `sales:read` / `:write` | sales stages, deals and deterministic sales insights |\n| `webhooks:manage` | (used by REST API, not MCP today) |\n| `whatsapp:read` | `list_whatsapp_instances` |\n| `whatsapp:send` | `send_whatsapp_message` |\n\nA key with no scopes can authenticate but can't call any tool — this is intentional to keep the principle of least privilege easy to enforce.\n\n### Why the Send APIs aren't tools\n\nCognizy has two direct-send REST endpoints — `/v1/public/whatsapp/messages` and\n`/v1/public/email/messages` — that deliver to a customer immediately, with no\ninbox conversation and no review step. They exist for transactional traffic your\nown backend triggers: an order shipped, a password reset, an invoice.\n\nThey are deliberately absent from MCP. Everything here that reaches a customer\ngoes through the approval flow, and an agent holding a key with `email:send`\ncould push a thousand emails with nobody in the loop — precisely what\n`send_message_to_contact` queues an admin to prevent. A scope that bypasses\nreview does not belong on a surface an LLM drives.\n\nUse them from your backend with [`@cognizy/sdk`](https://www.npmjs.com/package/@cognizy/sdk):\n\n```ts\nawait cognizy.email.send({\n  to: 'maria@example.com',\n  templateId: 'tpl_123',\n  variables: { 'contact.firstName': 'Maria', 'order.id': '#1001' },\n  idempotencyKey: 'order-1001-shipped',\n});\n```\n\nIf an agent should be able to message a customer, give the key `messages:write`\nand let `send_message_to_contact` route it through approval.\n\n---\n\n## Example workflows\n\n### Knowledge base population from real conversations\n\n> \"Look at the last 100 closed conversations. Group them by recurring themes. For each theme, write a short FAQ article and save it to a new knowledge base called 'AI-generated FAQ'.\"\n\nThe agent chains:\n1. `search_conversations` (status=CLOSED, limit=100)\n2. `list_messages` per conversation\n3. (LLM analysis identifies themes)\n4. `create_knowledge_base`\n5. `bulk_add_documents` — all themes in one shot\n\nThe new content is searchable within seconds via `search_knowledge_base` and used by your in-app AI agent automatically.\n\n### Triage stuck tickets\n\n> \"Find tasks in the Support board that are 'In Progress' and haven't been updated in 3 days. For each, set priority to URGENT, due tomorrow 5pm, assign to Mary, add the 'sla-risk' label, and post a comment tagging Mary.\"\n\nChain:\n1. `list_tasks` (filter columnId + recent activity)\n2. `update_task` × N\n3. `assign_task` × N\n4. `add_task_label` × N\n5. `add_task_comment` × N\n\nAll audit-logged. Every step visible in the dashboard's API Activity panel.\n\n### Customer outreach with safety net\n\n> \"Customer Wayter just asked about refund. Pull his last 5 messages, search the KB for refund policy, draft a personalised reply on WhatsApp, and queue it for my approval.\"\n\nChain:\n1. `search_contacts` → find Wayter\n2. `list_messages` → context\n3. `search_knowledge_base` → policy\n4. `send_message_to_contact` → **returns 202**, action queued\n\nYou get an email + bell notification. Open the dashboard, review the drafted message, click **Approve**. The message reaches the customer's WhatsApp. The execution result lands on the action with timestamp + delivery confirmation.\n\n---\n\n## Security & audit\n\n- **Multi-tenant by construction.** Every request is scoped to the organization that owns the API key. The MCP server never sees data from another tenant.\n- **Scopes enforced server-side.** The MCP client can't bypass scopes; the Cognizy API rejects out-of-scope calls with 403.\n- **No state in the MCP server.** Every tool call proxies to the Cognizy REST API. Auth, rate-limit, quota, and audit logging are all enforced there.\n- **API key in transit only.** The key flows MCP client → MCP server → Cognizy API via `x-api-key` / `Authorization: Bearer`. The hosted MCP server doesn't persist it on disk.\n- **Audit log per call.** Each `/v1/public/*` request lands in `PublicApiAuditLog` with org, key, method, path, status, duration, IP, UA, and error message. Visible per key under **Settings → Developers → Activity**.\n- **Approval flow protects against prompt injection.** Customer-facing writes never execute inline — even if a malicious customer message tricks the AI into \"send X to everyone\", the action lands as PENDING and the admin sees exactly what would go out.\n\n---\n\n## Configuration reference\n\n| Env var | Default | Purpose |\n|---|---|---|\n| `COGNIZY_API_KEY` | (required) | The `cgz_live_…` key. Generate in dashboard. |\n| `COGNIZY_API_URL` | `https://api.cognizy.ai/api` | Override for self-hosted Cognizy deployments. |\n| `COGNIZY_TIMEOUT_MS` | `30000` | Per-request timeout. |\n| `PORT` | `3333` | HTTP mode only — port to listen on. |\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/cognizy/cognizy-mcp.git\ncd cognizy-mcp\nnpm install\nnpm run build\n\n# Run locally:\nCOGNIZY_API_KEY=cgz_live_... npm run dev:stdio   # stdio mode, hot-reload\nCOGNIZY_API_KEY=cgz_live_... npm run dev:http    # http mode on :3333\n\nnpm test\n```\n\nTools live in `src/tools/`. Each tool is a `defineTool({ name, description, scope, inputSchema, handler })` object. Add it to `src/tools/index.ts` to register.\n\n---\n\n## Compatibility\n\n- **Node 20+** (the [MCP SDK](https://www.npmjs.com/package/@modelcontextprotocol/sdk) requires it).\n- **MCP protocol version `2025-03-26`** (Streamable HTTP transport in hosted mode).\n- Tested with Claude Desktop, Claude Code, and Cursor.\n\n---\n\n## Roadmap\n\n- Resources & Prompts (MCP primitives beyond tools) — pre-built playbooks like \"weekly digest\", \"at-risk customers\"\n- WebSocket events — push notifications from Cognizy to the client when a customer replies, an SLA breaches, etc.\n- More approval-gated executors — `bulk_send_message`, `create_campaign_draft` (approval-gated like every customer-facing write; the direct Send APIs stay REST/SDK-only)\n- Per-action notification preferences (opt-out by type)\n\n---\n\n## Links\n\n- [Package on npm](https://www.npmjs.com/package/@cognizy/mcp)\n- [GitHub repository](https://github.com/cognizy/cognizy-mcp)\n- [Cognizy](https://cognizy.ai)\n- [Model Context Protocol spec](https://modelcontextprotocol.io)\n\n---\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}