Skip to main content
Glama

Zenfinance

Server Details

Household finance memory, budgets, transactions, and monthly reviews for AI assistants.

Ownership verified

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

A4.4/5.0

Scored across 16 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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.

  1. 4 tool updates
    • Changededit_transaction5 fields changed
      • addedInput schema / properties / transactions / items / properties / category
        Added 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."
        +}
      • removedInput schema / properties / transactions / items / properties / category_id
        Removed 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."
        -}
      • changedInput schema / properties / transactions / items / properties / date / description
        Previous 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."
      • removedInput schema / properties / transactions / items / properties / tag_ids
        Removed 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."
        -}
      • addedInput schema / properties / transactions / items / properties / tags
        Added 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."
        +}
    • Changedget_transactions2 fields changed
      • changedInput schema / properties / end_date / description
        Previous 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."
      • changedInput schema / properties / start_date / description
        Previous 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."
    • Changedsave_transaction10 fields changed
      • addedInput schema / properties / expected_count
        Added 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."
        +}
      • changedInput schema / properties / operation_date / description
        Previous 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()."
      • changedInput schema / properties / org_id / description
        Previous value: -"Org UUID from get_user_context.orgs[].id."New value: +"Org UUID from get_user_context.orgs[].id (the org name also works)."
      • changedInput schema / properties / transactions / description
        Previous 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."
      • addedInput schema / properties / transactions / items / properties / category
        Added 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"
        +}
      • removedInput schema / properties / transactions / items / properties / category_id
        Removed value: -{
        -  "description": "Category tag UUID from get_user_context.orgs[].categories[].id.",
        -  "type": "string"
        -}
      • changedInput schema / properties / transactions / items / properties / date / description
        Previous 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."
      • removedInput schema / properties / transactions / items / properties / tag_ids
        Removed 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."
        -}
      • addedInput schema / properties / transactions / items / properties / tags
        Added 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."
        +}
      • changedInput schema / properties / transactions / items / required
        Previous value: -[
        -  "direction",
        -  "amount",
        -  "category_id"
        -]New value: +[
        +  "direction",
        +  "amount",
        +  "category"
        +]
    • Changedset_budget4 fields changed
      • changedInput schema / properties / budgets / description
        Previous 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."
      • addedInput schema / properties / budgets / items / properties / category
        Added value: +{
        +  "description": "Category slug from get_user_context.orgs[].categories[].name (e.g. 'groceries'); UUIDs also accepted.",
        +  "type": "string"
        +}
      • removedInput schema / properties / budgets / items / properties / category_id
        Removed value: -{
        -  "description": "Category tag UUID from get_user_context.orgs[].categories[].id.",
        -  "type": "string"
        -}
      • changedInput schema / properties / budgets / items / required
        Previous value: -[
        -  "category_id",
        -  "amount"
        -]New value: +[
        +  "category",
        +  "amount"
        +]
  2. 4 tool updates
    • Changedcreate_org1 field changed
      • addedInput schema / properties / purpose / description
        Added value: +"Org purpose: household, personal, business, or other."
    • Changedcreate_transaction_category1 field changed
      • addedInput schema / properties / kind / description
        Added value: +"Category kind: income, expense, or transfer."
    • Changedreport_feedback4 fields changed
      • addedInput schema / properties / area / description
        Added value: +"Product area this feedback relates to: onboarding, mcp_setup, household_setup, transactions, imports, categorization, budgets, monthly_summary, privacy_trust, pricing, performance, or other."
      • addedInput schema / properties / kind / description
        Added value: +"Feedback type: issue, suggestion, praise, question, rating, or observation."
      • addedInput schema / properties / sentiment / description
        Added value: +"Overall sentiment: positive, neutral, negative, or mixed."
      • addedInput schema / properties / severity / description
        Added value: +"Issue severity: low, medium, high, or critical."
    • Changedrespond_invitation1 field changed
      • addedInput schema / properties / decision / description
        Added value: +"'accept' to join the org as a member, or 'deny' to decline."
  3. 16 tool updates
    • First observedarchive_transaction_category
    • First observedcreate_org
    • First observedcreate_transaction_category
    • First observeddelete_transaction
    • First observededit_transaction
    • First observededit_transaction_category
    • First observedget_budget_status
    • First observedget_monthly_summary
    • First observedget_transactions
    • First observedget_user_context
    • First observedinvite_member
    • First observedlist_transaction_categories
    • First observedreport_feedback
    • First observedrespond_invitation
    • First observedsave_transaction
    • First observedset_budget

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Manage 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.
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources