MCP.Market

Numeratica — financial planning calculations MCP server

online · 100% uptime
by numeratica.com·com.numeratica/mcp·v0.1.5

Deterministic US financial planning: retirement Monte Carlo, Roth conversion, RMD, tax, IRMAA, SS

A89/100grade A
What users say
No reviews yet
Be the first
Safety scan
A89/100

full report

Adoption
Growing

0 stars26 downloads/wk

Reviews

Write one

Nobody has reviewed Numeratica — financial planning calculations yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Numeratica — financial planning calculations tools (76, 1 write)

write = sends, deletes, buys or posts
  • annuityFree

    Annuity. Numeratica POST /v1/annuity — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • benefits_dependent_careFree

    Benefits dependent care. Numeratica POST /v1/benefits/dependent-care — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • benefits_health_planFree

    Benefits health plan. Numeratica POST /v1/benefits/health-plan — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • capital_market_assumptionsFree

    Capital market assumptions. Numeratica POST /v1/capital-market-assumptions — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • cashflow_npv_irrFree

    Cashflow npv irr. Numeratica POST /v1/cashflow/npv-irr — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • college_savingsFree

    College savings. Numeratica POST /v1/college-savings — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • contribution_limitsFree

    Contribution limits. Numeratica POST /v1/contribution-limits — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • debt_payoffFree

    Debt payoff. Numeratica POST /v1/debt-payoff — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • debt_vs_investFree

    Debt vs invest. Numeratica POST /v1/debt-vs-invest — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • education_529_to_rothFree

    Education 529 to roth. Numeratica POST /v1/education/529-to-roth — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • education_aid_estimateFree

    Education aid estimate. Numeratica POST /v1/education/aid-estimate — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • education_student_loanFree

    Education student loan. Numeratica POST /v1/education/student-loan — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • education_student_loan_refiFree

    Education student loan refi. Numeratica POST /v1/education/student-loan-refi — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • equity_comp_esppFree

    Equity comp espp. Numeratica POST /v1/equity-comp/espp — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • equity_comp_isoFree

    Equity comp iso. Numeratica POST /v1/equity-comp/iso — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • equity_comp_iso_amt_capacityFree

    Equity comp iso amt capacity. Numeratica POST /v1/equity-comp/iso-amt-capacity — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • equity_comp_iso_scheduleFree

    Equity comp iso schedule. Numeratica POST /v1/equity-comp/iso-schedule — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • equity_comp_nsoFree

    Equity comp nso. Numeratica POST /v1/equity-comp/nso — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • equity_comp_nuaFree

    Equity comp nua. Numeratica POST /v1/equity-comp/nua — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • equity_comp_rsuFree

    Equity comp rsu. Numeratica POST /v1/equity-comp/rsu — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • equity_comp_section_83bFree

    Equity comp section 83b. Numeratica POST /v1/equity-comp/section-83b — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • goal_fundingFree

    Goal funding. Numeratica POST /v1/goal-funding — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • healthcare_aca_optimizeFree

    Healthcare aca optimize. Numeratica POST /v1/healthcare/aca-optimize — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • healthcare_costsFree

    Healthcare costs. Numeratica POST /v1/healthcare-costs — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • inflation_adjustFree

    Inflation adjust. Numeratica POST /v1/inflation-adjust — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • inherited_iraFree

    Inherited ira. Numeratica POST /v1/inherited-ira — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • insurance_disability_needsFree

    Insurance disability needs. Numeratica POST /v1/insurance/disability-needs — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • insurance_life_needsFree

    Insurance life needs. Numeratica POST /v1/insurance/life-needs — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • insurance_long_term_careFree

    Insurance long term care. Numeratica POST /v1/insurance/long-term-care — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • ira_eligibilityFree

    Ira eligibility. Numeratica POST /v1/ira-eligibility — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • loan_amortizationFree

    Loan amortization. Numeratica POST /v1/loan/amortization — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • longevityFree

    Longevity. Numeratica POST /v1/longevity — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • medicare_irmaaFree

    Medicare IRMAA: Part B and Part D income-related monthly adjustment by tier, plus headroom to the next tier. MAGI uses the 2-year lookback; filing_status is single/mfj/mfs.

  • medicare_late_enrollment_penaltyFree

    Medicare late enrollment penalty. Numeratica POST /v1/medicare/late-enrollment-penalty — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • mortgage_affordabilityFree

    Mortgage affordability. Numeratica POST /v1/mortgage/affordability — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • mortgage_pointsFree

    Mortgage points. Numeratica POST /v1/mortgage/points — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • mortgage_refinanceFree

    Mortgage refinance. Numeratica POST /v1/mortgage/refinance — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • mortgage_rent_vs_buywrite actionFree

    Mortgage rent vs buy. Numeratica POST /v1/mortgage/rent-vs-buy — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • mortgage_term_comparisonFree

    Mortgage term comparison. Numeratica POST /v1/mortgage/term-comparison — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • pension_lump_sum_vs_annuityFree

    Pension lump sum vs annuity. Numeratica POST /v1/pension/lump-sum-vs-annuity — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • portfolio_glidepathFree

    Portfolio glidepath. Numeratica POST /v1/portfolio/glidepath — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • portfolio_rebalanceFree

    Portfolio rebalance. Numeratica POST /v1/portfolio/rebalance — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • retirement_accumulation_projectionFree

    Retirement accumulation projection. Numeratica POST /v1/retirement/accumulation-projection — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • retirement_backdoor_rothFree

    Retirement backdoor roth. Numeratica POST /v1/retirement/backdoor-roth — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • retirement_hsaFree

    Retirement hsa. Numeratica POST /v1/retirement/hsa — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • retirement_monte_carloFree

    Monte Carlo retirement projection: probability of not running out of money over a horizon, with percentile balance bands. Deterministic given a seed (returned in the result).

  • retirement_qlacFree

    Retirement qlac. Numeratica POST /v1/retirement/qlac — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • retirement_rmdFree

    Required Minimum Distribution: prior-year-end balance divided by the IRS distribution period. Uniform Lifetime by default; Single Life (inherited/beneficiary) via table=single.

  • retirement_savings_targetFree

    Retirement savings target. Numeratica POST /v1/retirement/savings-target — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • retirement_self_employedFree

    Retirement self employed. Numeratica POST /v1/retirement/self-employed — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • retirement_seppFree

    Retirement sepp. Numeratica POST /v1/retirement/sepp — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • retirement_survivor_scenarioFree

    Retirement survivor scenario. Numeratica POST /v1/retirement/survivor-scenario — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • retirement_withdrawal_sequencingFree

    Retirement withdrawal sequencing. Numeratica POST /v1/retirement/withdrawal-sequencing — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • retirement_withdrawal_strategyFree

    Dynamic retirement spending strategies over Monte Carlo paths: fixed_real, fixed_pct, guardrails (Guyton-Klinger), vpw, floor_and_ceiling. Returns the spending path, success probability, and ending bands.

  • roth_conversionFree

    Multi-year Roth conversion ladder (bracket-fill, IRMAA-aware) vs. a no-conversion baseline, with a year-by-year schedule and after-tax comparison. Optional pay-tax-from-external-funds.

  • roth_vs_traditionalFree

    Roth vs traditional. Numeratica POST /v1/roth-vs-traditional — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • savings_waterfallFree

    Savings waterfall. Numeratica POST /v1/savings-waterfall — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • social_securityFree

    Social Security claiming analysis (ages 62-70): monthly/lifetime benefit, breakeven, optimal claim age. Optional earnings test, spousal/survivor/divorced household, and COLA.

  • social_security_couple_claimFree

    Social security couple claim. Numeratica POST /v1/social-security/couple-claim — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_asset_locationFree

    Tax asset location. Numeratica POST /v1/tax/asset-location — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_bracket_roomFree

    Tax bracket room. Numeratica POST /v1/tax/bracket-room — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_estimateFree

    Federal income tax estimate (2025/2026): ordinary brackets, standard/itemized deduction, LTCG stacking, NIIT, Additional Medicare; optional AMT (include_amt) and real per-state tax via the state field. filing_status is one of single/mfj/mfs/hoh.

  • tax_estimated_taxFree

    Tax estimated tax. Numeratica POST /v1/tax/estimated-tax — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_filing_statusFree

    Tax filing status. Numeratica POST /v1/tax/filing-status — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_gain_harvestingFree

    Tax gain harvesting. Numeratica POST /v1/tax/gain-harvesting — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_liquidation_scheduleFree

    Tax liquidation schedule. Numeratica POST /v1/tax/liquidation-schedule — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_marginal_mapFree

    Tax marginal map. Numeratica POST /v1/tax/marginal-map — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_qcd_planFree

    Tax qcd plan. Numeratica POST /v1/tax/qcd-plan — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_qsbs_exclusionFree

    Tax qsbs exclusion. Numeratica POST /v1/tax/qsbs-exclusion — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_s_corp_salaryFree

    Tax s corp salary. Numeratica POST /v1/tax/s-corp-salary — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_social_security_benefitsFree

    Tax social security benefits. Numeratica POST /v1/tax/social-security-benefits — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_state_incomeFree

    Tax state income. Numeratica POST /v1/tax/state-income — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_survivor_transitionFree

    Tax survivor transition. Numeratica POST /v1/tax/survivor-transition — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_tlh_benefitFree

    Tax tlh benefit. Numeratica POST /v1/tax/tlh-benefit — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tax_w4_checkupFree

    Tax w4 checkup. Numeratica POST /v1/tax/w4-checkup — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

  • tvmFree

    Tvm. Numeratica POST /v1/tvm — returns JSON with result_id, engine_version, and a not-advice disclaimer (seed echoed for reproducible Monte Carlo where applicable). See the input schema for the accepted fields.

