Skip to main content
Glama
irs-taxpayer-mcp

irs-taxpayer-mcp

by dma9527

🏛️ irs-taxpayer-mcp

Exact US tax numbers for year-end decisions, without sending your finances to a chatbot.

Deterministic TY2024 to TY2026 estimates · local no-model CLI · 45 MCP tools

License: MIT CI npm TypeScript MCP

English | 中文 | Español | 日本語


Estimates for planning and education only. Not tax, legal, or financial advice, and not filing software. See the legal notice.

Know the number before December 31

Should you convert $30,000 to Roth this year? Harvest gains in the 0% bracket? Top up your 401(k)? These decisions have deadlines, and a chatbot guess is not good enough when real money is on the line.

irs-taxpayer-mcp is a deterministic US individual tax engine for TY2024 through TY2026. It does the math from IRS annual tables, shows its work, and refuses to guess when a case is not supported.

  • 🔒 Your numbers can stay on your machine. The direct CLI calculates locally, starts no MCP connection, calls no model, and sends no tax data anywhere.

  • 🎯 Deterministic, not generated. The same inputs always give the same answer. A language model never does the arithmetic.

  • 🛑 Fails closed. Unsupported states, years, or missing required facts return an error instead of a rough estimate.

  • 🤖 Works with your AI assistant too. 45 MCP tools for Claude, Kiro, Cursor, and other MCP clients.

Related MCP server: OptionsAhoy: Stock Equity and Tax Optimizer

🚀 Try it in 30 seconds

npm install --global irs-taxpayer-mcp
irs-taxpayer-mcp intake --output taxpayer-facts.json   # guided local questionnaire
irs-taxpayer-mcp plan --facts taxpayer-facts.json

Example result for a synthetic TY2026 household (married filing jointly, $185,000 W-2, $12,000 long-term gains, two children):

# Local Tax Plan for TY2026

Adjusted gross income: $197,000
Taxable income: $164,800
Federal tax after refundable credits: $20,440
Employee FICA: $14,122
Total modeled tax: $34,562
Take-home income: $162,438

## Privacy
Calculated directly by the local deterministic engine. No model, network request,
persistence, or telemetry was used.

Add --json for structured output with assumptions, official sources, a calculation trace, and privacy.modelInvoked: false.

💡 Decisions it helps with

Question

Tool

Example (synthetic, TY2026)

What does a Roth conversion cost me this year?

simulate_tax_scenario

MFJ, $150,000 income: a $30,000 conversion adds $6,600 of federal tax, a flat 22%

Can I sell winners at 0% tax?

optimize_capital_gains

Shows room left in the 0% bracket and warns when losses would only offset tax-free gains

Should I itemize or take the standard deduction?

standard_vs_itemized

Applies the TY2026 SALT cap, charitable floor, and non-itemizer charitable deduction

What are my quarterly estimates as a freelancer?

estimate_quarterly_tax

1040-ES amounts with safe harbor guidance

Is my paycheck withholding on track?

analyze_paycheck

Projects annual tax, including credits, and suggests W-4 changes

Will moving states save money?

analyze_relocation_taxes

Compares exact-year state profiles; unsupported states fail closed

What changed between tax years?

what_changed_between_tax_years

TY2025 and TY2026 rule changes with primary-source citations

🔒 Privacy Architecture

Layer

Design

Deterministic engine

Local execution with no runtime network calls

Direct intake, validate, and plan commands

No MCP connection, model invocation, telemetry, or automatic persistence

Local facts files

Strict versioned JSON, no identity fields, 1 MiB maximum, mode 0600 on POSIX

MCP server

Sends and stores no taxpayer data

MCP client and model

Privacy depends on the selected host and model provider; prompts and tool arguments may leave the machine

Authentication

No SSN, IRS login, or taxpayer identity required

Public IRS data

Bundled and versioned locally

Source code

Open-source MIT code with auditable calculations

⚡ Getting Started

Install once, before entering any tax facts:

npm install --global irs-taxpayer-mcp

Run the guided local questionnaire. It does not start MCP or invoke a model:

irs-taxpayer-mcp intake --output taxpayer-facts.json

Or create and edit a strict local template:

irs-taxpayer-mcp template --output taxpayer-facts.json
irs-taxpayer-mcp validate --facts taxpayer-facts.json

Calculate directly through the deterministic engine:

irs-taxpayer-mcp plan --facts taxpayer-facts.json
irs-taxpayer-mcp plan --facts taxpayer-facts.json --json

New facts files are created with mode 0600 on POSIX. On Windows, the CLI rejects existing symbolic links but relies on the current user's filesystem permissions. Existing files are not replaced unless --force is explicit. Imported JSON is limited to 1 MiB, rejects symbolic links and unknown fields, and does not accept names, SSNs, addresses, employer IDs, or account numbers.

Using npx may download the public package before execution, but the direct commands do not send the facts file or its values over the network.

Option B: MCP mode for AI assistants

The MCP server makes no network requests and stores no taxpayer data. However, facts typed into an MCP client may be processed by that client's model provider. Use direct local mode or a local-model MCP client when end-to-end local handling is required.

MCP Step 1: Add to your AI assistant

Add this to your MCP client configuration:

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "irs-taxpayer": {
      "command": "npx",
      "args": ["-y", "irs-taxpayer-mcp"]
    }
  }
}

Kiro (.kiro/settings/mcp.json):

{
  "mcpServers": {
    "irs-taxpayer": {
      "command": "npx",
      "args": ["-y", "irs-taxpayer-mcp"]
    }
  }
}

Cursor: same format in Cursor's MCP settings.

MCP Step 2: Restart your AI assistant

After saving the config, restart the app. The MCP server will auto-download and connect.

MCP Step 3: Ask supported tax questions

The client model converts natural language into tool arguments. Do not enter real taxpayer facts here unless the selected MCP host and model satisfy your privacy requirements:

  • "Calculate my federal tax: $150k income, married filing jointly, 2 kids"

  • "Compare California vs Texas vs Washington for $200k income"

  • "I'm a freelancer making $80k: what are my quarterly estimated taxes?"

  • "What tax credits am I eligible for? AGI $60k, single, one child"

  • "Should I itemize or take the standard deduction? I pay $15k in mortgage interest and $12k in state taxes"

  • "Explain the Backdoor Roth IRA strategy"

  • "How much is the EITC for a family of 4 earning $35k?"

  • "I exercised ISOs this year: will I owe AMT?"

  • "Help me plan my year-end tax moves. I have a 401k and HSA."

Alternative: Docker

docker build -t irs-taxpayer-mcp .
docker run -i irs-taxpayer-mcp

Alternative: Streamable HTTP Transport

npx irs-taxpayer-mcp --http --port 3000
# MCP endpoint: http://127.0.0.1:3000/mcp
# Health check: http://127.0.0.1:3000/health

HTTP mode is stateless and binds only to a loopback host by default. Browser requests must use an exact allowed Origin. Add a trusted browser Origin with a repeatable flag:

npx irs-taxpayer-mcp --http \
  --allowed-origin https://trusted-client.example

The legacy --sse flag remains a deprecated alias for --http. The old /sse and /messages endpoints are not exposed.

🛠️ Tools (45)

All tools use the current MCP registerTool API. Each advertises read-only annotations and an output schema, and returns both human-readable text and structuredContent. Error results include a stable error code, message, and recovery suggestion.

The 1.0 flagship generate_tax_plan workflow returns domain structured results, assumptions, official source provenance, a calculation trace, and explicit unsupported boundaries. The deterministic engine performs no network requests, persistence, or telemetry. Its structured privacy metadata reports whether the MCP adapter or direct CLI path was used. Unsupported tax years, state profiles, and required worksheet facts fail closed. See Local Tax Planner 1.0 Contract.

Federal Tax Calculations

Tool

What it does

calculate_federal_tax

Full federal tax with bracket breakdown, AMT, NIIT (3.8%), Additional Medicare Tax (0.9%), QBI deduction, SE tax, capital gains, CTC

get_tax_brackets

Tax brackets and standard deduction by filing status and year

compare_filing_statuses

Side-by-side comparison of all 4 filing statuses for the same income

estimate_quarterly_tax

Estimated quarterly payments (1040-ES) with safe harbor guidance

calculate_total_tax

Combined federal + state tax in one call, with take-home pay and monthly income

calculate_w4_withholding

Per-paycheck withholding estimate with step-by-step W-4 form recommendations

Deduction Analysis

Tool

What it does

list_deductions

Browse all deductions with eligibility rules, limits, and forms

standard_vs_itemized

Compare standard vs itemized with year-specific SALT cap ($10K for TY2024, $40K for TY2025)

Tax Credits

Tool

What it does

list_tax_credits

20+ federal credits: CTC, EITC, AOTC, EV, solar, saver's credit, and more

check_credit_eligibility

Quick screening based on your income, family, and situation

calculate_eitc

Precise EITC calculation with phase-in/plateau/phase-out for 0-3 children

estimate_premium_tax_credit

TY2026 Premium Tax Credit (Form 8962) with the 400% limit, full APTC repayment, monthly allocation, and the below-100% and MFS exceptions

Retirement & Strategy

Tool

What it does

get_retirement_accounts

IRA, Roth, 401k, SEP, Solo 401k, HSA, 529: limits, tax treatment, tips

get_retirement_strategy

Backdoor Roth, Mega Backdoor, Roth Conversion Ladder, Tax Loss/Gain Harvesting

Tax Planning & Scenarios

Tool

What it does

generate_tax_plan

Privacy-first local plan with structured results, assumptions, sources, trace, and explicit boundaries

get_tax_planning_tips

Personalized year-end optimization: 401k maxing, HSA, Roth conversion, tax-loss harvesting, charitable bunching

compare_tax_years

Compare TY2024 vs TY2025 to see how bracket changes and OBBB affect your tax

estimate_self_employment_tax

Full SE tax breakdown: Schedule C profit, SE tax, QBI deduction, quarterly payments, SEP/Solo 401k limits

analyze_mortgage_tax_benefit

Mortgage interest + property tax deduction analysis with year-specific SALT cap

analyze_education_tax_benefits

AOTC vs Lifetime Learning Credit comparison, student loan deduction, 529 plan guidance

State Taxes

Tool

What it does

get_state_tax_info

Reference data and notes for all 50 states + DC

estimate_state_tax

Estimate supported state paths; unsupported bracket data fails closed

compare_state_taxes

Compare states only when every requested calculation is supported

list_no_income_tax_states

All 9 states with no broad individual income tax

IRS Information

Tool

What it does

get_tax_deadlines

Key IRS dates and deadlines by tax year

check_refund_status

How to check your refund (guidance only: no IRS account access)

get_irs_form_info

Info about 14 common IRS forms (1040, W-2, 1099s, Schedules, etc.)

OBBB Act (2025) Tools

Tool

What it does

calculate_obbb_deductions

Calculate all 4 new OBBB deductions: tips, overtime, senior bonus, auto loan interest

what_changed_between_tax_years

Diff any two supported years: brackets, deductions, credits, SALT, and OBBB provisions

Full Reports & Analysis

Tool

What it does

generate_full_tax_report

Estimation report: income, deductions, federal, FICA, supported state tax, take-home, and refund inputs

process_1099_income

Process multiple 1099 forms (NEC, INT, DIV, B, MISC) with tax impact by category

get_personalized_tax_calendar

Personalized deadlines based on your situation (self-employed, extension, investments)

analyze_paycheck

Verify paycheck withholding accuracy, project annual tax, suggest W-4 adjustments

compare_mfj_vs_mfs

MFJ vs MFS comparison with tax diff and all MFS restriction warnings

simulate_tax_scenario

What-if modeling: income changes, relocation, Roth conversion, 401k, filing status

assess_audit_risk

IRS audit risk scoring with red flag identification and mitigation tips

get_tax_document_checklist

Personalized filing document checklist based on your income and life events

optimize_capital_gains

Lot analysis: 0% bracket gain harvesting, loss harvesting that nets against taxed gains first, wash sale warnings

plan_retirement_withdrawals

Optimal withdrawal order (Traditional/Roth/Taxable), RMD calculation, Roth conversion

plan_multi_year_taxes

3-5 year tax projection with bracket management and age milestones

analyze_relocation_taxes

In-depth state relocation analysis with multi-year savings and SALT impact

Guidance & Feedback

Tool

What it does

run_tax_health_check

One-call check of a full financial picture with actionable findings

lookup_tax_rule

Search the built-in tax knowledge base

get_form_filing_guide

Provide step-by-step guidance for supported IRS forms

submit_feedback

Generate a prefilled GitHub issue link without transmitting tax data

📊 Tax Year Coverage

TY2024

Supported historical calculation year using IRS Revenue Procedure 2023-34. Standard deduction $14,600 (single) / $29,200 (MFJ). CTC $2,000. SALT cap $10,000.

TY2025

Reflects OBBB signed July 4, 2025:

  • Standard deduction: $15,750 (single) / $31,500 (MFJ) / $23,625 (HoH)

  • Child Tax Credit: $2,200 per child (up from $2,000)

  • SALT cap: $40,000 for AGI ≤ $500K (was $10,000)

  • New deductions: tips ($25K), overtime ($12.5K), senior bonus ($6K age 65+), auto loan interest ($10K)

  • 401k catch-up: $11,250 for ages 60-63 (SECURE 2.0)

TY2026

Uses IRS Revenue Procedure 2025-32 and the SSA 2026 contribution and benefit base:

  • Standard deduction: $16,100 (single) / $32,200 (MFJ) / $24,150 (HoH)

  • Child Tax Credit: $2,200 per qualifying child, with up to $1,700 refundable

  • SALT cap: $40,400 for MAGI up to $505,000; $20,200 and $252,500 for MFS

  • Social Security wage base: $184,500

  • AMT exemption phase-out at 50% above $500,000 / $1,000,000 AMTI (OBBB)

  • Non-itemizer charitable deduction ($1,000 / $2,000), 0.5% itemized charitable floor, and 2/37 itemized deduction limit

  • Child and Dependent Care Credit up to 50% of qualifying expenses

  • 401(k) $24,500, IRA $7,500, HSA $4,400 / $8,750

  • Updated ordinary, capital-gains, EITC, and AMT thresholds

Supported Scope and Boundaries

This project is a deterministic estimation and planning engine, not tax preparation or filing software.

  • Federal estimates cover the modeled TY2024 through TY2026 inputs exposed by each tool. They do not implement every Form 1040 line, schedule, election, limitation, carryforward, or dependency rule.

  • State reference information covers all 50 states and DC. Numeric estimates require an exact tax-year profile: TY2024 supports AK, CA, FL, NV, SD, TN, TX, and WY; TY2025 supports AK, FL, NH, NV, SD, TN, TX, and WY; TY2026 supports those states plus CA, GA, IL, IN, KY, MA, MI, NC, NJ, OH, PA, and VA. City, county, and school district income taxes (IN, KY, MI, OH, PA) are not included. California supports single and married brackets only (HoH Schedule Z is not modeled). Other state-year and filing-status paths return an error.

  • State calculations do not yet model part-year or nonresident allocation, every local tax, or separate HoH and MFS brackets.

  • QBI, AMT, audit-risk, retirement, relocation, and multi-year outputs are planning estimates with documented simplifications.

  • Refund projections depend only on the inputs and refundable credits modeled by the selected tool. They are not an IRS refund determination.

  • The server does not generate a tax return, sign a return, transmit MeF data, or provide filing eligibility validation.

See ROADMAP.md for the remaining work toward a filing-grade federal return engine.

🧮 Calculation Engine

Feature

Status

Federal income tax (7 brackets × 4 statuses)

✅

Long-term capital gains (0%/15%/20%)

✅

Capital-loss netting, annual limit, carryovers

Planning-grade

Social Security benefit taxation

Publication 915 planning model

Retirement distributions and early tax

Planning-grade from supplied 1099-R facts

Self-employment tax (SS + Medicare)

✅

Net Investment Income Tax (3.8% NIIT)

✅

Additional Medicare Tax (0.9%)

✅

Alternative Minimum Tax (AMT)

Modeled with preferential rates and stated preference-item limits

QBI Deduction (Section 199A)

Planning-grade with wage, UBIA, and SSTB limits

Child Tax Credit with phase-out

✅

AOTC and Lifetime Learning Credit

Form 8863 planning model

EITC TY2024/TY2025/TY2026 calculation

✅

Standard vs itemized deduction

✅

Year-specific SALT cap (OBBB)

✅

State reference data (50 states + DC)

✅

State numeric estimates

Supported paths only

20+ federal credit reference and screening

✅

Retirement account reference and planning

Planning estimate

W-4 withholding calculator

Planning estimate

Numeric regression tests cite IRS Revenue Procedures, IRC sections, and relevant legislation. Reference and planning tools may summarize rules that are not fully represented in the calculation engine.

🏗️ Build from Source

Requires Node.js 20 or later.

git clone https://github.com/dma9527/irs-taxpayer-mcp.git
cd irs-taxpayer-mcp
npm install
npm run build
npm start          # stdio mode
npm run dev        # development mode (tsx)

🐛 Found a Bug?

🤝 Contributing

Contributions welcome. Please ensure:

  • All tests pass (npm test)

  • Build succeeds (npm run build)

  • No any types in TypeScript

  • Data changes include IRS source citations

See CONTRIBUTING.md for full guidelines.

This software is provided "as is" without warranty of any kind. The authors and contributors are not tax professionals, CPAs, enrolled agents, or attorneys. No attorney-client, CPA-client, or fiduciary relationship is created by using this software. Tax laws change frequently and vary by jurisdiction. The calculations may contain errors, omissions, or may not reflect the most recent legislative changes. You are solely responsible for your tax filing decisions. The authors disclaim all liability for any damages arising from the use of this software. See DISCLAIMER.md for the full legal notice.

📄 License

MIT

Available Tools

45 tools
analyze_education_tax_benefitsA
Read-onlyIdempotent

Compare education tax benefits: AOTC vs Lifetime Learning Credit, student loan interest deduction, and 529 plan advantages.

NameRequiredDescriptionDefault
agiYesAdjusted Gross Income
taxYearNoTax year (default: 2026)
has529PlanNoContributing to or using a 529 plan
isUndergradYesIs the student in first 4 years of undergrad?
tuitionPaidYesTuition and qualified expenses paid
filingStatusYes
contribution529No529 plan contribution this year
yearsAOTCClaimedNoYears AOTC already claimed (max 4)
studentLoanInterestNoStudent loan interest paid this year

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the topic scope but nothing behavioral beyond it – no mention of MAGI phaseout sensitivity, the default tax year of 2026, or whether results are estimates versus definitive eligibility determinations. With annotations carrying the safety burden, a 3 is appropriate.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the verb and the compared items appear immediately. Nothing could be removed without losing meaning.

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

