{"_id":"@cashrunway/mcp","_rev":"5-bf669f9cde28b4c7fda90b1ab6b370f0","name":"@cashrunway/mcp","dist-tags":{"latest":"0.1.9"},"versions":{"0.1.4":{"name":"@cashrunway/mcp","version":"0.1.4","keywords":["mcp","model-context-protocol","cashflow","cashrunway","agent","claude","ai"],"author":{"name":"Cash Runway"},"license":"MIT","_id":"@cashrunway/mcp@0.1.4","maintainers":[{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"}],"homepage":"https://github.com/jaied/cashrunway-mcp#readme","bugs":{"url":"https://github.com/jaied/cashrunway-mcp/issues"},"bin":{"cashrunway-mcp":"dist/server.js"},"dist":{"shasum":"70c714179e1dcc1df6ce073e0928f300eba67dea","tarball":"https://registry.npmjs.org/@cashrunway/mcp/-/mcp-0.1.4.tgz","fileCount":55,"integrity":"sha512-m1e1MVRvBCwViM7OUW7NJaTL89G1lsJ8lkceJEar5jL4wYkiMtzlEsx+BA+e8mGmIhNeBl/i/EihJYxyD7HOpw==","signatures":[{"sig":"MEUCIEr2j/egrBAg0fcDOV/Xy69xWdMUDitEEE/erNeBTeu1AiEArV7ePTPU1zcyARAdd/bEmsXAELp7nmkP06EcfucuVt0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":261240},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","engines":{"node":">=20"},"gitHead":"6e7fda8527c9cac9bab788f24e858da2e53e1b4a","private":false,"scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc","start":"node dist/server.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"},"repository":{"url":"git+https://github.com/jaied/cashrunway-mcp.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server that exposes Cash Runway cashflow data to AI agent clients (Claude Desktop, Cursor, Continue) over stdio.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.4"},"_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.4_1782645084627_0.7512557840236824","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@cashrunway/mcp","version":"0.1.5","keywords":["mcp","model-context-protocol","cashflow","cashrunway","agent","claude","ai"],"author":{"name":"Cash Runway"},"license":"MIT","_id":"@cashrunway/mcp@0.1.5","maintainers":[{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"}],"homepage":"https://github.com/jaied/cashrunway-mcp#readme","bugs":{"url":"https://github.com/jaied/cashrunway-mcp/issues"},"bin":{"cashrunway-mcp":"dist/server.js"},"dist":{"shasum":"92f6455c523c3d072958504f3c84428121ff91d7","tarball":"https://registry.npmjs.org/@cashrunway/mcp/-/mcp-0.1.5.tgz","fileCount":55,"integrity":"sha512-5lKkvngzRGwz8i46yvPAmbPXF0hpQUmULgjCYVnis/Y3kq3puvTwaQ5szmPI/4Z8znpj/fnap72HnjEUSqhvWg==","signatures":[{"sig":"MEQCIBFLnw/szLnO63jX78wH77oVDwYfCXhNpSXyTghWPmEzAiBjfTxHW0l3EoV+AlzmaIYodl6Z092gWftOgNT14D0ZEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":262422},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","engines":{"node":">=20"},"gitHead":"7fad7d2e4704093c1bb95d698cc9398da3f0b85a","private":false,"scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc","start":"node dist/server.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"},"repository":{"url":"git+https://github.com/jaied/cashrunway-mcp.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server that exposes Cash Runway cashflow data to AI agent clients (Claude Desktop, Cursor, Continue) over stdio.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.4"},"_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.5_1782652943055_0.8649800627175963","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@cashrunway/mcp","version":"0.1.6","keywords":["mcp","model-context-protocol","cashflow","cashrunway","agent","claude","ai"],"author":{"name":"Cash Runway"},"license":"MIT","_id":"@cashrunway/mcp@0.1.6","maintainers":[{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"}],"homepage":"https://github.com/jaied/cashrunway-mcp#readme","bugs":{"url":"https://github.com/jaied/cashrunway-mcp/issues"},"bin":{"cashrunway-mcp":"dist/server.js"},"dist":{"shasum":"a9d96930fa11a19cbe7d86790c18dd5832febf29","tarball":"https://registry.npmjs.org/@cashrunway/mcp/-/mcp-0.1.6.tgz","fileCount":59,"integrity":"sha512-4Fs9A8+Z+vezNCc9HAyQExI7xv/8tDY1Mmd8T0a9/wIw9N6YfFUpLMW1XnulPcYAWlNNCF2ZCIF7fzJZnHGNaw==","signatures":[{"sig":"MEUCIEXborqpfmtKgsSfR7RLaDtSYGLnVzNJmiQc8IonoA8kAiEAp9HI8GXqBW4tbeW0m0H3Ab4R/P8uhfRmbkNtt+u1PII=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288481},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","engines":{"node":">=20"},"gitHead":"031f6cb9b6f890171fd13eabd9569a7d5c6f078b","private":false,"scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc","start":"node dist/server.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"},"repository":{"url":"git+https://github.com/jaied/cashrunway-mcp.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server that exposes Cash Runway cashflow data to AI agent clients (Claude Desktop, Cursor, Continue) over stdio.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.4"},"_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.6_1784459401107_0.16110387986083152","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@cashrunway/mcp","version":"0.1.8","keywords":["mcp","model-context-protocol","cashflow","cashrunway","agent","claude","ai"],"author":{"name":"Cash Runway"},"license":"MIT","_id":"@cashrunway/mcp@0.1.8","maintainers":[{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"}],"homepage":"https://github.com/jaied/cashrunway-mcp#readme","bugs":{"url":"https://github.com/jaied/cashrunway-mcp/issues"},"bin":{"cashrunway-mcp":"dist/server.js"},"dist":{"shasum":"6e39ca29969e10d7fd751ef13854a42f1452754e","tarball":"https://registry.npmjs.org/@cashrunway/mcp/-/mcp-0.1.8.tgz","fileCount":59,"integrity":"sha512-SQ0rwhUjVehkj+J6yzYF1JUN1/Y9lTmfESNYkAsS8pRAzmLC/KAzttT0vjuUwqAmAyCeONi6+PNrVrmJ3uInsg==","signatures":[{"sig":"MEYCIQDUTYJybw5kjZx6+usQABI3AN7ylspD9/+38rIlo1YSJAIhANUlqAaMsKyVnc5b+giIctWe/VJSf+cqapM1pciTUc5P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292270},"main":"dist/server.js","type":"module","types":"./dist/server.d.ts","engines":{"node":">=20"},"gitHead":"a8736fdc61e5d3bda0a8278a755e18bf168ff740","private":false,"scripts":{"dev":"tsx src/server.ts","test":"vitest run","build":"tsc","start":"node dist/server.js","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"},"repository":{"url":"git+https://github.com/jaied/cashrunway-mcp.git","type":"git"},"_npmVersion":"11.12.1","description":"Model Context Protocol server that exposes Cash Runway cashflow data to AI agent clients (Claude Desktop, Cursor, Continue) over stdio.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.0.4"},"_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.8_1786016220749_0.9680557581367253","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@cashrunway/mcp","version":"0.1.9","description":"Model Context Protocol server that exposes Cash Runway cashflow data to AI agent clients (Claude Desktop, Cursor, Continue) over stdio.","type":"module","engines":{"node":">=20"},"bin":{"cashrunway-mcp":"dist/server.js"},"main":"dist/server.js","scripts":{"build":"tsc","prepublishOnly":"npm run build","start":"node dist/server.js","dev":"tsx src/server.ts","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit"},"repository":{"type":"git","url":"git+https://github.com/jaied/cashrunway-mcp.git"},"keywords":["mcp","model-context-protocol","cashflow","cashrunway","agent","claude","ai"],"author":{"name":"Cash Runway"},"license":"MIT","private":false,"bugs":{"url":"https://github.com/jaied/cashrunway-mcp/issues"},"homepage":"https://github.com/jaied/cashrunway-mcp#readme","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"},"gitHead":"d4a231ddd69ecaf8b5bddd7422cba4d24b7b6960","types":"./dist/server.d.ts","_id":"@cashrunway/mcp@0.1.9","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-cIj4EGcd5dxrU2GsJpIvqXGkCxhbZuWWzooBcO1Q3slwiREvVgP3SaEV0fIsD1gMOmoqOQ/djx9VWeeIE2LzCQ==","shasum":"ad7b92b54237a8787e0ae7f6ebee58a324f77f96","tarball":"https://registry.npmjs.org/@cashrunway/mcp/-/mcp-0.1.9.tgz","fileCount":59,"unpackedSize":297267,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD0Hz9rp65cuRp9r7SZNfA4nRDZGhi5MJfpnkDXPyKaVQIhAJGabZf1WGGrblj7xPeck3ev5eOSTWxKDCPUB6E8HlrS"}]},"_npmUser":{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"},"directories":{},"maintainers":[{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.9_1786609707375_0.5977445069810863"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-28T11:11:24.433Z","modified":"2026-08-13T08:28:27.677Z","0.1.4":"2026-06-28T11:11:24.770Z","0.1.5":"2026-06-28T13:22:23.186Z","0.1.6":"2026-07-19T11:10:01.250Z","0.1.8":"2026-08-06T11:37:00.928Z","0.1.9":"2026-08-13T08:28:27.513Z"},"bugs":{"url":"https://github.com/jaied/cashrunway-mcp/issues"},"author":{"name":"Cash Runway"},"license":"MIT","homepage":"https://github.com/jaied/cashrunway-mcp#readme","keywords":["mcp","model-context-protocol","cashflow","cashrunway","agent","claude","ai"],"repository":{"type":"git","url":"git+https://github.com/jaied/cashrunway-mcp.git"},"description":"Model Context Protocol server that exposes Cash Runway cashflow data to AI agent clients (Claude Desktop, Cursor, Continue) over stdio.","maintainers":[{"name":"jaie.demaagd","email":"jaie.demaagd@gmail.com"}],"readme":"# `@cashrunway/mcp`\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server that exposes your [Cash Runway](https://cashrunway.com) cashflow data — cash position, 13-week forecast, AR/AP, contacts, and a composite daily-summary — to any MCP-capable AI client (Claude Desktop, Cursor, Continue, …) over stdio.\n\nAsk things like:\n\n- **\"How's my business doing today?\"**\n- \"What invoices are overdue?\"\n- \"Who are my top 5 customers by revenue?\"\n- \"What's my 13-week cash forecast?\"\n- \"Show me last week's biggest outflows.\"\n\nThe server is read-only — it never writes to your Cash Runway account.\n\n---\n\n## Install\n\n```bash\nnpm install -g @cashrunway/mcp\n```\n\nRequires Node.js **≥ 20**.\n\nOr run without installing globally via `npx -y @cashrunway/mcp`.\n\n## Get an API key\n\n1. Sign in to [Cash Runway](https://api.cashrunway.ai).\n2. Go to **Settings → API keys**.\n3. Create a key — it starts with `cr_live_…`. Choose the scopes you want exposed to the agent (pick the narrowest set the integration actually needs):\n   - **`READ_SUMMARY`** — `daily-summary` + the three aggregate summary endpoints (revenue, expenses, contacts). **Recommended starting point** for a generic assistant — 50× cheaper on tokens than paging through `list_*`.\n   - `READ_BANK`, `READ_FORECAST`, `READ_PIPELINE` — bank balances, cash position, 13-week forecast, projected revenue.\n   - `READ_INVOICES`, `READ_CONTACTS` — AR/AP record-level drill-in and contact drill.\n   - **`READ_SENSITIVE`** — danger zone. By default the server drops contacts/accounts the operator has flagged sensitive (e.g. wages, equity, director loans) and rewrites their names in composite endpoints. With `READ_SENSITIVE` they become visible. Pick keys deliberately.\n4. Copy the key. You won't see it again.\n\n## Configure your MCP client\n\nThe server reads environment variables:\n\n| Variable                | When                         | Example                                     |\n| ----------------------- | ---------------------------- | ------------------------------------------- |\n| `CASHRUNWAY_API_URL`    | optional (has a default)     | `https://api.cashrunway.ai`                 |\n| `CASHRUNWAY_API_KEY`    | single-company (most users)  | `cr_live_xxxxxxxxxxxxxxxxxxxx`              |\n| `CASHRUNWAY_API_KEYS`   | multi-company (see below)    | `{\"acme\":\"cr_live_…\",\"globex\":\"cr_live_…\"}` |\n\n`CASHRUNWAY_API_URL` defaults to `https://api.cashrunway.ai` — you only need to set it when pointing at a local dev instance (`http://localhost:3001`).\n\nSet exactly one of `CASHRUNWAY_API_KEY` or `CASHRUNWAY_API_KEYS` — setting both is an error.\n\n### Claude Desktop\n\nEdit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows) and add:\n\n```jsonc\n{\n  \"mcpServers\": {\n    \"cashrunway\": {\n      \"command\": \"cashrunway-mcp\",\n      \"env\": {\n        \"CASHRUNWAY_API_KEY\": \"cr_live_xxxxxxxxxxxxxxxxxxxx\"\n      }\n    }\n  }\n}\n```\n\nIf you'd rather not install globally, swap `\"command\"` for `\"npx\"` and add `\"args\": [\"-y\", \"@cashrunway/mcp\"]`.\n\nRestart Claude Desktop. The tools appear under the 🔧 icon.\n\n### Cursor\n\nAdd to `~/.cursor/mcp.json` (or per-project `.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"cashrunway\": {\n      \"command\": \"cashrunway-mcp\",\n      \"env\": {\n        \"CASHRUNWAY_API_KEY\": \"cr_live_xxxxxxxxxxxxxxxxxxxx\"\n      }\n    }\n  }\n}\n```\n\n### Continue (VS Code / JetBrains)\n\nIn `~/.continue/config.json` (or the project-local equivalent):\n\n```json\n{\n  \"experimental\": {\n    \"modelContextProtocolServers\": [\n      {\n        \"transport\": {\n          \"type\": \"stdio\",\n          \"command\": \"cashrunway-mcp\",\n          \"env\": {\n            \"CASHRUNWAY_API_KEY\": \"cr_live_xxxxxxxxxxxxxxxxxxxx\"\n          }\n        }\n      }\n    ]\n  }\n}\n```\n\n---\n\n## Tools\n\nThe server registers **17 tools**. Tool ordering matters — LLMs are biased\ntoward the first plausible match — so the three aggregate **summary** tools\nsit at the top to win the common \"how much / how many / who's top\" prompts\nwithout paging through individual records (50× cheaper on tokens).\n\n### Summary (start here)\n\n| Tool                                 | What it does                                                                                                              |\n| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- |\n| `cashrunway.get_revenue_summary`     | AR totals + by-status + by-month + top customers, **no individual records**. PAID is ex-GST (reconciles to Xero ±1%).     |\n| `cashrunway.get_expenses_summary`    | AP-side mirror of `get_revenue_summary`.                                                                                  |\n| `cashrunway.get_contacts_summary`    | Contact-population aggregates: byType, ABC distribution, top customers by LTV, top suppliers by spend.                    |\n| `cashrunway.get_daily_summary`       | Composite \"how's the business doing today?\" narrative + structured data. Best single-call session bootstrap.              |\n\n### Snapshot\n\n| Tool                              | What it does                                                                                         |\n| --------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| `cashrunway.get_status`           | Subscription, quota, key scopes, environment. Safe on session start (no quota cost).                 |\n| `cashrunway.get_cash_position`    | Today's cash across all bank accounts.                                                               |\n| `cashrunway.get_forecast`         | 13-week forecast (conservative + optimistic split).                                                  |\n| `cashrunway.get_bank_accounts`    | List configured bank accounts with reconciled + statement balances.                                  |\n\n### List (record-level drill-in)\n\n| Tool                              | What it does                                                                                          |\n| --------------------------------- | ----------------------------------------------------------------------------------------------------- |\n| `cashrunway.list_invoices`        | AR invoices, filterable by status / contact / date. Supports `autoPaginate: true` + `totals: true`.   |\n| `cashrunway.list_bills`           | AP bills — same shape and flags as `list_invoices`.                                                   |\n| `cashrunway.list_contacts`        | Customers / suppliers, sortable by revenue / spend / recency. Same `autoPaginate` + `totals` flags.   |\n| `cashrunway.get_contact`          | Drill into one contact: LTV, payment cadence, ABC tier, last invoice / bill, recent paid invoices.    |\n\n### Partner (advisory multi-client) — T11.11.2\n\n| Tool                          | What it does                                                                                                                |\n| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------- |\n| `cashrunway.list_orgs`        | List the client orgs this key can reach + report `keyKind` (`PARTNER` vs `USER`). Call on connect to discover a partner's clients. |\n| `cashrunway.get_daily_brief`  | Latest daily brief for a SPECIFIC client org (required `org` arg = a client org id from `list_orgs`).                       |\n\nAn advisory **partner** key is multi-client: call `cashrunway.list_orgs`\nfirst (it returns `keyKind: \"PARTNER\"` and the reachable `orgs`), then pass\n`org: <client-org-id>` to `cashrunway.get_daily_brief` to target a specific\nclient. Only `get_daily_brief` accepts an `org` argument today — the other\ntools use strict input schemas and reject `org` as an unknown key.\n\nThe `cashrunway.list_companies` meta-tool is always registered. In\nsingle-tenant mode it simply reports the one configured company; in\nmulti-tenant mode (see below) it lists every configured company key so\nthe agent can pick the right `company` argument.\n\n### Pagination & totals (F8.6.139 / F8.6.140)\n\nThe three list tools support two opt-in flags that keep agent-driven\ncalls cheap and correct:\n\n- `autoPaginate: true` — server walks every page in one response, capped\n  at 5,000 rows; sets `truncated: true` if the cap is hit (fall back to\n  cursor pagination).\n- `totals: true` — folds `byStatus` + `grandTotal` aggregation across the\n  **full** filtered set into the response. Multi-currency sets\n  short-circuit to `mixedCurrency: true`; >100,000 rows sets\n  `totalsTruncated: true` (narrow the filter).\n\nWhen the question is aggregate, the summary tools are still cheaper —\nthey don't ship row records at all.\n\n### Audit header\n\nEvery call sends `X-CashRunway-Tool: cashrunway.<tool_name>` so the audit\nlog in your Cash Runway settings shows exactly which tool the agent\nreached for.\n\n### Full docs\n\nSee [docs.cashrunway.ai/agent/mcp](https://docs.cashrunway.ai/agent/mcp)\nfor the complete reference, every example prompt, and the\n[CLI counterpart](https://docs.cashrunway.ai/agent/cli) (`cashrunway`\nshell binary).\n\n---\n\n## Multiple companies (advanced)\n\nThere are two ways to expose multiple Cash Runway companies to one MCP client.\n\n### Pattern A — one MCP server per company (default; simplest)\n\nRegister the same binary under a different name for each company. Each company appears as its own server in the client UI; the LLM picks the right one.\n\n```jsonc\n{\n  \"mcpServers\": {\n    \"cashrunway-acme\": {\n      \"command\": \"cashrunway-mcp\",\n      \"env\": {\n        \"CASHRUNWAY_API_KEY\": \"cr_live_acme_…\"\n      }\n    },\n    \"cashrunway-globex\": {\n      \"command\": \"cashrunway-mcp\",\n      \"env\": {\n        \"CASHRUNWAY_API_KEY\": \"cr_live_globex_…\"\n      }\n    }\n  }\n}\n```\n\n### Pattern B — single MCP server, multi-tenant routing\n\nSet `CASHRUNWAY_API_KEYS` to a JSON object of `{company_key: cr_live_…}`. Every cashflow tool gains an optional `company` argument; in multi-tenant mode the argument is **required** on every call. A `cashrunway.list_companies` tool lists the configured keys.\n\n```jsonc\n{\n  \"mcpServers\": {\n    \"cashrunway\": {\n      \"command\": \"cashrunway-mcp\",\n      \"env\": {\n        \"CASHRUNWAY_API_KEYS\": \"{\\\"acme\\\":\\\"cr_live_…\\\",\\\"globex\\\":\\\"cr_live_…\\\"}\"\n      }\n    }\n  }\n}\n```\n\nCompany keys must match `^[a-z0-9_-]+$`. Patterns A and B are functionally equivalent for most uses; Pattern B is useful when you want the LLM to compare numbers across companies in a single turn.\n\n---\n\n## Sensitive-data handling\n\nBy default, contacts and accounts the operator has flagged sensitive are **dropped** from list endpoints and **masked** (`\"Sensitive contact\"` / `\"Sensitive account\"`) in composite endpoints. Totals reconcile against your ledger either way.\n\nIf an agent needs full visibility (e.g. an internal CFO tool), issue a key with the `READ_SENSITIVE` scope. Otherwise leave it off — Cash Runway will silently keep sensitive rows out of the agent's reach.\n\n---\n\n## Local development\n\n```bash\nnpm install\nnpm test          # vitest, runs the full test suite\nnpm run build     # tsc → dist/\nnpm run dev       # tsx src/server.ts (live reload)\n```\n\nPoint the client at a local Cash Runway dev instance with `CASHRUNWAY_API_URL=http://localhost:3001`.\n\n---\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}