Public scan report

scanner v0.1.9 · 2026-09-24 · same rubric, same numbers if you re-run it

no findings
  • Code scan3 source files scanned25/25
  • Live reliabilityremote reachable in 558ms20/20
  • Tool poisoning76 tool descriptions checked15/15
  • Auth qualityAPI key sent as a header8/15
  • Maintenancelast push 59 days ago12/15
  • Maintainer identityregistry namespace matches repository owner; website matches verified namespace9/10
Overall 89/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Numeratica — financial planning calculations compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
89/100
higher than 80% of 48,255 servers
Tools
76
the typical server has 7
Tools that change things
1%
typical: 0%. Fewer write tools means less an agent can break
Uptime
100%
of our recent checks; the typical remote server answers 100%
Response time
92 ms
faster than 86% of 30,031 servers
Downloads a week
26
more than 13% of 12,191 servers with a package

What its tools let an agent do: 75 read · 1 change

Install Numeratica — financial planning calculations in Claude Code, Cursor or VS Code

claude mcp add --transport http mcp https://api.numeratica.com/mcp
Add to Cursor

What the publisher says

From the Numeratica — financial planning calculations repository's README, as published. We do not edit it. Read it on GitHub

@numeratica/mcp

A thin MCP bridge that connects any MCP client (Claude Desktop, Cursor, …) to the Numeratica financial-planning API — retirement Monte Carlo, taxes, RMDs, Social Security, Roth conversions, and more.

