What it does
For a startup banking with Mercury, cash is the one number that ends the company if you misread it. The dashboard shows balances well; burn and runway are a spreadsheet someone updates monthly, usually after the board asks.
The agent reads balances and the last 30 days of transactions with a read-only token every Monday. It leaves out transfers between your own accounts and failed payments, works out net burn and runway, and lists the five biggest outflows. You see the trend weekly instead of discovering it at month end.
How it works
1Read balances
GET https://api.mercury.com/api/v1/accountsand add upcurrentBalanceacross active checking and savings accounts. Keep each account's name and balance for the breakdown.2Read 30 days of transactions
For each account,
GET /api/v1/account/{accountId}/transactions?start=<30 days ago>&end=<today>&limit=1000. Drop transactions whosestatusisfailedorcancelled, and everykind: internalTransfer, which only moves money between your accounts. Mercury also has a top-levelGET /api/v1/transactionsthat lists all accounts at once.- 3
3Work out burn and runway
Split transactions into money in and money out by the sign of
amount(confirm the sign on one payment you know). Net burn is money out minus money in. Runway is total cash over net burn, in months; if money in exceeds money out, say so instead. - 4
4Find where it went
Group money out by
counterpartyNameand list the 5 largest, so a one-off (an annual insurance bill, a tax payment) is visible next to payroll. - 5
5Post the tile
Total cash is the headline with 8 weekly snapshots of history. Net burn, money in and runway go in the glance; the accounts and the biggest outflows open with the card.
Post it to the board
With
BRIEFKIN_TOKENset, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Install and run it
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
Install the skill
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shell
curl -fsSL https://briefkin.dev/skills/mercury-cash-balance-and-burn/install | shRun it
Ask Claude Code:
prompt
Run the mercury-cash-balance-and-burn skillOr paste the prompt instead of installing:
prompt
Using the Mercury API with a read-only token (or Mercury's MCP server, read only), add up the current balance of my active Mercury accounts. Read the last 30 days of transactions for each account, leaving out failed and cancelled transactions and internal transfers between my own accounts. Split into money in and money out by the sign of amount, and work out net burn (out minus in) and runway in months (cash over net burn). List the 5 largest outflows by counterparty. Give me total cash, net burn, money in and runway, and say if anything unusual drove the last week.Put it on a schedule
Mondays at 8:00, from cron on any machine where Claude Code is signed in:
crontab
0 8 * * 1 claude -p "Run the mercury-cash-balance-and-burn skill"Add it with
crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.Send it to your board
Connect Briefkin once with
curl -fsSL https://briefkin.dev/install | shand every run lands on your board as a stat tile. How setup works
View the SKILL.mdRaw file
SKILL.md---
name: mercury-cash-balance-and-burn
description: "Every Monday: total cash across your Mercury accounts, net burn over the last 30 days, runway in months, and where the money went. Use when the user asks for this, or when it runs on a schedule."
---
# Mercury cash balance and burn
Every Monday: total cash across your Mercury accounts, net burn over the last 30 days, runway in months, and where the money went.
For a startup banking with Mercury, cash is the one number that ends the company if you misread it. The dashboard shows balances well; burn and runway are a spreadsheet someone updates monthly, usually after the board asks.
The agent reads balances and the last 30 days of transactions with a read-only token every Monday. It leaves out transfers between your own accounts and failed payments, works out net burn and runway, and lists the five biggest outflows. You see the trend weekly instead of discovering it at month end.
## Two ways to get the data
Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.
## Route A: API or MCP server
### What you need
- A Mercury API token of the Read Only type (Settings > API Tokens; no IP allowlist needed), in `MERCURY_API_TOKEN`, sent as `Authorization: Bearer secret-token:<token>`.
- Or Mercury's MCP server (`https://mcp.mercury.com/mcp`, beta, OAuth), approved with the `read` scope only.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **Read balances** (Mercury): `GET https://api.mercury.com/api/v1/accounts` and add up `currentBalance` across active checking and savings accounts. Keep each account's name and balance for the breakdown.
2. **Read 30 days of transactions** (Mercury): For each account, `GET /api/v1/account/{accountId}/transactions?start=<30 days ago>&end=<today>&limit=1000`. Drop transactions whose `status` is `failed` or `cancelled`, and every `kind: internalTransfer`, which only moves money between your accounts. Mercury also has a top-level `GET /api/v1/transactions` that lists all accounts at once.
3. **Work out burn and runway**: Split transactions into money in and money out by the sign of `amount` (confirm the sign on one payment you know). Net burn is money out minus money in. Runway is total cash over net burn, in months; if money in exceeds money out, say so instead.
4. **Find where it went**: Group money out by `counterpartyName` and list the 5 largest, so a one-off (an annual insurance bill, a tax payment) is visible next to payroll.
5. **Post the tile**: Total cash is the headline with 8 weekly snapshots of history. Net burn, money in and runway go in the glance; the accounts and the biggest outflows open with the card.
## Route B: the browser
### What you need
- Signed in to Mercury as an Admin, Bookkeeper or a Custom user whose role includes viewing all accounts and Insights; Card-only users cannot see balances.
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://app.mercury.com/dashboard. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **Read the balances**: The **Dashboard** shows total cash across accounts and each checking, savings and Treasury balance. Write down the total and the per-account figures.
2. **Open Insights for burn and runway**: Click **Insights** in the sidebar. In the top-right timeframe picker choose the last 30 days (or **Last month**). Read **Burn rate** (average monthly net spend, internal transfers already excluded) and **Runway**; Mercury hides runway when cashflow is positive, in which case say so.
3. **Read money in and money out**: In the cashflow overview read **Money in** and **Money out** for the period. Switch Money out to **by recipient** and note the 5 largest rows; click a row to see the transactions behind it if a name is unclear.
4. **Cross-check against Transactions**: Open **Transactions**, filter to the last 30 days and all accounts, and use **Export** to CSV if you need to confirm that failed or cancelled payments and internal transfers are excluded from the totals.
5. **Report**: Total cash, net burn, money in, runway in months, the 5 biggest outflows and each account's balance, plus one line if the last week was unusual.
Note: Insights computes burn as an average monthly figure over the selected range and defaults to the last three full months, so set 30 days to match this report. Its runway includes Treasury balances. The Transactions list paginates; export when there are more than a few hundred entries.
## The report
- **Total cash** across Mercury accounts, with an 8-week trend.
- **Net burn** over the last 30 days, with money in and money out.
- **Runway** in months at that burn.
- **Biggest outflows** by counterparty, and the balance of each account.
## Post it to Briefkin
When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.
```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
-H "authorization: Bearer $BRIEFKIN_TOKEN" \
-H "content-type: application/json" \
-d @- <<'JSON'
{
"v": 1,
"event_id": "mercury-cash-balance-and-burn/<date of this run, e.g. 2026-10-16>",
"item_key": "mercury-cash-balance-and-burn",
"project": "Acme",
"source": "Mercury cash balance and burn skill",
"kind": "metric",
"title": "$1.84M in the bank, 9.3 months of runway",
"metric": {
"label": "Cash",
"value": 1842300,
"prefix": "$",
"better": "higher",
"period_start": "<start of the period, ISO 8601>",
"period_end": "<end of the period, ISO 8601>"
},
"glance": {
"type": "Grid",
"props": {
"columns": 3
},
"children": [
{
"type": "Stat",
"props": {
"label": "30-day net burn",
"value": 198400,
"prefix": "$",
"better": "lower"
}
},
{
"type": "Stat",
"props": {
"label": "Money in",
"value": 61200,
"prefix": "$"
}
},
{
"type": "Stat",
"props": {
"label": "Runway",
"value": 9.3,
"unit": "months"
}
}
]
},
"widget": [
{
"type": "Table",
"props": {
"columns": [
"Biggest outflows, 30 days",
"Amount"
],
"align": [
"left",
"right"
],
"rows": [
[
"Payroll (Gusto)",
"$162,400"
],
[
"Annual insurance (Vouch)",
"$31,800"
],
[
"Amazon Web Services",
"$24,900"
],
[
"Office lease",
"$14,500"
],
[
"Google Workspace",
"$2,100"
]
]
}
},
{
"type": "Callout",
"props": {
"text": "Cash fell $89,400 last week, about twice the usual: the $31,800 annual insurance bill landed in the same week as payroll.",
"tone": "info"
}
}
],
"size": "md"
}
JSON
```
Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.
Set `period_start` and `period_end` to the window the number covers: the tile names it from them ("Last 7 days", "Today", "This month"). For a count right now (open items, a balance), send `"period_label": ""` so no period shows; for another name, send it as `period_label` (at most 24 characters).
## Run it on a schedule
Suggested: Mondays at 8:00 (`0 8 * * 1`). From cron, with the agent signed in on that machine:
```bash
0 8 * * 1 claude -p "Run the mercury-cash-balance-and-burn skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```
Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/mercury-cash-balance-and-burn#schedule
Source: https://briefkin.dev/skills/mercury-cash-balance-and-burn
What your agent needs
A Mercury API token of the Read Only type (Settings > API Tokens; no IP allowlist needed), in
MERCURY_API_TOKEN, sent asAuthorization: Bearer secret-token:<token>.Or Mercury's MCP server (
https://mcp.mercury.com/mcp, beta, OAuth), approved with thereadscope only.
Connecting Mercury
- Mercury MCP, Mercury's official remote server at
https://mcp.mercury.com/mcp, signed in with OAuth. It's in Claude's connector directory. In Claude Code runclaude mcp add --transport http -s user mercury https://mcp.mercury.com/mcpand thenclaude mcp login mercury; in Codex,codex mcp add mercury --url https://mcp.mercury.com/mcp; Cursor takes the same URL (docs). Its tools load accounts, transactions, statements, recipients and cards. - API with a Read Only token. In the Mercury dashboard, open the organization menu, then Settings > Tokens, and create an API token of the Read Only type, which needs no IP whitelist. Store it in
MERCURY_API_TOKENand send it asAuthorization: Bearer.
At the MCP consent screen, grant only read: the write scopes (transactions:request, transfers:request, transactions:update and the category scopes) let an agent request payments or recategorize transactions. A Read Only API token fetches everything a report needs and can't move money.
Questions
Can the token move money?
A Read Only token cannot: Mercury separates read-only tokens from read-and-write ones, and writes need an IP allowlist. Mercury's MCP server can request payments and transfers if you grant the write scopes, and even those need approval in Mercury before money moves, so approve only the read scope for this skill.
Why is burn so lumpy from week to week?
Payroll lands twice a month and annual bills land once a year, so a single week tells you little. The skill uses a rolling 30 days for burn and runway. If one-offs distort it, ask for a 90-day average divided by three as a second runway figure.
Do I need Briefkin to use the Mercury cash balance and burn skill?
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a stat tile, so you can glance at it instead of asking again.
Which agents can run it?
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Can it work without an API or MCP server, from my browser?
Yes. Switch the data source to "Your browser" and the steps change to the Mercury pages themselves: the agent opens app.mercury.com/dashboard in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.