MCP integration
72 tools · 17 prompts · free for every tier
ldgr exposes an MCP server at https://api.ldgr.money/mcp. Connect any MCP client — Claude Desktop, Cursor, or your own agent.
Two ways to connect: OAuth 2.1 (recommended for end users — browser-based consent, no token copy/paste) or API key (for custom scripts / CLI tools, manual Authorization: Bearer header). Both honor the same scopes (read / write / delete), are SHA-256 hashed on storage, revocable anytime, and free for every subscription tier. Every call goes through the same service-layer membership and tier checks as the REST API — MCP can only access data the user can already access in the app.
Setup — OAuth (Claude Desktop, Cursor, claude.ai Connectors)
- In your AI client's settings, add a custom connector / MCP server with URL
https://api.ldgr.money/mcp. - The client opens your browser at the ldgr authorization page.
- Sign in with the same Google or Apple account you use in the ldgr mobile app.
- The consent page lists what the AI client wants to access (
read,write,delete). Toggle individual scopes off if you want to limit it. - Click Authorize. The connector shows as connected. All 72 tools are usable.
To disconnect: either click "Disconnect" in your AI client's connector list, or open the ldgr mobile app → Profile → API Keys → Connected integrations → tap the trash icon. Either path immediately invalidates the access + refresh tokens server-side.
Setup — API key (developer flow)
For custom scripts and CLI tools, or any case where you don't have an OAuth-aware client.
- In the mobile app: Profile → API Keys → +. Pick scopes, copy the key — shown only once.
- Send
Authorization: Bearer ldgr_sk_…on every request.
For older Claude Desktop versions that accept manual config, edit claude_desktop_config.json:
{
"mcpServers": {
"ldgr": {
"url": "https://api.ldgr.money/mcp",
"headers": {
"Authorization": "Bearer ldgr_sk_..."
}
}
}
} Restart the client. It will discover all tools and prompts automatically — no further configuration needed.
Read tools (42)
Available with the read scope. Used to query the ledger without mutating anything.
list_groups— List all groups the user belongs tolist_group_members— Active members of a group (IDs + names)list_expenses— Expenses in a group (for duplicate checks)list_settlements— Settlements in a groupget_expense— Full expense detail including splits and itemslist_categories— 125 valid expense category keyslist_avatars— Valid avatar keys for groups & personal spaces — mobile renders each as an emojilist_currencies— Supported currency codesget_group_balances— Pairwise balances — who owes whomlist_income_categories— Income category keyslist_incomes— Incomes in a personal spaceget_income— Full income detaillist_income_templates— Recurring + planned income templateslist_expense_templates— Recurring + planned expense templatesget_cash_flow— Monthly income vs expense seriesget_income_by_category— Income breakdown by categoryget_spending_by_category— Expense breakdown by categoryget_personal_summary— Cross-personal-space rollupget_forecast_summary— Balance forecast summarylist_comments— Comments on an expense or incomesearch— Relevance-ranked search across expenses, incomes, settlements, groupsget_my_finances_shared— My Finances "Shared" tab — cross-group income / expense / netget_my_finances_private— My Finances "Private" tab — personal-space rollupget_weekly_summary_latest— Most recent weekly summary snapshotget_weekly_summary— A specific weekly summary by IDlist_activity— Recent activity items, cursor-paginatedlist_timeline_people— People you have financial interactions withlist_timeline_items— Interactions between you and another personget_pairwise_balance— Net balance with another personlist_forecast_entries— Cursor-paginated individual forecast entrieslist_accounts— Payment accounts (PayPal, Bunq, Monzo, Revolut, IBAN, custom)get_account— One payment account in detailget_spending_status— Per-group spending limit statusget_category_spending_status— Per-category spending status (Pro)list_notifications— Notifications, newest firstget_unread_notification_count— Unread notification countget_entitlements— Resolved tier and per-feature flagsget_profile— Authenticated user profilelist_group_invites— Active invite links for a groupget_spending_by_member— Expense spending broken down by member for a groupget_spending_monthly_trend— Month-over-month spending totals for a grouplist_balance_adjustments— Audit trail of set_balance_snapshot calls for a personal space
Write & delete tools (30)
write covers create / update / approve / pause / resume. delete covers destructive operations. All write tools that create new entries support dry_run: true — the client can preview exactly what would be created before committing. Delete and update operations use optimistic locking via the entity's version field.
create_expensewrite — Create an expense with splits. Supports dry_run.create_settlementwrite — Record a settlement between members. Supports dry_run.delete_expensedelete — Delete an expense (requires version).delete_settlementdelete — Delete a settlement (requires version).create_incomewrite — Create an income in a personal space. Supports dry_run.delete_incomedelete — Delete an income (requires version).create_income_templatewrite — Create a recurring or planned income template.create_expense_templatewrite — Create a recurring or planned expense template.create_commentwrite — Comment on an expense or income.update_expensewrite — Update an expense and replace its splits (creator/admin, optimistic lock).update_incomewrite — Update an income (owner, optimistic lock).update_expense_templatewrite — Update an expense template (creator/admin, optimistic lock).delete_expense_templatedelete — Delete an expense template (creator/admin, requires version).pause_expense_templatewrite — Pause a recurring expense template.resume_expense_templatewrite — Resume a paused expense template.update_income_templatewrite — Update an income template (owner, optimistic lock).delete_income_templatedelete — Delete an income template (owner).pause_income_templatewrite — Pause a recurring income template.resume_income_templatewrite — Resume a paused income template.approve_pending_expensewrite — Approve a pending template-generated expense, with optional overrides.approve_pending_incomewrite — Approve a pending template-generated income, with optional overrides.delete_commentdelete — Delete a comment (author-only).create_groupwrite — Create a shared group or personal space; caller becomes admin.update_groupwrite — Update name / description / base currency / avatar / spending limit (admin, optimistic lock).create_accountwrite — Add a payment account (PayPal, Bunq, Monzo, Revolut, IBAN, custom). Pro feature.update_accountwrite — Update a payment account's handle / label / currency / sort order / group visibility.delete_accountdelete — Delete a payment account; existing settlements are unaffected.update_category_spending_limitswrite — Replace per-category spending limits for a group (admin, Pro).set_balance_snapshotwrite — Set or update the forecast anchor balance for a personal space; appends an audit row.delete_balance_snapshotdelete — Remove the forecast anchor; idempotent. Adjustment history preserved.
Prompts (17)
Prompts are pre-written agentic flows the client discovers via prompts/list. Each one walks the AI through a multi-step workflow — listing groups, fetching context, asking for confirmation, then executing tool calls. Use them to skip the "which tool do I need?" step.
import-splitwise— Parse a Splitwise CSV export and import into a group. Matches names, checks duplicates, dry-runs first.import-bank-statement— Parse a bank statement and import into a group. Asks about split method and categories.import-income— Parse income data and create entries / templates in a personal space.summarize-group— Natural-language group summary anchored on spending-limit status, recent activity, category breakdown.settle-up-plan— Suggest optimal settlements to resolve all debts.personal-finance-review— Cross-space review with My Finances + per-space forecast + upcoming entries. Tier-aware.forecast-planning— Model what-if scenarios using forecast summary + entries + templates; offers to implement.expense-audit— Walk recent expenses for anomalies, duplicates, missing categories.budget-optimization— Income vs spending vs existing limits; offers template housekeeping.weekly-financial-checkin— Monday standup: weekly summary + notifications + this-week vs last-week deltas + watch list.pending-approval-batch— Sweep pending template items, approve / override / skip each.find-and-fix— Search → fetch entity → confirm → update or delete. The natural language entry point for editing.prepare-month-end— Close-the-books ritual: month rollup, upcoming entries, limit status, account suggestions.manage-recurring— Walk all templates, classify (healthy / paused / stale / misconfigured), offer pause / resume / update / delete.setup-group— Create a new shared group or personal space, then optionally configure spending limits (group-wide and per-category) and a starting balance snapshot.manage-accounts— Review and configure payment accounts — list, add, edit, remove. Pro feature.settle-with-accounts— Settle debts in a group, picking a payment account by currency match and surfacing its handle in the settlement description.
Security model
- Tokens are personal. Each token belongs to one user and acts on their behalf. There is no shared / org-level token.
- Server-side membership checks. Every tool runs the same RBAC checks the REST API runs. A token cannot access a group its owner is not in.
- Tier gating preserved. Supporter-only fields (forecast NetBalance, Recurring) are stripped from MCP responses for non-Supporter tokens, exactly as in the app.
- No AI on the server. ldgr never calls an AI provider for MCP requests. The AI lives in the user's client; the user pays for the AI; ldgr serves data.
- Hashed at rest. Raw tokens are shown once at creation time and never stored — only their SHA-256 hash is kept. Lost tokens are revoked + reissued, never recovered.
- Rate-limited. Standard per-user and per-IP rate limits apply.
Amounts and dates
All amounts are in minor units (cents). $12.50 = 1250. JPY (0 decimals) and BHD (3 decimals) follow ISO 4217 — the server scales correctly. All dates are RFC3339 (e.g. 2026-04-15T00:00:00Z).
Discovery and validation
Before creating or updating anything, AI clients should call list_categories, list_income_categories, list_avatars, and list_currencies once at the start of a session to discover valid keys. Hold onto the returned key sets for the rest of the conversation — any category, avatar, or currency you pass into a write tool must be one of these exact keys. Never invent values from natural language without mapping them to a returned key first. Built-in prompts already follow this rule; custom flows should too. Calling a tool with an invalid key returns a typed validation error the AI can read and recover from.
Questions
For integration questions or to report an issue, contact hello@ldgr.money.