TallyUp Sign in Get an account

Alpha

Connect Claude to TallyUp.

Talk to Claude Desktop, Cursor, or Claude Code. They read and write your TallyUp data directly — no copy-paste, no bulk-import tool, no binary to install. Three steps, free.

How it works

TallyUp speaks the Model Context Protocol over HTTP, with OAuth 2.1 + PKCE for authorization. Paste https://tallyup.work/mcp into your MCP client, click Allow on the consent screen, and Claude can list your assets, file bills, decode VINs, mark maintenance done, and more, on your behalf. Every write is tagged with the connection that made it; if anything goes sideways you can revoke from /account/api-keys in one click.

Nothing to download. The "MCP server" runs on tallyup.work. New connections are a paste + click; no JSON editing, no API keys to manage.

Setup

1

Get a TallyUp account

If you don't have one, create one for free. The first user on a fresh install becomes admin automatically.

2

Add the TallyUp MCP server in your client

Modern MCP clients (Claude Desktop ≥ Dec 2025, Claude Code, ChatGPT desktop, MCP Inspector) discover the OAuth flow automatically. Paste this URL where the client asks for an MCP server URL:

https://tallyup.work/mcp

Claude Desktop

Settings → Connectors (or MCP servers on older builds) → Add custom server, paste the URL above. The app opens TallyUp in your browser, signs you in if needed, and shows a consent screen.

Claude Code (CLI)

One command — Claude Code handles the OAuth handshake on your behalf:

claude mcp add --scope user --transport http tallyup https://tallyup.work/mcp

Then /exit any running Claude Code session and start a new one — your browser will open for the consent click on first use.

Cursor / other MCP clients

Add a new MCP server with type HTTP and URL https://tallyup.work/mcp. The client will redirect you through TallyUp for sign-in + consent.

3

Click "Allow"

You'll see a consent screen on tallyup.work listing the connecting client (e.g. "Claude Desktop") and the access being requested (mcp.access — read + write everything you can already see). Click Allow access. The browser hands you back to the client; you're done.

You can revoke the connection anytime from /account/api-keys.

Headless / API-key path (still supported)

For scripts, CI jobs, or older clients that can't follow the OAuth redirect, the original Bearer-token path still works. Generate a tau_… key at /account/api-keys and pass it as Authorization: Bearer tau_… on every request to /mcp. Existing keys keep working — no migration required.

Have your AI set it up for you

Or, paste the block below into a coding agent — Claude Code, Cursor, Claude Desktop — and let it handle the setup. Claude Code can run the CLI on your behalf; the desktop clients will walk you through the consent click.

You're being asked to connect this development environment to TallyUp via its Model Context Protocol server, so you can read and write the user's assets — homes, vehicles, equipment, bills, maintenance — on their behalf.

The MCP server is at https://tallyup.work/mcp. It speaks MCP over HTTP with OAuth 2.1 + PKCE — no API key needed.

If you're Claude Code, run:
  claude mcp add --scope user --transport http tallyup https://tallyup.work/mcp
Then have the user /exit and start a fresh Claude Code session. The first call opens a browser for sign-in and consent.

If you're Claude Desktop or Cursor: walk the user through Settings → Connectors → Add custom server (HTTP transport), paste https://tallyup.work/mcp, and have them click "Allow access" on the consent screen. You can't do this step for them.

Once connected, call list_assets to confirm the connection and see what's recorded. Common tools: create_asset, create_bill, mark_bill_paid, create_maintenance_item, decode_vin, list_bills_upcoming, list_maintenance_upcoming. Full list at https://tallyup.work/docs/mcp.

If the user doesn't have an account yet, point them at https://tallyup.work/signup. They can revoke the connection at any time from https://tallyup.work/account/api-keys.

What can it do?

If you only remember a handful: list_assets to look around, create_asset and create_bill to file things, mark_bill_paid to close them out, and decode_vin to turn a VIN into a fully-populated vehicle. Your MCP client shows the whole set once you connect — and so does the table below, which lists every tool TallyUp registers.

ToolWhat it does
Read — assets & reference
list_assetsEvery asset the caller can see, with optional filters by kind / parent.
get_assetOne asset by id. Cross-account reads return "not found".
list_asset_kindsThe kind taxonomy (residential / vehicle / computer / your custom kinds). The only valid kind values for create_asset.
list_groupsGroups you're a member of, admin of, or viewer of.
list_documentsDocuments attached to one record (asset, bill, payment, maintenance, insurance, warranty, group).
list_jurisdictionsTax / utility jurisdictions configured on the instance. Reference data.
decode_vinVIN → year, make, model, trim, engine, transmission, plant, etc. (NHTSA vPIC, free.)
Read — bills, income, maintenance
list_billsEvery bill you can see, including paid and historical. Filter by parent, status, kind, cycle.
list_bills_upcomingBills due in the next N days (default 60).
get_billOne bill by id. Cross-account reads return "not found".
list_incomeIncome records you can see. Filter by parent, year, or kind.
list_maintenance_upcomingMaintenance items due in the next N days.
Read — your account
get_account_infoWho the connection is acting as: id, email, display name, admin flag, verification state.
list_my_grantsThe credential behind this request — kind, label, scopes, created / expires / last used.
Read — contacts
list_contactsYour contacts. Search by email before creating a duplicate.
get_contactOne contact by id.
list_asset_contactsWho's linked to an asset, and in what role.
Write — assets
create_assetAdd an asset; owner is you or a group you can write to. Optional external_id for re-import dedup.
update_assetRename, re-parent, or merge attributes on an asset you can edit.
add_asset_linkAttach an external URL — vendor portal, owner's manual, listing, dashboard.
create_asset_kindAdmin only. Add a new kind when none of the existing ones fit.
Write — groups
create_groupCreate a household / LLC / partnership / etc. Caller becomes admin + viewer (not a 100% member).
invite_group_memberAdd someone to a group at a role + percentage. No email is sent — you share the invite link yourself.
Write — bills & payments
create_billFile a bill against an asset, group, or yourself.
update_billEdit a bill. Only the fields you pass change.
mark_bill_paidRecord a payment and flip the bill to paid.
Write — maintenance
create_maintenance_itemSchedule maintenance on an asset / group / yourself.
update_maintenance_itemEdit a maintenance item. Partial update.
mark_maintenance_completedMark done with optional cost, mileage, or hour-meter.
Write — usage, value, income
add_usage_readingMileage / hour-meter / kWh reading against an asset.
add_value_recordPoint-in-time valuation snapshot.
update_incomeEdit an income record. The parent is fixed at creation.
Write — contacts
create_contactAdd a contact you own — vendor, tenant, manager, neighbour.
update_contactEdit a contact. Clear email or phone explicitly.
delete_contactDestructive. Refused while any bill, maintenance item, or open invite still points at it.
merge_contactsDestructive. Fold one contact into another and delete the source. The dedup tool after a bulk import.
link_contact_to_assetRecord that a contact serves an asset, with a role. Idempotent.
unlink_contact_from_assetRemove that link. Idempotent.
Bulk import
bulk_create_contactsUp to 500 contacts per call, deduped on email / external_id. Bad rows fail individually.
bulk_create_assetsUp to 500 assets per call, deduped on external_id. Bad rows fail individually.
Reports & export
schedule_e_exportSchedule E (Form 1040 Part I) for one tax year, attributed by your ownership share. Depreciation is not computed.
get_plProfit & loss over any date range, for any asset kind. Capex and personal spend stay out of the operating net.
Calendar feeds
list_calendar_feedsiCal feeds (Airbnb, Vrbo, Booking, …) attached to an asset.
create_calendar_feedAttach a feed. Treat the URL like a password — it grants the whole calendar.
update_calendar_feedEdit a feed. Only the fields you pass change.
delete_calendar_feedDestructive. Detaches the feed; already-imported reservations stay on the asset.
sync_calendar_feedPull one feed right now, the same as "Sync now" in the web UI.
Document providers
list_provider_linksFiles you've linked from external storage (Box.com today).
link_box_fileAttach a Box file to a record. Requires a Box account connected from /account/integrations.
disconnect_providerDestructive. Drops your stored provider authorization. Existing links stay but stop refreshing.

Try it

Once the client is configured, try one of these in chat:

Safety: rolling back a bad import

Every row Claude creates is tagged with the API key that made it. If a session goes sideways, you can recover from one place:

  1. Visit /account/api-keys.
  2. Click Records next to the key.
  3. See the per-table count of what that key wrote (assets, bills, maintenance, income, valuations, payments). Optionally narrow by date window.
  4. Click Delete — type the key prefix to confirm — and the rows go away in dependency order.

You can also Revoke the key at any time. Existing rows stay; future calls 401.

Treat keys like passwords

Anyone holding a tau_… token can do whatever your account can do (within the key's scope). Don't paste them into chat logs, screenshots, or shared config files. Keys are stored hashed on our side; we can't recover one once you've left the reveal page.

Limits today

Need help?

Open an issue or send a note via your account page. The MCP spec is also a good read if your client misbehaves — most issues are config-file paths or forgetting to fully quit and relaunch.

The boring stuff, taken care of. tallyup.work