Skip to content

Cash Runway MCP server

@cashrunway/mcp is a Model Context Protocol server that hands your Cash Runway data to any MCP-capable AI client (Claude Desktop, Cursor, Continue, your own agent harness) over stdio. The server is read-only — it never writes to your Cash Runway account.

Once configured, you can ask the agent things like:

  • "How's my business doing today?"
  • "What's my YTD revenue?"
  • "Who are my top 5 customers?"
  • "What invoices are overdue?"
  • "How much have I spent on AWS this quarter?"

The server registers 12 tools that map 1:1 onto the Agent API. LLMs are biased toward the first few tools in the list — the three new summary tools sit at the top so an agent asking "how much…" or "who's top…" reaches for an aggregate endpoint before paging through individual records (50× cheaper on tokens).

Install

bash
npm install -g @cashrunway/mcp

Requires Node.js ≥ 20. Or run without installing globally via npx -y @cashrunway/mcp.

Get an API token

  1. Sign in to Cash Runway.

  2. Open Settings → API keys and click Create API key.

  3. Give the key a label (e.g. "Claude — finance assistant").

  4. Tick the scopes the agent needs. Pick the narrowest set that does the job — every scope is a separate decision:

    ScopeWhat it unlocks
    READ_BANKBank accounts and balances.
    READ_FORECASTCash position + 13-week forecast.
    READ_PIPELINEProjected revenue (pipeline view).
    READ_INVOICESAR invoices + AP bills, with optional line-item expansion.
    READ_CONTACTSCustomer / supplier list and the per-contact drill (LTV, cadence, ABC).
    READ_SUMMARYThe composite daily-summary endpoint plus the three new aggregate summaries (revenue/summary, expenses/summary, contacts/summary). Strongly recommended starting point.
    READ_SENSITIVEDanger zone. Lifts the redaction filter on accounts / contacts the operator has flagged sensitive (wages, equity, director loans). Off by default — only enable for keys you fully trust.
  5. Copy the secret. The token starts with cr_live_… and is shown once — Cash Runway stores a one-way hash and cannot reveal it again. See API keys for rotation, audit, and the sensitive-data toggle.

Configure your MCP client

The server reads two environment variables:

VariableWhenExample
CASHRUNWAY_API_URLAlwayshttps://api.cashrunway.ai
CASHRUNWAY_API_KEYSingle company (most users)cr_live_xxxxxxxxxxxxxxxxxxxx
CASHRUNWAY_API_KEYSMultiple companies (advanced){"acme":"cr_live_…","globex":"cr_live_…"}

Set exactly one of CASHRUNWAY_API_KEY or CASHRUNWAY_API_KEYS — setting both is a configuration error.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