Completeness3/5

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 no explanation, and the parameter set is well documented. However, for a 9-parameter analysis tool the description does not say how inputs interact (e.g., that yearsAOTCClaimed caps AOTC eligibility or that isUndergrad gates the AOTC comparison), leaving an agent to infer the analytical logic.

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 89%, so nearly every parameter (agi, tuitionPaid, isUndergrad, yearsAOTCClaimed, contribution529, studentLoanInterest) is already documented in the schema. The description mentions the concepts behind those inputs but adds no syntax, format, or interaction detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Compare') and a specific resource ('education tax benefits'), then enumerates the exact items compared: AOTC, Lifetime Learning Credit, student loan interest deduction, and 529 plans. This clearly separates it from generic siblings like list_tax_credits and check_credit_eligibility, though it never explicitly names those siblings as alternatives.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is for weighing education-related tax options. There is no statement of when to prefer it over check_credit_eligibility or list_tax_credits, no prerequisites (e.g., that the student must have qualifying expenses), and no exclusions.

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

analyze_mortgage_tax_benefitB
Read-onlyIdempotent

Analyze the tax benefit of mortgage interest deduction and property taxes. Compares itemizing with mortgage vs taking the standard deduction.

NameRequiredDescriptionDefault
taxYearYesTax year
grossIncomeYesGross income, also used as MAGI because this tool does not collect MAGI adjustments
filingStatusYes
interestRateNoMortgage interest rate (e.g., 0.065 for 6.5%)
otherItemizedNoOther itemized deductions (charity, medical, etc.)
propertyTaxesYesAnnual property taxes paid
mortgageBalanceNoCurrent mortgage balance
mortgageInterestYesAnnual mortgage interest paid
stateIncomeTaxesNoState/local income taxes paid

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this read-only, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds one behavioral fact (it performs an itemize-vs-standard comparison) but says nothing about assumptions that materially change results, such as SALT/property-tax caps or mortgage-debt limits, nor whether it is federal-only.

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?

Two short sentences, front-loaded with the purpose and followed by the comparison behavior. No filler or repetition, though the second sentence could carry more information for the same length.

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

Completeness3/5

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

With an output schema and full annotations, the description need not explain return values, and 9 parameters are well documented in schema. However, for a specialized deduction-analysis tool, it omits the factors that govern the answer (SALT cap, mortgage interest limits, state tax treatment), leaving an agent unsure of the model's assumptions.

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 coverage is 89%, with each parameter individually described, including the notable MAGI note on grossIncome. The description adds no meaning beyond the schema, so the baseline of 3 applies; the schema does nearly all the work.

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

Purpose4/5

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

Names a specific verb and resource pair ('analyze the tax benefit of mortgage interest deduction and property taxes') and states the core computation (itemizing vs standard deduction). An agent can tell what it does, but the description never distinguishes it from the sibling 'standard_vs_itemized', which sounds like an overlapping computation.

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

Usage Guidelines3/5

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

The statement that it compares itemizing with a mortgage against the standard deduction implies the use case, but there is no explicit when-to-use or when-not-to-use guidance and no routing to alternatives such as standard_vs_itemized or list_deductions. The choice between sibling tools is left to inference.

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

analyze_paycheckB
Read-onlyIdempotent

Analyze a paycheck to verify withholding accuracy. Input your pay stub numbers and see if your employer is withholding the right amount.

NameRequiredDescriptionDefault
taxYearYesTax year
grossPayYesGross pay this period
stateCodeNo
age65OrOlderNoTaxpayer is 65 or older
filingStatusYes
payFrequencyYes
stateWithheldNoState tax withheld this period
retirement401kNo401k/403b pre-tax contribution this period
federalWithheldYesFederal tax withheld this period
hsaContributionNoHSA contribution this period
medicareWithheldNoMedicare withheld
spouseAge65OrOlderNoSpouse is 65 or older
annualQualifiedTipsNoTY2025+ Schedule 1-A: expected annual qualified tips
otherDependentsForOdcNoDependents verified for the Credit for Other Dependents
socialSecurityWithheldNoSocial Security withheld
qualifyingChildrenForCtcNoChildren verified for the Child Tax Credit
annualQualifiedOvertimeCompensationNoTY2025+ Schedule 1-A: expected annual FLSA overtime premium

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the useful framing that this is a comparison/verification operation against employer-withheld amounts, but says nothing about how optional inputs like stateCode or annualQualifiedTips affect the analysis, or about limitations such as which tax years are supported.

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?

Two short sentences with the purpose front-loaded; nothing is padded. The second sentence partially restates the first's intent, but it does introduce the concrete input expectation, so the redundancy is mild.

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

Completeness3/5

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

For a 17-parameter tool with an output schema present, the description is adequate but thin: it doesn't mention the tax-year sensitivity of certain fields (annualQualifiedTips, annualQualifiedOvertimeCompensation are TY2025+) or that state analysis is optional. The schema and annotations carry most of the weight, leaving the description serviceable but not self-sufficient.

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 high (82%), so the schema itself documents most of the 17 parameters, including the enum values for filingStatus and payFrequency. The description only gestures at "pay stub numbers" generically and adds no meaning about which fields are required versus optional or how the state fields pair with stateWithheld.

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

Purpose4/5

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

States a specific verb and resource ("Analyze a paycheck") plus the concrete goal ("verify withholding accuracy"), which separates it from siblings like calculate_federal_tax or calculate_w4_withholding that compute a theoretical liability rather than checking a real stub. It never names a sibling explicitly, so the differentiation is inferable rather than stated.

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

Usage Guidelines3/5

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

"Input your pay stub numbers and see if your employer is withholding the right amount" implies the prerequisite (you must already have a pay stub with actual withholding figures) and gives a clear success condition. There is no explicit when-not guidance and no pointer to the adjacent tools an agent should choose instead when the user has no stub yet (e.g., prospective W-4 calculations).

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

analyze_relocation_taxesC
Read-onlyIdempotent

In-depth relocation tax analysis using exact-year state profiles. Additional projection years require explicit annual federal and state data.

NameRequiredDescriptionDefault
taxYearYesTax year
toStateYesTarget state code
fromStateYesCurrent state code
dependentsNo
grossIncomeYesAnnual gross income
capitalGainsNo
filingStatusYes
yearsToProjectNoYears to project with explicit annual profiles (default: 1)
incomeGrowthRateNoAnnual income growth rate (e.g., 0.03 for 3%)
selfEmploymentIncomeNo

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds one genuinely useful behavioral constraint beyond that: additional projection years require explicit annual federal and state data, which warns the agent that yearsToProject is not a free-form extrapolation. It does not explain how that interacts with incomeGrowthRate, which the schema presents as a growth projection input.

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?

Two short sentences, front-loaded with the purpose and followed by the projection caveat; no filler. It is arguably under-specified rather than padded, which costs a point only in that the second sentence is cryptic without schema context.

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

Completeness2/5

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

For a 10-parameter, 5-required analysis tool sitting among ~40 tax siblings, the description leaves the core question unanswered: how does relocation analysis differ from compare_state_taxes or estimate_state_tax, and does it include federal liability? The output schema and read-only annotations relieve it of return-value and safety explanations, but not of positioning.

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 60%, so the schema already documents taxYear, fromState, toState, grossIncome, and yearsToProject. The description reinforces the year semantics ("exact-year state profiles") and the projection data requirement, but says nothing about the undocumented dependents, capitalGains, filingStatus, or selfEmploymentIncome parameters.

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

Purpose3/5

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

"In-depth relocation tax analysis using exact-year state profiles" names the resource domain (relocation taxes) and implies a comparison between two states, but it is a noun phrase with no verb and no explicit statement of what is computed or returned. It does not distinguish itself from close siblings such as compare_state_taxes, estimate_state_tax, or plan_multi_year_taxes.

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

Usage Guidelines2/5

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

The word "relocation" implies a move scenario, but the description never states when to call this instead of compare_state_taxes or compare_tax_years. No prerequisites, no exclusions, and no guidance on choosing between the many state-comparison siblings are given.

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

assess_audit_riskA
Read-onlyIdempotent

Evaluate your IRS audit risk based on your tax return profile. Identifies red flags, scores your risk level, and provides tips to reduce audit exposure.

NameRequiredDescriptionDefault
eitcClaimedNoClaiming EITC?
grossIncomeYesTotal gross income
largeRefundNoExpecting a very large refund?
cashBusinessNoIs your business cash-intensive (restaurant, salon, etc.)?
filingStatusYes
rentalLossesNoRental property losses claimed
roundNumbersNoAre most deductions round numbers ($5,000, $10,000)?
businessMealsNoBusiness meal deductions
foreignAccountsNoHave foreign bank accounts or assets?
vehicleDeductionNoVehicle/mileage deduction
charitableNonCashNoNon-cash charitable donations (clothing, property)
cryptoTransactionsNoHad cryptocurrency transactions?
charitableDonationsNoTotal charitable donations
homeOfficeDeductionNoClaiming home office deduction?
selfEmploymentIncomeNoSelf-employment income

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered structurally. The description adds that the tool performs heuristic red-flag detection and scoring, but omits anything an agent would want beyond that: whether a score is deterministic given the same inputs, whether it is advisory rather than authoritative, and whether partial profiles degrade accuracy.

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

Conciseness5/5

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

Two sentences, zero filler, and the core purpose is front-loaded before the output summary. Nothing repeats the tool name or the annotations.

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

Completeness4/5

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

With 15 parameters, an output schema, and complete annotation coverage, the description supplies the essential 'what' and 'what you get back' without needing to restate field semantics. The remaining gap is guidance on how much profile data is sufficient, since only 2 of 15 parameters are required and the description never says optional inputs can be omitted.

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 93%, so nearly every one of the 15 parameters is already documented in structured data, and an output schema exists for results. The description adds no field-level meaning, thresholds, or units beyond implying that the inputs describe a 'tax return profile'; the baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

The description names a specific verb and resource ('Evaluate your IRS audit risk') and enumerates the three outputs: red-flag identification, risk scoring, and reduction tips. It is clearly distinguishable from tax-calculation siblings, though it never explicitly positions itself against adjacent advisory tools like run_tax_health_check or get_tax_planning_tips.

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

Usage Guidelines3/5

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

'Based on your tax return profile' implies the agent should supply return details, and the 13 optional fields hint at a progressive-disclosure usage pattern, but the description never states this. There is no when-to-use/when-not-to-use guidance, no prerequisite statement, and no named alternative for related questions.

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

calculate_eitcC
Read-onlyIdempotent

Calculate the exact Earned Income Tax Credit (EITC) amount. The EITC is one of the largest refundable credits for low-to-moderate income workers.

NameRequiredDescriptionDefault
agiYesAdjusted Gross Income
taxYearYesTax year (2024, 2025, or 2026)
earnedIncomeYesEarned income (wages, salary, self-employment)
filingStatusYes
investmentIncomeNoInvestment income (interest, dividends, capital gains)
qualifyingChildrenYesNumber of qualifying children (0-3)

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that — no note on whether eligibility rules are enforced, how phase-outs or the investment-income limit are handled, or what happens with unsupported tax years. The word 'exact' is the only behavioral signal, and it is unelaborated.

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

Conciseness3/5

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

The purpose is front-loaded in the first sentence, which is good. The second sentence is a marketing-style factoid about EITC size that does not help an agent select or invoke the tool, so it does not earn its place.

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

Completeness4/5

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

The tool has rich annotations, an output schema, and 83% parameter coverage, so most of the calling burden is already handled elsewhere. The description only needs to establish purpose and selection guidance, and while selection guidance is missing, the remaining gaps are modest given how much structured context is supplied.

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 83%, so the schema already documents agi, earnedIncome, investmentIncome, taxYear and qualifyingChildren. The description contributes no parameter-level meaning at all — for instance, it never mentions that investmentIncome triggers a disqualification threshold or why filingStatus and qualifyingChildren interact. Baseline 3 applies because the schema carries the load.

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

Purpose4/5

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: 'Calculate the exact Earned Income Tax Credit (EITC) amount.' That is unambiguous and distinguishes it from siblings like calculate_federal_tax or list_tax_credits. It stops short of naming a sibling or stating scope boundaries (e.g., vs. check_credit_eligibility), which keeps it from a 5.

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

Usage Guidelines2/5

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

The second sentence ('The EITC is one of the largest refundable credits for low-to-moderate income workers') is background information, not usage guidance. Nothing states when an agent should call this instead of check_credit_eligibility (eligibility screening) or estimate_premium_tax_credit, nor are prerequisites or exclusion cases given.

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

calculate_federal_taxA
Read-onlyIdempotent

Calculate federal income tax for an individual taxpayer. Supports TY2024 through TY2026. Includes bracket breakdown, effective/marginal rates, SE tax, NIIT, Additional Medicare Tax, QBI deduction, capital gains, and child tax credit. All calculations run locally — no data is sent to any server.

NameRequiredDescriptionDefault
blindNoTaxpayer is blind
taxYearYesTax year (2024, 2025, or 2026)
w2IncomeNoW-2 wage income
dependentsNoLegacy count of qualifying child dependents for nonrefundable CTC only
grossIncomeYesTotal gross income including supplied capital gains, qualified dividends, Social Security benefits, and gross retirement distributions
hasForm2555NoWhether Form 2555 is filed, which makes ACTC unavailable
spouseBlindNoSpouse is blind
age65OrOlderNoTaxpayer is 65 or older
capitalGainsNoLong-term capital gains (can be negative for losses)
earnedIncomeNoSchedule 8812 earned income used for ACTC
filingStatusYesFiling status
qualifiedTipsNoTY2025+ Schedule 1-A: qualified tips from a listed tipped occupation
stateTaxDeductedNoState/local taxes included in itemized deductions (for AMT)
isoExerciseSpreadNoISO stock option exercise spread (for AMT calculation)
taxExemptInterestNoTax-exempt interest used by the Publication 915 worksheet
earnedIncomeCreditNoEITC used by the 3-or-more-child ACTC payroll-tax method
itemizedDeductionsNoSchedule A total after the SALT cap and medical floor, before the TY2026 charitable floor and 2/37 limit
qualifiedDividendsNoQualified dividends included in gross income, taxed at preferential rates but not netted with capital losses
spouseAge65OrOlderNoSpouse is 65 or older
spouseEarnedIncomeNoMFJ only: spouse's earned income, already included in w2Income or earnedIncome
netInvestmentIncomeNoTotal net investment income for NIIT, including taxable interest, dividends, gains, rents, royalties, and passive income
capitalGainsLongTermNoWhether capital gains are long-term (default: true)
selfEmploymentIncomeNoSelf-employment income (Schedule C)
aotcRefundableAllowedNoWhether refundable AOTC is allowed after under-age-24 support rules
dependentCareExpensesNoForm 2441 work-related care expenses paid
otherDependentsForOdcNoDependents already verified for the nonrefundable Credit for Other Dependents
shortTermCapitalGainsNoShort-term capital gain or loss
aboveTheLineDeductionsNoAbove-the-line deductions (HSA, student loan interest, etc.)
socialSecurityBenefitsNoNet Social Security benefits included in grossIncome
qualifiedBusinessIncomeNoQualified Business Income for Section 199A deduction
qualifiedBusinessIsSstbNoWhether the business is a specified service trade or business
retirementDistributionsNoGross Form 1099-R distributions included in grossIncome
socialSecurityTaxesPaidNoSchedule 8812 payroll-tax amount for the 3-or-more-child ACTC method
qualifiedBusinessW2WagesNoSection 199A W-2 wages; pass 0 when none
qualifyingChildrenForCtcNoChildren already verified as CTC/ACTC qualifying children under age 17 with required SSNs
charitableCashContributionsNoTY2026+: qualifying cash gifts to public charities (not donor-advised funds) for the non-itemizer deduction
aotcStudentQualifiedExpensesNoQualified AOTC expenses per already-verified eligible student
longTermCapitalLossCarryoverNoPrior-year long-term capital loss carryover as a positive amount
qualifiedVehicleLoanInterestNoTY2025+ Schedule 1-A: interest on a loan for a new US-assembled personal vehicle
dependentCareBenefitsExcludedNoEmployer dependent care benefits excluded from wages (W-2 box 10)
qualifiedOvertimeCompensationNoTY2025+ Schedule 1-A: FLSA overtime premium (the half of time-and-a-half)
shortTermCapitalLossCarryoverNoPrior-year short-term capital loss carryover as a positive amount
qualifiedBusinessPropertyBasisNoUnadjusted basis immediately after acquisition of qualified property; pass 0 when none
taxableRetirementDistributionsNoTaxable Form 1099-R amount
itemizedCharitableContributionsNoTY2026+: charitable portion of itemizedDeductions, for the 0.5% of AGI floor
lifetimeLearningQualifiedExpensesNoQualified LLC expenses not used for AOTC or another benefit
dependentCareQualifyingIndividualsNoQualifying individuals for the Child and Dependent Care Credit
marriedFilingSeparatelyLivedWithSpouseNo
qualifiedBusinessMaterialParticipationNoTY2026+: taxpayer materially participates, enabling the $400 minimum QBI deduction
earlyRetirementDistributionSubjectToPenaltyNoTaxable early-distribution amount remaining after exceptions

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context beyond that: the supported tax-year window and the explicit assurance that all calculations run locally with no data sent to a server. It does not cover precision/rounding, error behavior, or disclaimer framing, which keeps it short of a 5.

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?

Four sentences, front-loaded with the core purpose, followed by supported years, output scope, and a privacy note. The mid-sentence feature list is dense but each item maps to real computational coverage, so little is wasted. A slight trim of the enumeration would make it tighter.

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

Completeness4/5

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

For a 50-parameter tool with 98% schema coverage, an output schema, and full annotations, the description supplies the right framing: scope, tax-year support, computed outputs, and locality of computation. The main residual gap is that it gives no guidance on which of the 47 optional inputs are needed for which outputs, leaving the agent to derive that from schema descriptions.

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 98% across 50 parameters, so the schema itself carries virtually all parameter meaning, including required fields, the filingStatus enum, and the TY-gated inputs. The description mentions the tax domains (SE tax, NIIT, QBI, capital gains, CTC) at a high level but adds no syntax, defaults, or interdependency guidance beyond the schema. Baseline 3 applies given the schema does the heavy lifting.

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

Purpose4/5

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

The description opens with a specific verb+resource ('Calculate federal income tax for an individual taxpayer') and enumerates the computed outputs (bracket breakdown, SE tax, NIIT, QBI, capital gains, CTC), so the agent knows exactly what the tool returns. It does not name or rule out the many overlapping siblings such as calculate_total_tax, estimate_self_employment_tax, or calculate_eitc, so the agent gets no explicit differentiation.

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

Usage Guidelines3/5

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

Usage is only implied by the capability list and the 'supports TY2024 through TY2026' range. There is no statement of when to prefer this over calculate_total_tax or the narrower estimators, and no mention of prerequisites or when the optional inputs must be supplied. An agent can infer suitability but must reason it out rather than being told.

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

calculate_obbb_deductionsA
Read-onlyIdempotent

Calculate all OBBB (One Big Beautiful Bill) new deductions for TY2025+: tips income deduction, overtime pay deduction, senior bonus deduction, and auto loan interest deduction. Shows which deductions you qualify for and the total tax savings.

NameRequiredDescriptionDefault
ageNoTaxpayer age (needed for senior bonus)
agiYesAdjusted Gross Income
taxYearYesTax year (2025+)
spouseAgeNoSpouse age if MFJ
tipIncomeNoAnnual tip income from qualifying occupation
overtimePayNoAnnual overtime premium pay
filingStatusYes
marginalRateNoYour marginal tax rate (for savings estimate, e.g. 0.22)
autoLoanInterestNoInterest paid on qualifying US-assembled new vehicle loan

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds that the result shows qualification per deduction and total tax savings, which is useful beyond the annotations, but it says nothing about caps, phase-outs, or that agi/filingStatus drive eligibility—the main behavioral wrinkles for these deductions.

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?

Two front-loaded sentences with no filler; the deduction list is the core payload and comes immediately. The 'OBBB (One Big Beautiful Bill)' expansion is slightly redundant with the tool name but aids disambiguation.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the schema covers parameter semantics for 9 params. The description is complete enough to select and call the tool; the only gap is eligibility mechanics (caps, phase-outs, which inputs gate which deduction) for a moderately complex calculation.

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 89%, so nearly every parameter is already documented in the schema, including the age-dependency for the senior bonus and the US-assembled vehicle constraint. The description adds no parameter-level meaning beyond that, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (calculate) and a specific resource (the four named OBBB deductions for TY2025+), enumerating tips, overtime, senior bonus, and auto loan interest. An agent can tell this apart from list_deductions or standard_vs_itemized, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: the 'TY2025+' qualifier signals applicability, and the enumerated deduction types hint at when a caller would pick this over list_deductions. There is no explicit when-to-use, when-not-to-use, or sibling routing guidance.

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

calculate_total_taxB
Read-onlyIdempotent

Calculate combined federal + state tax for a complete picture of total tax liability. Returns federal breakdown, state tax, and combined totals in one call.

NameRequiredDescriptionDefault
taxYearYesTax year (2024, 2025, or 2026)
w2IncomeNoW-2 wage income
stateCodeYesTwo-letter state code (e.g., 'CA', 'TX', 'NY')
dependentsNoLegacy dependent count for nonrefundable CTC only
grossIncomeYesTotal gross income including supplied capital gains, qualified dividends, Social Security benefits, and gross retirement distributions
hasForm2555No
capitalGainsNoLong-term capital gains
earnedIncomeNoSchedule 8812 earned income for ACTC
filingStatusYesFiling status
taxExemptInterestNo
earnedIncomeCreditNoEITC used by 3-or-more-child ACTC method
itemizedDeductionsNoTotal itemized deductions
qualifiedDividendsNoQualified dividends included in gross income
netInvestmentIncomeNoTotal net investment income used for NIIT
capitalGainsLongTermNoWhether capital gains are long-term (default: true)
selfEmploymentIncomeNoSelf-employment income
aotcRefundableAllowedNo
otherDependentsForOdcNoVerified dependents for ODC
shortTermCapitalGainsNoShort-term capital gain or loss
aboveTheLineDeductionsNoAbove-the-line deductions
socialSecurityBenefitsNo
qualifiedBusinessIncomeNoQBI for Section 199A deduction
qualifiedBusinessIsSstbNo
retirementDistributionsNo
socialSecurityTaxesPaidNoPayroll-tax amount for 3-or-more-child ACTC method
qualifiedBusinessW2WagesNo
qualifyingChildrenForCtcNoVerified CTC/ACTC qualifying children
aotcStudentQualifiedExpensesNo
longTermCapitalLossCarryoverNoPrior-year long-term capital loss carryover
shortTermCapitalLossCarryoverNoPrior-year short-term capital loss carryover
qualifiedBusinessPropertyBasisNo
taxableRetirementDistributionsNo
lifetimeLearningQualifiedExpensesNo
marriedFilingSeparatelyLivedWithSpouseNo
earlyRetirementDistributionSubjectToPenaltyNo

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is fully covered. The description adds that federal breakdown, state tax, and combined totals all come back in one call, which is a mild efficiency signal. It says nothing about assumptions (e.g. tax year coverage, state-specific rules) or accuracy caveats that would matter for a 35-parameter tax computation.

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?

Two sentences, front-loaded with the core purpose, and the return-value sentence is compact. Nothing is padded, though the brevity borders on under-specification given the tool's complexity.

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

Completeness2/5

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

With 35 parameters, only 4 required, an output schema present, and rich annotations, the description covers only the high-level purpose. It omits the minimal required input set (taxYear, filingStatus, grossIncome, stateCode), any explanation of how optional inputs refine the calculation, and any caveat about state rule coverage. An agent can call it, but cannot scope its inputs wisely from this text alone.

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

Parameters2/5

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

The description mentions no parameters at all, despite 35 parameters of which only 4 are required. Schema coverage is a moderate 63%, so the schema documents many fields but the description offers no guidance on which optional inputs materially change the result or which can be safely omitted. For a tool this parameter-heavy, that is a real gap.

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

Purpose4/5

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

The description gives a specific verb and resource ("Calculate combined federal + state tax") and states the output composition. "Combined" implicitly differentiates it from calculate_federal_tax or estimate_state_tax, though no sibling is named outright.

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

Usage Guidelines3/5

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

Usage is only implied through the phrase "complete picture of total tax liability" - an agent can infer this is for joint federal+state estimates. There is no explicit when-to-use versus calculate_federal_tax, estimate_state_tax, or compare_state_taxes, and no note on prerequisites or when a single-jurisdiction tool is preferable.

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

calculate_w4_withholdingB
Read-onlyIdempotent

Calculate recommended W-4 withholding settings. Estimates per-paycheck federal tax and provides step-by-step W-4 form recommendations.

NameRequiredDescriptionDefault
taxYearYesTax year (2024, 2025, or 2026)
deductionsNoExpected itemized deductions (if more than standard)
dependentsNoNumber of qualifying child dependents
otherIncomeNoOther annual income (interest, dividends, side gigs)
spouseWorksNoDoes your spouse also work?
annualSalaryYesAnnual salary from this job
filingStatusYesFiling status
multipleJobsNoDo you hold multiple jobs simultaneously?
payFrequencyYesHow often you get paid

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds that output is a recommendation with step-by-step form guidance and per-paycheck estimates, which is useful context, but it says nothing about accuracy caveats, assumptions, or what the recommendation is based on.

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?

Two short sentences, front-loaded with the core action, with no filler. Slightly redundant between 'W-4 withholding settings' and 'W-4 form recommendations' but nothing wasteful.

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

Completeness3/5

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

With a full output schema and complete parameter documentation, the description covers the basic contract. However, for a tool with nine inputs including multipleJobs and spouseWorks, it omits guidance on which inputs matter and why, and doesn't indicate limitations versus analyze_paycheck or calculate_federal_tax.

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% across all nine parameters, so the schema already documents taxYear, filingStatus, dependents, and the rest. The description contributes no additional parameter meaning, which is the expected baseline when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource: calculates recommended W-4 withholding settings and estimates per-paycheck federal tax. This implicitly distinguishes it from calculate_federal_tax and analyze_paycheck by its W-4/form-recommendation focus, but it never names a sibling, so differentiation is left to inference.

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

Usage Guidelines3/5

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

The description implies the use case (setting up or adjusting W-4 withholding) but gives no explicit when-to-use or when-not guidance and never points to alternatives such as calculate_federal_tax, analyze_paycheck, or simulate_tax_scenario.

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

check_credit_eligibilityB
Read-onlyIdempotent

Check which tax credits you may be eligible for based on your situation.

NameRequiredDescriptionDefault
agiYesAdjusted Gross Income
taxYearNoTax year (default: 2026)
boughtEVNoPurchased an electric vehicle this year
isStudentNoCurrently enrolled in post-secondary education
hasChildrenNoHave qualifying children under 17
numChildrenNo
filingStatusYes
hasChildcareNoPay for childcare to work
installedSolarNoInstalled solar panels or renewable energy
paidForeignTaxNoPaid income tax to a foreign country
hasEarnedIncomeNoHas earned income from work
hasStudentLoansNoPaying student loan interest
madeHomeImprovementsNoMade energy-efficient home improvements
hasMarketplaceInsuranceNoBought health insurance through ACA marketplace
hasRetirementContributionsNoContributed to IRA/401k

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description adds nothing beyond that — it doesn't say results are estimates rather than determinations, whether omitted optional inputs degrade accuracy, or how partial data is handled.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler or restated name. Nothing in it is wasted.

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

Completeness4/5

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

With an output schema present, the description needn't explain return values, and the schema documents nearly every field. For a 15-parameter tool the only real gap is not flagging which optional flags materially change results — a minor omission given the structured coverage.

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 87% with only two required fields, so the schema itself carries nearly all parameter meaning. The description adds no parameter-level context, such as that agi/filingStatus are mandatory while the boolean flags drive which credits are surfaced.

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

Purpose4/5

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

States a specific verb and resource ('Check which tax credits you may be eligible for') plus the basis for the check ('based on your situation'). It is clearly distinguishable from siblings like list_tax_credits or calculate_eitc in intent, though it never names those siblings explicitly.

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

Usage Guidelines2/5

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

There is no guidance on when to prefer this over the many closely related siblings (list_tax_credits, calculate_eitc, estimate_premium_tax_credit, analyze_education_tax_benefits), no prerequisites, and no statement of what the agent must supply to get meaningful results. Usage is only implied by the phrase 'based on your situation'.

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

check_refund_statusA
Read-onlyIdempotent

Provide instructions on how to check IRS refund status. This tool does NOT access your IRS account — it provides the official links and requirements.

NameRequiredDescriptionDefault
filedElectronicallyNoWhether the return was e-filed

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (read-only, idempotent, non-destructive), so the added burden is low. The description still contributes a meaningful behavioral caveat: it does not authenticate to the user's IRS account and only surfaces official links and requirements, which prevents a false expectation of live data.

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?

Two short sentences, front-loaded with the core purpose and immediately followed by the key exclusion. Nothing is padded, though the second sentence could be tightened into the first for a perfect score.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and the 'no IRS account access' caveat is present. However, the definition says nothing about how the filedElectronically parameter changes the guidance, which is the only real gap for such a simple tool.

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% for the single filedElectronically boolean, so the schema already carries the parameter meaning. The description does not mention the parameter or how the answer changes for e-filed versus paper returns, so it adds nothing beyond the schema – baseline 3.

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

Purpose4/5

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

States a specific resource (IRS refund status) and a specific action (provide instructions/links rather than live status). No sibling tool covers refunds, so it is distinguishable, but the description slightly conflicts with the tool name 'check_refund_status', which implies an actual status lookup.

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

Usage Guidelines3/5

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

The description makes the usage context implied ('how to check IRS refund status') and explicitly excludes the IRS-account-access interpretation. It never says when to call this versus adjacent tools such as get_tax_deadlines or get_irs_form_info, but there is no direct alternative in the sibling list.

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

compare_filing_statusesB
Read-onlyIdempotent

Compare tax liability across different filing statuses for the same income. Helps determine the most advantageous filing status.

NameRequiredDescriptionDefault
taxYearYesTax year (2024, 2025, or 2026)
dependentsNoNumber of qualifying dependents
grossIncomeYesTotal gross income
itemizedDeductionsNoItemized deductions if applicable

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this a safe read-only, idempotent, closed-world operation, so the safety profile is covered. The description adds the substantive behavioral fact that income is held equal across comparisons, but it never says how many or which statuses are evaluated, whether dependents/deductions are applied uniformly, or what assumptions (standard vs itemized) are baked in.

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?

Two short sentences with the core operation front-loaded and no filler. The second sentence is somewhat redundant with the first but does add the purpose (choosing the best status), so it earns most of its place.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and the four flat numeric parameters are fully documented by the schema. What remains missing is the scope of the comparison (which filing statuses) and how this differs from closely named siblings — the main sources of misfire for an agent.

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% — taxYear, grossIncome, dependents, and itemizedDeductions are each documented in the schema with ranges and meaning. The description's only parameter-adjacent content is "same income," which merely restates grossIncome's role rather than adding semantics.

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

Purpose4/5

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

"Compare tax liability across different filing statuses for the same income" gives a specific verb (compare) and resource (filing status tax liability) with the key constraint that income is held constant. It does not, however, distinguish itself from the sibling 'compare_mfj_vs_mfs', which sounds like a narrower version of the same operation, leaving the agent to guess which to pick.

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

Usage Guidelines3/5

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

"Helps determine the most advantageous filing status" implies the use case (choosing a status), but gives no explicit when-to-use/when-not guidance and never names an alternative. With siblings like compare_mfj_vs_mfs, calculate_federal_tax, and compare_state_taxes present, an agent has no routing signal from this description.

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

compare_mfj_vs_mfsA
Read-onlyIdempotent

Compare Married Filing Jointly (MFJ) vs Married Filing Separately (MFS). Shows tax difference and lists all MFS restrictions that may affect your situation.

NameRequiredDescriptionDefault
hasEITCNoEither spouse would qualify for EITC
taxYearYesTax year (2024, 2025, or 2026)
dependentsNoNumber of qualifying children (maximum 20)
spouse1IncomeYesSpouse 1 gross income
spouse2IncomeYesSpouse 2 gross income
itemizedDeductionsNoTotal itemized deductions (combined for MFJ, split for MFS)
hasEducationCreditsNoEither spouse claiming AOTC or LLC
hasIRAContributionsNoEither spouse contributing to IRA
studentLoanInterestNoEither spouse paying student loan interest

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered by structured data. The description adds that the response includes the MFS restriction list, which is modestly useful behavioral context, but since an output schema exists that content is largely already discoverable. No notes on assumptions or limitations of the comparison.

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

Conciseness5/5

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

Two short sentences, front-loaded with the comparison being made, and the second sentence tells the agent what comes back. Nothing is wasted or redundant.

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

Completeness3/5

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

With a rich schema and an output schema, the description covers enough to call the tool correctly. The main missing piece is sibling differentiation against 'compare_filing_statuses' and any hint about the scenario flags that materially change the result (EITC, education credits, IRA, student loan interest).

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% across all 9 parameters, so the schema fully documents taxYear, incomes, dependents, and the boolean scenario flags. The description mentions none of them, so it adds no meaning beyond the schema — baseline 3 applies.

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

Purpose4/5

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

The description names a specific comparison (Married Filing Jointly vs Married Filing Separately) and states what the result contains: the tax difference plus the list of MFS restrictions. That is a concrete verb-plus-resource statement. It stops short of 5 because the sibling 'compare_filing_statuses' covers overlapping ground and the description does nothing to distinguish the two.

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

Usage Guidelines3/5

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

Usage is only implied — an agent can infer you call this when a married couple is weighing joint vs separate filing. There is no explicit when-to-use statement, no prerequisites (e.g., both spouses must have income figures), and no guidance on when 'compare_filing_statuses' would be the better choice.

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

compare_state_taxesB
Read-onlyIdempotent

Compare state income tax for one tax year only when every requested state has an explicit calculation profile.

NameRequiredDescriptionDefault
statesYesArray of state codes to compare (e.g., ['CA', 'TX', 'WA', 'NY'])
taxYearYesTax year for all versioned state calculation profiles
filingStatusNoFiling status (default: single)
taxableIncomeNoDeprecated alias for incomeBeforeStateDeductions
incomeBeforeStateDeductionsNoAnnual income before modeled state deductions

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already establish that this is a safe, read-only, idempotent, non-destructive operation. The description adds the important gating condition about calculation profiles, but it does not explain failure behavior when a profile is missing or how partial matches are handled.

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 definition is a single front-loaded sentence with no filler. It is dense and efficient, though the compressed phrasing leaves some behavioral questions unanswered.

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

Completeness3/5

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

Annotations cover safety and the output schema covers return structure, so the main description gap is usage guidance. The critical precondition is present, but the description does not explain fallback behavior or alternatives when not all requested states have profiles.

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%, so the schema already documents all five parameters. The description reinforces the single-tax-year constraint and the requirement that requested states have profiles, but it adds no extra detail about defaults, the deprecated taxableIncome alias, or the 2-to-10 state limit.

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

Purpose4/5

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

"Compare state income tax" gives a specific verb and resource, and "for one tax year only" narrows the scope. It does not explicitly distinguish itself from nearby siblings such as estimate_state_tax or compare_tax_years, but the purpose is still clear.

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

Usage Guidelines3/5

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

The description gives a real precondition: use it only when every requested state has an explicit calculation profile. However, it does not say what to do when that condition fails or which alternative tool to use instead.

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

compare_tax_yearsB
Read-onlyIdempotent

Compare tax liability across different tax years for the same income. Shows how bracket changes and inflation adjustments affect your tax.

NameRequiredDescriptionDefault
dependentsNo
grossIncomeYesGross income to compare across years
filingStatusYes
selfEmploymentIncomeNo

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare this as a safe, read-only, idempotent, closed-world computation, so the safety profile is covered. The description usefully adds that the output explains bracket changes and inflation adjustments, which tells the agent what the comparison contains. However, it never says which tax years are compared or how they are chosen — a significant behavioral gap given no year parameter exists in the schema.

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?

Two sentences, no filler, with the core purpose front-loaded in the first clause. The second sentence is informative rather than redundant. Slightly more length would be justified if it addressed the missing year-selection behavior.

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

Completeness3/5

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 the annotations cover the safety profile. The remaining gap is substantive: the description promises comparison 'across different tax years' while the input schema exposes no year parameters, so an agent cannot determine which years will be used or whether the set is fixed. That ambiguity should have been resolved in the description.

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

Parameters2/5

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

Schema description coverage is only 25%: just grossIncome is documented, leaving filingStatus, dependents, and selfEmploymentIncome undocumented in the schema. The description contributes nothing about any parameter — it does not explain that selfEmploymentIncome is treated separately from grossIncome, how dependents affect the comparison, or that filingStatus drives the bracket lookup. With low coverage, this is the dimension where the description most needed to compensate and does not.

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

Purpose4/5

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

The description states a specific verb and resource ('Compare tax liability across different tax years') and adds a scoping condition ('for the same income'), which distinguishes it from broad multi-year planning siblings like plan_multi_year_taxes. It stops short of naming the closest alternatives (what_changed_between_tax_years, compare_filing_statuses), so it is clear but not fully differentiated.

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

Usage Guidelines3/5

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

Usage is only implied: 'for the same income' signals a controlled comparison, but there is no explicit when-to-use statement, no when-not, and no pointer to the sibling that handles year-over-year rule changes (what_changed_between_tax_years) or multi-year planning (plan_multi_year_taxes). An agent must infer the routing decision.

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

estimate_premium_tax_creditA
Read-onlyIdempotent

Estimate the TY2026 Premium Tax Credit (Form 8962) from annual Form 1095-A totals. Uses the Rev. Proc. 2025-25 applicable percentages, the 400% poverty-line limit, and full repayment of excess advance payments.

NameRequiredDescriptionDefault
monthlyNoForm 1095-A lines 21 to 32, January to December, for part-year or changing coverage; replaces the annual totals
taxYearYesTax year (only 2026 is modeled)
familySizeYesTax family size (Form 8962 line 1)
filingStatusYes
advancePaymentsYesForm 1095-A column C annual total (APTC)
householdIncomeYesForm 8962 line 3 household income (modified AGI)
povertyLineRegionNoPoverty-line table (default: 48 contiguous states and DC)
annualBenchmarkPremiumYesForm 1095-A column B annual total (SLCSP)
annualEnrollmentPremiumYesForm 1095-A column A annual total
marriedFilingSeparatelyException2NoMFS only: victim of domestic abuse or spousal abandonment living apart (Form 8962 Exception 2)
marketplaceEstimatedAtLeast100PercentNoBelow-100% exception: the Marketplace estimated household income of at least 100% of the poverty line at enrollment

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish that this is a safe, idempotent, closed-world read. The description goes beyond them by disclosing the computation regime: Rev. Proc. 2025-25 applicable percentages, the 400% poverty-line cutoff, and full repayment of excess advance payments, which materially affects how an agent should interpret and present results.

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

Conciseness5/5

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

Two tightly packed sentences with zero filler, and the tool's identity is front-loaded before the methodological details. Every clause carries information an agent can act on.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and the description covers the method, the statutory limits, and the repayment treatment. It does not mention the 2026-only modeling constraint or the MFS/below-100% exceptions, though those are captured in the schema.

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 91%, so nearly every parameter is already documented in the schema, including the monthly array replacing annual totals. The description adds no format or edge-case detail beyond noting the annual Form 1095-A totals, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb (Estimate), a specific credit and form (Premium Tax Credit, Form 8962), and the input source (annual Form 1095-A totals). It is specific enough to separate it from generic siblings like list_tax_credits or check_credit_eligibility, though it never names those alternatives explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: the reference to Form 1095-A totals tells an agent this is for people with Marketplace coverage, but there is no explicit statement of when to pick this over check_credit_eligibility or list_tax_credits, and no prerequisites or exclusions are given.

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

estimate_quarterly_taxA
Read-onlyIdempotent

Calculate estimated quarterly tax payments (Form 1040-ES) for self-employed or other taxpayers who need to make estimated payments.

NameRequiredDescriptionDefault
taxYearYesTax year
filingStatusYes
otherCreditsNoExpected other tax credits
w2WithholdingNoExpected total W-2 tax withholding for the year
expectedAnnualIncomeYesExpected total annual income
selfEmploymentIncomeNoExpected self-employment income

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered and the bar is lower. The description adds the 1040-ES framing but does not state jurisdiction (federal-only vs. state), whether the result is an annual safe-harbor figure or a per-quarter breakdown, or any assumption about annualizing income. Credit for domain framing, but key calculation behavior is left undisclosed.

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?

A single, front-loaded sentence with the core action first and the audience qualification second; no filler or restatement of the tool name. It is tight, though one short clause on federal scope would have earned its place.

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

Completeness4/5

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

An output schema exists and annotations cover the safety profile, so the description need not explain return values or side effects. The remaining meaningful gap is jurisdiction scope, which matters given siblings like estimate_state_tax and compare_state_taxes. Otherwise the definition is sufficient for correct invocation.

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 coverage is 83%, so the schema already documents nearly all six parameters, including enums for filingStatus and minimums on amounts. The description contributes no additional meaning about how selfEmploymentIncome interacts with expectedAnnualIncome (e.g., whether SE income is included in or additive to annual income) and no unit or period guidance. Baseline 3 applies when the schema carries the load.

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

Purpose4/5

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

The description names a specific verb and resource (calculate estimated quarterly tax payments) and anchors it to Form 1040-ES, plus identifies the target population (self-employed or others owing estimated payments). This separates it reasonably well from siblings like calculate_federal_tax or calculate_w4_withholding, though it never explicitly names those alternatives.

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

Usage Guidelines4/5

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

It supplies a clear qualifying condition: taxpayers who must make estimated payments, particularly the self-employed. That gives an agent a usable trigger for selection. It stops short of explicit exclusions or naming which sibling to use instead (e.g., estimate_state_tax for state-level payments), so it is not a full when/when-not statement.

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

estimate_self_employment_taxB
Read-onlyIdempotent

Detailed self-employment tax breakdown including Schedule C profit, SE tax, QBI deduction, and recommended quarterly payments. Above the annual QBI threshold, provide SSTB classification, W-2 wages, and qualified-property basis, using 0 where none apply.

NameRequiredDescriptionDefault
taxYearYesTax year
dependentsNo
filingStatusYes
grossRevenueYesTotal business revenue (Schedule C line 1)
otherW2IncomeNoW-2 income from other jobs
businessExpensesYesTotal business expenses (Schedule C)
healthInsurancePremiumsNoSelf-employed health insurance premiums
qualifiedBusinessIsSstbNo
retirementContributionsNoSEP IRA or Solo 401k contributions
qualifiedBusinessW2WagesNo
qualifiedBusinessPropertyBasisNo

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds the useful disclosure that the three QBI inputs default to 0 when not applicable, but it says nothing about the QBI threshold value used, rounding, or whether the quarterly payment figure assumes safe-harbor rules. Since an output schema exists, the lack of return-value detail is not a major gap.

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?

Two sentences, no filler, with the output scope front-loaded before the conditional input instruction. The second sentence is dense but earns its place by covering three otherwise undocumented parameters.

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

Completeness3/5

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

For an 11-parameter tax computation with an output schema and full annotations, the description covers the headline calculation and the advanced QBI branch adequately. It falls short on what the QBI threshold actually is, how quarterly payments are derived, and semantics for roughly half the inputs, which an agent must infer.

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?

At 55% schema description coverage across 11 parameters, the description partially compensates by explaining the purpose of qualifiedBusinessIsSstb, qualifiedBusinessW2Wages, and qualifiedBusinessPropertyBasis and their 0-default convention. It adds nothing about dependents, healthInsurancePremiums, retirementContributions, otherW2Income, or filingStatus, leaving several undocumented parameters entirely to their bare schema types.

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

Purpose4/5

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

The description names a specific resource and enumerates the computed outputs (Schedule C profit, SE tax, QBI deduction, quarterly payments), so an agent knows exactly what this tool produces. It does not, however, distinguish itself from siblings such as calculate_federal_tax, estimate_quarterly_tax, or calculate_total_tax, which overlap in scope.

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

Usage Guidelines3/5

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

The second sentence gives an explicit conditional rule for when to supply the advanced QBI inputs (above the annual QBI threshold, use 0 where none apply), which is real input-time guidance. But there is no guidance on when to choose this tool over the many adjacent tax calculators, and no statement of prerequisites or exclusions.

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

estimate_state_taxB
Read-onlyIdempotent

Estimate state income tax using an explicit tax-year calculation profile. Unsupported state-year paths fail closed.

NameRequiredDescriptionDefault
taxYearYesTax year for the versioned state calculation profile
stateCodeYesTwo-letter state code
filingStatusNoFiling status (default: single)
taxableIncomeNoDeprecated alias for incomeBeforeStateDeductions
incomeBeforeStateDeductionsNoState income before the modeled state standard deduction and personal exemption

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world scope, so the safety profile is covered. The description adds one genuinely new behavioral trait — that unsupported state-year combinations fail closed rather than approximating — which is useful. It does not say what such a failure looks like or what the output contains, but an output schema exists to cover that.

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?

Two short sentences with the purpose front-loaded and no filler. The second sentence is compact but leans on terser jargon ("fail closed") that costs a moment of interpretation, keeping it just short of ideal.

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

Completeness3/5

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

With annotations covering safety, a full-coverage schema, and an output schema, the description only needs to add routing and edge-case context. It supplies the fail-closed caveat but omits any differentiation from the numerous sibling tax-calculation tools, which is the main remaining gap for a 5-parameter estimator in a crowded toolset.

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%, so every parameter including the deprecated taxableIncome alias is documented in the schema itself. The description only echoes that the calculation is tied to a versioned tax-year profile and adds no format, default, or precedence guidance beyond the schema; baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("Estimate state income tax") plus a scoping notion (versioned tax-year calculation profile), so the agent knows this is a state-level estimation keyed to a year. It does not explicitly distinguish itself from near-siblings such as compare_state_taxes, get_state_tax_info, or compare_tax_years, leaving that inference to the agent.

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

Usage Guidelines2/5

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

"Unsupported state-year paths fail closed" hints at a precondition (only certain state-year profiles are modeled) but never states when to choose this over calculate_federal_tax, compare_state_taxes, or get_state_tax_info. There are no explicit when-to-use or when-not-to-use instructions, only an implied failure condition.

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

generate_full_tax_reportB
Read-onlyIdempotent

Generate a detailed tax estimate combining federal tax, supported state tax, FICA, modeled credits, deductions, take-home pay, and refund inputs.

NameRequiredDescriptionDefault
taxYearYesTax year (2024, 2025, or 2026)
w2IncomeNoW-2 wages
stateCodeNoState code for state tax estimate
dependentsNoChildren already verified as CTC, ACTC, and EITC qualifying children
hasForm2555NoWhether Form 2555 is filed
otherIncomeNoOther income (rental, alimony, etc.)
age65OrOlderNoTaxpayer is 65 or older
filingStatusYes
otherItemizedNoOther itemized deductions
qualifiedTipsNoTY2025+ Schedule 1-A: qualified tips
stateWithheldNoState tax already withheld YTD
dividendIncomeNo1099-DIV ordinary dividends
interestIncomeNo1099-INT interest income
federalWithheldNoFederal tax already withheld YTD
medicalExpensesNoUnreimbursed medical expenses
otherDependentsNoDependents already verified for the nonrefundable ODC
mortgageInterestNoMortgage interest
taxExemptInterestNo
qualifiedDividendsNoQualified dividends (subset of dividends, taxed at CG rates)
spouseAge65OrOlderNoSpouse is 65 or older
spouseEarnedIncomeNoMFJ only: spouse's earned income, already included in W-2 or self-employment income
charitableDonationsNoCharitable contributions
stateLocalTaxesPaidNoState/local/property taxes paid
longTermCapitalGainsNoLong-term capital gains/losses
selfEmploymentIncomeNoSelf-employment net profit
aotcRefundableAllowedNo
dependentCareExpensesNoForm 2441 work-related care expenses paid
estimatedPaymentsMadeNoEstimated tax payments already made
shortTermCapitalGainsNoShort-term capital gains/losses
aboveTheLineDeductionsNoHSA, student loan interest, educator expenses, etc.
socialSecurityBenefitsNoNet benefits from Form SSA-1099 or RRB-1099
qualifiedBusinessIncomeNoQBI for Section 199A
qualifiedBusinessIsSstbNo
retirementDistributionsNoGross Form 1099-R distributions
socialSecurityTaxesPaidNoSchedule 8812 payroll-tax amount for 3-or-more-child ACTC method
qualifiedBusinessW2WagesNo
charitableCashContributionsNoTY2026+: qualifying cash gifts to public charities for the non-itemizer deduction
aotcStudentQualifiedExpensesNo
longTermCapitalLossCarryoverNoPrior-year long-term capital loss carryover
qualifiedVehicleLoanInterestNoTY2025+ Schedule 1-A: interest on a new US-assembled personal vehicle loan
dependentCareBenefitsExcludedNoEmployer dependent care benefits excluded from wages (W-2 box 10)
qualifiedOvertimeCompensationNoTY2025+ Schedule 1-A: FLSA overtime premium
shortTermCapitalLossCarryoverNoPrior-year short-term capital loss carryover
qualifiedBusinessPropertyBasisNo
taxableRetirementDistributionsNo
lifetimeLearningQualifiedExpensesNo
dependentCareQualifyingIndividualsNoQualifying individuals for the Child and Dependent Care Credit
marriedFilingSeparatelyLivedWithSpouseNo
qualifiedBusinessMaterialParticipationNoTY2026+: materially participates, enabling the $400 minimum QBI deduction
earlyRetirementDistributionSubjectToPenaltyNo

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is fully covered. The description adds two useful behavioral facts: credits are 'modeled' rather than authoritative, and only 'supported' states are handled — meaningful caveats for an estimation tool. It does not note that the remaining 48 parameters are all optional or that unspecified inputs default to zero/absent, which matters greatly for correctness.

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?

A single front-loaded sentence with no filler or repetition; the core action and the component scope come first. It is arguably too terse for a 50-parameter tool, but nothing in it is wasted.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and annotations cover safety. What remains missing for a 50-parameter, 2-required-field estimation tool is minimal-input guidance (taxYear + filingStatus suffice) and when to prefer it over calculate_total_tax or calculate_federal_tax.

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 78%, so the schema already documents most of the 50 parameters well, making 3 the baseline. The description contributes only category-level vocabulary ('deductions', 'credits', 'refund inputs') and adds no guidance on which inputs are required versus optional or how partial data is treated.

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

Purpose4/5

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

Uses a specific verb (Generate) and a specific artifact (a detailed tax estimate) and enumerates what the report combines: federal tax, supported state tax, FICA, modeled credits, deductions, take-home pay, and refund inputs. That enumeration implies this is the aggregates-everything tool, differentiating it implicitly from narrow siblings like calculate_federal_tax, but it never names a sibling or states that it is the superset.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance and no routing to alternatives, despite many overlapping siblings (calculate_total_tax, calculate_federal_tax, simulate_tax_scenario, estimate_state_tax). The only implied guidance is that this is the full combined estimate, which an agent must infer from the component list.

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

generate_tax_planB
Read-onlyIdempotent

Generate a deterministic, privacy-first local tax plan with structured results, assumptions, source provenance, calculation trace, and explicit unsupported boundaries.

NameRequiredDescriptionDefault
familyNo
incomeYesAnnual income facts. Qualified dividends are included in ordinary dividends.
taxYearYesTax year: 2024, 2025, or 2026
businessNo
paymentsNo
educationNo
stateCodeNo
deductionsNo
filingStatusYes

Output Schema

NameRequiredDescription
planNo
textYes
errorNo
isErrorYes

TDQS

B3.1/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, closed-world, and non-destructive behavior. The description adds useful behavioral context: deterministic and privacy-first local computation, plus structured results, assumptions, source provenance, calculation trace, and explicit unsupported boundaries.

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?

It is a single front-loaded sentence with no wasted words. The list of output components is dense but informative, though it could be broken into a clearer structure.

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

Completeness3/5

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

The output schema means return values need not be explained, and the description covers purpose and behavior. However, for a complex 9-parameter tool with nested objects and low schema coverage, the absence of input guidance and usage conditions leaves clear gaps.

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

Parameters1/5

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

Schema description coverage is only 22%, so the description should compensate for undocumented parameters. It mentions no parameter names, constraints, or input semantics whatsoever, leaving the agent reliant on the schema alone.

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

Purpose4/5

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

The description states a specific verb and resource: 'Generate a deterministic, privacy-first local tax plan' and lists the output components. It does not explicitly differentiate this from close siblings like generate_full_tax_report or calculate_total_tax, so sibling differentiation is missing.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives. The many tax calculation and planning siblings make the absence of routing guidance significant.

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

get_form_filing_guideA
Read-onlyIdempotent

Step-by-step guide for filling out a specific IRS form or schedule. Explains each section, what data you need, and common mistakes to avoid.

NameRequiredDescriptionDefault
formNumberYesIRS form (e.g., '1040', 'Schedule C', 'Schedule D', 'Form 8949', 'W-4')

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare this a safe, idempotent, closed-world read, so the safety profile is fully covered without the description. The description adds that the response is structured as per-section guidance including required data and common errors, which is genuinely useful planning context, but it does not go on to say anything about depth, length, or coverage limits per form.

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

Conciseness5/5

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

Two tight sentences, zero filler, with the core deliverable front-loaded and the content breakdown following immediately. Every clause earns its place.

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

Completeness4/5

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

For a one-parameter, read-only tool with an output schema and full annotation coverage, the description supplies enough: what it returns, what the input denotes, and the kind of help provided. The only real gap is the lack of routing guidance relative to sibling form/tax-info tools.

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

Parameters4/5

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

Schema coverage is 100% and the single formNumber parameter already carries examples ('1040', 'Schedule C', 'W-4'), so the schema does the heavy lifting. The description correctly frames the parameter's role as selecting the specific form the guide targets, which slightly reinforces but does not exceed the structured documentation.

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

Purpose4/5

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

"Step-by-step guide for filling out a specific IRS form or schedule" gives a specific deliverable (a filing guide) tied to a specific resource (an IRS form), and the second sentence clarifies what the guide contains. It does not, however, distinguish this from the closely related sibling get_irs_form_info, leaving the agent to guess which one returns guidance versus metadata.

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

Usage Guidelines3/5

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

Use is only implied: an agent can infer the tool is appropriate when a user needs help completing a form. There is no explicit when-to-use or when-not-to-use statement and no mention of the obvious alternative (get_irs_form_info) or of get_tax_document_checklist for gathering inputs.

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

