Skip to main content
Glama

Senaro Personal Finance

Emergency Fund Calculator

calculate_emergency_fund
Read-onlyIdempotent

Calculation, not advice. Verify with a professional before acting. Size an emergency fund target based on the borrower's monthly essential expenses, job stability, dependents, and income redundancy. Returns a tier breakdown (minimum, target, conservative; the target row is omitted when it equals the 3-month minimum, and the conservative row is omitted when it equals the 12-month ceiling), the gap between current savings and the target, and time-to-target at the supplied monthly savings cadence. Pick this to size an emergency-fund target; pick calculate_runway when savings are already fixed and the question is how many months they will last, not what the target is. Pairs with debt-payoff content for the recurring 'save vs pay debt' question. Target months are clamped to [3, 12]: never below the 3-month personal-finance minimum, never above 12.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dependentsNoNumber of dependents. Integer from 0 to 20. +1 target month per dependent, capped at +3. Optional; defaults to 0 when omitted.
chart_titleNoOverride for the chart title. Must not contain em-dashes or en-dashes. Max 120 characters. Optional.
job_stabilityNo'stable_w2' | 'variable_income' | 'self_employed' | 'between_jobs'. Drives the target-months multiplier: stable_w2 salaried W-2 with consistent paycheck (+0 months); variable_income W-2 with commission/bonus/shift-based pay (+1 month); self_employed 1099 contractor/freelancer/sole proprietor (+3 months); between_jobs actively job hunting, no current paycheck (+5 months). Optional; defaults to 'stable_w2' when omitted.
current_savingsNoWhat you have in liquid emergency-accessible savings today. Decimal from 0 to $1,000,000,000. Optional; defaults to 0 when omitted.
has_dual_incomeNoWhen true, partner income reduces the buffer by 1 month. Optional; defaults to false when omitted.
monthly_savings_capacityNoWhat you can contribute toward the gap each month. Drives months_to_target. Decimal, either 0 or from $0.01 to $1,000,000,000. Optional; defaults to 0 when omitted.
monthly_essential_expensesYesRent/mortgage + utilities + food + insurance + minimum debt payments. NOT discretionary spending. Decimal from $0.01 to $1,000,000,000. REQUIRED, no default.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / chart_title / maxLength
      Added value: +120
    • addedInput schema / properties / job_stability / enum
      Added value: +[
      +  "stable_w2",
      +  "variable_income",
      +  "self_employed",
      +  "between_jobs",
      +  null
      +]
    • addedInput schema / properties / monthly_essential_expenses / minimum
      Added value: +0.01
  2. Changed9 schema fields changed
    • addedInput schema / properties / chart_title
      Added value: +{
      +  "default": null,
      +  "description": "Override for the chart title. Must not contain em-dashes or en-dashes. Max 120 characters. Optional.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / current_savings
      Added value: +{
      +  "default": null,
      +  "description": "What you have in liquid emergency-accessible savings today. Decimal from 0 to $1,000,000,000. Optional; defaults to 0 when omitted.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / dependents
      Added value: +{
      +  "default": null,
      +  "description": "Number of dependents. Integer from 0 to 20. +1 target month per dependent, capped at +3. Optional; defaults to 0 when omitted.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / has_dual_income
      Added value: +{
      +  "default": null,
      +  "description": "When true, partner income reduces the buffer by 1 month. Optional; defaults to false when omitted.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / job_stability
      Added value: +{
      +  "default": null,
      +  "description": "'stable_w2' | 'variable_income' | 'self_employed' | 'between_jobs'. Drives the target-months multiplier: stable_w2 salaried W-2 with consistent paycheck (+0 months); variable_income W-2 with commission/bonus/shift-based pay (+1 month); self_employed 1099 contractor/freelancer/sole proprietor (+3 months); between_jobs actively job hunting, no current paycheck (+5 months). Optional; defaults to 'stable_w2' when omitted.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / monthly_essential_expenses
      Added value: +{
      +  "description": "Rent/mortgage + utilities + food + insurance + minimum debt payments. NOT discretionary spending. Decimal from $0.01 to $1,000,000,000. REQUIRED, no default.",
      +  "type": "number"
      +}
    • addedInput schema / properties / monthly_savings_capacity
      Added value: +{
      +  "default": null,
      +  "description": "What you can contribute toward the gap each month. Drives months_to_target. Decimal, either 0 or from $0.01 to $1,000,000,000. Optional; defaults to 0 when omitted.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • removedInput schema / properties / toolArguments
      Removed value: -{
      -  "description": "JSON object with these parameters:\n\nmonthly_essential_expenses: decimal > 0 (REQUIRED). Rent/mortgage + utilities + food + insurance + minimum debt payments. NOT discretionary spending.\ncurrent_savings: decimal >= 0 (optional, default 0). What you have in liquid emergency-accessible savings today.\njob_stability: 'stable_w2' | 'variable_income' | 'self_employed' | 'between_jobs' (optional, default 'stable_w2'). Drives the target-months multiplier.\n  stable_w2: salaried W-2 with consistent paycheck (+0 months).\n  variable_income: W-2 with commission/bonus/shift-based pay (+1 month).\n  self_employed: 1099 contractor / freelancer / sole proprietor (+3 months).\n  between_jobs: actively job hunting, no current paycheck (+5 months).\ndependents: int >= 0 (optional, default 0). +1 target month per dependent, capped at +3.\nhas_dual_income: bool (optional, default false). When true, partner income reduces the buffer by 1 month.\nmonthly_savings_capacity: decimal >= 0 (optional, default 0). What you can contribute toward the gap each month. Drives months_to_target.\n\nTarget months are clamped to [3, 12]: never below the 3-month personal-finance minimum, never above 12 (excess cash is better invested than parked).\nchart_title: string (optional) override for the chart title. Must not contain em-dashes or en-dashes. Max 120 characters."
      -}
    • changedInput schema / required
      Previous value: -[
      -  "toolArguments"
      -]New value: +[
      +  "monthly_essential_expenses"
      +]
  3. First observed

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds behavioral nuances beyond that: tier omission rules, clamping to [3,12], and the 'Calculation, not advice' caveat. It does not contradict annotations and adds algorithmic context. Slightly more depth (e.g., on error handling) could push to 5, but it is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is informative and well-organized, starting with the core purpose and proceeding to outputs, usage guidance, and constraints. Every sentence earns its place, though it is somewhat long. It could be tightened without losing critical context, but it is not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully explains return values (tier breakdown, gap, time-to-target) and covers edge cases like tier omissions and clamping. It also includes the professional-verification caveat. For a calculator tool, nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter fully documented (types, ranges, defaults). The description summarizes the key inputs but does not add semantic detail beyond what the schema already states. Per the rubric, this is the baseline 3; it does not compensate or extend schema information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear, specific verb and resource: 'Size an emergency fund target based on the borrower's monthly essential expenses, job stability, dependents, and income redundancy.' It also names the output components (tier breakdown, gap, time-to-target), making the tool's function unmistakable. It directly differentiates from the sibling calculate_runway by contrasting the questions each answers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit selection guidance: 'Pick this to size an emergency-fund target; pick `calculate_runway` when savings are already fixed and the question is how many months they will last, not what the target is.' Also adds context for the 'save vs pay debt' question, showing situational awareness. This is exemplary usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources