Qualified business income, with the wage and property limit phasing in and the service-business phase-out
One command on the Federal income tax server, callable over MCP as calculate_qbi, filed in the registry as Section 199A deduction. Every result carries the method it used, the rule pack it was pinned to, what is still missing and whether coverage was complete, for a licensed professional to review.
What it needs, and why
Every input is checked before anything is calculated. Nothing is required to start, and a field left blank means do not apply this rather than zero.
| Input | What it asks for | Why it matters | If you omit it |
|---|---|---|---|
qbi | Qualified business income | The deduction starts as a percentage of qualified business income, before any limit is applied. | defaults to 200000 |
taxable_income | Taxable income before the deduction | The wage and property limit and the service-business phase-out both key off taxable income. | defaults to 600000 |
wages | W-2 wages | Above the phase-in the deduction is capped by W-2 wages, so the cap cannot be computed without them. | defaults to 50000 |
ubia | Qualified property (UBIA) | Qualified property raises the wage cap, which is the alternative limb of the same limit. | defaults to 0 |
sstb | Specified service business one of no, yes | A specified service business loses the deduction entirely above the phase-out, so this changes whether there is an answer, not just its size. | defaults to no |
status | Filing status one of MFJ, SINGLE, HOH, MFS | Every band, threshold and exemption in the calculation is set by filing status. | defaults to MFJ |
Requests it answers
- “How large is my section 199A deduction?”
- “Does the wage limit cut my pass-through deduction?”
An agent with these skills loaded picks the command from phrasing like that, asks for whatever input is missing, and reports the figures with the method that produced them.
Run it
python3 -m taxagent federal qbi --qbi 200000 --taxable-income 600000 --wages 50000 --ubia 0 --status MFJThe same command is exposed by taxagent-federal, so Claude, Claude Code, Codex, Cursor and any other MCP client can call it directly. Analysis only. No tool in this server places orders, modifies custodian records or files returns. This server holds no client data: every figure arrives in the call and nothing is stored. Results are estimates over those figures, not a return and not tax advice.
Scripted cases that exercise it
2 of the 71 console cases call this command on a real server over JSON-RPC and assert the outcome. Every one runs on every build, and all of them are listed on the case inventory.
| Case | What it asks | What it shows | Outcome |
|---|---|---|---|
federal-qbi-phase-in | The wage limit phasing in, not switching on | Above the threshold the wage limit applies in proportion to how far into the phase-in range the taxpayer is, not all at once. | completed |
federal-qbi-sstb | A service business past the phase-out | The same figures as a consultancy rather than a manufacturer: the applicable percentage falls to zero and the deduction goes with it. | completed |
Limits it inherits from taxagent-federal
- A return. AMT and the section 199A deduction are computed separately and are not folded into one liability.
- Credits, self-employment tax and the additional Medicare tax.
- State and local tax.
The server, its other 6 commands and what it deliberately leaves alone are on the Federal income tax page.