Get a free key at https://docs.numeratica.com.

How it works

This package is a transport bridge, nothing more. It reads JSON-RPC from stdin and forwards each message to the hosted POST /mcp endpoint with your API key as a bearer token, then writes the response back to stdout. The tool list and all results come straight from the API — so the bridge always stays in sync and ships no calculation logic of its own. Your key is sent only in the Authorization header and is never logged.

  • Zero runtime dependencies (Node ≥ 20 built-in fetch + node:readline).
  • Open source (MIT). The interesting part is the API; this is just the wire.

Install

No install needed — your MCP client runs it on demand with npx. (You can also npm i -g @numeratica/mcp to get the numeratica-mcp command.)

Step 1 — look around, no key needed

Start here. This config needs no signup and no key:

{
  "mcpServers": {
    "numeratica": {
      "command": "npx",
      "args": ["-y", "@numeratica/mcp"]
    }
  }
}

Put it in claudedesktopconfig.json (Claude Desktop: Settings → Developer → Edit Config) or ~/.cursor/mcp.json (Cursor, or a project .cursor/mcp.json), then restart the client. All 76 tools appear, and you can ask what's available — "What Numeratica tools do you have?"

Without a key the bridge runs in discovery-only mode: browsing the catalogue works, running a calculation returns a message telling you to add a key. That's the intended state, not a failure.

Step 2 — add a key to run calculations

Get a free key at docs.numeratica.com/get-key, then add one line:

{
  "mcpServers": {
    "numeratica": {
      "command": "npx",
      "args": ["-y", "@numeratica/mcp"],
      "env": { "NUMERATICA_API_KEY": "nmr_sk_your_key_here" }
    }
  }
}

Restart, and the tools are live. Try: "Run a retirement Monte Carlo for a 40-year-old retiring at 65."

Configuration

You can also pass the key with --key or --key= instead of the env var, but prefer NUMERATICAAPIKEY: a key on the command line is visible to ps for every user on the machine, lands in shell history, and is stored verbatim in MCP client config files that people routinely paste into issue reports. For a non-env option that avoids all three, use --key-file .

Links

  • API docs & reference: https://docs.numeratica.com
  • Get a free key: https://docs.numeratica.com/get-key

License

MIT © Numeratica / Francis Townsend-Merino

Nothing above is checked by us. What we check is on the safety report.

Numeratica — financial planning calculations: common questions

Is Numeratica — financial planning calculations MCP server safe?
Yes, by our scan: it is graded A (89/100). Read the Numeratica — financial planning calculations safety report
How do I install Numeratica — financial planning calculations?
It runs remotely at api.numeratica.com. Add it to Claude Code, Cursor, VS Code or Claude Desktop with the snippets above, or call it through the mcp.market gateway without installing anything.
Does Numeratica — financial planning calculations need an API key?
Yes. The registry entry asks for NUMERATICA_API_KEY, Authorization.
Is Numeratica — financial planning calculations maintained?
The last commit was 99 days ago (2026-07-28). The latest release is v0.1.5.
Is Numeratica — financial planning calculations up?
100% of our last 28 checks got an answer. We check remote servers about four times a day.
How does Numeratica — financial planning calculations compare with other MCP servers?
safety score 89/100 (higher than 80% of 48,255 servers); tools 76 (the typical server has 7); tools that change things 1% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.