get_irs_form_infoA
Read-onlyIdempotent

Get information about common IRS tax forms — what they are, who needs them, and where to find them.

NameRequiredDescriptionDefault
formNumberYesIRS form number (e.g., '1040', 'W-2', '1099-NEC', 'Schedule C')

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already establish a read-only, idempotent, non-destructive, closed-world operation. The description adds a useful scope limitation to "common" IRS forms, but it does not explain coverage limits, handling of unrecognized form numbers, or the source and currency of the information.

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

Conciseness5/5

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

The single sentence is compact and front-loads the action and resource. The phrase after the dash efficiently communicates the three information categories without repetition or filler.

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

Completeness4/5

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

For a simple one-parameter read-only lookup with an output schema, the description supplies enough information for basic selection and invocation. Its main remaining gap is boundary guidance relative to get_form_filing_guide and clarification of what "common" coverage includes.

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?

The schema fully documents the sole formNumber parameter and supplies examples such as "1040," "W-2," and "Schedule C." The description adds no parameter syntax, normalization, or supported-form details beyond that, so the high-coverage baseline of 3 applies.

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

Purpose4/5

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

The description clearly pairs the verb "Get" with IRS tax forms and specifies that it explains what forms are, who needs them, and where to find them. It does not distinguish this general-information tool from the sibling get_form_filing_guide, so it falls short of full sibling differentiation.

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

Usage Guidelines3/5

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

The listed information types imply that the tool is for general form orientation rather than tax calculation or filing. However, it provides no explicit when-not guidance or alternative, particularly for agents that should instead use get_form_filing_guide for filing instructions.

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

get_personalized_tax_calendarA
Read-onlyIdempotent

Generate a personalized tax calendar based on your situation. Shows deadlines for filing, estimated payments, extensions, and key actions.

NameRequiredDescriptionDefault
taxYearYesTax year to get calendar for
hasEmployerNoDo you have W-2 employment?
filedExtensionNoDid you file an extension?
hasInvestmentsNoDo you have investment accounts?
isSelfEmployedNoDo you have self-employment income?
hasRentalIncomeNoDo you have rental property income?

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare this a read-only, idempotent, non-destructive, closed-world operation, so the safety profile is fully covered. The description contributes the enumeration of what the calendar includes, which is genuinely useful behavioral context. It does not say how the flags alter the result set or whether omitted flags default to false, so it stays at a solid 3.

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?

Two sentences, front-loaded with the action and followed by the payload contents; no filler. Slightly less efficient than ideal since the second sentence is a list of output items that overlaps with the presence of an output schema.

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

Completeness3/5

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

The output schema means return values need no explanation, and all six parameters are documented in the schema. What is missing is how the personalization behaves (e.g., whether filedExtension pushes dates to October, whether omitted booleans are treated as false) and how this differs from get_tax_deadlines, which matters for a tool whose whole value is tailoring.

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

Parameters5/5

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

Schema description coverage is 100% and every property carries a plain-language question ("Did you file an extension?", "Do you have rental property income?"), so the schema already does the heavy lifting. The description's "based on your situation" reinforces that the booleans personalize the output, which is the one extra idea worth conveying.

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

Purpose4/5

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

"Generate a personalized tax calendar" is a specific verb+resource, and the second sentence enumerates the contents (filing, estimated payments, extensions, key actions). It falls short of 5 because a very close sibling, get_tax_deadlines, is never acknowledged or distinguished, leaving the agent to guess which one returns generic vs. personalized deadlines.

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

Usage Guidelines2/5

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

The phrase "based on your situation" hints that the boolean flags drive personalization, but there is no explicit when-to-use guidance, no prerequisites, and no exclusion naming get_tax_deadlines or get_tax_planning_tips as alternatives. With two siblings in the same deadline space, an agent gets no routing help.

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

get_retirement_accountsA
Read-onlyIdempotent

Get details on retirement account types — contribution limits, tax treatment, income limits, and tips.

NameRequiredDescriptionDefault
accountTypeNoSpecific account (e.g., 'roth_ira', '401k', 'hsa', 'sep_ira'). Leave empty for all

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered. The description adds the useful signal that this is a static fact sheet (limits, tax treatment, income limits, tips) rather than a calculator, but says nothing about caching, update cadence, or how the 'tips' content is structured. With annotations carrying the safety burden and an output schema covering returns, a 3 is appropriate.

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

Conciseness5/5

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

A single front-loaded sentence that names the resource and then lists the four categories of returned information. No filler, no restatement of the tool name, and the em-dash list makes the value proposition scannable.

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

Completeness4/5

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

For a one-optional-parameter read tool with full schema coverage, complete annotations, and an output schema, the description covers what the tool returns at a category level. Nothing critical is missing, though a note on how 'tips' differ from get_retirement_strategy would close the remaining gap.

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

Parameters4/5

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

Schema description coverage is 100% and the single optional parameter already documents examples ('roth_ira', '401k', 'hsa', 'sep_ira') and the empty-means-all behavior. The description reinforces the concept of account types but adds no new syntax or filtering semantics beyond the schema, so it sits at the expected baseline rather than excelling.

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

Purpose4/5

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

The description gives a specific verb ('Get details') plus resource ('retirement account types') and enumerates the content covered (contribution limits, tax treatment, income limits, tips). It is clearly distinguishable from siblings like get_retirement_strategy or plan_retirement_withdrawals by being a reference lookup rather than a planner, but it never explicitly states that distinction.

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

Usage Guidelines3/5

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

Usage is only implied: the phrasing suggests a static reference lookup for account-type facts, and the schema's 'Leave empty for all' hints at bulk retrieval. There is no explicit when-to-use, no exclusion of planning-oriented siblings such as get_retirement_strategy, and no guidance on when a caller should instead use plan_retirement_withdrawals.

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

get_retirement_strategyB
Read-onlyIdempotent

Get detailed info on tax-advantaged retirement strategies like Backdoor Roth, Mega Backdoor Roth, Roth Conversion Ladder, Tax Loss/Gain Harvesting.

NameRequiredDescriptionDefault
strategyIdNoStrategy ID (e.g., 'backdoor_roth', 'mega_backdoor_roth', 'roth_conversion_ladder', 'tax_loss_harvesting', 'tax_gain_harvesting'). Leave empty for all

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds scoping value by enumerating the strategy families in scope, but says nothing about depth of detail, freshness, or limits. With full annotation coverage the bar is lower, so a 3 is appropriate.

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?

A single front-loaded sentence with the resource first and the strategy list second; no filler. The inline enumeration is slightly long but each item earns its place by telling the agent what topics are covered.

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

Completeness4/5

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

This is a simple read-only lookup with one optional parameter, full schema coverage, full annotations, and an output schema, so return-value explanation is unnecessary. The description is complete enough to call correctly; only the sibling differentiation and empty-ID behavior are left implicit.

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% and the single strategyId parameter already documents valid examples and the 'leave empty for all' default. The description only mirrors the same strategy names at a coarser grain (it lumps Tax Loss/Gain Harvesting together), adding no syntax or filtering semantics beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb ('Get detailed info') and a specific resource (tax-advantaged retirement strategies), then enumerates the covered strategies, so an agent knows exactly what content it returns. It does not distinguish itself from closely related siblings such as get_retirement_accounts or plan_retirement_withdrawals, which keeps it from a 5.

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

Usage Guidelines2/5

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

The only guidance is implicit in the example list: look up a named strategy. There is no statement of when to prefer this over get_retirement_accounts (account details) or plan_retirement_withdrawals (withdrawal modeling), and no mention of the documented 'leave empty for all' behavior in the description itself.

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

get_state_tax_infoB
Read-onlyIdempotent

Get state income tax information — rates, brackets, and key details for any US state.

NameRequiredDescriptionDefault
stateCodeYesTwo-letter state code (e.g., 'CA', 'TX', 'NY')

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered elsewhere. The description adds modest value by naming the kind of content returned ('rates, brackets, and key details'), but it says nothing about coverage gaps (e.g., states with no income tax) or data vintage.

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?

One short sentence, front-loaded with the verb and resource, and no filler. It could not easily be trimmed further, though the trailing 'key details' is slightly vague.

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

Completeness3/5

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

With an output schema present and full parameter documentation, return values and inputs are already specified. What remains missing is the sibling disambiguation in a crowded state-tax tool cluster, which is the main thing an agent needs to select this tool correctly.

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 coverage is 100% and the single stateCode parameter is documented with format and examples in the schema. The description's 'for any US state' only loosely reinforces the input domain, adding no format or edge-case detail beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Get state income tax information') and enumerates the content returned (rates, brackets, key details). It is clear what the tool does, but it offers no differentiation from close siblings such as get_tax_brackets, estimate_state_tax, or compare_state_taxes.

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

Usage Guidelines2/5

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

There is no guidance on when to use this instead of estimate_state_tax (which presumably computes a liability) or get_tax_brackets (which may overlap on bracket data). The agent must infer the boundary from the tool name alone, and no exclusions or prerequisites are given.

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

get_tax_bracketsA
Read-onlyIdempotent

Get federal income tax brackets and standard deduction for a given tax year and filing status.

NameRequiredDescriptionDefault
taxYearYesTax year (2024, 2025, or 2026)
filingStatusYesFiling status

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety and determinism profile is fully covered. The description adds only that results are federal (not state) and include the standard deduction, with no mention of how out-of-range years are handled or caching behavior. Some added value beyond structured fields, but modest.

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

Conciseness5/5

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

A single front-loaded sentence with the resource and both scoping parameters, and no filler. Nothing could be removed without losing meaning.

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

Completeness4/5

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

With a rich output schema, full parameter documentation, and safety annotations, the description only needs to establish scope, which it does by specifying federal brackets plus the standard deduction. A small gap remains around behavior for unsupported tax years, but nothing essential to calling it correctly 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% — both taxYear (with the 2024/2025/2026 range) and filingStatus (with its four-value enum) are documented in the schema. The description merely restates the two dimensions without adding format, default, or constraint detail, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb and resource ('Get federal income tax brackets and standard deduction') plus the two scoping dimensions (year, filing status). The word 'federal' implicitly separates it from state-oriented siblings like get_state_tax_info, but no sibling is named explicitly, so differentiation relies on inference.

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

Usage Guidelines3/5

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

Usage is only implied: the phrase 'for a given tax year and filing status' signals a parameterized lookup rather than a calculation, which usefully contrasts with calculate_federal_tax. However, there is no explicit statement of when to use this versus those compute-oriented siblings, and no exclusions or prerequisites.

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

get_tax_deadlinesB
Read-onlyIdempotent

Get important IRS tax deadlines and due dates for a given tax year.

NameRequiredDescriptionDefault
taxYearNoTax year (default: 2026)

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.2/5.0
Behavior3/5

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

The description clarifies that the data is for a 'given tax year,' adding useful scoping context. However, the provided annotations already handle the safety profile (readOnlyHint: true), and the description does not disclose any additional behavioral complexities or data limitations beyond the scope.

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 definition is a single, concise sentence that puts the primary function first. It avoids jargon and unnecessary phrasing while remaining direct.

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

Completeness4/5

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

For a simple lookup tool with minimal parameters, the description is sufficiently complete. The combination of the scope (deadlines), the resource (IRS), and the safety hints provided in annotations makes the definition a good starting point for an agent.

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?

Since the schema coverage is 100%, the baseline score is 3. The description merely confirms that the tool operates 'for a given tax year,' which is the exact role of the 'taxYear' parameter, thus adding no semantic value beyond the schema.

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

Purpose4/5

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

The tool clearly states its purpose: retrieving IRS tax deadlines and due dates. While the purpose is clear, given the extremely long list of tax-related sibling tools, the description relies on the noun 'deadlines' to differentiate itself, which may not be fully sufficient.

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

Usage Guidelines2/5

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

The definition provides virtually no usage guidance. It does not explain when to use this tool versus closely related tools like 'get_tax_brackets' or 'get_personalized_tax_calendar,' making tool selection difficult for an agent without trial and error.

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

get_tax_document_checklistA
Read-onlyIdempotent

Generate a personalized checklist of tax documents you need to gather for filing. Based on your income sources, deductions, and life events.

NameRequiredDescriptionDefault
hasW2NoHave W-2 employment
hasHSANoHave HSA account
hadBabyNoHad a baby this year
taxYearNoTax year (default: 2026)
boughtEVNoBought an electric vehicle
soldHomeNoSold a home this year
gotMarriedNoGot married this year
gotDivorcedNoGot divorced this year
hasChildrenNoHave dependent children
hasMortgageNoHave a mortgage
hasChildcareNoPay for childcare
hasInvestmentsNoHave investment accounts (stocks, bonds, crypto)
installedSolarNoInstalled solar panels
hasStudentLoansNoPaying student loans
hasRentalPropertyNoOwn rental property
hasSelfEmploymentNoHave self-employment/freelance income
hasForeignAccountsNoHave foreign bank accounts or income
hasHealthInsuranceNoHave health insurance (marketplace or employer)
hasEducationExpensesNoPaying tuition or student expenses
hasCharitableDonationsNoMade charitable donations
hasRetirementContributionsNoContributed to IRA/401k

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds only that the checklist is 'personalized' from the supplied flags; it does not say what happens with all-false input, whether flags alter the checklist length, or how taxYear influences results. Adequate but thin given the annotation coverage.

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

Conciseness5/5

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

Two short sentences with no filler, and the core purpose is front-loaded in the first sentence. The second sentence adds the personalization driver without redundancy.

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

Completeness3/5

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

With an output schema present, return values need no explanation, and annotations cover the safety profile. However, for a 21-parameter tool with a defaulted taxYear, the description should clarify default/omission semantics and roughly what the checklist contains — neither is addressed.

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% and all 21 booleans are self-documenting, so the schema carries the load. The description's phrase 'income sources, deductions, and life events' loosely categorizes the flags (e.g. hadBaby, soldHome as life events) but adds no per-parameter meaning such as whether omitting a flag means 'unknown' or 'false'. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Generate') and resource ('personalized checklist of tax documents') with the inputs that drive it (income sources, deductions, life events). It is clearly distinguishable from siblings like list_deductions or get_form_filing_guide, though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

Usage is only implied by the phrase 'you need to gather for filing' — an agent can infer this is a pre-filing preparation step. There is no statement of when to prefer this over list_deductions, get_form_filing_guide, or generate_full_tax_report, and no prerequisites or exclusions are given.

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

get_tax_planning_tipsA
Read-onlyIdempotent

Get personalized year-end tax optimization strategies based on your income, deductions, and situation. Suggests actions to reduce tax liability before year-end.

NameRequiredDescriptionDefault
hasHSANoHave HSA-eligible health plan
taxYearYesTax year to plan for
hasMortgageNo
filingStatusYes
isSelfEmployedNo
estimatedIncomeYesExpected total income for the year
hasCapitalGainsNo
charitableGivingNoYTD charitable donations
hasCapitalLossesNo
hasRetirementPlanNoHave access to 401k/403b
currentWithholdingNoTotal tax already withheld/paid YTD
estimatedCapitalGainsNo
currentHSAContributionsNoYTD HSA contributions
estimatedItemizedDeductionsNo
currentRetirementContributionsNoYTD retirement contributions

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed world, so safety is covered. The description usefully signals that this is advisory (it 'suggests actions') rather than a pure calculator, but adds nothing about the cost of a broad call, any limits, or whether results are deterministic across repeated calls with the same year.

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?

Two short sentences with the purpose front-loaded; no filler or marketing padding. The second sentence partly restates the first ('suggests actions to reduce tax liability' vs 'optimization strategies'), costing a little redundancy.

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?

For a 15-parameter advisory tool the description is thin on parameter guidance, and an agent gets no signal that supplying more optional fields improves personalization, or how partial inputs are handled. With an output schema already documenting returns and annotations covering safety, this is a moderate gap rather than a blocking one.

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 coverage is 53%, and the description only loosely gestures at the parameter space with 'income, deductions, and situation'. It does not clarify that only taxYear, filingStatus and estimatedIncome are required, nor which optional booleans (hasHSA, isSelfEmployed, hasCapitalGains) materially change the advice.

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

Purpose4/5

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

States a specific verb and resource ('Get personalized year-end tax optimization strategies') and scopes it to inputs the agent can recognize (income, deductions, situation). It does not, however, distinguish itself from close siblings such as generate_tax_plan or plan_multi_year_taxes, which an agent could easily confuse with this one.

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

Usage Guidelines3/5

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

Timing is implied by 'year-end' and 'before year-end', which hints at the appropriate window, but there is no explicit when-to-use versus when-not, no mention of prerequisites, and no routing to the obvious alternatives (generate_tax_plan, plan_multi_year_taxes, optimize_capital_gains).

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

list_deductionsA
Read-onlyIdempotent

List available tax deductions with eligibility rules and limits. Covers both above-the-line and itemized deductions.

NameRequiredDescriptionDefault
categoryNoFilter by deduction category (default: all)

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that results include eligibility rules and limits, which is useful content context, but says nothing about result volume, pagination, or how the fixed (closed-world) dataset is versioned.

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?

Two short sentences, front-loaded with the action and resource, with the scope clause second. No filler or redundant restatement of the name, though it could have used the second sentence to route to a sibling instead of just restating scope.

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

Completeness4/5

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

A read-only, single-optional-param listing tool with an output schema is a low-complexity case, and the description covers purpose, scope, and returned content (eligibility rules and limits). The main missing piece is disambiguation from the many deduction-adjacent siblings, which is a modest but real gap.

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

Parameters5/5

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

Schema description coverage is 100% and the single optional parameter has a fully documented enum with a stated default of 'all'. The description's mention of above-the-line vs itemized maps meaningfully onto the enum values, but the schema already carries the semantic load, so this is at baseline adequacy rather than above it.

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

Purpose4/5

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

The description gives a specific verb and resource ('List available tax deductions') and bounds the scope with 'Covers both above-the-line and itemized deductions.' It does not, however, differentiate itself from close siblings like standard_vs_itemized or calculate_obbb_deductions, which an agent could easily confuse with a deduction-listing tool.

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

Usage Guidelines3/5

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

Usage is only implied: the wording suggests a reference/browse operation to look up deduction rules and limits, and the category enum hints at filtering. There is no explicit when-to-use statement, no mention of when to prefer standard_vs_itemized or check_credit_eligibility instead, and no prerequisites named.

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

list_no_income_tax_statesA
Read-onlyIdempotent

List all US states with no state income tax.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered without description effort. The description adds only the completeness scope ('all US states'), which aligns with openWorldHint=false, but contributes no further behavioral context such as data recency or sensitivity to changing tax law.

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