jsonc
{
  "mcpServers": {
    "cashrunway": {
      "command": "cashrunway-mcp",
      "env": {
        "CASHRUNWAY_API_URL": "https://api.cashrunway.ai",
        "CASHRUNWAY_API_KEY": "cr_live_xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

If you'd rather not install globally, swap "command": "cashrunway-mcp" for "command": "npx" with "args": ["-y", "@cashrunway/mcp"]. Restart Claude Desktop — the tools appear under the 🔧 icon.

Cursor

Edit ~/.cursor/mcp.json (or the per-project .cursor/mcp.json):

json
{
  "mcpServers": {
    "cashrunway": {
      "command": "cashrunway-mcp",
      "env": {
        "CASHRUNWAY_API_URL": "https://api.cashrunway.ai",
        "CASHRUNWAY_API_KEY": "cr_live_xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Continue (VS Code / JetBrains)

Edit ~/.continue/config.json:

json
{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "cashrunway-mcp",
          "env": {
            "CASHRUNWAY_API_URL": "https://api.cashrunway.ai",
            "CASHRUNWAY_API_KEY": "cr_live_xxxxxxxxxxxxxxxxxxxx"
          }
        }
      }
    ]
  }
}

Tool reference

The 12 tools are registered in the order shown below. Tool ordering is load-bearing — LLMs preferentially pick the first tool that plausibly fits the question, so the three aggregate summary tools sit at the top.

Summary tools (start here)

ToolPurposeExample prompt
cashrunway_get_revenue_summaryAR totals + by-status + by-month + top customers, with no individual records. 50× cheaper on tokens than paging through list_invoices for aggregate questions."What's my YTD revenue and who are my top 10 customers?"
cashrunway_get_expenses_summaryAP-side mirror of get_revenue_summary."What did I spend last quarter by month? Top 5 suppliers?"
cashrunway_get_contacts_summaryContact-population aggregates: byType, ABC distribution (80/20 tiering), top customers by LTV, top suppliers by spend."How many customers do I have? Show me my ABC tier breakdown."
cashrunway_get_daily_summaryComposite "how's my business going today?" surface — cash today, last-7d activity, AR aging, 13-week forecast headline, prose narrative field. Best single-call session bootstrap for a generic assistant."How's my business doing today?"

Snapshot tools

ToolPurposeExample prompt
cashrunway_get_statusSubscription, quota, key scopes, environment. Exempt from daily quota counting — safe to poll on session start."Am I close to my quota?"
cashrunway_get_cash_positionToday's cash across all bank accounts, with per-account breakdown."How much cash do I have right now?"
cashrunway_get_forecast13-week forecast — opening, inflow (with optional guaranteed/forecast split), outflow, net, closing."When do I run out of cash?"
cashrunway_get_bank_accountsList of configured bank accounts with reconciled + statement balances."What bank accounts is Cash Runway tracking?"

List tools (for record-level drill-in)

ToolPurposeExample prompt
cashrunway_list_invoicesAR invoices, filterable by status / contact / date range. Supports autoPaginate: true (one call, up to 5,000 rows) and totals: true (byStatus + grandTotal across the full filtered set). Add lines: true for line-item expansion."List all overdue invoices for Acme Co."
cashrunway_list_billsAP bills — same shape and flags as list_invoices."Which bills are due this week?"
cashrunway_list_contactsCustomers and suppliers; sort by revenue_desc / spend_desc / recent_desc. Same autoPaginate + totals flags (totals are count-only for contacts — no $ axis)."List my top 20 customers by revenue."
cashrunway_get_contactDrill into one contact: LTV, payment cadence, payment-days median, ABC tier, last invoice / bill, recent paid invoices."Tell me about my relationship with Globex."

A 13th meta-tool, cashrunway_list_companies, is only registered when the server runs in multi-tenant mode (see below).

Example prompts the agent should reach for first

These five questions cover ~80% of the agent's day-one usage. Each maps to one or two tools; the rest of the surface is for follow-up drills.

  1. "How's my business doing today?"get_daily_summary.
  2. "What's my YTD revenue?"get_revenue_summary (no dateFrom/dateTo — defaults to the current financial-year YTD).
  3. "Who are my top 5 customers?"get_revenue_summary with topN: 5, or get_contacts_summary for LTV-based tiering.
  4. "What invoices are overdue?"list_invoices with status: "AUTHORISED" and a to date in the past.
  5. "How much have I billed this month?"get_revenue_summary with dateFrom / dateTo set to the calendar month.

Pagination and token savings

Three flags / fields exist on the list tools to keep agent-driven calls cheap and correct:

  • totalCount (always present in every list response) — the pre-redaction count of rows matching the filter. Cheapest way to answer "how many?" without paying for autoPaginate or totals. May exceed the page array length when sensitive contacts/accounts are dropped — see redactedItemCount for the delta.
  • autoPaginate: true — the server walks every page of the filtered set in one response, capped at 5,000 rows. If the cap is hit, the response sets truncated: true and the agent should drop autoPaginate and fall back to cursor pagination. Replaces the cursor-loop pattern for "give me everything matching this filter".
  • totals: true — folds an opt-in byStatus + grandTotal aggregation across the full filtered set into the response (not just the current page). Lets an agent answer "how much is outstanding on AR?" without scanning rows. Multi-currency sets short-circuit to mixedCurrency: true (no fake cross-currency sum); matched sets above 100,000 rows set totalsTruncated: true and the agent should narrow the filter.

When the question is aggregate ("how much / how many / who's top"), the summary tools are still the right answer — they're ~50× cheaper than even a totals: true list call because they don't ship row records at all.

Sensitive-data handling

By default, the server drops contacts and accounts the operator has flagged sensitive from list endpoints and rewrites their display name to "Sensitive contact" / "Sensitive account" on composite endpoints. Totals always reconcile against the operator's ledger — only names are gated. Each response carries a redactedItemCount so the agent knows it's operating on a masked view.

Issue a key with READ_SENSITIVE only when the agent genuinely needs full visibility (e.g. an internal CFO copilot). The scope cannot be added to an existing key — rotate-and-recreate to keep the grant auditable. See Sensitive accounts and contacts for the full audit trail.

Advisory partner keys (multi-client)

Advisors install the same @cashrunway/mcp server — they just authenticate with a partner key instead of a single-org user key. A partner key starts with crun_… and reaches every client org linked to your practice, where a cr_live_… user key is bound to one org. Partner keys are minted in the Partner Portal → API keys, not under an individual business's Settings → API keys. Wire it in exactly like a user key:

json
{
  "mcpServers": {
    "cashrunway": {
      "command": "cashrunway-mcp",
      "env": { "CASHRUNWAY_API_KEY": "crun_…" }
    }
  }
}

Two tools power the partner flow:

  • cashrunway_list_orgs — call it on connect. It reports keyKind (PARTNER vs USER) and the reachable client orgs, returning { keyKind, orgs: [{ id, name, slug }], summary }. For a partner key the summary reads "Connected as partner → N clients."; for a user key it lists the single org the key belongs to.
  • cashrunway_get_daily_brief — takes a required org argument (an id from list_orgs) and returns that client's latest daily brief. Partner keys are multi-client and have no implicit default org, so the agent must name the client per call.

Usage is metered to each client's account. Point the agent at one client at a time by passing its org.

Multi-tenant routing (advanced)

If you manage several Cash Runway companies from one MCP client, set CASHRUNWAY_API_KEYS to a JSON object of {company_key: cr_live_…}. Each tool then exposes an optional company argument that becomes required in multi-tenant mode, and a 13th tool cashrunway_list_companies is registered so the agent can discover the configured keys.

Company keys must match ^[a-z0-9_-]+$. Most users are better served by registering the binary once per company under different MCP names — see the MCP README for both patterns side by side.

  • API keys — provisioning, rotation, audit, sensitive scope.
  • Agent API — endpoint surface and daily-summary tour.
  • API Reference — full schema catalogue.
  • CLI — same surface as a cashrunway shell binary.

Released under a proprietary license.