Zenfinance
Server Details
Household finance memory, budgets, transactions, and monthly reviews for AI assistants.
Glama couldn't complete the latest health check. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 0.0% over 38 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 16 tools
Each tool targets a distinct resource and action: transaction categories have create/archive/edit/list; transactions have save/get/edit/delete; budgets have set and status; plus distinct tools for org management, invitations, and user context. No overlapping purposes.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_transaction_category, delete_transaction, get_budget_status). No mix of styles or vague verbs.
With 16 tools covering categories, transactions, budgets, org setup, invitations, and feedback, the count is appropriate for a personal finance server. Each tool serves a clear purpose without being overwhelming.
The tool surface covers core CRUD for transactions and categories, budget management, and org administration. Minor gap: no tool for managing accounts (e.g., create/update) beyond what's returned in get_user_context, but this may be by design for external account linking.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Changed
edit_transaction5 fields changed- added
Input schema / properties / transactions / items / properties / categoryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Replacement category slug from get_user_context.orgs[].categories[].name (e.g. 'restaurants'); UUIDs also accepted. Must match income/expense kind. Omit/null to keep current." +} - removed
Input schema / properties / transactions / items / properties / category_idRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Replacement category UUID from get_user_context.orgs[].categories[].id. Must match income/expense kind. Omit/null to keep current." -} - changed
Input schema / properties / transactions / items / properties / date / descriptionPrevious value: -"Replacement ISO 8601 date/time. Omit/null to keep current."New value: +"Replacement ISO 8601 timestamp, e.g. '2026-05-03T00:00:00-03:00'. Sent without an offset, the household's jurisdiction timezone is applied. Omit/null to keep current." - removed
Input schema / properties / transactions / items / properties / tag_idsRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Replacement tag UUIDs from get_user_context.transaction_tags[].id. Null=no change; []=clear all tags; list=replace all tags." -} - added
Input schema / properties / transactions / items / properties / tagsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Replacement tag names from get_user_context.transaction_tags[].name (UUIDs also accepted). Null=no change; []=clear all tags; list=replace all tags." +}
- Changed
get_transactions2 fields changed- changed
Input schema / properties / end_date / descriptionPrevious value: -"Exclusive ISO 8601 end date. Defaults to now if omitted."New value: +"Exclusive ISO 8601 end timestamp. Sent without an offset, the household's jurisdiction timezone is applied. Defaults to now if omitted." - changed
Input schema / properties / start_date / descriptionPrevious value: -"Inclusive ISO 8601 start date. Defaults to start of current month if omitted."New value: +"Inclusive ISO 8601 start timestamp, e.g. '2026-05-01T00:00:00-03:00'. Sent without an offset, the household's jurisdiction timezone is applied. Defaults to start of current month if omitted."
- Changed
save_transaction10 fields changed- added
Input schema / properties / expected_countAdded value: +{ + "anyOf": [ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "ALWAYS set this to the number of transaction rows you intend to send. If the server receives a different number (the client truncated your payload), it saves NOTHING and tells you how to resend safely." +} - changed
Input schema / properties / operation_date / descriptionPrevious value: -"ISO date or timestamp for the operation. Drives which month the batch shows up in on monthly cashflow reports; the per-transaction date stays the actual purchase date. Rules: for a single transaction or a same-period batch, set to the transaction date so a late-recorded purchase does not drift into today's month. For a credit card invoice: if the payment date falls in a different month than the invoice period (e.g. April invoice paid in May), use the close date — this keeps the batch in the correct spending month, not the payment month; if the payment date falls within the same month as the invoice period, use the payment date (actual cashflow, no misattribution). Leave null only when truly uncertain; the server defaults to now()."New value: +"ISO 8601 timestamp for the operation, e.g. '2026-05-31T00:00:00-03:00'. Include the UTC offset when known; sent without an offset, the household's jurisdiction timezone is applied (e.g. BR → America/Sao_Paulo). Drives which month the batch shows up in on monthly cashflow reports; the per-transaction date stays the actual purchase date. Rules: for a single transaction or a same-period batch, set to the transaction date so a late-recorded purchase does not drift into today's month. For a credit card invoice: if the payment date falls in a different month than the invoice period (e.g. April invoice paid in May), use the close date — this keeps the batch in the correct spending month, not the payment month; if the payment date falls within the same month as the invoice period, use the payment date (actual cashflow, no misattribution). Leave null only when truly uncertain; the server defaults to now()." - changed
Input schema / properties / org_id / descriptionPrevious value: -"Org UUID from get_user_context.orgs[].id."New value: +"Org UUID from get_user_context.orgs[].id (the org name also works)." - changed
Input schema / properties / transactions / descriptionPrevious value: -"Transaction lines to save under one Zen operation. Each item must include direction ('income' or 'expense'), amount, and category_id from get_user_context. When a user provides many files or a full year, process them without forcing one-file-at-a-time back-and-forth; group saves by source file or statement/bill period when useful for metadata and review. Omit account_id to use the Phase 1 default account. For credit-card bills, exclude previous-bill payment/total lines, save only installments present on this bill, fold clearly linked per-item taxes/fees into the purchase amount when supported by the statement/jurisdiction, skip fee/reimbursement ONLY when BOTH the original charge AND its refund for the same amount appear on the same bill (a true pair) — a standalone credit, estorno, or reimbursement that has no matching charge on this bill must be saved as income, not skipped, and do not invent FX rates; preserve original currency/amount in notes when not normalized. Optional fields: date, account_id, description, counterparty, statement_line_id."New value: +"Transaction lines to save under one Zen operation. Each item must include direction ('income' or 'expense'), amount, and category (slug like 'groceries' from get_user_context). Send the full statement in ONE call (up to 500 rows) and set expected_count so payload truncation is detected. When a user provides many files or a full year, process them without forcing one-file-at-a-time back-and-forth; group saves by source file or statement/bill period when useful for metadata and review. Omit account_id to use the Phase 1 default account. For credit-card bills, exclude previous-bill payment/total lines, save only installments present on this bill, fold clearly linked per-item taxes/fees into the purchase amount when supported by the statement/jurisdiction, skip fee/reimbursement ONLY when BOTH the original charge AND its refund for the same amount appear on the same bill (a true pair) — a standalone credit, estorno, or reimbursement that has no matching charge on this bill must be saved as income, not skipped, and do not invent FX rates; preserve original currency/amount in notes when not normalized. Optional fields: date, account_id, description, counterparty, statement_line_id, tags." - added
Input schema / properties / transactions / items / properties / categoryAdded value: +{ + "description": "Category slug from get_user_context.orgs[].categories[].name (e.g. 'groceries', 'salary'). Slugs are preferred — they are short and cannot be corrupted in transit. Category UUIDs are also accepted. The category's kind must match direction (income vs expense).", + "type": "string" +} - removed
Input schema / properties / transactions / items / properties / category_idRemoved value: -{ - "description": "Category tag UUID from get_user_context.orgs[].categories[].id.", - "type": "string" -} - changed
Input schema / properties / transactions / items / properties / date / descriptionPrevious value: -"Optional ISO 8601 transaction date/time. Defaults to the operation date. For card installments, use the actual purchase date as shown on the statement; operation_date handles monthly attribution separately."New value: +"Optional ISO 8601 transaction timestamp, e.g. '2026-05-03T00:00:00-03:00'. Include the UTC offset when known; if sent without an offset, the household's jurisdiction timezone is applied. Defaults to the operation date. For card installments, use the actual purchase date as shown on the statement; operation_date handles monthly attribution separately." - removed
Input schema / properties / transactions / items / properties / tag_idsRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional list of system tag UUIDs from get_user_context.transaction_tags[].id. Apply 'subscription' tag to any recurring fixed-period charge (streaming, SaaS, gym, apps, news). Apply 'tax_deductible' tag to expenses that may be deductible from personal income tax in the org's jurisdiction (e.g. Brazil IRPF: medical/health, education, pension contributions, qualifying donations, dependents expenses). A transaction may carry both tags. Omit or pass null to save without tags." -} - added
Input schema / properties / transactions / items / properties / tagsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional list of system tag names from get_user_context.transaction_tags[].name (UUIDs also accepted). Apply 'subscription' to any recurring fixed-period charge (streaming, SaaS, gym, apps, news). Apply 'tax_deductible' to expenses that may be deductible from personal income tax in the org's jurisdiction (e.g. Brazil IRPF: medical/health, education, pension contributions, qualifying donations, dependents expenses). A transaction may carry both tags. Omit or pass null to save without tags." +} - changed
Input schema / properties / transactions / items / requiredPrevious value: -[ - "direction", - "amount", - "category_id" -]New value: +[ + "direction", + "amount", + "category" +]
- Changed
set_budget4 fields changed- changed
Input schema / properties / budgets / descriptionPrevious value: -"Budget entries to set or update. Each item must include category_id and amount. enabled defaults to true. Use amount=0 with enabled=false to disable a category budget."New value: +"Budget entries to set or update. Each item must include category (slug like 'groceries'; UUID also accepted) and amount. enabled defaults to true. Use amount=0 with enabled=false to disable a category budget." - added
Input schema / properties / budgets / items / properties / categoryAdded value: +{ + "description": "Category slug from get_user_context.orgs[].categories[].name (e.g. 'groceries'); UUIDs also accepted.", + "type": "string" +} - removed
Input schema / properties / budgets / items / properties / category_idRemoved value: -{ - "description": "Category tag UUID from get_user_context.orgs[].categories[].id.", - "type": "string" -} - changed
Input schema / properties / budgets / items / requiredPrevious value: -[ - "category_id", - "amount" -]New value: +[ + "category", + "amount" +]
4 tool updates
- Changed
create_org1 field changed- added
Input schema / properties / purpose / descriptionAdded value: +"Org purpose: household, personal, business, or other."
- Changed
create_transaction_category1 field changed- added
Input schema / properties / kind / descriptionAdded value: +"Category kind: income, expense, or transfer."
- Changed
report_feedback4 fields changed- added
Input schema / properties / area / descriptionAdded value: +"Product area this feedback relates to: onboarding, mcp_setup, household_setup, transactions, imports, categorization, budgets, monthly_summary, privacy_trust, pricing, performance, or other." - added
Input schema / properties / kind / descriptionAdded value: +"Feedback type: issue, suggestion, praise, question, rating, or observation." - added
Input schema / properties / sentiment / descriptionAdded value: +"Overall sentiment: positive, neutral, negative, or mixed." - added
Input schema / properties / severity / descriptionAdded value: +"Issue severity: low, medium, high, or critical."
- Changed
respond_invitation1 field changed- added
Input schema / properties / decision / descriptionAdded value: +"'accept' to join the org as a member, or 'deny' to decline."
16 tool updates
- First observed
archive_transaction_category - First observed
create_org - First observed
create_transaction_category - First observed
delete_transaction - First observed
edit_transaction - First observed
edit_transaction_category - First observed
get_budget_status - First observed
get_monthly_summary - First observed
get_transactions - First observed
get_user_context - First observed
invite_member - First observed
list_transaction_categories - First observed
report_feedback - First observed
respond_invitation - First observed
save_transaction - First observed
set_budget
Related MCP Connectors
Personal-finance workspace for AI agents: accounts, spending, budgets, goals, and investments.
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Personal finance for AI agents — onboard, import statements, categorize & budget over MCP.
Personal finance ledger for AI agents — query spending, track bills, forecast cash flow.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to securely manage and analyze personal finances through natural language, with full control over data via a private PostgreSQL database.12MIT
- AlicenseNot gradedqualityBmaintenanceManage your finances through natural language directly in your AI assistant. Add, edit, delete, and query expenses; set monthly budgets; and generate comprehensive spending reports seamlessly.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables families to manage shared expenses, income, budgets, and financial reports through natural language, with all data stored in PostgreSQL and exposed as MCP tools to compatible LLM clients.-
- AlicenseNot gradedqualityFmaintenanceEnables AI agents to manage personal expenses through natural language conversations. Supports adding, searching, and analyzing transactions with automatic categorization and financial insights.3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.