Conciseness5/5

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

The description is a single, 9-word sentence with every word earning its place and no filler or redundancy. The core scoping ('all US states with no state income tax') is front-loaded.

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

Completeness4/5

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

For a 0-parameter lookup whose output schema exists and whose annotations cover safety, the definition is nearly complete: an agent knows exactly what to invoke and what it will get. The only minor gap is the absence of a temporal caveat that state income-tax status can change over time.

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

Parameters4/5

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

The tool has zero parameters and its input schema is trivially 100% covered, so there is nothing for the description to explain. Per the zero-parameter baseline of 4, the description needs no parameter documentation and adds appropriate value by narrowing the query scope.

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 uses a specific verb ('List') with an unambiguous resource ('all US states with no state income tax'), making the tool's scope instantly clear. It is inherently distinct from siblings like get_state_tax_info (per-state detail), compare_state_taxes (comparison), and analyze_relocation_taxes (relocation scenarios), none of which provide this exact filtered list.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use guidance is given, and no alternatives are named. An agent must infer from the tool's name and clear scope that it is the right choice for a flat enumeration task, rather than being told to prefer compare_state_taxes for comparative analysis or get_state_tax_info for state-specific detail.

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

list_tax_creditsA
Read-onlyIdempotent

List available federal tax credits with eligibility, amounts, and phase-out rules. Covers family, education, energy, retirement, healthcare, and income-based credits.

NameRequiredDescriptionDefault
categoryNoFilter by category (default: all)
refundableOnlyNoOnly show refundable credits

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is fully covered without prose. The description adds only content scope (the covered credit domains), not behavior beyond that; with a full output schema and complete annotations there is little else it needs to carry.

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

Conciseness5/5

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

Two short sentences, the resource and its returned fields front-loaded and the domain list after, with zero redundant phrasing. Nothing could be cut without losing information.

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

Completeness4/5

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

The tool is a simple zero-required-parameter list with a full output schema and complete annotations, so little descriptive burden remains. The only shortfall is that the relationship to the eligibility-checking sibling is left unstated, which for a 45-tool sibling set is a real omission.

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%, so the baseline is 3. The description does add some value by naming the credit domains that map onto the category enum values (family, education, energy, retirement, healthcare, income), but it never mentions the refundableOnly flag or the "all"/"other" enum members.

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

Purpose4/5

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

The description gives a specific verb and resource ("List ... federal tax credits") and enumerates the payload fields returned (eligibility, amounts, phase-out rules), which is more than a restatement of the name. It stops short of distinguishing itself from the nearby check_credit_eligibility or list_deductions siblings, so the agent must infer the boundary.

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

Usage Guidelines3/5

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

The category sentence implies a browse-and-filter workflow, and the tool takes zero required parameters, so calling it cold is safe. However there is no explicit statement of when to pick this over check_credit_eligibility or list_deductions, and no exclusions or prerequisites are named.

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

lookup_tax_ruleA
Read-onlyIdempotent

Look up IRS tax rules, definitions, and common questions. Covers filing rules, income types, deduction rules, credit eligibility, stock options, wash sales, and more.

NameRequiredDescriptionDefault
topicYesTax topic to look up (e.g., 'wash sale rule', 'ISO vs NSO', 'AOTC and LLC same year', 'gift tax', 'estimated tax penalty')

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and determinism profile is fully covered without description help. The description adds topical breadth, but nothing about the nature of the results (authoritative citation vs. general guidance, disclaimers, or limits of coverage) beyond what the annotations and output schema supply. Given annotation coverage, a 3 is appropriate.

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?

Two sentences, with the core action front-loaded and the coverage list relegated to a follow-on clause. Every phrase contributes something (either the action or the domain scope); there is no filler or repetition. A slightly tighter phrasing of the coverage list would earn a 5.

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

Completeness4/5

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

For a single-parameter, read-only lookup with an output schema and full annotations, the description is close to sufficient: the agent knows what it retrieves and roughly what topics are valid. The remaining gap is routing — with 40+ tax siblings including several list_-style knowledge tools, the definition does not tell the agent when the lookup is the right choice over those. That is a modest but real omission rather than a fatal one.

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?

There is a single required 'topic' parameter with 100% schema description coverage that already includes several concrete examples ('wash sale rule', 'ISO vs NSO', 'AOTC and LLC same year'). The description's list of covered domains loosely maps to acceptable topic values and hints at phrasing, but adds no format or syntax constraints beyond the schema. High schema coverage sets the baseline at 3.

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

Purpose4/5

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

The description gives a specific verb and resource: 'Look up IRS tax rules, definitions, and common questions,' and enumerates covered areas (filing rules, income types, deduction rules, credit eligibility, stock options, wash sales). This clearly separates it from the many calculate_/estimate_/compare_ siblings, which produce numbers rather than explanations. It stops short of naming a specific sibling to use instead, so it falls just under a 5.

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

Usage Guidelines3/5

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

Usage is implied by the word 'look up' and by 'definitions and common questions,' which suggests it is for explanatory/conceptual questions rather than computation. However, no explicit when-to-use or when-not-to-use direction is given against overlapping siblings such as list_deductions, list_tax_credits, get_irs_form_info, or get_tax_planning_tips. The agent must infer the boundary itself.

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

optimize_capital_gainsA
Read-onlyIdempotent

Analyze investment lots and suggest which to sell to minimize tax. Considers long-term vs short-term, 0% bracket space, loss harvesting, and wash sale rules.

NameRequiredDescriptionDefault
lotsYesInvestment lots to analyze
taxYearYesTax year
filingStatusYes
ordinaryIncomeYesOrdinary income (W-2, SE, interest, etc.) before investment sales
targetGainOrLossNoTarget net gain/loss to realize (negative for harvesting losses)

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, closed-world, non-destructive behavior, so the safety profile is covered. The description adds genuine domain context by enumerating the analysis factors (LT vs ST, 0% bracket space, loss harvesting, wash sale rules), which tells the agent how the recommendation is derived. It stops short of stating assumptions or limitations, e.g. whether the wash-sale check requires prior-trade data the schema does not accept.

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

Conciseness5/5

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

Two sentences, both earning their place: the first states the action and outcome, the second enumerates the factors considered. Front-loaded and free of filler.

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

Completeness3/5

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 no explanation, and the factor list covers the domain logic. However, the description claims wash sale rule handling while the input schema exposes no field for recent purchases or prior trades, leaving an agent unsure whether that check is actually performed or relies on data it must not supply.

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 coverage is 80%, so the baseline is 3 and the schema already documents almost every field. The description loosely maps concepts to parameters — '0% bracket space' implies ordinaryIncome and filingStatus, 'long-term vs short-term' implies holdingMonths, 'harvesting losses' implies negative targetGainOrLoss — but adds no format or constraint detail beyond that.

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

Purpose4/5

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

The description uses a specific verb-plus-resource pair ('Analyze investment lots and suggest which to sell') and states the goal (minimize tax). It is clearly distinct from siblings like simulate_tax_scenario or plan_retirement_withdrawals, though it never explicitly names a near-neighbor to rule out.

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

Usage Guidelines3/5

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

Usage is only implied: 'suggest which to sell to minimize tax' tells the agent this is a what-if planning call, not an execution call. There is no explicit when-to-use vs. when-not, and no pointer to an alternative such as plan_multi_year_taxes when the decision spans multiple years.

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

plan_multi_year_taxesB
Read-onlyIdempotent

Create a 3-5 year tax projection and strategy. Models income changes, Roth conversions, retirement contributions, and bracket management across multiple years.

NameRequiredDescriptionDefault
yearsYesYear-by-year projections
currentAgeYes
filingStatusYes

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered, and 'projection' is consistent with a pure computation. The description adds useful context that this is a multi-year forward-looking model with specific levers, but omits that supported tax years appear limited to 2024-2026 in the schema while the text promises 3-5 years, a mismatch an agent should be warned about. No mention of assumptions, limits, or how projections are derived.

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?

Two sentences, purpose front-loaded before the supporting detail, with no filler. Minor redundancy between '3-5 year' and 'across multiple years' keeps it from a 5.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and the purpose and levers are stated. The gap is the year-range claim: the description says 3-5 years while the schema allows 1-5 items with years restricted to 2024-2026, which could lead an agent to submit out-of-range planning horizons. For a planning tool of this complexity, that constraint belongs in the description.

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 only 33%, so the description must compensate and it partially does by naming expected income, Roth conversions, and IRA/401k contributions. However, three required parameters (filingStatus, currentAge, and the years array itself) plus stateCode and dependents get no added meaning. It also asserts a 3-5 year span while the schema permits 1-5 items, leaving the effective input range ambiguous.

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

Purpose4/5

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

Specific verb and resource: 'Create a 3-5 year tax projection and strategy,' followed by the modeled levers (income changes, Roth conversions, retirement contributions, bracket management). It reads as a multi-year modeling tool, distinguishing it from single-year siblings like calculate_federal_tax or simulate_tax_scenario. It stops short of naming an alternative explicitly, so it does not reach 5.

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

Usage Guidelines3/5

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

Usage is only implied by the phrase 'multi-year' and by the listed modeling levers; there is no explicit statement of when to prefer this over compare_tax_years, generate_tax_plan, or simulate_tax_scenario. An agent can infer this is the many-year planning option, but must infer exclusions on its own.

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

plan_retirement_withdrawalsB
Read-onlyIdempotent

Plan tax-efficient retirement withdrawals. Determines optimal order to draw from Traditional IRA, Roth IRA, and taxable accounts to minimize lifetime tax.

NameRequiredDescriptionDefault
ageYesYour current age
taxYearYesTax year
rothBalanceYesRoth IRA/401k balance
filingStatusYes
pensionIncomeNoAnnual pension income
annualSpendingYesAnnual spending need (pre-tax)
taxableBalanceYesTaxable brokerage account balance
traditionalBalanceYesTraditional IRA/401k balance
socialSecurityIncomeNoAnnual Social Security income
rothConversionInterestNoInterested in Roth conversion strategy?

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds that the tool optimizes withdrawal ordering to minimize lifetime tax, which explains the optimization objective beyond the annotations, but it discloses no modeling assumptions or limitations (e.g., whether it projects multiple years, ignores state tax, or assumes bracket thresholds).

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

Conciseness5/5

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

Two tight sentences with zero filler; the purpose is front-loaded and the optimization objective follows immediately. Nothing is repeated from the title or schema.

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

Completeness3/5

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 cover the safety profile. However, for a 10-parameter financial modeling tool sitting among many overlapping planning siblings, the description leaves out the assumptions and scope (single-year vs. multi-year, tax layers modeled) an agent would need to call it confidently.

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 90%, so nearly every one of the 10 parameters is already documented in the schema, including the filingStatus enum. The description mentions the three account balances but adds no meaning beyond the schema—no explanation of how annualSpending, pensionIncome, socialSecurityIncome, or rothConversionInterest influence the recommended ordering.

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

Purpose4/5

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

The description states a specific verb and resource ('Plan tax-efficient retirement withdrawals') and names the exact account types involved (Traditional IRA, Roth IRA, taxable), so the agent knows precisely what computation happens. It stops short of differentiating itself from closely related siblings such as get_retirement_strategy, plan_multi_year_taxes, or generate_tax_plan.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisites, and no named alternative. With siblings like get_retirement_strategy and plan_multi_year_taxes in the same family, an agent has to guess which planning tool to invoke; the description only implies usage through its purpose statement.

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

process_1099_incomeC
Read-onlyIdempotent

Process multiple 1099 forms and calculate the tax impact of each income type. Handles 1099-NEC (freelance), 1099-INT (interest), 1099-DIV (dividends), 1099-B (investments), 1099-MISC.

NameRequiredDescriptionDefault
formsYesArray of 1099 forms
taxYearYesTax year
w2IncomeNoW-2 income (for context)
filingStatusYes
qualifiedBusinessIsSstbNo
qualifiedBusinessW2WagesNo
longTermCapitalLossCarryoverNo
shortTermCapitalLossCarryoverNo
qualifiedBusinessPropertyBasisNo

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so safety and side-effect profile are fully covered without the description. The description adds scope information about which form types are handled, which is useful. However, it omits 1099-R even though the schema explicitly supports it (with taxableAmount and earlyDistributionSubjectToPenalty fields), leaving a mismatch an agent would only discover by reading the enum.

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?

Two sentences with no filler, and the core action is front-loaded ahead of the form-type enumeration. The form list is a compact and scannable way to convey scope, though it could have been extended to 1099-R at no cost.

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

Completeness2/5

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

This is a complex calculation tool with 9 parameters, an array of heterogeneous form objects, and several conditional fields, yet the description covers only the form-type axis. The presence of an output schema relieves it of explaining return values, but the QBI, carryover, and filing-status inputs go entirely unmentioned, so an agent cannot tell from the description which inputs are required for a correct result.

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

Parameters2/5

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

Schema description coverage is only 33% across 9 parameters, so the description must compensate and it does not. It says nothing about taxYear, filingStatus, w2Income, the three Section 199A qualified-business fields, or the short/long-term capital loss carryovers, all of which materially change the computed result. It also lists five form types while the enum allows six, adding a semantic gap rather than closing one.

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

Purpose4/5

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

States a specific verb and resource: 'Process multiple 1099 forms and calculate the tax impact of each income type.' Enumerating the supported form types (NEC, INT, DIV, B, MISC) makes the scope concrete and distinguishable from generic siblings like calculate_federal_tax. It does not explicitly contrast itself with estimate_self_employment_tax or calculate_total_tax, which handle overlapping concerns.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. An agent is left to infer from the form-type list that this applies when the user has 1099 income, but nothing says how this differs from calculate_total_tax, estimate_self_employment_tax, or optimize_capital_gains, which are the obvious alternative paths for the same inputs.

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

run_tax_health_checkB
Read-onlyIdempotent

One-click tax health check. Analyzes your full financial picture and outputs a report with actionable findings: missed credits, withholding accuracy, deduction optimization, audit risk, retirement savings gaps, and year-end planning tips.

NameRequiredDescriptionDefault
ageNo
taxYearYesTax year
boughtEVNo
w2IncomeNo
isStudentNo
stateCodeNo
dependentsNo
grossIncomeYes
capitalGainsNo
filingStatusYes
retirementIRANo
installedSolarNo
retirement401kNo
federalWithheldNo
stateLocalTaxesNo
hsaContributionsNo
mortgageInterestNo
hasHealthInsuranceNo
charitableDonationsNo
selfEmploymentIncomeNo

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds that the output is a report of findings across six analysis areas, which is useful beyond the annotations, but it says nothing about what happens when optional inputs are omitted, whether results are computed locally, or how comprehensive the analysis is. Adequate but thin on behavior.

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?

Two sentences, front-loaded with the core action, then a compact enumeration of output sections. No filler or repetition. It could be tightened by folding the six finding areas into fewer words, but the structure is sound.

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

Completeness3/5

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 the description redundantly lists report sections anyway. What is missing is guidance proportional to a 20-parameter tool: which optional inputs matter, what the required ones drive, and how it differs from the full-report and tax-plan siblings. Minimum viable for a tool of this complexity.

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

Parameters2/5

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

Schema description coverage is only 5% across 20 parameters, so the description must carry the load. It only indirectly hints at inputs through topic names (retirement savings gaps → retirementIRA/401k, withholding accuracy → federalWithheld, EV/solar/education/health flags), and it never explains the three required fields (taxYear, filingStatus, grossIncome) or clarifies that optional fields sharpen the findings. An agent would not know whether omitting optional params degrades results.

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

Purpose4/5

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

States a specific action and output: a tax health check that produces a report with named finding categories (missed credits, withholding accuracy, deduction optimization, audit risk, retirement gaps, year-end tips). That is far more concrete than the name alone. However, it never distinguishes itself from close siblings like generate_full_tax_report, generate_tax_plan, or assess_audit_risk, so an agent cannot tell which to pick from the description alone.

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

Usage Guidelines2/5

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

'One-click' hints at a convenience/prep-summary role, but there is no explicit when-to-use statement, no when-not-to-use, and no named alternative. With siblings such as generate_full_tax_report and get_tax_planning_tips in the same family, the agent is left to guess at selection criteria.

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

simulate_tax_scenarioB
Read-onlyIdempotent

What-if tax scenario simulator. Compare your current situation against a hypothetical change: income change, relocation, Roth conversion, filing status change, etc. Shows the exact tax impact of the change.

NameRequiredDescriptionDefault
taxYearYesTax year
age65OrOlderNoTaxpayer is 65 or older
currentStateNoCurrent state code
filingStatusYes
currentIncomeYesCurrent gross income
qualifiedTipsNoTY2025+ Schedule 1-A: qualified tips
whatIfNewStateNoNew state if relocating
currentDependentsNo
spouseAge65OrOlderNoSpouse is 65 or older
whatIfFilingStatusNoNew filing status
whatIfIncomeChangeNoIncome change amount (positive = more income, negative = less)
currentCapitalGainsNo
whatIfNewDependentsNoNew number of dependents
whatIfAdditional401kNoAdditional 401k contribution
whatIfItemizedChangeNoChange in itemized deductions
whatIfRothConversionNoAmount to convert from Traditional to Roth IRA
currentSelfEmploymentNo
dependentCareExpensesNoForm 2441 work-related care expenses paid
currentItemizedDeductionsNo
itemizedStateAndLocalTaxesNoCapped SALT inside currentItemizedDeductions; added back for AMT (Form 6251 line 2a)
charitableCashContributionsNoTY2026+: qualifying cash gifts to public charities for the non-itemizer deduction
qualifiedVehicleLoanInterestNoTY2025+ Schedule 1-A: interest on a new US-assembled personal vehicle loan
qualifiedOvertimeCompensationNoTY2025+ Schedule 1-A: FLSA overtime premium
itemizedCharitableContributionsNoTY2026+: charitable portion of itemized deductions, for the 0.5% of AGI floor
dependentCareQualifyingIndividualsNoQualifying individuals for the Child and Dependent Care Credit

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered and the description does not need to repeat it. The description adds that results show 'the exact tax impact of the change', hinting at a comparative output, but says nothing about how baseline (current*) values interact with whatIf* values, what happens when optional current fields are omitted, or any tax-year constraints despite many params being TY-specific.

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?

Three short sentences, front-loaded with the identity of the tool and immediately followed by the scenario enumeration. Minor redundancy between 'compare your current situation against a hypothetical change' and 'shows the exact tax impact of the change', and the trailing 'etc.' leaves scope slightly open, but there is no filler.

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

