401(k) Match Optimizer
optimize_401k_matchCalculation, not advice. Verify with a professional before acting. Deterministic 401(k) employer-match optimizer. Given your annual salary, pay frequency, current contribution percent, and your employer's match formula (as a named preset or a custom tier list), computes: the annual match you are capturing today; the maximum you could capture (full match entitlement); the match forfeited at your current rate; the minimum contribution percent to capture the full match; whether front-loading contributions would forfeit match at a no-true-up plan; and a per-period schedule showing level vs. front-load paths side by side. IRS limits (402(g) elective deferral, 401(a)(17) compensation cap, 415(c) annual additions) are applied and cited in provenance. Catch-up contribution ceilings for ages 50+ and 60-63 (SECURE 2.0) are computed when participant_age is provided; when a catch-up allowance applies, applied_caps[].cap_name reads '402(g) elective deferral plus 414(v) catch-up' and limit_value carries the combined ceiling, not the bare 402(g) amount. HEAVY tool: use output='summary' (default) for the headline scalars or output='inline' for the full per-period schedule. output='capture' writes the full payload to a file on this server's local disk for the chart-render pipeline; available on the local stdio transport only, and rejected with a structured error on the hosted HTTP transport.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| toolArguments | Yes | JSON object with parameters: REQUIRED: annual_salary: decimal > 0. Annual gross salary. pay_periods_per_year: integer in [1, 365]. Pay periods per year (12=monthly, 24=semi-monthly, 26=biweekly, 52=weekly). contribution_pct: decimal in [0, 100]. Current employee contribution as a percent of gross pay. MATCH FORMULA (exactly one required): match_preset: one of 'safe_harbor_basic' (100% of first 3% + 50% of next 2%), 'safe_harbor_enhanced_simple' (100% of first 4%), 'qaca' (100% of first 1% + 50% of next 5%), 'fifty_pct_of_first_six_pct' (50% of first 6%). match_tiers: array of tier objects [{ match_frac: decimal (0,1], up_to_deferral_pct: decimal > 0 }, ...]. match_frac is the employer fraction (0.5 = 50%). up_to_deferral_pct is the tier width as a percent of pay. Example: [{ match_frac: 1.0, up_to_deferral_pct: 3 }, { match_frac: 0.5, up_to_deferral_pct: 2 }] = safe_harbor_basic. OPTIONAL: has_true_up: bool (default false). Whether the plan provides an annual true-up. false is the conservative assumption: surfaces front-loading forfeiture risk. participant_age: integer >= 0 (optional). Determines which catch-up limit applies (age 50+, or age 60-63 SECURE 2.0 super catch-up). Omit when age is unknown or participant is under 50. chart_title: string (optional). Reserved for the chart pipeline. Must not contain em-dashes or en-dashes. Max 120 characters. ENVELOPE: output: 'summary' (default) | 'inline' | 'capture' summary: headline scalars (match captured/forfeited, full-match threshold, front-load flag, applied_caps, citations); the per-period period_schedule is stripped. inline: full payload including the period_schedule[] (for chart rendering). capture: full payload written to ~/.senaro/captures/; capture_ref URI returned. Available on the local stdio transport only; the hosted HTTP transport rejects 'capture' with a structured error naming 'summary' and 'inline' as the valid alternatives. |