Foresight Planner
Server Details
Will my retirement savings last? A free anonymous check, or a full plan once you sign in.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
- ChatGPT
- โ
- Claude
- โ
TDQS
Score is being calculated.
Available Tools
3 toolsget_plan_resultGet a plan resultARead-onlyInspect
Gets the result of a Foresight Planner plan that run_plan started but that was still running when run_plan answered. Pass the run_id run_plan gave. Free: it uses no plan run. If the plan is still running, it says so; call it again a little later.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | The run_id run_plan gave. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| benefits | Yes | |
| end_ages | Yes | Fixed horizon: each person's age at the end of their own horizon, by person label. Null under life expectancy. |
| plan_url | Yes | Link to the saved plan on the site, with the year-by-year detail: give it to the person. |
| runs_left | Yes | |
| runs_used | Yes | |
| start_age | Yes | |
| not_advice | Yes | |
| runs_limit | Yes | |
| assumptions | Yes | |
| plan_to_age | Yes | Fixed horizon, one person: their age at plan end. Null for a couple, whose partners plan to their own ages (see end_ages), and under life expectancy, where each path ends at its own sampled death. |
| runs_window | Yes | The period runs_used and runs_limit count over: a year on the Free plan, a calendar month on Pro. |
| horizon_mode | Yes | |
| horizon_stats | Yes | Life expectancy: the spread of simulated lifetimes. Null on a fixed horizon. |
| horizon_years | Yes | Fixed horizon: the plan's length in years (a couple's longer horizon). Null under life expectancy; see horizon_stats. |
| n_simulations | Yes | |
| plan_end_year | Yes | Fixed horizon: the calendar year the plan ends, at the end of the longest horizon. Null under life expectancy. |
| lifetime_taxes | Yes | Income tax over the whole plan: each path's total, as a mean over the paths (not a median), in today's dollars, the OAS clawback included as its own line. |
| taxes_modelled | Yes | |
| wealth_at_ages | Yes | Fixed horizon: portfolio value at retirement, each year the first person's age is a multiple of 10, and plan end. Null under life expectancy; see wealth_at_end_of_life. |
| data_attribution | Yes | |
| household_totals | Yes | True for a couple: benefit and pension amounts cover both partners together. |
| median_failure_age | Yes | The first person's age in the median year money ran out; null when no path ran out. |
| success_probability | Yes | |
| first_retirement_year | Yes | |
| reused_run_started_at | Yes | Set when this answer reused an identical run of the same inputs from this assistant in the last 15 minutes: when that run started. Nothing was charged for this call, so runs_used is unchanged by it. Null for a run of its own. |
| wealth_at_end_of_life | Yes | Life expectancy: portfolio value when each path ends (the last person's death, or a fixed-horizon partner's plan end if later). Null on a fixed horizon. |
| benefits_after_plan_end | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the provided readOnlyHint/destructiveHint annotations, it discloses two non-obvious behaviors: the call consumes no plan run ("Free: it uses no plan run") and it is a polling-style async retrieval that may return an in-progress status. Neither fact is derivable from structured fields, so this is genuine added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then provenance, then cost, then polling behavior โ a sensible order with almost no waste. The "Free: it uses no plan run" phrasing is slightly terse but carries real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter async poller with an output schema, the description covers the essential gaps: where the run_id comes from, cost, and in-progress behavior. It stops short of stating what happens with an invalid or expired run_id, but return-value shape is covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter at 100% schema coverage, the schema already documents run_id and its UUID pattern. The description's "Pass the run_id run_plan gave" restates the schema's provenance note rather than adding format or error semantics, so the baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Gets the result of a Foresight Planner plan") and immediately scopes it to plans that run_plan started but were still running, which cleanly separates it from run_plan. The purpose is unambiguous without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (only for plans that were still running when run_plan answered) and how to trigger it ("Pass the run_id run_plan gave"). It also prescribes the follow-up behavior for the still-running case ("call it again a little later"), leaving no inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retirement_quick_checkRetirement Quick CheckARead-onlyInspect
Will my retirement savings last? Estimates the chance a portfolio lasts through retirement, given savings, yearly spending, years in retirement and the share in bonds, from simulations on global market history (with a US-only comparison). A horizon given as ages works: years = end age minus current age (retiring at 68 until 94 is 26 years). It leaves out taxes, CPP/OAS, pensions and other income. Foresight Planner's full plan at https://foresightplanner.com/ai includes them; when a question turns on them, point the person there (the result links it too).
| Name | Required | Description | Default |
|---|---|---|---|
| years | Yes | Years the money must last (end age minus current age). | |
| bond_percent | Yes | Percent of the portfolio in bonds, 0-100. | |
| annual_spending | Yes | Yearly spending from savings, in today's dollars. | |
| portfolio_value | Yes | Retirement savings in dollars. |
Output Schema
| Name | Required | Description |
|---|---|---|
| years | Yes | |
| summary | Yes | |
| us_only | Yes | |
| full_plan | Yes | |
| not_advice | Yes | |
| assumptions | Yes | |
| diversified | Yes | |
| result_kind | Yes | |
| us_only_note | Yes | |
| full_plan_url | Yes | |
| withdrawal_rate | Yes | |
| data_attribution | Yes | |
| bond_percent_used | Yes | |
| withdrawal_rate_used | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the answer is a simulated probability based on global market history, and the calculation deliberately omits taxes, government benefits and pensions, which tells the agent how far to trust the number.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the opening question and first clause, and the exclusions and horizon conversion follow logically. It is somewhat chatty, and the horizon arithmetic partially restates what the schema already explains, but no sentence is dead weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description covers scope, modeling basis, explicit omissions and a redirect, which is sufficient for a four-parameter calculator, though the relationship to the sibling planning tools is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, and the baseline is 3. The description maps the inputs in prose and supplies a worked horizon example (68 to 94 means 26 years), but the schema's own years field already says 'end age minus current age', so the added value is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: estimates the probability a portfolio lasts through retirement from simulations on global market history, with a US-only comparison. The inputs listed (savings, spending, years, bond share) make the scope unmistakable, though it never names or contrasts itself with the sibling tools run_plan or get_plan_result.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-not guidance: it leaves out taxes, CPP/OAS, pensions and other income, and directs the person to Foresight Planner's full plan when the question turns on those. That is a clear exclusion plus an alternative, but the alternative is an external URL rather than the sibling tools, so an agent still has no stated rule for choosing this over run_plan.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_planRun a retirement planAInspect
Runs a full Foresight Planner retirement plan for a person or couple living in Canada (outside Quebec) or the US, on the person's Foresight Planner account. It returns the chance the money lasts, from simulations on global market history; income tax in the first retirement year and over the whole plan (federal, provincial or state, and the OAS clawback; the whole-plan figure is each path's total, as a mean over the paths); each government benefit (CPP and OAS, or Social Security) and employer pension with its start age and yearly amount from each year a claim starts or a pension ends, as household totals for a couple; spending in the first retirement year and the cash flow that adds up to it: benefits and pensions, employment and other income, dividends and interest, and withdrawals from accounts, less tax and any amount reinvested (withdrawals alone are not the spending), with withdrawals split by account and the year's taxable income before credits; and portfolio value percentiles at key ages (at the end of life on a life-expectancy horizon), all in today's dollars. Use it when a question turns on benefit start ages, pensions, taxes or account types; to compare start ages, call it once per option. If the person hasn't said their age, province or state, savings or spending, ask; don't guess. Pass only what the person said: inputs left out take the plan's defaults, which the result lists as assumptions. Each call uses one of the account's plan runs (the same inputs again within 15 minutes are free), and the result says how many are left. A plan that takes longer than about 40 seconds returns a run_id instead: get its result with get_plan_result. The result links the saved plan on https://foresightplanner.com, where the person sees the year-by-year detail and can change any input.
| Name | Required | Description | Default |
|---|---|---|---|
| tax | Yes | ||
| person1 | Yes | ||
| person2 | No | ||
| accounts | Yes | ||
| essential | No | floor_ceiling and yale only: the yearly spending that never flexes, in today's dollars a YEAR, at most withdrawal_amount; the rest can be cut in bad years. Left out, it is the plan builder's default, the smaller of $35,000 and withdrawal_amount. Null is the only value for constant_dollar; under floor_ceiling or yale null makes the WHOLE spending the floor, so none of it flexes. | |
| floor_pct | No | floor_ceiling only: the largest yearly cut in real spending, as a FRACTION 0-1 (0.025 means spending can fall at most 2.5% a year below inflation). | |
| plan_name | No | A short name for this scenario as the person would recognise it, e.g. 'CPP at 70' or 'Retire at 60'. Name each option differently when comparing. | |
| allocation | No | ||
| ceiling_pct | No | floor_ceiling only: the largest yearly raise in real spending, as a FRACTION 0-1 (0.05 means spending can rise at most 5% a year above inflation). | |
| life_events | No | ||
| random_seed | No | Seed for the simulated market paths. A fresh plan fixes it, so runs and comparisons use the same market paths; null draws fresh paths on each new run (the same run_plan call again within 15 minutes returns the earlier run). | |
| block_length | No | Length in MONTHS of each run of consecutive market history the simulation samples (120 means 10 years). Longer blocks keep more of history's long good and bad spells. | |
| yale_smoothing | No | yale only: the weight, as a FRACTION 0-1, on last year's spending grown with inflation; the rest follows the portfolio's value. 1 behaves like constant_dollar, 0 like a fixed percentage of the portfolio. | |
| resident_country | Yes | ||
| withdrawal_amount | Yes | Annual spending in today's dollars, after tax, from all sources (benefits, pensions, other income, investment income and withdrawals); not the portfolio withdrawal. Under floor_ceiling and yale it is the first year's spending, which then moves with the portfolio. | |
| withdrawal_strategy | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| benefits | Yes | |
| end_ages | Yes | Fixed horizon: each person's age at the end of their own horizon, by person label. Null under life expectancy. |
| plan_url | Yes | Link to the saved plan on the site, with the year-by-year detail: give it to the person. |
| runs_left | Yes | |
| runs_used | Yes | |
| start_age | Yes | |
| not_advice | Yes | |
| runs_limit | Yes | |
| assumptions | Yes | |
| plan_to_age | Yes | Fixed horizon, one person: their age at plan end. Null for a couple, whose partners plan to their own ages (see end_ages), and under life expectancy, where each path ends at its own sampled death. |
| runs_window | Yes | The period runs_used and runs_limit count over: a year on the Free plan, a calendar month on Pro. |
| horizon_mode | Yes | |
| horizon_stats | Yes | Life expectancy: the spread of simulated lifetimes. Null on a fixed horizon. |
| horizon_years | Yes | Fixed horizon: the plan's length in years (a couple's longer horizon). Null under life expectancy; see horizon_stats. |
| n_simulations | Yes | |
| plan_end_year | Yes | Fixed horizon: the calendar year the plan ends, at the end of the longest horizon. Null under life expectancy. |
| lifetime_taxes | Yes | Income tax over the whole plan: each path's total, as a mean over the paths (not a median), in today's dollars, the OAS clawback included as its own line. |
| taxes_modelled | Yes | |
| wealth_at_ages | Yes | Fixed horizon: portfolio value at retirement, each year the first person's age is a multiple of 10, and plan end. Null under life expectancy; see wealth_at_end_of_life. |
| data_attribution | Yes | |
| household_totals | Yes | True for a couple: benefit and pension amounts cover both partners together. |
| median_failure_age | Yes | The first person's age in the median year money ran out; null when no path ran out. |
| success_probability | Yes | |
| first_retirement_year | Yes | |
| reused_run_started_at | Yes | Set when this answer reused an identical run of the same inputs from this assistant in the last 15 minutes: when that run started. Nothing was charged for this call, so runs_used is unchanged by it. Null for a run of its own. |
| wealth_at_end_of_life | Yes | Life expectancy: portfolio value when each path ends (the last person's death, or a fixed-horizon partner's plan end if later). Null on a fixed horizon. |
| benefits_after_plan_end | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only say it is not read-only, not destructive, not open-world), it discloses the credit model (one plan run per call, repeats within 15 minutes free, result reports remaining runs), the 40-second timeout handing off to get_plan_result with a run_id, and that a saved plan is created and linked. Omitted inputs defaulting to plan assumptions is also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and country scope are front-loaded, but the middle is one very long run-on sentence enumerating return values (taxes, benefits, spending cash flow, percentiles) that is hard to parse and partly redundant given an output schema exists. The operational guidance at the end (run_id, credits, saved plan link) is tighter and better placed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter simulation tool it covers the essentials an agent needs: scope, when to ask for missing facts, default behaviour, cost per call, timeout handoff, and where results persist. Field-level parameter guidance is left to the schema, and return values are covered by the output schema, so remaining gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% across 16 parameters, so the description would need to compensate, and it largely does not address individual parameters. It does add the important calling convention 'Pass only what the person said: inputs left out take the plan's defaults, which the result lists as assumptions', which tells the agent not to fabricate values, but gives no field-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Runs a full Foresight Planner retirement plan') and scopes it to a person or couple in Canada outside Quebec or the US. It is plainly distinguishable from get_plan_result (which fetches a finished run) and retirement_quick_check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use criteria ('when a question turns on benefit start ages, pensions, taxes or account types'), an explicit alternative pattern ('to compare start ages, call it once per option'), and a when-not rule ('If the person hasn't said their age, province or state, savings or spending, ask; don't guess').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- First observed
get_plan_result - First observed
retirement_quick_check - First observed
run_plan
Related MCP Connectors
Run hypothetical retirement simulations and compare outcomes using your assumptions.
When can you retire? A FIRE plan from your numbers, graded by Monte Carlo and every year since 1872.
Free Canadian retirement projections and one what-if from confirmed inputs. No Glacier account.
Read your household's long-range financial plan, try what-ifs and keep the plan up to date.
Related MCP Servers
FlicenseNot gradedqualityDmaintenanceTax-aware retirement planning for Canada and the US. CPP/OAS and Social Security timing, RRSP/TFSA/401k/IRA projections, Monte Carlo simulation, withdrawal order optimization, and historical backtesting against 150 years of market data.2-- AlicenseNot gradedqualityBmaintenanceThis MCP server enables users to model personal cash runway under stochastic income shocks, quantify ruin probability and liquidity resilience, and calculate safe discretionary daily and monthly spending caps.7MIT
- AlicenseNot gradedqualityDmaintenanceProvides retirement planning computations for AI agents, including Monte Carlo simulations, tax burden modeling across all US states, Social Security claiming optimization, and cost-of-living comparisons.7 npmMIT
- AlicenseNot gradedqualityCmaintenanceMCP server for cove-fi, a deterministic retirement and financial-independence projection engine. It lets users run plans, create scenarios, and explore year-by-year net-worth projections through natural language.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.