Completeness3/5

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

With 25 parameters, only 3 required, an output schema and full annotations, the description is adequate but thin. The critical missing piece is the operational model: that the agent supplies baseline current* fields plus only the whatIf* fields it wants to test, and that tax-year-gated parameters (TY2025+ Schedule 1-A items, TY2026+ charitable rules) are ignored otherwise. The existing output schema excuses it from describing return values, but not from explaining how to drive 25 inputs.

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 80%, so the schema already documents most of the 25 parameters, establishing the baseline of 3. The description contributes the useful framing that current* fields describe the baseline and whatIf* fields describe the hypothetical, matching the four scenario types it lists, but it does not clarify interaction rules such as whether whatIfIncomeChange is an absolute delta versus a new income, or which whatIf fields can be combined.

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

Purpose4/5

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

States a specific verb+resource ('What-if tax scenario simulator') and enumerates concrete scenario types (income change, relocation, Roth conversion, filing status change) plus the outcome ('exact tax impact'). It is clear what the tool does, but it does not name the overlapping siblings such as compare_filing_statuses or analyze_relocation_taxes, which also handle subsets of these scenarios.

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

Usage Guidelines3/5

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

'Compare your current situation against a hypothetical change' implies the use case and the listed examples broaden it, but there is no explicit when-not guidance and no routing to the more specialized siblings (compare_filing_statuses for pure status comparison, analyze_relocation_taxes for relocation). The agent must infer which tool wins when scenarios overlap.

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

standard_vs_itemizedC
Read-onlyIdempotent

Compare standard deduction vs itemized deductions to determine which is more beneficial.

NameRequiredDescriptionDefault
agiYesAdjusted Gross Income (needed for medical expense threshold)
blindNo
taxYearYesTax year (2024, 2025, or 2026)
age65OrOlderNo
filingStatusYes
otherItemizedNoOther itemized deductions
medicalExpensesNoUnreimbursed medical expenses
stateLocalTaxesNoState/local income + property taxes paid
mortgageInterestNoHome mortgage interest paid
charitableDonationsNoCharitable contributions claimed on Schedule A
nonItemizerCashDonationsNoTY2026+: qualifying cash gifts to public charities (not donor-advised funds) for the non-itemizer deduction

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds essentially nothing beyond purpose: it does not mention the supported tax years (2024-2026), that nonItemizerCashDonations only applies to TY2026+, or how the comparison is framed.

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

Conciseness3/5

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

One short, front-loaded sentence with no filler, which is structurally clean. However, the brevity reflects under-specification rather than tightness for a tool taking 11 inputs.

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

Completeness2/5

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, but for an 11-parameter comparison tool spanning multiple tax years, a single sentence leaves key behavioral context (year-specific rules, the non-itemizer deduction case) undocumented.

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

Parameters2/5

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

With 11 parameters and 73% schema description coverage, several inputs (blind, age65OrOlder, filingStatus enum, mortgageInterest nuances) rely on the schema alone. The description mentions no parameters at all, so it does not compensate for the coverage gap on a moderately complex input set.

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

Purpose4/5

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

The description uses a specific verb ('Compare') with named resources ('standard deduction vs itemized deductions') and states the decision goal. It is clear what the tool does, but it does not distinguish itself from siblings like list_deductions or calculate_obbb_deductions, which an agent could plausibly confuse with it.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to choose this tool versus alternatives, no precondition statements, and no exclusions. Usage is only implied by the phrase 'to determine which is more beneficial.'

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

submit_feedbackA
Read-onlyIdempotent

Generate a pre-filled GitHub Issue URL for reporting calculation errors or data issues. No data is sent. The user clicks the link to submit. Use this after verifying the user's inputs.

NameRequiredDescriptionDefault
actualNoWhat the tool returned
taxYearNoTax year
expectedNoWhat the user expected
toolNameYesWhich tool produced the issue (e.g., calculate_federal_tax)
descriptionYesBrief description of the issue

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already declare readOnly/idempotent/non-destructive, but the description adds the crucial nuance those hints cannot convey: 'No data is sent. The user clicks the link to submit.' That tells the agent nothing is filed on the user's behalf, which prevents it from reporting a submission as completed. It stops short of explaining where the URL points or any length/encoding limits.

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

Conciseness5/5

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

Four short sentences, each earning its place: what it produces, the no-data-sent guarantee, the user action required, and the timing precondition. Nothing is redundant or buried.

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

Completeness4/5

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

An output schema exists, so the return value (the URL) need not be described, and the description covers purpose, side effects, and timing for a low-complexity tool. Minor gap: it does not say what the agent should do with the returned URL or whether the link requires a GitHub account.

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 all five parameters documented inline, so the schema already carries parameter meaning. The description only obliquely hints at the actual/expected pair through 'reporting calculation errors' and adds no format or constraint guidance. Baseline 3 applies when the schema does the work.

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?

States a specific verb and artifact ('Generate a pre-filled GitHub Issue URL') plus the scope ('reporting calculation errors or data issues'). This clearly separates it from every sibling tool, all of which compute or explain tax results rather than produce a bug-report link.

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

Usage Guidelines4/5

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

'Use this after verifying the user's inputs' gives an explicit precondition that maps directly onto siblings like calculate_federal_tax, so the agent knows this is a follow-up action, not a calculation. It does not name an explicit when-not case (e.g. don't use for general tax questions), which keeps it short of a 5.

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

what_changed_between_tax_yearsB
Read-onlyIdempotent

Show all differences between two tax years — bracket changes, deduction limits, credit amounts, SALT cap, CTC, and new OBBB provisions. Great for understanding how tax law changes affect you.

NameRequiredDescriptionDefault
toYearYesLater tax year (e.g., 2025)
fromYearYesEarlier tax year (e.g., 2024)
filingStatusNoFiling status for specific comparisons (default: single)

Output Schema

NameRequiredDescription
textYes
errorNo
isErrorYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and a closed-world scope, so safety and repeatability are covered. The description adds the substantive scope of what is compared, but says nothing about result size, whether provisions are filtered by filingStatus, or truncation behavior. With annotations carrying the safety profile, this is adequate but not rich.

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?

Two sentences, front-loaded with the core action and a compact enumeration of covered items. The closing 'Great for...' clause is mild marketing filler but does add a hint of intent, so it earns partial keep.

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

Completeness3/5

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

An output schema exists and the input schema is fully documented, so the description need not explain return values. What is missing is the disambiguation from compare_tax_years, which is essential for correct tool selection in a 43-tool namespace.

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 coverage is 100% and each of the three parameters is documented in the schema, so the baseline applies. The description does not explain that filingStatus narrows the comparison, even though the sibling tool get_tax_brackets presumably relies on the same concept.

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

Purpose4/5

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

The description uses a specific verb and resource ('Show all differences between two tax years') and enumerates what is compared (brackets, deduction limits, credits, SALT cap, CTC, OBBB provisions). However, it never distinguishes itself from the sibling tool compare_tax_years, so an agent cannot tell which one to reach for.

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

Usage Guidelines3/5

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

