irs-taxpayer-mcp
Deterministic, local US individual tax estimator/planner for TY2024–TY2026 exposed through 45 MCP tools.
Calculate federal tax, brackets, filing-status comparisons, quarterly estimates, W-4 withholding, combined federal/state tax, FICA, NIIT, AMT, SE tax, QBI, capital gains, credits, refund inputs, and take-home income.
Analyze deductions and credits, including standard vs itemized, SALT caps, mortgage/education benefits, OBBB deductions, tax-year changes, and credit eligibility.
Simulate and plan scenarios: Roth conversions, capital-gain/loss optimization, paycheck checks, state relocation comparisons (supported profiles only), retirement withdrawals, multi-year projections, audit-risk scoring, and personalized calendars/checklists.
Look up IRS reference information: deadlines, forms, refund-status guidance, retirement accounts/strategies, deduction/credit lists, and tax rules.
Generate a privacy-first deterministic tax plan with assumptions, official sources, calculation trace, warnings, and explicit unsupported boundaries; unsupported inputs fail closed.
Generates pre-filled GitHub issue URLs for reporting tax calculation errors or data issues; no data is sent automatically, and submission is user-controlled via the generated link.
🏛️ 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
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.jsonExample 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? |
| MFJ, $150,000 income: a $30,000 conversion adds $6,600 of federal tax, a flat 22% |
Can I sell winners at 0% tax? |
| 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? |
| Applies the TY2026 SALT cap, charitable floor, and non-itemizer charitable deduction |
What are my quarterly estimates as a freelancer? |
| 1040-ES amounts with safe harbor guidance |
Is my paycheck withholding on track? |
| Projects annual tax, including credits, and suggests W-4 changes |
Will moving states save money? |
| Compares exact-year state profiles; unsupported states fail closed |
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 | No MCP connection, model invocation, telemetry, or automatic persistence |
Local facts files | Strict versioned JSON, no identity fields, 1 MiB maximum, mode |
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
Option A: Direct local mode (recommended for taxpayer facts)
Install once, before entering any tax facts:
npm install --global irs-taxpayer-mcpRun the guided local questionnaire. It does not start MCP or invoke a model:
irs-taxpayer-mcp intake --output taxpayer-facts.jsonOr create and edit a strict local template:
irs-taxpayer-mcp template --output taxpayer-facts.json
irs-taxpayer-mcp validate --facts taxpayer-facts.jsonCalculate directly through the deterministic engine:
irs-taxpayer-mcp plan --facts taxpayer-facts.json
irs-taxpayer-mcp plan --facts taxpayer-facts.json --jsonNew 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-mcpAlternative: 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/healthHTTP 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.exampleThe 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 |
| Full federal tax with bracket breakdown, AMT, NIIT (3.8%), Additional Medicare Tax (0.9%), QBI deduction, SE tax, capital gains, CTC |
| Tax brackets and standard deduction by filing status and year |
| Side-by-side comparison of all 4 filing statuses for the same income |
| Estimated quarterly payments (1040-ES) with safe harbor guidance |
| Combined federal + state tax in one call, with take-home pay and monthly income |
| Per-paycheck withholding estimate with step-by-step W-4 form recommendations |
Deduction Analysis
Tool | What it does |
| Browse all deductions with eligibility rules, limits, and forms |
| Compare standard vs itemized with year-specific SALT cap ($10K for TY2024, $40K for TY2025) |
Tax Credits
Tool | What it does |
| 20+ federal credits: CTC, EITC, AOTC, EV, solar, saver's credit, and more |
| Quick screening based on your income, family, and situation |
| Precise EITC calculation with phase-in/plateau/phase-out for 0-3 children |
| 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 |
| IRA, Roth, 401k, SEP, Solo 401k, HSA, 529: limits, tax treatment, tips |
| Backdoor Roth, Mega Backdoor, Roth Conversion Ladder, Tax Loss/Gain Harvesting |
Tax Planning & Scenarios
Tool | What it does |
| Privacy-first local plan with structured results, assumptions, sources, trace, and explicit boundaries |
| Personalized year-end optimization: 401k maxing, HSA, Roth conversion, tax-loss harvesting, charitable bunching |
| Compare TY2024 vs TY2025 to see how bracket changes and OBBB affect your tax |
| Full SE tax breakdown: Schedule C profit, SE tax, QBI deduction, quarterly payments, SEP/Solo 401k limits |
| Mortgage interest + property tax deduction analysis with year-specific SALT cap |
| AOTC vs Lifetime Learning Credit comparison, student loan deduction, 529 plan guidance |
State Taxes
Tool | What it does |
| Reference data and notes for all 50 states + DC |
| Estimate supported state paths; unsupported bracket data fails closed |
| Compare states only when every requested calculation is supported |
| All 9 states with no broad individual income tax |
IRS Information
Tool | What it does |
| Key IRS dates and deadlines by tax year |
| How to check your refund (guidance only: no IRS account access) |
| Info about 14 common IRS forms (1040, W-2, 1099s, Schedules, etc.) |
OBBB Act (2025) Tools
Tool | What it does |
| Calculate all 4 new OBBB deductions: tips, overtime, senior bonus, auto loan interest |
| Diff any two supported years: brackets, deductions, credits, SALT, and OBBB provisions |
Full Reports & Analysis
Tool | What it does |
| Estimation report: income, deductions, federal, FICA, supported state tax, take-home, and refund inputs |
| Process multiple 1099 forms (NEC, INT, DIV, B, MISC) with tax impact by category |
| Personalized deadlines based on your situation (self-employed, extension, investments) |
| Verify paycheck withholding accuracy, project annual tax, suggest W-4 adjustments |
| MFJ vs MFS comparison with tax diff and all MFS restriction warnings |
| What-if modeling: income changes, relocation, Roth conversion, 401k, filing status |
| IRS audit risk scoring with red flag identification and mitigation tips |
| Personalized filing document checklist based on your income and life events |
| Lot analysis: 0% bracket gain harvesting, loss harvesting that nets against taxed gains first, wash sale warnings |
| Optimal withdrawal order (Traditional/Roth/Taxable), RMD calculation, Roth conversion |
| 3-5 year tax projection with bracket management and age milestones |
| In-depth state relocation analysis with multi-year savings and SALT impact |
Guidance & Feedback
Tool | What it does |
| One-call check of a full financial picture with actionable findings |
| Search the built-in tax knowledge base |
| Provide step-by-step guidance for supported IRS forms |
| 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?
Calculation error or incorrect data? Open an issue: include the tool name, tax year, a rounded or synthetic example, and the expected result. Do not post taxpayer PII.
Planner use case or product gap? Use the Planner Feedback form. Do not include taxpayer PII or a real tax return.
Questions or discussion? GitHub Discussions
Want to contribute? See CONTRIBUTING.md
🤝 Contributing
Contributions welcome. Please ensure:
All tests pass (
npm test)Build succeeds (
npm run build)No
anytypes in TypeScriptData changes include IRS source citations
See CONTRIBUTING.md for full guidelines.
Legal Notice
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
Available Tools
45 toolsanalyze_education_tax_benefitsARead-onlyIdempotent
Compare education tax benefits: AOTC vs Lifetime Learning Credit, student loan interest deduction, and 529 plan advantages.
| Name | Required | Description | Default |
|---|---|---|---|
| agi | Yes | Adjusted Gross Income | |
| taxYear | No | Tax year (default: 2026) | |
| has529Plan | No | Contributing to or using a 529 plan | |
| isUndergrad | Yes | Is the student in first 4 years of undergrad? | |
| tuitionPaid | Yes | Tuition and qualified expenses paid | |
| filingStatus | Yes | ||
| contribution529 | No | 529 plan contribution this year | |
| yearsAOTCClaimed | No | Years AOTC already claimed (max 4) | |
| studentLoanInterest | No | Student loan interest paid this year |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_benefitBRead-onlyIdempotent
Analyze the tax benefit of mortgage interest deduction and property taxes. Compares itemizing with mortgage vs taking the standard deduction.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year | |
| grossIncome | Yes | Gross income, also used as MAGI because this tool does not collect MAGI adjustments | |
| filingStatus | Yes | ||
| interestRate | No | Mortgage interest rate (e.g., 0.065 for 6.5%) | |
| otherItemized | No | Other itemized deductions (charity, medical, etc.) | |
| propertyTaxes | Yes | Annual property taxes paid | |
| mortgageBalance | No | Current mortgage balance | |
| mortgageInterest | Yes | Annual mortgage interest paid | |
| stateIncomeTaxes | No | State/local income taxes paid |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_paycheckBRead-onlyIdempotent
Analyze a paycheck to verify withholding accuracy. Input your pay stub numbers and see if your employer is withholding the right amount.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year | |
| grossPay | Yes | Gross pay this period | |
| stateCode | No | ||
| age65OrOlder | No | Taxpayer is 65 or older | |
| filingStatus | Yes | ||
| payFrequency | Yes | ||
| stateWithheld | No | State tax withheld this period | |
| retirement401k | No | 401k/403b pre-tax contribution this period | |
| federalWithheld | Yes | Federal tax withheld this period | |
| hsaContribution | No | HSA contribution this period | |
| medicareWithheld | No | Medicare withheld | |
| spouseAge65OrOlder | No | Spouse is 65 or older | |
| annualQualifiedTips | No | TY2025+ Schedule 1-A: expected annual qualified tips | |
| otherDependentsForOdc | No | Dependents verified for the Credit for Other Dependents | |
| socialSecurityWithheld | No | Social Security withheld | |
| qualifyingChildrenForCtc | No | Children verified for the Child Tax Credit | |
| annualQualifiedOvertimeCompensation | No | TY2025+ Schedule 1-A: expected annual FLSA overtime premium |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_taxesCRead-onlyIdempotent
In-depth relocation tax analysis using exact-year state profiles. Additional projection years require explicit annual federal and state data.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year | |
| toState | Yes | Target state code | |
| fromState | Yes | Current state code | |
| dependents | No | ||
| grossIncome | Yes | Annual gross income | |
| capitalGains | No | ||
| filingStatus | Yes | ||
| yearsToProject | No | Years to project with explicit annual profiles (default: 1) | |
| incomeGrowthRate | No | Annual income growth rate (e.g., 0.03 for 3%) | |
| selfEmploymentIncome | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_riskARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| eitcClaimed | No | Claiming EITC? | |
| grossIncome | Yes | Total gross income | |
| largeRefund | No | Expecting a very large refund? | |
| cashBusiness | No | Is your business cash-intensive (restaurant, salon, etc.)? | |
| filingStatus | Yes | ||
| rentalLosses | No | Rental property losses claimed | |
| roundNumbers | No | Are most deductions round numbers ($5,000, $10,000)? | |
| businessMeals | No | Business meal deductions | |
| foreignAccounts | No | Have foreign bank accounts or assets? | |
| vehicleDeduction | No | Vehicle/mileage deduction | |
| charitableNonCash | No | Non-cash charitable donations (clothing, property) | |
| cryptoTransactions | No | Had cryptocurrency transactions? | |
| charitableDonations | No | Total charitable donations | |
| homeOfficeDeduction | No | Claiming home office deduction? | |
| selfEmploymentIncome | No | Self-employment income |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_eitcCRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| agi | Yes | Adjusted Gross Income | |
| taxYear | Yes | Tax year (2024, 2025, or 2026) | |
| earnedIncome | Yes | Earned income (wages, salary, self-employment) | |
| filingStatus | Yes | ||
| investmentIncome | No | Investment income (interest, dividends, capital gains) | |
| qualifyingChildren | Yes | Number of qualifying children (0-3) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_taxARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| blind | No | Taxpayer is blind | |
| taxYear | Yes | Tax year (2024, 2025, or 2026) | |
| w2Income | No | W-2 wage income | |
| dependents | No | Legacy count of qualifying child dependents for nonrefundable CTC only | |
| grossIncome | Yes | Total gross income including supplied capital gains, qualified dividends, Social Security benefits, and gross retirement distributions | |
| hasForm2555 | No | Whether Form 2555 is filed, which makes ACTC unavailable | |
| spouseBlind | No | Spouse is blind | |
| age65OrOlder | No | Taxpayer is 65 or older | |
| capitalGains | No | Long-term capital gains (can be negative for losses) | |
| earnedIncome | No | Schedule 8812 earned income used for ACTC | |
| filingStatus | Yes | Filing status | |
| qualifiedTips | No | TY2025+ Schedule 1-A: qualified tips from a listed tipped occupation | |
| stateTaxDeducted | No | State/local taxes included in itemized deductions (for AMT) | |
| isoExerciseSpread | No | ISO stock option exercise spread (for AMT calculation) | |
| taxExemptInterest | No | Tax-exempt interest used by the Publication 915 worksheet | |
| earnedIncomeCredit | No | EITC used by the 3-or-more-child ACTC payroll-tax method | |
| itemizedDeductions | No | Schedule A total after the SALT cap and medical floor, before the TY2026 charitable floor and 2/37 limit | |
| qualifiedDividends | No | Qualified dividends included in gross income, taxed at preferential rates but not netted with capital losses | |
| spouseAge65OrOlder | No | Spouse is 65 or older | |
| spouseEarnedIncome | No | MFJ only: spouse's earned income, already included in w2Income or earnedIncome | |
| netInvestmentIncome | No | Total net investment income for NIIT, including taxable interest, dividends, gains, rents, royalties, and passive income | |
| capitalGainsLongTerm | No | Whether capital gains are long-term (default: true) | |
| selfEmploymentIncome | No | Self-employment income (Schedule C) | |
| aotcRefundableAllowed | No | Whether refundable AOTC is allowed after under-age-24 support rules | |
| dependentCareExpenses | No | Form 2441 work-related care expenses paid | |
| otherDependentsForOdc | No | Dependents already verified for the nonrefundable Credit for Other Dependents | |
| shortTermCapitalGains | No | Short-term capital gain or loss | |
| aboveTheLineDeductions | No | Above-the-line deductions (HSA, student loan interest, etc.) | |
| socialSecurityBenefits | No | Net Social Security benefits included in grossIncome | |
| qualifiedBusinessIncome | No | Qualified Business Income for Section 199A deduction | |
| qualifiedBusinessIsSstb | No | Whether the business is a specified service trade or business | |
| retirementDistributions | No | Gross Form 1099-R distributions included in grossIncome | |
| socialSecurityTaxesPaid | No | Schedule 8812 payroll-tax amount for the 3-or-more-child ACTC method | |
| qualifiedBusinessW2Wages | No | Section 199A W-2 wages; pass 0 when none | |
| qualifyingChildrenForCtc | No | Children already verified as CTC/ACTC qualifying children under age 17 with required SSNs | |
| charitableCashContributions | No | TY2026+: qualifying cash gifts to public charities (not donor-advised funds) for the non-itemizer deduction | |
| aotcStudentQualifiedExpenses | No | Qualified AOTC expenses per already-verified eligible student | |
| longTermCapitalLossCarryover | No | Prior-year long-term capital loss carryover as a positive amount | |
| qualifiedVehicleLoanInterest | No | TY2025+ Schedule 1-A: interest on a loan for a new US-assembled personal vehicle | |
| dependentCareBenefitsExcluded | No | Employer dependent care benefits excluded from wages (W-2 box 10) | |
| qualifiedOvertimeCompensation | No | TY2025+ Schedule 1-A: FLSA overtime premium (the half of time-and-a-half) | |
| shortTermCapitalLossCarryover | No | Prior-year short-term capital loss carryover as a positive amount | |
| qualifiedBusinessPropertyBasis | No | Unadjusted basis immediately after acquisition of qualified property; pass 0 when none | |
| taxableRetirementDistributions | No | Taxable Form 1099-R amount | |
| itemizedCharitableContributions | No | TY2026+: charitable portion of itemizedDeductions, for the 0.5% of AGI floor | |
| lifetimeLearningQualifiedExpenses | No | Qualified LLC expenses not used for AOTC or another benefit | |
| dependentCareQualifyingIndividuals | No | Qualifying individuals for the Child and Dependent Care Credit | |
| marriedFilingSeparatelyLivedWithSpouse | No | ||
| qualifiedBusinessMaterialParticipation | No | TY2026+: taxpayer materially participates, enabling the $400 minimum QBI deduction | |
| earlyRetirementDistributionSubjectToPenalty | No | Taxable early-distribution amount remaining after exceptions |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_deductionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Taxpayer age (needed for senior bonus) | |
| agi | Yes | Adjusted Gross Income | |
| taxYear | Yes | Tax year (2025+) | |
| spouseAge | No | Spouse age if MFJ | |
| tipIncome | No | Annual tip income from qualifying occupation | |
| overtimePay | No | Annual overtime premium pay | |
| filingStatus | Yes | ||
| marginalRate | No | Your marginal tax rate (for savings estimate, e.g. 0.22) | |
| autoLoanInterest | No | Interest paid on qualifying US-assembled new vehicle loan |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_taxBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year (2024, 2025, or 2026) | |
| w2Income | No | W-2 wage income | |
| stateCode | Yes | Two-letter state code (e.g., 'CA', 'TX', 'NY') | |
| dependents | No | Legacy dependent count for nonrefundable CTC only | |
| grossIncome | Yes | Total gross income including supplied capital gains, qualified dividends, Social Security benefits, and gross retirement distributions | |
| hasForm2555 | No | ||
| capitalGains | No | Long-term capital gains | |
| earnedIncome | No | Schedule 8812 earned income for ACTC | |
| filingStatus | Yes | Filing status | |
| taxExemptInterest | No | ||
| earnedIncomeCredit | No | EITC used by 3-or-more-child ACTC method | |
| itemizedDeductions | No | Total itemized deductions | |
| qualifiedDividends | No | Qualified dividends included in gross income | |
| netInvestmentIncome | No | Total net investment income used for NIIT | |
| capitalGainsLongTerm | No | Whether capital gains are long-term (default: true) | |
| selfEmploymentIncome | No | Self-employment income | |
| aotcRefundableAllowed | No | ||
| otherDependentsForOdc | No | Verified dependents for ODC | |
| shortTermCapitalGains | No | Short-term capital gain or loss | |
| aboveTheLineDeductions | No | Above-the-line deductions | |
| socialSecurityBenefits | No | ||
| qualifiedBusinessIncome | No | QBI for Section 199A deduction | |
| qualifiedBusinessIsSstb | No | ||
| retirementDistributions | No | ||
| socialSecurityTaxesPaid | No | Payroll-tax amount for 3-or-more-child ACTC method | |
| qualifiedBusinessW2Wages | No | ||
| qualifyingChildrenForCtc | No | Verified CTC/ACTC qualifying children | |
| aotcStudentQualifiedExpenses | No | ||
| longTermCapitalLossCarryover | No | Prior-year long-term capital loss carryover | |
| shortTermCapitalLossCarryover | No | Prior-year short-term capital loss carryover | |
| qualifiedBusinessPropertyBasis | No | ||
| taxableRetirementDistributions | No | ||
| lifetimeLearningQualifiedExpenses | No | ||
| marriedFilingSeparatelyLivedWithSpouse | No | ||
| earlyRetirementDistributionSubjectToPenalty | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_withholdingBRead-onlyIdempotent
Calculate recommended W-4 withholding settings. Estimates per-paycheck federal tax and provides step-by-step W-4 form recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year (2024, 2025, or 2026) | |
| deductions | No | Expected itemized deductions (if more than standard) | |
| dependents | No | Number of qualifying child dependents | |
| otherIncome | No | Other annual income (interest, dividends, side gigs) | |
| spouseWorks | No | Does your spouse also work? | |
| annualSalary | Yes | Annual salary from this job | |
| filingStatus | Yes | Filing status | |
| multipleJobs | No | Do you hold multiple jobs simultaneously? | |
| payFrequency | Yes | How often you get paid |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_eligibilityBRead-onlyIdempotent
Check which tax credits you may be eligible for based on your situation.
| Name | Required | Description | Default |
|---|---|---|---|
| agi | Yes | Adjusted Gross Income | |
| taxYear | No | Tax year (default: 2026) | |
| boughtEV | No | Purchased an electric vehicle this year | |
| isStudent | No | Currently enrolled in post-secondary education | |
| hasChildren | No | Have qualifying children under 17 | |
| numChildren | No | ||
| filingStatus | Yes | ||
| hasChildcare | No | Pay for childcare to work | |
| installedSolar | No | Installed solar panels or renewable energy | |
| paidForeignTax | No | Paid income tax to a foreign country | |
| hasEarnedIncome | No | Has earned income from work | |
| hasStudentLoans | No | Paying student loan interest | |
| madeHomeImprovements | No | Made energy-efficient home improvements | |
| hasMarketplaceInsurance | No | Bought health insurance through ACA marketplace | |
| hasRetirementContributions | No | Contributed to IRA/401k |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_statusARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| filedElectronically | No | Whether the return was e-filed |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_statusesBRead-onlyIdempotent
Compare tax liability across different filing statuses for the same income. Helps determine the most advantageous filing status.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year (2024, 2025, or 2026) | |
| dependents | No | Number of qualifying dependents | |
| grossIncome | Yes | Total gross income | |
| itemizedDeductions | No | Itemized deductions if applicable |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_mfsARead-onlyIdempotent
Compare Married Filing Jointly (MFJ) vs Married Filing Separately (MFS). Shows tax difference and lists all MFS restrictions that may affect your situation.
| Name | Required | Description | Default |
|---|---|---|---|
| hasEITC | No | Either spouse would qualify for EITC | |
| taxYear | Yes | Tax year (2024, 2025, or 2026) | |
| dependents | No | Number of qualifying children (maximum 20) | |
| spouse1Income | Yes | Spouse 1 gross income | |
| spouse2Income | Yes | Spouse 2 gross income | |
| itemizedDeductions | No | Total itemized deductions (combined for MFJ, split for MFS) | |
| hasEducationCredits | No | Either spouse claiming AOTC or LLC | |
| hasIRAContributions | No | Either spouse contributing to IRA | |
| studentLoanInterest | No | Either spouse paying student loan interest |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_taxesBRead-onlyIdempotent
Compare state income tax for one tax year only when every requested state has an explicit calculation profile.
| Name | Required | Description | Default |
|---|---|---|---|
| states | Yes | Array of state codes to compare (e.g., ['CA', 'TX', 'WA', 'NY']) | |
| taxYear | Yes | Tax year for all versioned state calculation profiles | |
| filingStatus | No | Filing status (default: single) | |
| taxableIncome | No | Deprecated alias for incomeBeforeStateDeductions | |
| incomeBeforeStateDeductions | No | Annual income before modeled state deductions |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_yearsBRead-onlyIdempotent
Compare tax liability across different tax years for the same income. Shows how bracket changes and inflation adjustments affect your tax.
| Name | Required | Description | Default |
|---|---|---|---|
| dependents | No | ||
| grossIncome | Yes | Gross income to compare across years | |
| filingStatus | Yes | ||
| selfEmploymentIncome | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_quarterly_taxARead-onlyIdempotent
Calculate estimated quarterly tax payments (Form 1040-ES) for self-employed or other taxpayers who need to make estimated payments.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year | |
| filingStatus | Yes | ||
| otherCredits | No | Expected other tax credits | |
| w2Withholding | No | Expected total W-2 tax withholding for the year | |
| expectedAnnualIncome | Yes | Expected total annual income | |
| selfEmploymentIncome | No | Expected self-employment income |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_taxBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year | |
| dependents | No | ||
| filingStatus | Yes | ||
| grossRevenue | Yes | Total business revenue (Schedule C line 1) | |
| otherW2Income | No | W-2 income from other jobs | |
| businessExpenses | Yes | Total business expenses (Schedule C) | |
| healthInsurancePremiums | No | Self-employed health insurance premiums | |
| qualifiedBusinessIsSstb | No | ||
| retirementContributions | No | SEP IRA or Solo 401k contributions | |
| qualifiedBusinessW2Wages | No | ||
| qualifiedBusinessPropertyBasis | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_taxBRead-onlyIdempotent
Estimate state income tax using an explicit tax-year calculation profile. Unsupported state-year paths fail closed.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year for the versioned state calculation profile | |
| stateCode | Yes | Two-letter state code | |
| filingStatus | No | Filing status (default: single) | |
| taxableIncome | No | Deprecated alias for incomeBeforeStateDeductions | |
| incomeBeforeStateDeductions | No | State income before the modeled state standard deduction and personal exemption |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_reportBRead-onlyIdempotent
Generate a detailed tax estimate combining federal tax, supported state tax, FICA, modeled credits, deductions, take-home pay, and refund inputs.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year (2024, 2025, or 2026) | |
| w2Income | No | W-2 wages | |
| stateCode | No | State code for state tax estimate | |
| dependents | No | Children already verified as CTC, ACTC, and EITC qualifying children | |
| hasForm2555 | No | Whether Form 2555 is filed | |
| otherIncome | No | Other income (rental, alimony, etc.) | |
| age65OrOlder | No | Taxpayer is 65 or older | |
| filingStatus | Yes | ||
| otherItemized | No | Other itemized deductions | |
| qualifiedTips | No | TY2025+ Schedule 1-A: qualified tips | |
| stateWithheld | No | State tax already withheld YTD | |
| dividendIncome | No | 1099-DIV ordinary dividends | |
| interestIncome | No | 1099-INT interest income | |
| federalWithheld | No | Federal tax already withheld YTD | |
| medicalExpenses | No | Unreimbursed medical expenses | |
| otherDependents | No | Dependents already verified for the nonrefundable ODC | |
| mortgageInterest | No | Mortgage interest | |
| taxExemptInterest | No | ||
| qualifiedDividends | No | Qualified dividends (subset of dividends, taxed at CG rates) | |
| spouseAge65OrOlder | No | Spouse is 65 or older | |
| spouseEarnedIncome | No | MFJ only: spouse's earned income, already included in W-2 or self-employment income | |
| charitableDonations | No | Charitable contributions | |
| stateLocalTaxesPaid | No | State/local/property taxes paid | |
| longTermCapitalGains | No | Long-term capital gains/losses | |
| selfEmploymentIncome | No | Self-employment net profit | |
| aotcRefundableAllowed | No | ||
| dependentCareExpenses | No | Form 2441 work-related care expenses paid | |
| estimatedPaymentsMade | No | Estimated tax payments already made | |
| shortTermCapitalGains | No | Short-term capital gains/losses | |
| aboveTheLineDeductions | No | HSA, student loan interest, educator expenses, etc. | |
| socialSecurityBenefits | No | Net benefits from Form SSA-1099 or RRB-1099 | |
| qualifiedBusinessIncome | No | QBI for Section 199A | |
| qualifiedBusinessIsSstb | No | ||
| retirementDistributions | No | Gross Form 1099-R distributions | |
| socialSecurityTaxesPaid | No | Schedule 8812 payroll-tax amount for 3-or-more-child ACTC method | |
| qualifiedBusinessW2Wages | No | ||
| charitableCashContributions | No | TY2026+: qualifying cash gifts to public charities for the non-itemizer deduction | |
| aotcStudentQualifiedExpenses | No | ||
| longTermCapitalLossCarryover | No | Prior-year long-term capital loss carryover | |
| qualifiedVehicleLoanInterest | No | TY2025+ Schedule 1-A: interest on a new US-assembled personal vehicle loan | |
| dependentCareBenefitsExcluded | No | Employer dependent care benefits excluded from wages (W-2 box 10) | |
| qualifiedOvertimeCompensation | No | TY2025+ Schedule 1-A: FLSA overtime premium | |
| shortTermCapitalLossCarryover | No | Prior-year short-term capital loss carryover | |
| qualifiedBusinessPropertyBasis | No | ||
| taxableRetirementDistributions | No | ||
| lifetimeLearningQualifiedExpenses | No | ||
| dependentCareQualifyingIndividuals | No | Qualifying individuals for the Child and Dependent Care Credit | |
| marriedFilingSeparatelyLivedWithSpouse | No | ||
| qualifiedBusinessMaterialParticipation | No | TY2026+: materially participates, enabling the $400 minimum QBI deduction | |
| earlyRetirementDistributionSubjectToPenalty | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_planBRead-onlyIdempotent
Generate a deterministic, privacy-first local tax plan with structured results, assumptions, source provenance, calculation trace, and explicit unsupported boundaries.
| Name | Required | Description | Default |
|---|---|---|---|
| family | No | ||
| income | Yes | Annual income facts. Qualified dividends are included in ordinary dividends. | |
| taxYear | Yes | Tax year: 2024, 2025, or 2026 | |
| business | No | ||
| payments | No | ||
| education | No | ||
| stateCode | No | ||
| deductions | No | ||
| filingStatus | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | No | |
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_guideARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| formNumber | Yes | IRS form (e.g., '1040', 'Schedule C', 'Schedule D', 'Form 8949', 'W-4') |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_infoARead-onlyIdempotent
Get information about common IRS tax forms — what they are, who needs them, and where to find them.
| Name | Required | Description | Default |
|---|---|---|---|
| formNumber | Yes | IRS form number (e.g., '1040', 'W-2', '1099-NEC', 'Schedule C') |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_calendarARead-onlyIdempotent
Generate a personalized tax calendar based on your situation. Shows deadlines for filing, estimated payments, extensions, and key actions.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year to get calendar for | |
| hasEmployer | No | Do you have W-2 employment? | |
| filedExtension | No | Did you file an extension? | |
| hasInvestments | No | Do you have investment accounts? | |
| isSelfEmployed | No | Do you have self-employment income? | |
| hasRentalIncome | No | Do you have rental property income? |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_accountsARead-onlyIdempotent
Get details on retirement account types — contribution limits, tax treatment, income limits, and tips.
| Name | Required | Description | Default |
|---|---|---|---|
| accountType | No | Specific account (e.g., 'roth_ira', '401k', 'hsa', 'sep_ira'). Leave empty for all |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_strategyBRead-onlyIdempotent
Get detailed info on tax-advantaged retirement strategies like Backdoor Roth, Mega Backdoor Roth, Roth Conversion Ladder, Tax Loss/Gain Harvesting.
| Name | Required | Description | Default |
|---|---|---|---|
| strategyId | No | Strategy ID (e.g., 'backdoor_roth', 'mega_backdoor_roth', 'roth_conversion_ladder', 'tax_loss_harvesting', 'tax_gain_harvesting'). Leave empty for all |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_infoBRead-onlyIdempotent
Get state income tax information — rates, brackets, and key details for any US state.
| Name | Required | Description | Default |
|---|---|---|---|
| stateCode | Yes | Two-letter state code (e.g., 'CA', 'TX', 'NY') |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_bracketsARead-onlyIdempotent
Get federal income tax brackets and standard deduction for a given tax year and filing status.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year (2024, 2025, or 2026) | |
| filingStatus | Yes | Filing status |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_deadlinesBRead-onlyIdempotent
Get important IRS tax deadlines and due dates for a given tax year.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | No | Tax year (default: 2026) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_checklistARead-onlyIdempotent
Generate a personalized checklist of tax documents you need to gather for filing. Based on your income sources, deductions, and life events.
| Name | Required | Description | Default |
|---|---|---|---|
| hasW2 | No | Have W-2 employment | |
| hasHSA | No | Have HSA account | |
| hadBaby | No | Had a baby this year | |
| taxYear | No | Tax year (default: 2026) | |
| boughtEV | No | Bought an electric vehicle | |
| soldHome | No | Sold a home this year | |
| gotMarried | No | Got married this year | |
| gotDivorced | No | Got divorced this year | |
| hasChildren | No | Have dependent children | |
| hasMortgage | No | Have a mortgage | |
| hasChildcare | No | Pay for childcare | |
| hasInvestments | No | Have investment accounts (stocks, bonds, crypto) | |
| installedSolar | No | Installed solar panels | |
| hasStudentLoans | No | Paying student loans | |
| hasRentalProperty | No | Own rental property | |
| hasSelfEmployment | No | Have self-employment/freelance income | |
| hasForeignAccounts | No | Have foreign bank accounts or income | |
| hasHealthInsurance | No | Have health insurance (marketplace or employer) | |
| hasEducationExpenses | No | Paying tuition or student expenses | |
| hasCharitableDonations | No | Made charitable donations | |
| hasRetirementContributions | No | Contributed to IRA/401k |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_tipsARead-onlyIdempotent
Get personalized year-end tax optimization strategies based on your income, deductions, and situation. Suggests actions to reduce tax liability before year-end.
| Name | Required | Description | Default |
|---|---|---|---|
| hasHSA | No | Have HSA-eligible health plan | |
| taxYear | Yes | Tax year to plan for | |
| hasMortgage | No | ||
| filingStatus | Yes | ||
| isSelfEmployed | No | ||
| estimatedIncome | Yes | Expected total income for the year | |
| hasCapitalGains | No | ||
| charitableGiving | No | YTD charitable donations | |
| hasCapitalLosses | No | ||
| hasRetirementPlan | No | Have access to 401k/403b | |
| currentWithholding | No | Total tax already withheld/paid YTD | |
| estimatedCapitalGains | No | ||
| currentHSAContributions | No | YTD HSA contributions | |
| estimatedItemizedDeductions | No | ||
| currentRetirementContributions | No | YTD retirement contributions |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_deductionsARead-onlyIdempotent
List available tax deductions with eligibility rules and limits. Covers both above-the-line and itemized deductions.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by deduction category (default: all) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_statesARead-onlyIdempotent
List all US states with no state income tax.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_creditsARead-onlyIdempotent
List available federal tax credits with eligibility, amounts, and phase-out rules. Covers family, education, energy, retirement, healthcare, and income-based credits.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by category (default: all) | |
| refundableOnly | No | Only show refundable credits |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_ruleARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Tax topic to look up (e.g., 'wash sale rule', 'ISO vs NSO', 'AOTC and LLC same year', 'gift tax', 'estimated tax penalty') |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_gainsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| lots | Yes | Investment lots to analyze | |
| taxYear | Yes | Tax year | |
| filingStatus | Yes | ||
| ordinaryIncome | Yes | Ordinary income (W-2, SE, interest, etc.) before investment sales | |
| targetGainOrLoss | No | Target net gain/loss to realize (negative for harvesting losses) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_taxesBRead-onlyIdempotent
Create a 3-5 year tax projection and strategy. Models income changes, Roth conversions, retirement contributions, and bracket management across multiple years.
| Name | Required | Description | Default |
|---|---|---|---|
| years | Yes | Year-by-year projections | |
| currentAge | Yes | ||
| filingStatus | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_withdrawalsBRead-onlyIdempotent
Plan tax-efficient retirement withdrawals. Determines optimal order to draw from Traditional IRA, Roth IRA, and taxable accounts to minimize lifetime tax.
| Name | Required | Description | Default |
|---|---|---|---|
| age | Yes | Your current age | |
| taxYear | Yes | Tax year | |
| rothBalance | Yes | Roth IRA/401k balance | |
| filingStatus | Yes | ||
| pensionIncome | No | Annual pension income | |
| annualSpending | Yes | Annual spending need (pre-tax) | |
| taxableBalance | Yes | Taxable brokerage account balance | |
| traditionalBalance | Yes | Traditional IRA/401k balance | |
| socialSecurityIncome | No | Annual Social Security income | |
| rothConversionInterest | No | Interested in Roth conversion strategy? |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_incomeCRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| forms | Yes | Array of 1099 forms | |
| taxYear | Yes | Tax year | |
| w2Income | No | W-2 income (for context) | |
| filingStatus | Yes | ||
| qualifiedBusinessIsSstb | No | ||
| qualifiedBusinessW2Wages | No | ||
| longTermCapitalLossCarryover | No | ||
| shortTermCapitalLossCarryover | No | ||
| qualifiedBusinessPropertyBasis | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_checkBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | ||
| taxYear | Yes | Tax year | |
| boughtEV | No | ||
| w2Income | No | ||
| isStudent | No | ||
| stateCode | No | ||
| dependents | No | ||
| grossIncome | Yes | ||
| capitalGains | No | ||
| filingStatus | Yes | ||
| retirementIRA | No | ||
| installedSolar | No | ||
| retirement401k | No | ||
| federalWithheld | No | ||
| stateLocalTaxes | No | ||
| hsaContributions | No | ||
| mortgageInterest | No | ||
| hasHealthInsurance | No | ||
| charitableDonations | No | ||
| selfEmploymentIncome | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_scenarioBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax year | |
| age65OrOlder | No | Taxpayer is 65 or older | |
| currentState | No | Current state code | |
| filingStatus | Yes | ||
| currentIncome | Yes | Current gross income | |
| qualifiedTips | No | TY2025+ Schedule 1-A: qualified tips | |
| whatIfNewState | No | New state if relocating | |
| currentDependents | No | ||
| spouseAge65OrOlder | No | Spouse is 65 or older | |
| whatIfFilingStatus | No | New filing status | |
| whatIfIncomeChange | No | Income change amount (positive = more income, negative = less) | |
| currentCapitalGains | No | ||
| whatIfNewDependents | No | New number of dependents | |
| whatIfAdditional401k | No | Additional 401k contribution | |
| whatIfItemizedChange | No | Change in itemized deductions | |
| whatIfRothConversion | No | Amount to convert from Traditional to Roth IRA | |
| currentSelfEmployment | No | ||
| dependentCareExpenses | No | Form 2441 work-related care expenses paid | |
| currentItemizedDeductions | No | ||
| itemizedStateAndLocalTaxes | No | Capped SALT inside currentItemizedDeductions; added back for AMT (Form 6251 line 2a) | |
| charitableCashContributions | No | TY2026+: qualifying cash gifts to public charities for the non-itemizer deduction | |
| qualifiedVehicleLoanInterest | No | TY2025+ Schedule 1-A: interest on a new US-assembled personal vehicle loan | |
| qualifiedOvertimeCompensation | No | TY2025+ Schedule 1-A: FLSA overtime premium | |
| itemizedCharitableContributions | No | TY2026+: charitable portion of itemized deductions, for the 0.5% of AGI floor | |
| dependentCareQualifyingIndividuals | No | Qualifying individuals for the Child and Dependent Care Credit |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_itemizedCRead-onlyIdempotent
Compare standard deduction vs itemized deductions to determine which is more beneficial.
| Name | Required | Description | Default |
|---|---|---|---|
| agi | Yes | Adjusted Gross Income (needed for medical expense threshold) | |
| blind | No | ||
| taxYear | Yes | Tax year (2024, 2025, or 2026) | |
| age65OrOlder | No | ||
| filingStatus | Yes | ||
| otherItemized | No | Other itemized deductions | |
| medicalExpenses | No | Unreimbursed medical expenses | |
| stateLocalTaxes | No | State/local income + property taxes paid | |
| mortgageInterest | No | Home mortgage interest paid | |
| charitableDonations | No | Charitable contributions claimed on Schedule A | |
| nonItemizerCashDonations | No | TY2026+: qualifying cash gifts to public charities (not donor-advised funds) for the non-itemizer deduction |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_feedbackARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| actual | No | What the tool returned | |
| taxYear | No | Tax year | |
| expected | No | What the user expected | |
| toolName | Yes | Which tool produced the issue (e.g., calculate_federal_tax) | |
| description | Yes | Brief description of the issue |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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_yearsBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| toYear | Yes | Later tax year (e.g., 2025) | |
| fromYear | Yes | Earlier tax year (e.g., 2024) | |
| filingStatus | No | Filing status for specific comparisons (default: single) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| error | No | |
| isError | Yes |
TDQS
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.
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.
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.
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.
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.
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.
44 tool updates
v1.2.4- Changed
analyze_education_tax_benefits2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / taxYearAdded value: +{ + "description": "Tax year (default: 2026)", + "type": "number" +}
- Changed
analyze_mortgage_tax_benefit1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
analyze_paycheck7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / age65OrOlderAdded value: +{ + "description": "Taxpayer is 65 or older", + "type": "boolean" +} - added
Input schema / properties / annualQualifiedOvertimeCompensationAdded value: +{ + "description": "TY2025+ Schedule 1-A: expected annual FLSA overtime premium", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / annualQualifiedTipsAdded value: +{ + "description": "TY2025+ Schedule 1-A: expected annual qualified tips", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / otherDependentsForOdcAdded value: +{ + "description": "Dependents verified for the Credit for Other Dependents", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / qualifyingChildrenForCtcAdded value: +{ + "description": "Children verified for the Child Tax Credit", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / spouseAge65OrOlderAdded value: +{ + "description": "Spouse is 65 or older", + "type": "boolean" +}
- Changed
analyze_relocation_taxes2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dependents / maximumAdded value: +9007199254740991
- Changed
assess_audit_risk1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
calculate_eitc1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
calculate_federal_tax17 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / charitableCashContributionsAdded value: +{ + "description": "TY2026+: qualifying cash gifts to public charities (not donor-advised funds) for the non-itemizer deduction", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / dependentCareBenefitsExcludedAdded value: +{ + "description": "Employer dependent care benefits excluded from wages (W-2 box 10)", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / dependentCareExpensesAdded value: +{ + "description": "Form 2441 work-related care expenses paid", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / dependentCareQualifyingIndividualsAdded value: +{ + "description": "Qualifying individuals for the Child and Dependent Care Credit", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / dependents / maximumAdded value: +9007199254740991 - added
Input schema / properties / itemizedCharitableContributionsAdded value: +{ + "description": "TY2026+: charitable portion of itemizedDeductions, for the 0.5% of AGI floor", + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / itemizedDeductions / descriptionPrevious 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" - added
Input schema / properties / otherDependentsForOdc / maximumAdded value: +9007199254740991 - added
Input schema / properties / qualifiedBusinessMaterialParticipationAdded value: +{ + "description": "TY2026+: taxpayer materially participates, enabling the $400 minimum QBI deduction", + "type": "boolean" +} - added
Input schema / properties / qualifiedOvertimeCompensationAdded value: +{ + "description": "TY2025+ Schedule 1-A: FLSA overtime premium (the half of time-and-a-half)", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedTipsAdded value: +{ + "description": "TY2025+ Schedule 1-A: qualified tips from a listed tipped occupation", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedVehicleLoanInterestAdded value: +{ + "description": "TY2025+ Schedule 1-A: interest on a loan for a new US-assembled personal vehicle", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifyingChildrenForCtc / maximumAdded value: +9007199254740991 - added
Input schema / properties / spouseAge65OrOlderAdded value: +{ + "description": "Spouse is 65 or older", + "type": "boolean" +} - added
Input schema / properties / spouseBlindAdded value: +{ + "description": "Spouse is blind", + "type": "boolean" +} - added
Input schema / properties / spouseEarnedIncomeAdded value: +{ + "description": "MFJ only: spouse's earned income, already included in w2Income or earnedIncome", + "minimum": 0, + "type": "number" +}
- Changed
calculate_obbb_deductions3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / age / maximumAdded value: +9007199254740991 - added
Input schema / properties / spouseAge / maximumAdded value: +9007199254740991
- Changed
calculate_total_tax4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dependents / maximumAdded value: +9007199254740991 - added
Input schema / properties / otherDependentsForOdc / maximumAdded value: +9007199254740991 - added
Input schema / properties / qualifyingChildrenForCtc / maximumAdded value: +9007199254740991
- Changed
calculate_w4_withholding2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dependents / maximumAdded value: +9007199254740991
- Changed
check_credit_eligibility3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / numChildren / maximumAdded value: +9007199254740991 - added
Input schema / properties / taxYearAdded value: +{ + "description": "Tax year (default: 2026)", + "type": "number" +}
- Changed
check_refund_status1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
compare_filing_statuses2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dependents / maximumAdded value: +9007199254740991
- Changed
compare_mfj_vs_mfs1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
compare_state_taxes3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / taxYear / maximumAdded value: +9007199254740991 - added
Input schema / properties / taxYear / minimumAdded value: +-9007199254740991
- Changed
compare_tax_years2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dependents / maximumAdded value: +9007199254740991
- Added
estimate_premium_tax_credit - Changed
estimate_quarterly_tax1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
estimate_self_employment_tax2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dependents / maximumAdded value: +9007199254740991
- Changed
estimate_state_tax3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / taxYear / maximumAdded value: +9007199254740991 - added
Input schema / properties / taxYear / minimumAdded value: +-9007199254740991
- Changed
generate_full_tax_report14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / age65OrOlderAdded value: +{ + "description": "Taxpayer is 65 or older", + "type": "boolean" +} - added
Input schema / properties / charitableCashContributionsAdded value: +{ + "description": "TY2026+: qualifying cash gifts to public charities for the non-itemizer deduction", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / dependentCareBenefitsExcludedAdded value: +{ + "description": "Employer dependent care benefits excluded from wages (W-2 box 10)", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / dependentCareExpensesAdded value: +{ + "description": "Form 2441 work-related care expenses paid", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / dependentCareQualifyingIndividualsAdded value: +{ + "description": "Qualifying individuals for the Child and Dependent Care Credit", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / dependents / maximumAdded value: +9007199254740991 - added
Input schema / properties / otherDependents / maximumAdded value: +9007199254740991 - added
Input schema / properties / qualifiedBusinessMaterialParticipationAdded value: +{ + "description": "TY2026+: materially participates, enabling the $400 minimum QBI deduction", + "type": "boolean" +} - added
Input schema / properties / qualifiedOvertimeCompensationAdded value: +{ + "description": "TY2025+ Schedule 1-A: FLSA overtime premium", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedTipsAdded value: +{ + "description": "TY2025+ Schedule 1-A: qualified tips", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedVehicleLoanInterestAdded value: +{ + "description": "TY2025+ Schedule 1-A: interest on a new US-assembled personal vehicle loan", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / spouseAge65OrOlderAdded value: +{ + "description": "Spouse is 65 or older", + "type": "boolean" +} - added
Input schema / properties / spouseEarnedIncomeAdded value: +{ + "description": "MFJ only: spouse's earned income, already included in W-2 or self-employment income", + "minimum": 0, + "type": "number" +}
- Changed
generate_tax_plan24 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / business / properties / materialParticipationAdded value: +{ + "description": "TY2026+: materially participates, enabling the $400 minimum QBI deduction", + "type": "boolean" +} - changed
Input schema / properties / deductions / properties / itemized / descriptionPrevious 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" - added
Input schema / properties / deductions / properties / itemizedCharitableAdded value: +{ + "description": "TY2026+: charitable portion of itemized, for the 0.5% of AGI floor", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / deductions / properties / itemizedStateAndLocalTaxesAdded 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" +} - added
Input schema / properties / deductions / properties / nonItemizerCashCharitableAdded value: +{ + "description": "TY2026+: qualifying cash gifts to public charities for the non-itemizer deduction", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / deductions / properties / qualifiedOvertimeCompensationAdded value: +{ + "description": "TY2025+ Schedule 1-A FLSA overtime premium", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / deductions / properties / qualifiedTipsAdded value: +{ + "description": "TY2025+ Schedule 1-A qualified tips", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / deductions / properties / qualifiedVehicleLoanInterestAdded value: +{ + "description": "TY2025+ Schedule 1-A interest on a new US-assembled personal vehicle loan", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / family / properties / age65OrOlderAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / family / properties / dependentCareBenefitsExcludedAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / family / properties / dependentCareExpensesAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / family / properties / dependentCareQualifyingIndividualsAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / family / properties / otherDependentsForOdc / maximumAdded value: +9007199254740991 - added
Input schema / properties / family / properties / qualifyingChildrenForCtc / maximumAdded value: +9007199254740991 - added
Input schema / properties / family / properties / qualifyingChildrenForEitc / maximumAdded value: +9007199254740991 - added
Input schema / properties / family / properties / spouseAge65OrOlderAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / family / properties / spouseEarnedIncomeAdded value: +{ + "description": "MFJ only: spouse's earned income, already included in household income", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / taxYear / maximumAdded value: +9007199254740991 - added
Input schema / properties / taxYear / minimumAdded value: +-9007199254740991 - added
Output schema / properties / plan / properties / results / properties / dependentCareCreditAdded value: +{ + "type": "number" +} - added
Output schema / properties / plan / properties / results / properties / itemizedDeductionLimitReductionAdded value: +{ + "type": "number" +} - added
Output schema / properties / plan / properties / results / properties / nonItemizerCharitableDeductionAdded value: +{ + "type": "number" +} - changed
Output schema / properties / plan / properties / results / requiredPrevious 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" +]
- Changed
get_form_filing_guide1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_irs_form_info1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_personalized_tax_calendar1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_retirement_accounts1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_retirement_strategy1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_state_tax_info1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_tax_brackets1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_tax_deadlines1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_tax_document_checklist2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / taxYearAdded value: +{ + "description": "Tax year (default: 2026)", + "type": "number" +}
- Changed
get_tax_planning_tips1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
list_deductions1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
list_tax_credits1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
lookup_tax_rule1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
optimize_capital_gains3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / lots / items / additionalPropertiesRemoved value: -false - added
Input schema / properties / lots / items / properties / holdingMonths / maximumAdded value: +9007199254740991
- Changed
plan_multi_year_taxes4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / currentAge / maximumAdded value: +9007199254740991 - removed
Input schema / properties / years / items / additionalPropertiesRemoved value: -false - added
Input schema / properties / years / items / properties / dependents / maximumAdded value: +9007199254740991
- Changed
plan_retirement_withdrawals2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / age / maximumAdded value: +9007199254740991
- Changed
process_1099_income2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / forms / items / additionalPropertiesRemoved value: -false
- Changed
run_tax_health_check3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / age / maximumAdded value: +9007199254740991 - added
Input schema / properties / dependents / maximumAdded value: +9007199254740991
- Changed
simulate_tax_scenario16 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / age65OrOlderAdded value: +{ + "description": "Taxpayer is 65 or older", + "type": "boolean" +} - added
Input schema / properties / charitableCashContributionsAdded value: +{ + "description": "TY2026+: qualifying cash gifts to public charities for the non-itemizer deduction", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / currentDependents / maximumAdded value: +9007199254740991 - added
Input schema / properties / dependentCareExpensesAdded value: +{ + "description": "Form 2441 work-related care expenses paid", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / dependentCareQualifyingIndividualsAdded value: +{ + "description": "Qualifying individuals for the Child and Dependent Care Credit", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / itemizedCharitableContributionsAdded value: +{ + "description": "TY2026+: charitable portion of itemized deductions, for the 0.5% of AGI floor", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / itemizedStateAndLocalTaxesAdded value: +{ + "description": "Capped SALT inside currentItemizedDeductions; added back for AMT (Form 6251 line 2a)", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedOvertimeCompensationAdded value: +{ + "description": "TY2025+ Schedule 1-A: FLSA overtime premium", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedTipsAdded value: +{ + "description": "TY2025+ Schedule 1-A: qualified tips", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedVehicleLoanInterestAdded value: +{ + "description": "TY2025+ Schedule 1-A: interest on a new US-assembled personal vehicle loan", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / spouseAge65OrOlderAdded value: +{ + "description": "Spouse is 65 or older", + "type": "boolean" +} - removed
Input schema / properties / whatIfFilingStatus / $refRemoved value: -"#/properties/filingStatus" - added
Input schema / properties / whatIfFilingStatus / enumAdded value: +[ + "single", + "married_filing_jointly", + "married_filing_separately", + "head_of_household" +] - added
Input schema / properties / whatIfFilingStatus / typeAdded value: +"string" - added
Input schema / properties / whatIfNewDependents / maximumAdded value: +9007199254740991
- Changed
standard_vs_itemized3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / charitableDonations / descriptionPrevious value: -"Charitable contributions"New value: +"Charitable contributions claimed on Schedule A" - added
Input schema / properties / nonItemizerCashDonationsAdded value: +{ + "description": "TY2026+: qualifying cash gifts to public charities (not donor-advised funds) for the non-itemizer deduction", + "minimum": 0, + "type": "number" +}
- Changed
submit_feedback1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
what_changed_between_tax_years1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
1 tool update
v1.1.0- Changed
generate_tax_plan3 fields changed- added
Input schema / properties / stateCode / patternAdded value: +"^[A-Za-z]{2}$" - added
Output schema / properties / plan / properties / privacy / properties / modelInvokedAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / plan / properties / privacy / requiredPrevious value: -[ - "execution", - "networkRequests", - "persisted", - "telemetry" -]New value: +[ + "execution", + "networkRequests", + "persisted", + "telemetry", + "modelInvoked" +]
44 tool updates
v1.0.1- Changed
analyze_education_tax_benefits1 field changed- changed
Output 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" +}
- Changed
analyze_mortgage_tax_benefit2 fields changed- added
Input schema / properties / grossIncome / descriptionAdded value: +"Gross income, also used as MAGI because this tool does not collect MAGI adjustments" - changed
Output 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" +}
- Changed
analyze_paycheck1 field changed- changed
Output 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" +}
- Changed
analyze_relocation_taxes2 fields changed- changed
Input schema / properties / yearsToProject / descriptionPrevious value: -"Years to project savings (default: 5)"New value: +"Years to project with explicit annual profiles (default: 1)" - changed
Output 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" +}
- Changed
assess_audit_risk1 field changed- changed
Output 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" +}
- Changed
calculate_eitc2 fields changed- changed
Input schema / properties / taxYear / descriptionPrevious value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)" - changed
Output 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" +}
- Changed
calculate_federal_tax27 fields changed- added
Input schema / properties / aotcRefundableAllowedAdded value: +{ + "description": "Whether refundable AOTC is allowed after under-age-24 support rules", + "type": "boolean" +} - added
Input schema / properties / aotcStudentQualifiedExpensesAdded value: +{ + "description": "Qualified AOTC expenses per already-verified eligible student", + "items": { + "minimum": 0, + "type": "number" + }, + "type": "array" +} - changed
Input schema / properties / dependents / descriptionPrevious value: -"Number of qualifying child dependents for Child Tax Credit"New value: +"Legacy count of qualifying child dependents for nonrefundable CTC only" - added
Input schema / properties / earlyRetirementDistributionSubjectToPenaltyAdded value: +{ + "description": "Taxable early-distribution amount remaining after exceptions", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / earnedIncomeAdded value: +{ + "description": "Schedule 8812 earned income used for ACTC", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / earnedIncomeCreditAdded value: +{ + "description": "EITC used by the 3-or-more-child ACTC payroll-tax method", + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / grossIncome / descriptionPrevious value: -"Total gross income in USD"New value: +"Total gross income including supplied capital gains, qualified dividends, Social Security benefits, and gross retirement distributions" - added
Input schema / properties / hasForm2555Added value: +{ + "description": "Whether Form 2555 is filed, which makes ACTC unavailable", + "type": "boolean" +} - added
Input schema / properties / lifetimeLearningQualifiedExpensesAdded value: +{ + "description": "Qualified LLC expenses not used for AOTC or another benefit", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / longTermCapitalLossCarryoverAdded value: +{ + "description": "Prior-year long-term capital loss carryover as a positive amount", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / marriedFilingSeparatelyLivedWithSpouseAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / netInvestmentIncomeAdded value: +{ + "description": "Total net investment income for NIIT, including taxable interest, dividends, gains, rents, royalties, and passive income", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / otherDependentsForOdcAdded value: +{ + "description": "Dependents already verified for the nonrefundable Credit for Other Dependents", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / qualifiedBusinessIsSstbAdded value: +{ + "description": "Whether the business is a specified service trade or business", + "type": "boolean" +} - added
Input schema / properties / qualifiedBusinessPropertyBasisAdded value: +{ + "description": "Unadjusted basis immediately after acquisition of qualified property; pass 0 when none", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedBusinessW2WagesAdded value: +{ + "description": "Section 199A W-2 wages; pass 0 when none", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedDividendsAdded value: +{ + "description": "Qualified dividends included in gross income, taxed at preferential rates but not netted with capital losses", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifyingChildrenForCtcAdded value: +{ + "description": "Children already verified as CTC/ACTC qualifying children under age 17 with required SSNs", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / retirementDistributionsAdded value: +{ + "description": "Gross Form 1099-R distributions included in grossIncome", + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / shortTermCapitalGains / descriptionPrevious value: -"Short-term capital gains (taxed as ordinary income)"New value: +"Short-term capital gain or loss" - added
Input schema / properties / shortTermCapitalLossCarryoverAdded value: +{ + "description": "Prior-year short-term capital loss carryover as a positive amount", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / socialSecurityBenefitsAdded value: +{ + "description": "Net Social Security benefits included in grossIncome", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / socialSecurityTaxesPaidAdded value: +{ + "description": "Schedule 8812 payroll-tax amount for the 3-or-more-child ACTC method", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / taxExemptInterestAdded value: +{ + "description": "Tax-exempt interest used by the Publication 915 worksheet", + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / taxYear / descriptionPrevious value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)" - added
Input schema / properties / taxableRetirementDistributionsAdded value: +{ + "description": "Taxable Form 1099-R amount", + "minimum": 0, + "type": "number" +} - changed
Output 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" +}
- Changed
calculate_obbb_deductions1 field changed- changed
Output 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" +}
- Changed
calculate_total_tax27 fields changed- added
Input schema / properties / aotcRefundableAllowedAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / aotcStudentQualifiedExpensesAdded value: +{ + "items": { + "minimum": 0, + "type": "number" + }, + "type": "array" +} - changed
Input schema / properties / dependents / descriptionPrevious value: -"Number of qualifying child dependents"New value: +"Legacy dependent count for nonrefundable CTC only" - added
Input schema / properties / earlyRetirementDistributionSubjectToPenaltyAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / earnedIncomeAdded value: +{ + "description": "Schedule 8812 earned income for ACTC", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / earnedIncomeCreditAdded value: +{ + "description": "EITC used by 3-or-more-child ACTC method", + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / grossIncome / descriptionPrevious value: -"Total gross income in USD"New value: +"Total gross income including supplied capital gains, qualified dividends, Social Security benefits, and gross retirement distributions" - added
Input schema / properties / hasForm2555Added value: +{ + "type": "boolean" +} - added
Input schema / properties / lifetimeLearningQualifiedExpensesAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / longTermCapitalLossCarryoverAdded value: +{ + "description": "Prior-year long-term capital loss carryover", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / marriedFilingSeparatelyLivedWithSpouseAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / netInvestmentIncomeAdded value: +{ + "description": "Total net investment income used for NIIT", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / otherDependentsForOdcAdded value: +{ + "description": "Verified dependents for ODC", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / qualifiedBusinessIsSstbAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / qualifiedBusinessPropertyBasisAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedBusinessW2WagesAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedDividendsAdded value: +{ + "description": "Qualified dividends included in gross income", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifyingChildrenForCtcAdded value: +{ + "description": "Verified CTC/ACTC qualifying children", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / retirementDistributionsAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / shortTermCapitalGainsAdded value: +{ + "description": "Short-term capital gain or loss", + "type": "number" +} - added
Input schema / properties / shortTermCapitalLossCarryoverAdded value: +{ + "description": "Prior-year short-term capital loss carryover", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / socialSecurityBenefitsAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / socialSecurityTaxesPaidAdded value: +{ + "description": "Payroll-tax amount for 3-or-more-child ACTC method", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / taxExemptInterestAdded value: +{ + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / taxYear / descriptionPrevious value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)" - added
Input schema / properties / taxableRetirementDistributionsAdded value: +{ + "minimum": 0, + "type": "number" +} - changed
Output 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" +}
- Changed
calculate_w4_withholding2 fields changed- changed
Input schema / properties / taxYear / descriptionPrevious value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)" - changed
Output 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" +}
- Changed
check_credit_eligibility1 field changed- changed
Output 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" +}
- Changed
check_refund_status1 field changed- changed
Output 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" +}
- Changed
compare_filing_statuses2 fields changed- changed
Input schema / properties / taxYear / descriptionPrevious value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)" - changed
Output 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" +}
- Changed
compare_mfj_vs_mfs4 fields changed- changed
Input schema / properties / dependents / descriptionPrevious value: -"Number of qualifying children"New value: +"Number of qualifying children (maximum 20)" - added
Input schema / properties / dependents / maximumAdded value: +20 - changed
Input schema / properties / taxYear / descriptionPrevious value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)" - changed
Output 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" +}
- Changed
compare_state_taxes6 fields changed- added
Input schema / properties / filingStatusAdded value: +{ + "description": "Filing status (default: single)", + "enum": [ + "single", + "married" + ], + "type": "string" +} - added
Input schema / properties / incomeBeforeStateDeductionsAdded value: +{ + "description": "Annual income before modeled state deductions", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / taxYearAdded value: +{ + "description": "Tax year for all versioned state calculation profiles", + "type": "integer" +} - changed
Input schema / properties / taxableIncome / descriptionPrevious value: -"Annual taxable income"New value: +"Deprecated alias for incomeBeforeStateDeductions" - changed
Input schema / requiredPrevious value: -[ - "states", - "taxableIncome" -]New value: +[ + "states", + "taxYear" +] - changed
Output 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" +}
- Changed
compare_tax_years1 field changed- changed
Output 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" +}
- Changed
estimate_quarterly_tax1 field changed- changed
Output 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" +}
- Changed
estimate_self_employment_tax4 fields changed- added
Input schema / properties / qualifiedBusinessIsSstbAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / qualifiedBusinessPropertyBasisAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedBusinessW2WagesAdded value: +{ + "minimum": 0, + "type": "number" +} - changed
Output 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" +}
- Changed
estimate_state_tax5 fields changed- added
Input schema / properties / incomeBeforeStateDeductionsAdded value: +{ + "description": "State income before the modeled state standard deduction and personal exemption", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / taxYearAdded value: +{ + "description": "Tax year for the versioned state calculation profile", + "type": "integer" +} - changed
Input schema / properties / taxableIncome / descriptionPrevious value: -"State taxable income (after state deductions)"New value: +"Deprecated alias for incomeBeforeStateDeductions" - changed
Input schema / requiredPrevious value: -[ - "stateCode", - "taxableIncome" -]New value: +[ + "stateCode", + "taxYear" +] - changed
Output 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" +}
- Changed
generate_full_tax_report20 fields changed- added
Input schema / properties / aotcRefundableAllowedAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / aotcStudentQualifiedExpensesAdded value: +{ + "items": { + "minimum": 0, + "type": "number" + }, + "type": "array" +} - changed
Input schema / properties / dependents / descriptionPrevious value: -"Qualifying children under 17"New value: +"Children already verified as CTC, ACTC, and EITC qualifying children" - added
Input schema / properties / earlyRetirementDistributionSubjectToPenaltyAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / hasForm2555Added value: +{ + "description": "Whether Form 2555 is filed", + "type": "boolean" +} - added
Input schema / properties / lifetimeLearningQualifiedExpensesAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / longTermCapitalLossCarryoverAdded value: +{ + "description": "Prior-year long-term capital loss carryover", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / marriedFilingSeparatelyLivedWithSpouseAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / otherDependentsAdded value: +{ + "description": "Dependents already verified for the nonrefundable ODC", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / qualifiedBusinessIsSstbAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / qualifiedBusinessPropertyBasisAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedBusinessW2WagesAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / retirementDistributionsAdded value: +{ + "description": "Gross Form 1099-R distributions", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / shortTermCapitalLossCarryoverAdded value: +{ + "description": "Prior-year short-term capital loss carryover", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / socialSecurityBenefitsAdded value: +{ + "description": "Net benefits from Form SSA-1099 or RRB-1099", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / socialSecurityTaxesPaidAdded value: +{ + "description": "Schedule 8812 payroll-tax amount for 3-or-more-child ACTC method", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / taxExemptInterestAdded value: +{ + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / taxYear / descriptionPrevious value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)" - added
Input schema / properties / taxableRetirementDistributionsAdded value: +{ + "minimum": 0, + "type": "number" +} - changed
Output 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" +}
- Added
generate_tax_plan - Changed
get_form_filing_guide1 field changed- changed
Output 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" +}
- Changed
get_irs_form_info1 field changed- changed
Output 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" +}
- Changed
get_personalized_tax_calendar1 field changed- changed
Output 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" +}
- Changed
get_retirement_accounts1 field changed- changed
Output 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" +}
- Changed
get_retirement_strategy1 field changed- changed
Output 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" +}
- Changed
get_state_tax_info1 field changed- changed
Output 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" +}
- Changed
get_tax_brackets2 fields changed- changed
Input schema / properties / taxYear / descriptionPrevious value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)" - changed
Output 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" +}
- Changed
get_tax_deadlines2 fields changed- changed
Input schema / properties / taxYear / descriptionPrevious value: -"Tax year (default: 2025)"New value: +"Tax year (default: 2026)" - changed
Output 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" +}
- Changed
get_tax_document_checklist1 field changed- changed
Output 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" +}
- Changed
get_tax_planning_tips1 field changed- changed
Output 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" +}
- Changed
list_deductions1 field changed- changed
Output 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" +}
- Changed
list_no_income_tax_states1 field changed- changed
Output 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" +}
- Changed
list_tax_credits1 field changed- changed
Output 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" +}
- Changed
lookup_tax_rule1 field changed- changed
Output 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" +}
- Changed
optimize_capital_gains1 field changed- changed
Output 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" +}
- Changed
plan_multi_year_taxes2 fields changed- changed
Input schema / properties / years / items / properties / year / descriptionPrevious value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)" - changed
Output 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" +}
- Changed
plan_retirement_withdrawals1 field changed- changed
Output 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" +}
- Changed
process_1099_income9 fields changed- added
Input schema / properties / forms / items / properties / earlyDistributionSubjectToPenaltyAdded value: +{ + "description": "For 1099-R: taxable early-distribution amount after exceptions", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / forms / items / properties / taxableAmountAdded value: +{ + "description": "For 1099-R: taxable amount in box 2a", + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / forms / items / properties / type / enumPrevious 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" +] - added
Input schema / properties / longTermCapitalLossCarryoverAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedBusinessIsSstbAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / qualifiedBusinessPropertyBasisAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / qualifiedBusinessW2WagesAdded value: +{ + "minimum": 0, + "type": "number" +} - added
Input schema / properties / shortTermCapitalLossCarryoverAdded value: +{ + "minimum": 0, + "type": "number" +} - changed
Output 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" +}
- Changed
run_tax_health_check1 field changed- changed
Output 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" +}
- Changed
simulate_tax_scenario1 field changed- changed
Output 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" +}
- Changed
standard_vs_itemized2 fields changed- changed
Input schema / properties / taxYear / descriptionPrevious value: -"Tax year (2024 or 2025)"New value: +"Tax year (2024, 2025, or 2026)" - changed
Output 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" +}
- Changed
submit_feedback1 field changed- changed
Output 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" +}
- Changed
what_changed_between_tax_years1 field changed- changed
Output 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" +}
43 tool updates
v0.5.3- First observed
analyze_education_tax_benefits - First observed
analyze_mortgage_tax_benefit - First observed
analyze_paycheck - First observed
analyze_relocation_taxes - First observed
assess_audit_risk - First observed
calculate_eitc - First observed
calculate_federal_tax - First observed
calculate_obbb_deductions - First observed
calculate_total_tax - First observed
calculate_w4_withholding - First observed
check_credit_eligibility - First observed
check_refund_status - First observed
compare_filing_statuses - First observed
compare_mfj_vs_mfs - First observed
compare_state_taxes - First observed
compare_tax_years - First observed
estimate_quarterly_tax - First observed
estimate_self_employment_tax - First observed
estimate_state_tax - First observed
generate_full_tax_report - First observed
get_form_filing_guide - First observed
get_irs_form_info - First observed
get_personalized_tax_calendar - First observed
get_retirement_accounts - First observed
get_retirement_strategy - First observed
get_state_tax_info - First observed
get_tax_brackets - First observed
get_tax_deadlines - First observed
get_tax_document_checklist - First observed
get_tax_planning_tips - First observed
list_deductions - First observed
list_no_income_tax_states - First observed
list_tax_credits - First observed
lookup_tax_rule - First observed
optimize_capital_gains - First observed
plan_multi_year_taxes - First observed
plan_retirement_withdrawals - First observed
process_1099_income - First observed
run_tax_health_check - First observed
simulate_tax_scenario - First observed
standard_vs_itemized - First observed
submit_feedback - First observed
what_changed_between_tax_years
TDQS
Scored across 45 tools
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.
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.
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.
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
Related MCP Connectors
Retirement Monte Carlo, tax-aware withdrawals, 2026 tax calculators, RMD, IRMAA, every-state tax.
9 deterministic IRS tax, RMD, Roth, Solo 401k, Form 1040, TALS, Estate & SBLOC calculators.
Retirement drawdown, 72(t) SEPP, RMD, Roth conversion, Social Security and state-tax calculators.
90+ pure finance calculators: loans, investing, bonds, options, tax. Stateless, stores nothing.
Related MCP Servers
FlicenseNot gradedqualityDmaintenanceTax-aware retirement planning for Canada and the US. CPP/OAS and Social Security timing, RRSP/TFSA/401k/IRA projections, Monte Carlo simulation, withdrawal order optimization, and historical backtesting against 150 years of market data.2-- AlicenseAqualityAmaintenanceDeterministic 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.8230 npm6MIT
- AlicenseAqualityCmaintenanceProvides 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.753 npmMIT
- AlicenseAqualityBmaintenanceEnables 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.81,235 npmMIT