The phrase 'Great for understanding how tax law changes affect you' implies a use case but is a benefit statement rather than a when-to-use rule. There is no mention of when to prefer compare_tax_years or calculate_federal_tax instead, which is a meaningful omission given the overlap.

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.

  1. 44 tool updatesv1.2.4
    • Changedanalyze_education_tax_benefits2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / taxYear
        Added value: +{
        +  "description": "Tax year (default: 2026)",
        +  "type": "number"
        +}
    • Changedanalyze_mortgage_tax_benefit1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedanalyze_paycheck7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / age65OrOlder
        Added value: +{
        +  "description": "Taxpayer is 65 or older",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / annualQualifiedOvertimeCompensation
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: expected annual FLSA overtime premium",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / annualQualifiedTips
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: expected annual qualified tips",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / otherDependentsForOdc
        Added value: +{
        +  "description": "Dependents verified for the Credit for Other Dependents",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / qualifyingChildrenForCtc
        Added value: +{
        +  "description": "Children verified for the Child Tax Credit",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / spouseAge65OrOlder
        Added value: +{
        +  "description": "Spouse is 65 or older",
        +  "type": "boolean"
        +}
    • Changedanalyze_relocation_taxes2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / dependents / maximum
        Added value: +9007199254740991
    • Changedassess_audit_risk1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedcalculate_eitc1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedcalculate_federal_tax17 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / charitableCashContributions
        Added value: +{
        +  "description": "TY2026+: qualifying cash gifts to public charities (not donor-advised funds) for the non-itemizer deduction",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / dependentCareBenefitsExcluded
        Added value: +{
        +  "description": "Employer dependent care benefits excluded from wages (W-2 box 10)",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / dependentCareExpenses
        Added value: +{
        +  "description": "Form 2441 work-related care expenses paid",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / dependentCareQualifyingIndividuals
        Added value: +{
        +  "description": "Qualifying individuals for the Child and Dependent Care Credit",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / dependents / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / itemizedCharitableContributions
        Added value: +{
        +  "description": "TY2026+: charitable portion of itemizedDeductions, for the 0.5% of AGI floor",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / itemizedDeductions / description
        Previous value: -"Total itemized deductions (if greater than standard deduction)"New value: +"Schedule A total after the SALT cap and medical floor, before the TY2026 charitable floor and 2/37 limit"
      • addedInput schema / properties / otherDependentsForOdc / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / qualifiedBusinessMaterialParticipation
        Added value: +{
        +  "description": "TY2026+: taxpayer materially participates, enabling the $400 minimum QBI deduction",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / qualifiedOvertimeCompensation
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: FLSA overtime premium (the half of time-and-a-half)",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedTips
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: qualified tips from a listed tipped occupation",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedVehicleLoanInterest
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: interest on a loan for a new US-assembled personal vehicle",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifyingChildrenForCtc / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / spouseAge65OrOlder
        Added value: +{
        +  "description": "Spouse is 65 or older",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / spouseBlind
        Added value: +{
        +  "description": "Spouse is blind",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / spouseEarnedIncome
        Added value: +{
        +  "description": "MFJ only: spouse's earned income, already included in w2Income or earnedIncome",
        +  "minimum": 0,
        +  "type": "number"
        +}
    • Changedcalculate_obbb_deductions3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / age / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / spouseAge / maximum
        Added value: +9007199254740991
    • Changedcalculate_total_tax4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / dependents / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / otherDependentsForOdc / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / qualifyingChildrenForCtc / maximum
        Added value: +9007199254740991
    • Changedcalculate_w4_withholding2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / dependents / maximum
        Added value: +9007199254740991
    • Changedcheck_credit_eligibility3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / numChildren / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / taxYear
        Added value: +{
        +  "description": "Tax year (default: 2026)",
        +  "type": "number"
        +}
    • Changedcheck_refund_status1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedcompare_filing_statuses2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / dependents / maximum
        Added value: +9007199254740991
    • Changedcompare_mfj_vs_mfs1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedcompare_state_taxes3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / taxYear / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / taxYear / minimum
        Added value: +-9007199254740991
    • Changedcompare_tax_years2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / dependents / maximum
        Added value: +9007199254740991
    • Addedestimate_premium_tax_credit
    • Changedestimate_quarterly_tax1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedestimate_self_employment_tax2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / dependents / maximum
        Added value: +9007199254740991
    • Changedestimate_state_tax3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / taxYear / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / taxYear / minimum
        Added value: +-9007199254740991
    • Changedgenerate_full_tax_report14 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / age65OrOlder
        Added value: +{
        +  "description": "Taxpayer is 65 or older",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / charitableCashContributions
        Added value: +{
        +  "description": "TY2026+: qualifying cash gifts to public charities for the non-itemizer deduction",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / dependentCareBenefitsExcluded
        Added value: +{
        +  "description": "Employer dependent care benefits excluded from wages (W-2 box 10)",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / dependentCareExpenses
        Added value: +{
        +  "description": "Form 2441 work-related care expenses paid",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / dependentCareQualifyingIndividuals
        Added value: +{
        +  "description": "Qualifying individuals for the Child and Dependent Care Credit",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / dependents / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / otherDependents / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / qualifiedBusinessMaterialParticipation
        Added value: +{
        +  "description": "TY2026+: materially participates, enabling the $400 minimum QBI deduction",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / qualifiedOvertimeCompensation
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: FLSA overtime premium",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedTips
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: qualified tips",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedVehicleLoanInterest
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: interest on a new US-assembled personal vehicle loan",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / spouseAge65OrOlder
        Added value: +{
        +  "description": "Spouse is 65 or older",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / spouseEarnedIncome
        Added value: +{
        +  "description": "MFJ only: spouse's earned income, already included in W-2 or self-employment income",
        +  "minimum": 0,
        +  "type": "number"
        +}
    • Changedgenerate_tax_plan24 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / business / properties / materialParticipation
        Added value: +{
        +  "description": "TY2026+: materially participates, enabling the $400 minimum QBI deduction",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / deductions / properties / itemized / description
        Previous value: -"Eligible itemized deduction total after applicable limits"New value: +"Schedule A total after the SALT cap and medical floor, before the TY2026 charitable floor and IRC 68 limit"
      • addedInput schema / properties / deductions / properties / itemizedCharitable
        Added value: +{
        +  "description": "TY2026+: charitable portion of itemized, for the 0.5% of AGI floor",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / deductions / properties / itemizedStateAndLocalTaxes
        Added value: +{
        +  "description": "State and local taxes included in itemized after the SALT cap; added back for AMT (Form 6251 line 2a)",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / deductions / properties / nonItemizerCashCharitable
        Added value: +{
        +  "description": "TY2026+: qualifying cash gifts to public charities for the non-itemizer deduction",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / deductions / properties / qualifiedOvertimeCompensation
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A FLSA overtime premium",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / deductions / properties / qualifiedTips
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A qualified tips",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / deductions / properties / qualifiedVehicleLoanInterest
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A interest on a new US-assembled personal vehicle loan",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / family / properties / age65OrOlder
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / family / properties / dependentCareBenefitsExcluded
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / family / properties / dependentCareExpenses
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / family / properties / dependentCareQualifyingIndividuals
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / family / properties / otherDependentsForOdc / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / family / properties / qualifyingChildrenForCtc / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / family / properties / qualifyingChildrenForEitc / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / family / properties / spouseAge65OrOlder
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / family / properties / spouseEarnedIncome
        Added value: +{
        +  "description": "MFJ only: spouse's earned income, already included in household income",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / taxYear / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / taxYear / minimum
        Added value: +-9007199254740991
      • addedOutput schema / properties / plan / properties / results / properties / dependentCareCredit
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / plan / properties / results / properties / itemizedDeductionLimitReduction
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / plan / properties / results / properties / nonItemizerCharitableDeduction
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / properties / plan / properties / results / required
        Previous value: -[
        -  "adjustedGrossIncome",
        -  "deductionType",
        -  "deductionAmount",
        -  "taxableIncome",
        -  "ordinaryIncomeTax",
        -  "capitalGainsTax",
        -  "selfEmploymentTax",
        -  "niit",
        -  "additionalMedicareTax",
        -  "amt",
        -  "refundableCredits",
        -  "federalTaxAfterRefundableCredits",
        -  "employeeFica",
        -  "stateTax",
        -  "totalTax",
        -  "takeHomeIncome",
        -  "federalBalance",
        -  "stateBalance",
        -  "estimatedQuarterlyPayment",
        -  "marginalRate",
        -  "effectiveFederalRate"
        -]New value: +[
        +  "adjustedGrossIncome",
        +  "deductionType",
        +  "deductionAmount",
        +  "nonItemizerCharitableDeduction",
        +  "itemizedDeductionLimitReduction",
        +  "taxableIncome",
        +  "ordinaryIncomeTax",
        +  "capitalGainsTax",
        +  "selfEmploymentTax",
        +  "niit",
        +  "additionalMedicareTax",
        +  "amt",
        +  "dependentCareCredit",
        +  "refundableCredits",
        +  "federalTaxAfterRefundableCredits",
        +  "employeeFica",
        +  "stateTax",
        +  "totalTax",
        +  "takeHomeIncome",
        +  "federalBalance",
        +  "stateBalance",
        +  "estimatedQuarterlyPayment",
        +  "marginalRate",
        +  "effectiveFederalRate"
        +]
    • Changedget_form_filing_guide1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_irs_form_info1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_personalized_tax_calendar1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_retirement_accounts1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_retirement_strategy1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_state_tax_info1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_tax_brackets1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_tax_deadlines1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_tax_document_checklist2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / taxYear
        Added value: +{
        +  "description": "Tax year (default: 2026)",
        +  "type": "number"
        +}
    • Changedget_tax_planning_tips1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_deductions1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_tax_credits1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlookup_tax_rule1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedoptimize_capital_gains3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / lots / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / lots / items / properties / holdingMonths / maximum
        Added value: +9007199254740991
    • Changedplan_multi_year_taxes4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / currentAge / maximum
        Added value: +9007199254740991
      • removedInput schema / properties / years / items / additionalProperties
        Removed value: -false
      • addedInput schema / properties / years / items / properties / dependents / maximum
        Added value: +9007199254740991
    • Changedplan_retirement_withdrawals2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / age / maximum
        Added value: +9007199254740991
    • Changedprocess_1099_income2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / forms / items / additionalProperties
        Removed value: -false
    • Changedrun_tax_health_check3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / age / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / dependents / maximum
        Added value: +9007199254740991
    • Changedsimulate_tax_scenario16 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / age65OrOlder
        Added value: +{
        +  "description": "Taxpayer is 65 or older",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / charitableCashContributions
        Added value: +{
        +  "description": "TY2026+: qualifying cash gifts to public charities for the non-itemizer deduction",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / currentDependents / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / dependentCareExpenses
        Added value: +{
        +  "description": "Form 2441 work-related care expenses paid",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / dependentCareQualifyingIndividuals
        Added value: +{
        +  "description": "Qualifying individuals for the Child and Dependent Care Credit",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / itemizedCharitableContributions
        Added value: +{
        +  "description": "TY2026+: charitable portion of itemized deductions, for the 0.5% of AGI floor",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / itemizedStateAndLocalTaxes
        Added value: +{
        +  "description": "Capped SALT inside currentItemizedDeductions; added back for AMT (Form 6251 line 2a)",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedOvertimeCompensation
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: FLSA overtime premium",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedTips
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: qualified tips",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedVehicleLoanInterest
        Added value: +{
        +  "description": "TY2025+ Schedule 1-A: interest on a new US-assembled personal vehicle loan",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / spouseAge65OrOlder
        Added value: +{
        +  "description": "Spouse is 65 or older",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / whatIfFilingStatus / $ref
        Removed value: -"#/properties/filingStatus"
      • addedInput schema / properties / whatIfFilingStatus / enum
        Added value: +[
        +  "single",
        +  "married_filing_jointly",
        +  "married_filing_separately",
        +  "head_of_household"
        +]
      • addedInput schema / properties / whatIfFilingStatus / type
        Added value: +"string"
      • addedInput schema / properties / whatIfNewDependents / maximum
        Added value: +9007199254740991
    • Changedstandard_vs_itemized3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / charitableDonations / description
        Previous value: -"Charitable contributions"New value: +"Charitable contributions claimed on Schedule A"
      • addedInput schema / properties / nonItemizerCashDonations
        Added value: +{
        +  "description": "TY2026+: qualifying cash gifts to public charities (not donor-advised funds) for the non-itemizer deduction",
        +  "minimum": 0,
        +  "type": "number"
        +}
    • Changedsubmit_feedback1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedwhat_changed_between_tax_years1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
  2. 1 tool updatev1.1.0
    • Changedgenerate_tax_plan3 fields changed
      • addedInput schema / properties / stateCode / pattern
        Added value: +"^[A-Za-z]{2}$"
      • addedOutput schema / properties / plan / properties / privacy / properties / modelInvoked
        Added value: +{
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / plan / properties / privacy / required
        Previous value: -[
        -  "execution",
        -  "networkRequests",
        -  "persisted",
        -  "telemetry"
        -]New value: +[
        +  "execution",
        +  "networkRequests",
        +  "persisted",
        +  "telemetry",
        +  "modelInvoked"
        +]
  3. 44 tool updatesv1.0.1
    • Changedanalyze_education_tax_benefits1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedanalyze_mortgage_tax_benefit2 fields changed
      • addedInput schema / properties / grossIncome / description
        Added value: +"Gross income, also used as MAGI because this tool does not collect MAGI adjustments"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedanalyze_paycheck1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedanalyze_relocation_taxes2 fields changed
      • changedInput schema / properties / yearsToProject / description
        Previous value: -"Years to project savings (default: 5)"New value: +"Years to project with explicit annual profiles (default: 1)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedassess_audit_risk1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcalculate_eitc2 fields changed
      • changedInput schema / properties / taxYear / description
        Previous value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcalculate_federal_tax27 fields changed
      • addedInput schema / properties / aotcRefundableAllowed
        Added value: +{
        +  "description": "Whether refundable AOTC is allowed after under-age-24 support rules",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / aotcStudentQualifiedExpenses
        Added value: +{
        +  "description": "Qualified AOTC expenses per already-verified eligible student",
        +  "items": {
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / dependents / description
        Previous value: -"Number of qualifying child dependents for Child Tax Credit"New value: +"Legacy count of qualifying child dependents for nonrefundable CTC only"
      • addedInput schema / properties / earlyRetirementDistributionSubjectToPenalty
        Added value: +{
        +  "description": "Taxable early-distribution amount remaining after exceptions",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / earnedIncome
        Added value: +{
        +  "description": "Schedule 8812 earned income used for ACTC",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / earnedIncomeCredit
        Added value: +{
        +  "description": "EITC used by the 3-or-more-child ACTC payroll-tax method",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / grossIncome / description
        Previous value: -"Total gross income in USD"New value: +"Total gross income including supplied capital gains, qualified dividends, Social Security benefits, and gross retirement distributions"
      • addedInput schema / properties / hasForm2555
        Added value: +{
        +  "description": "Whether Form 2555 is filed, which makes ACTC unavailable",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / lifetimeLearningQualifiedExpenses
        Added value: +{
        +  "description": "Qualified LLC expenses not used for AOTC or another benefit",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / longTermCapitalLossCarryover
        Added value: +{
        +  "description": "Prior-year long-term capital loss carryover as a positive amount",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / marriedFilingSeparatelyLivedWithSpouse
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / netInvestmentIncome
        Added value: +{
        +  "description": "Total net investment income for NIIT, including taxable interest, dividends, gains, rents, royalties, and passive income",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / otherDependentsForOdc
        Added value: +{
        +  "description": "Dependents already verified for the nonrefundable Credit for Other Dependents",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / qualifiedBusinessIsSstb
        Added value: +{
        +  "description": "Whether the business is a specified service trade or business",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / qualifiedBusinessPropertyBasis
        Added value: +{
        +  "description": "Unadjusted basis immediately after acquisition of qualified property; pass 0 when none",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedBusinessW2Wages
        Added value: +{
        +  "description": "Section 199A W-2 wages; pass 0 when none",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedDividends
        Added value: +{
        +  "description": "Qualified dividends included in gross income, taxed at preferential rates but not netted with capital losses",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifyingChildrenForCtc
        Added value: +{
        +  "description": "Children already verified as CTC/ACTC qualifying children under age 17 with required SSNs",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / retirementDistributions
        Added value: +{
        +  "description": "Gross Form 1099-R distributions included in grossIncome",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / shortTermCapitalGains / description
        Previous value: -"Short-term capital gains (taxed as ordinary income)"New value: +"Short-term capital gain or loss"
      • addedInput schema / properties / shortTermCapitalLossCarryover
        Added value: +{
        +  "description": "Prior-year short-term capital loss carryover as a positive amount",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / socialSecurityBenefits
        Added value: +{
        +  "description": "Net Social Security benefits included in grossIncome",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / socialSecurityTaxesPaid
        Added value: +{
        +  "description": "Schedule 8812 payroll-tax amount for the 3-or-more-child ACTC method",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / taxExemptInterest
        Added value: +{
        +  "description": "Tax-exempt interest used by the Publication 915 worksheet",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / taxYear / description
        Previous value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)"
      • addedInput schema / properties / taxableRetirementDistributions
        Added value: +{
        +  "description": "Taxable Form 1099-R amount",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcalculate_obbb_deductions1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcalculate_total_tax27 fields changed
      • addedInput schema / properties / aotcRefundableAllowed
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / aotcStudentQualifiedExpenses
        Added value: +{
        +  "items": {
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / dependents / description
        Previous value: -"Number of qualifying child dependents"New value: +"Legacy dependent count for nonrefundable CTC only"
      • addedInput schema / properties / earlyRetirementDistributionSubjectToPenalty
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / earnedIncome
        Added value: +{
        +  "description": "Schedule 8812 earned income for ACTC",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / earnedIncomeCredit
        Added value: +{
        +  "description": "EITC used by 3-or-more-child ACTC method",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / grossIncome / description
        Previous value: -"Total gross income in USD"New value: +"Total gross income including supplied capital gains, qualified dividends, Social Security benefits, and gross retirement distributions"
      • addedInput schema / properties / hasForm2555
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / lifetimeLearningQualifiedExpenses
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / longTermCapitalLossCarryover
        Added value: +{
        +  "description": "Prior-year long-term capital loss carryover",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / marriedFilingSeparatelyLivedWithSpouse
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / netInvestmentIncome
        Added value: +{
        +  "description": "Total net investment income used for NIIT",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / otherDependentsForOdc
        Added value: +{
        +  "description": "Verified dependents for ODC",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / qualifiedBusinessIsSstb
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / qualifiedBusinessPropertyBasis
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedBusinessW2Wages
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedDividends
        Added value: +{
        +  "description": "Qualified dividends included in gross income",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifyingChildrenForCtc
        Added value: +{
        +  "description": "Verified CTC/ACTC qualifying children",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / retirementDistributions
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / shortTermCapitalGains
        Added value: +{
        +  "description": "Short-term capital gain or loss",
        +  "type": "number"
        +}
      • addedInput schema / properties / shortTermCapitalLossCarryover
        Added value: +{
        +  "description": "Prior-year short-term capital loss carryover",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / socialSecurityBenefits
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / socialSecurityTaxesPaid
        Added value: +{
        +  "description": "Payroll-tax amount for 3-or-more-child ACTC method",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / taxExemptInterest
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / taxYear / description
        Previous value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)"
      • addedInput schema / properties / taxableRetirementDistributions
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcalculate_w4_withholding2 fields changed
      • changedInput schema / properties / taxYear / description
        Previous value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcheck_credit_eligibility1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcheck_refund_status1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcompare_filing_statuses2 fields changed
      • changedInput schema / properties / taxYear / description
        Previous value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcompare_mfj_vs_mfs4 fields changed
      • changedInput schema / properties / dependents / description
        Previous value: -"Number of qualifying children"New value: +"Number of qualifying children (maximum 20)"
      • addedInput schema / properties / dependents / maximum
        Added value: +20
      • changedInput schema / properties / taxYear / description
        Previous value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcompare_state_taxes6 fields changed
      • addedInput schema / properties / filingStatus
        Added value: +{
        +  "description": "Filing status (default: single)",
        +  "enum": [
        +    "single",
        +    "married"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / incomeBeforeStateDeductions
        Added value: +{
        +  "description": "Annual income before modeled state deductions",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / taxYear
        Added value: +{
        +  "description": "Tax year for all versioned state calculation profiles",
        +  "type": "integer"
        +}
      • changedInput schema / properties / taxableIncome / description
        Previous value: -"Annual taxable income"New value: +"Deprecated alias for incomeBeforeStateDeductions"
      • changedInput schema / required
        Previous value: -[
        -  "states",
        -  "taxableIncome"
        -]New value: +[
        +  "states",
        +  "taxYear"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedcompare_tax_years1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedestimate_quarterly_tax1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedestimate_self_employment_tax4 fields changed
      • addedInput schema / properties / qualifiedBusinessIsSstb
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / qualifiedBusinessPropertyBasis
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedBusinessW2Wages
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedestimate_state_tax5 fields changed
      • addedInput schema / properties / incomeBeforeStateDeductions
        Added value: +{
        +  "description": "State income before the modeled state standard deduction and personal exemption",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / taxYear
        Added value: +{
        +  "description": "Tax year for the versioned state calculation profile",
        +  "type": "integer"
        +}
      • changedInput schema / properties / taxableIncome / description
        Previous value: -"State taxable income (after state deductions)"New value: +"Deprecated alias for incomeBeforeStateDeductions"
      • changedInput schema / required
        Previous value: -[
        -  "stateCode",
        -  "taxableIncome"
        -]New value: +[
        +  "stateCode",
        +  "taxYear"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedgenerate_full_tax_report20 fields changed
      • addedInput schema / properties / aotcRefundableAllowed
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / aotcStudentQualifiedExpenses
        Added value: +{
        +  "items": {
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / dependents / description
        Previous value: -"Qualifying children under 17"New value: +"Children already verified as CTC, ACTC, and EITC qualifying children"
      • addedInput schema / properties / earlyRetirementDistributionSubjectToPenalty
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / hasForm2555
        Added value: +{
        +  "description": "Whether Form 2555 is filed",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / lifetimeLearningQualifiedExpenses
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / longTermCapitalLossCarryover
        Added value: +{
        +  "description": "Prior-year long-term capital loss carryover",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / marriedFilingSeparatelyLivedWithSpouse
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / otherDependents
        Added value: +{
        +  "description": "Dependents already verified for the nonrefundable ODC",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / qualifiedBusinessIsSstb
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / qualifiedBusinessPropertyBasis
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedBusinessW2Wages
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / retirementDistributions
        Added value: +{
        +  "description": "Gross Form 1099-R distributions",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / shortTermCapitalLossCarryover
        Added value: +{
        +  "description": "Prior-year short-term capital loss carryover",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / socialSecurityBenefits
        Added value: +{
        +  "description": "Net benefits from Form SSA-1099 or RRB-1099",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / socialSecurityTaxesPaid
        Added value: +{
        +  "description": "Schedule 8812 payroll-tax amount for 3-or-more-child ACTC method",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / taxExemptInterest
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / taxYear / description
        Previous value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)"
      • addedInput schema / properties / taxableRetirementDistributions
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Addedgenerate_tax_plan
    • Changedget_form_filing_guide1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedget_irs_form_info1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedget_personalized_tax_calendar1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedget_retirement_accounts1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedget_retirement_strategy1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedget_state_tax_info1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedget_tax_brackets2 fields changed
      • changedInput schema / properties / taxYear / description
        Previous value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedget_tax_deadlines2 fields changed
      • changedInput schema / properties / taxYear / description
        Previous value: -"Tax year (default: 2025)"New value: +"Tax year (default: 2026)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedget_tax_document_checklist1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedget_tax_planning_tips1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_deductions1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_no_income_tax_states1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_tax_credits1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedlookup_tax_rule1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedoptimize_capital_gains1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedplan_multi_year_taxes2 fields changed
      • changedInput schema / properties / years / items / properties / year / description
        Previous value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedplan_retirement_withdrawals1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedprocess_1099_income9 fields changed
      • addedInput schema / properties / forms / items / properties / earlyDistributionSubjectToPenalty
        Added value: +{
        +  "description": "For 1099-R: taxable early-distribution amount after exceptions",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / forms / items / properties / taxableAmount
        Added value: +{
        +  "description": "For 1099-R: taxable amount in box 2a",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / forms / items / properties / type / enum
        Previous value: -[
        -  "1099-NEC",
        -  "1099-INT",
        -  "1099-DIV",
        -  "1099-B",
        -  "1099-MISC"
        -]New value: +[
        +  "1099-NEC",
        +  "1099-INT",
        +  "1099-DIV",
        +  "1099-B",
        +  "1099-MISC",
        +  "1099-R"
        +]
      • addedInput schema / properties / longTermCapitalLossCarryover
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedBusinessIsSstb
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / qualifiedBusinessPropertyBasis
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / qualifiedBusinessW2Wages
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / shortTermCapitalLossCarryover
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedrun_tax_health_check1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedsimulate_tax_scenario1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedstandard_vs_itemized2 fields changed
      • changedInput schema / properties / taxYear / description
        Previous value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedsubmit_feedback1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
    • Changedwhat_changed_between_tax_years1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "suggestion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "suggestion"
        +      ],
        +      "type": "object"
        +    },
        +    "isError": {
        +      "type": "boolean"
        +    },
        +    "text": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "isError"
        +  ],
        +  "type": "object"
        +}
  4. 43 tool updatesv0.5.3
    • First observedanalyze_education_tax_benefits
    • First observedanalyze_mortgage_tax_benefit
    • First observedanalyze_paycheck
    • First observedanalyze_relocation_taxes
    • First observedassess_audit_risk
    • First observedcalculate_eitc
    • First observedcalculate_federal_tax
    • First observedcalculate_obbb_deductions
    • First observedcalculate_total_tax
    • First observedcalculate_w4_withholding
    • First observedcheck_credit_eligibility
    • First observedcheck_refund_status
    • First observedcompare_filing_statuses
    • First observedcompare_mfj_vs_mfs
    • First observedcompare_state_taxes
    • First observedcompare_tax_years
    • First observedestimate_quarterly_tax
    • First observedestimate_self_employment_tax
    • First observedestimate_state_tax
    • First observedgenerate_full_tax_report
    • First observedget_form_filing_guide
    • First observedget_irs_form_info
    • First observedget_personalized_tax_calendar
    • First observedget_retirement_accounts
    • First observedget_retirement_strategy
    • First observedget_state_tax_info
    • First observedget_tax_brackets
    • First observedget_tax_deadlines
    • First observedget_tax_document_checklist
    • First observedget_tax_planning_tips
    • First observedlist_deductions
    • First observedlist_no_income_tax_states
    • First observedlist_tax_credits
    • First observedlookup_tax_rule
    • First observedoptimize_capital_gains
    • First observedplan_multi_year_taxes
    • First observedplan_retirement_withdrawals
    • First observedprocess_1099_income
    • First observedrun_tax_health_check
    • First observedsimulate_tax_scenario
    • First observedstandard_vs_itemized
    • First observedsubmit_feedback
    • First observedwhat_changed_between_tax_years

TDQS

B3.1/5.0

Scored across 45 tools

Disambiguation2/5

Many tools target nearly identical outcomes: calculate_federal_tax, calculate_total_tax, generate_full_tax_report, generate_tax_plan, and run_tax_health_check all produce overlapping tax estimates, and compare_filing_statuses vs compare_mfj_vs_mfs or estimate_state_tax vs compare_state_taxes vs get_state_tax_info vs analyze_relocation_taxes blur together. Descriptions hint at differences but an agent must read carefully to choose correctly, and several tools could plausibly be swapped with no user-visible consequence.

Naming Consistency4/5

Almost everything is snake_case verb_noun (calculate_*, get_*, list_*, compare_*, estimate_*, analyze_*). A few break the pattern — standard_vs_itemized has no verb, what_changed_between_tax_years inverts the convention — but the overall scheme is predictable and scannable.

Tool Count2/5

45 tools is far beyond a scoped surface for a single-domain tax server, and the count is inflated by near-duplicate calculators and one-off analyses. Several tools (plan_retirement_withdrawals, optimize_capital_gains, analyze_relocation_taxes) feel like separate products bolted on rather than earned members of a set.

Completeness4/5

Coverage of the individual-taxpayer lifecycle is genuinely broad: brackets, deductions, credits, forms, deadlines, withholding, state tax, planning, and audit risk are all represented. Gaps remain around business entity returns, amended returns, payments/e-file, and international reporting (FBAR, foreign tax credit), which agents may hit.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Tax-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
    -
  • A
    license
    A
    quality
    A
    maintenance
    Deterministic US equity-compensation tax optimizer. Six tools cover ISO/AMT exercise scheduling, NSO sell-vs-hold, RSU vest-and-sell, single-stock concentration, protective put / zero-cost collar pricing, and Section 1202 QSBS qualification. Federal plus 50-state plus DC tax math.
    8
    230 npm
    6
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides real tax calculations for US, Canada, Australia, and UK income, property, and dividend taxes using up-to-date local data with no API keys required.
    7
    53 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables users to calculate 2026 US freelancer and sole-proprietor tax figures — quarterly estimated payments with safe harbor, self-employment tax, IRS due dates, mileage deductions, home office deductions, and SEP IRA vs Solo 401(k) contribution limits. Runs entirely locally with no API key, account, or network calls.
    8
    1,235 npm
    MIT