Filed Open Tax Engine

Filed Open Tax Engine

Open source 1040 tax calculation engine for AI agents and developers.
Accurately calculates federal taxes. For filing your taxes, visit irs.gov.

⭐ Star on GitHub Visit Filed

Give your AI assistant a tax engine it would love to use

Your AI does the thinking. Open Tax does the calculations.

Installation

ChatGPT · Claude

Install Connector

Add our official MCP server to your AI assistant. Works once, across all sessions.

Free No credit card
Add connector →
Claude · no install

Try without install

Paste this in any Claude chat — it fetches and installs everything automatically.

Open source No accounts Free
Fetch and follow the OpenTax skill: https://raw.githubusercontent.com/filedcom/opentax/main/skills/opentax/SKILL.md

Examples

Example 1

Let Claude do the taxes

Calculate my 2025 taxes — drop your W-2s and 1099s, Claude handles the rest.

Claude doing taxes

Fetch and follow the OpenTax skill: https://raw.githubusercontent.com/filedcom/opentax/main/skills/opentax/SKILL.md

Fetched: https://raw.githubusercontent.com/filedcom/opentax/main/skills/opentax/SKILL.md

Skill loaded. Following it now.

Step 1: Checking for the CLI

Check if opentax CLI is installed

Not installed. Installing now:

Ran 2 commands

opentax 1.0.2 installed and ready.

Please upload some source docs and let's talk tax.

PDF
PDF

Calculate my taxes for 2025. Here are my W2 and 1099MISC

The documents came through as blank templates — the actual values (wages, withholding, SSN, employer info, etc.) aren't filled in. Let me read the raw files directly.

Viewed 2 files

These are form PDFs — let me extract the form field data directly.

Ran 2 commands

Got all the data. Now let me fetch the Tax Preparer skill and run the CLI.

Fetched: https://raw.githubusercontent.com/filedcom/opentax/main/skills/tax-preparer/SKILL.md

Good. I have everything I need. Let me parse the docs and proceed through the phases.

Extracted from documents:

  • W-2 (Quick Stop Convenience Store): Wages $72,000 | Fed withheld $7,454.04 | SS withheld $4,464.00 | Medicare withheld $1,044.00 | NJ state wages $72,000 | NJ state tax $2,747.04
  • 1099-MISC (Jay's Rental Collection Company): Box 1 Rents $24,000
  • SSN: 333-44-5555

Before I proceed to compute, I need a few more things per the skill:

  1. Filing status — single, MFJ, MFS, head of household?
  2. Age (born in what year)?
  3. Dependents — any?
  4. Any other income or documents — 1099-INT, 1099-DIV, IRA/HSA contributions, mortgage interest, charitable donations, estimated tax payments, etc.?

1. Single, Age - 30, Dependents - No, no other docs

Got it. Here's the full picture before I compute:

Dante Hicks — 2025 Federal Tax Return

Filing statusSingle
Age30
DependentsNone

Income:

  • W-2 (Quick Stop Convenience Store): $72,000 wages, $7,454.04 federal withheld
  • 1099-MISC (Jay's Rental Collection Co.): $24,000 rents

No additional deductions or credits noted.

Does this look complete and correct?

yes

Ran 8 commands

Clean result. Here's Dante's full return:

Form 1040 — Dante Hicks — 2025

LineDescriptionAmount
1aWages (Quick Stop W-2)$72,000
8Additional income (rental, Sch. E)$24,000
9Total income$96,000
11Adjusted gross income$96,000
12aStandard deduction (single)$15,750
15Taxable income$80,250
16Income tax$12,569
24Total tax$12,569
25aW-2 federal withholding$7,454
33Total payments$7,454
37Amount owed$5,114.96

Plain summary:

Dante owes $5,114.96 by April 15, 2026. His W-2 withholding covered the wage income reasonably well, but the $24,000 in rental income had zero withholding applied — that's the main driver of the balance due.

  • Effective tax rate: 13.1% ($12,569 / $96,000)
  • Marginal rate: 22% bracket

Worth noting: Since Dante has rental income with no withholding, he may be subject to an underpayment penalty (Form 2210). To avoid this next year, he should consider making quarterly estimated tax payments (Form 1040-ES) on the rental income.

Would you like me to:

  1. Validate against IRS business rules?
  2. Export as MeF XML for e-filing or as a filled PDF?
  3. Model a what-if — e.g. what if he contributed to a traditional IRA to reduce AGI?
Reply...
+
Sonnet 4.6

Claude is AI and can make mistakes. Please double-check responses.

Example 2

Let Claude review your return

Already have a draft return? Drop your source docs and the finished 1040 — Claude audits it line by line and flags what's wrong.

Claude reviewing taxes
Fetched: https://raw.githubusercontent.com/filedcom/opentax/main/skills/opentax/SKILL.md

Step 3: What would you like to do?

Open Tax is ready. What would you like to do?

1. Prepare a return — I'll walk you through it step by step. Drop in your W-2s, 1099s, and other tax documents (photos, PDFs, or just type the values). I'll ask questions until I have everything, confirm the details with you, then compute your full 1040 with all schedules.

2. Review a completed return — Already have a return prepared by someone else? Upload it along with your source documents and I'll independently compute everything, compare line-by-line, and flag any discrepancies — missed income, incorrect deductions, unclaimed credits, or compliance risks.

PDF
PDF
PDF
PDF
PDF
PDF

Review my completed tax return. Here are my source docs and the finished 1040

Now fetching the Tax Reviewer skill before diving in.

Fetch the Tax Reviewer skill

Good. Now let me work through the review systematically. I have all the source documents and the draft return. Let me extract and compute everything.

Fix Schedule A node
Ran 19 commands

Based on my independent read of all source documents vs. the draft return, here's a phase-by-phase audit:

Phase 1 — Source Document Extraction ✅

Oliver K. Filed | SSN: 576-54-3211 | Single | DOB 1/1/1986 | Denton, MD 21629

SourceKey Values
W-2 (False Landscape Supply)$102,000 wages, $8,786 fed withheld, $5,280 state withheld
K-1 FOJ Ventures (50%)$434,800 ordinary, $80,000 rental, $14,200 interest, $24,330 dividends, $44,000 §179, $26,000 charitable
K-1 MHJB Investments (50%)$191,584 ordinary, $24,000 rental, $2,637 interest, $8,413 dividends, $70,000 distributions
1099-INT Fidelity$2,400 interest
1099-DIV Fidelity$22,475 ordinary, $21,874 qualified, $8,800 §199A
1099-BST noncovered RSUs: $4,747/+$276 adj gain; LT covered: $8,449/$111; LT noncovered: $158
1098 XYZ Bank$13,045 mortgage interest, $7,292 property taxes
1098-SA / §498-SAHSA contributions $3,200, distributions $3,871 (all qualified)

Phase 2 — Line-by-Line Comparison & Findings

Here's what my independent calculation shows vs. the draft return:

✅ Items that check out

LineDescriptionDraftMy Calc
1aW-2 wages$102,000$102,000
2bTaxable interest$19,237$19,237
3bOrdinary dividends$55,218$55,218
3aQualified dividends$51,089$51,089
7aCapital gain$772$772
Sch A L8aMortgage interest$13,045$13,045
Sch A L8bReal estate taxes$7,292$7,292
Sch SESelf-employment tax~$24,785~$24,785
Form 8960NIIT$2,850$2,850

🔴 FINDING 1 — HSA Deduction Not Taken (Missing $4,300)

Draft return Schedule 1, line 13 (HSA deduction) = $0. Your §498-SA shows $3,200 in contributions. Form 8889 correctly computes a $4,300 deduction limit — but line 13 shows $0. The deduction was computed but not linked to Schedule 1.

Impact: ~$1,600–$1,700 in overpaid tax at ~37% marginal rate on $4,300.

🔴 FINDING 2 — §199A REIT Dividends Not Captured ($800)

The Fidelity 1099-DIV shows $800 in Section 199A dividends (box 5). The return's Form 8995-A shows the MHJB/FOJ QBI but the $800 REIT dividend is not appearing on Form 8995-A Part IV (line 28). Potential $160 additional deduction.

🟡 FINDING 3 — Qualified Dividends Classification (FOJ K-1)

The FOJ K-1 shows $24,330 in ordinary dividends (box 6a). The return picks these up on Schedule B. However, there's no qualified dividends breakdown from FOJ — the Statement A doesn't indicate any are qualified. The return treats all K-1 dividends as ordinary (non-qualified), which is the conservative correct approach absent additional information. No error, but worth confirming with the partnership.

Reply...
+
Sonnet 4.6

Claude is AI and can make mistakes. Please double-check responses.

CLI Installation and Usage

Install the CLI for macOS, Linux, or Windows. Runs locally. No cloud, no signup required.

$ curl -fsSL https://raw.githubusercontent.com/filedcom/opentax/main/install.sh | sh

GitHub Repo

filedcom/opentax

License

AGPL v3 / Commercial

Platforms

macOS Linux Windows

Entire tax calculation engine as a CLI

186 registered nodes. Every IRS form piped as JSON. Inspect schemas, create returns, compute taxes — all from your terminal.

opentax --help
$ opentax --help Filed Open Tax Engine CLI Usage: opentax <command> <subcommand> [options] Commands: • opentax node list List all registered nodes • opentax node inspect --node_type <type> Inspect a node's input schema and output nodes • opentax return create --year <year> Create a new tax return • opentax return get --returnId <id> Get a return's computed line items • opentax return export --returnId <id> --type mef|pdf [--force] [--output <path>] Export a return as MEF XML or filled IRS PDF • opentax form add --returnId <id> --node_type <type> '{...}' Add a form entry to a return • opentax form list --returnId <id> [--node_type <type>] List all form entries in a return • opentax form get --returnId <id> --entryId <id> Get a specific form entry by ID • opentax form update --returnId <id> --entryId <id> '{...}' Update a form entry's data • opentax form delete --returnId <id> --entryId <id> Delete a form entry • opentax return validate --returnId <id> [--format text|json] Validate a return against MeF business rules • opentax node graph --node_type start [--depth <n>] [--json] View node dependency graph (Mermaid or JSON) Global flags: --help, -h Show help --json Output as JSON

Create a full return using the CLI

node inspect · return create · form add · return get
$ opentax node inspect --node_type w2 Node: w2 Input Schema: w2s array (min 1) — All W-2 forms for this return items: box1_wages number ≥0 — Wages, tips, other compensation box2_fed_withheld number ≥0 — Federal income tax withheld box3_ss_wages number ≥0 — Social security wages (optional) box4_ss_withheld number ≥0 — Social security tax withheld (optional) box5_medicare_wages number ≥0 — Medicare wages and tips (optional) box6_medicare_withheld number ≥0 — Medicare tax withheld (optional) box7_ss_tips number ≥0 — Social security tips (optional) box8_allocated_tips number ≥0 — Allocated tips — routes to Form 4137 (optional) box10_dep_care number ≥0 — Dependent care benefits — routes to Form 2441 (optional) box11_nonqual_plans number ≥0 — Nonqualified plans — included in box 1 wages (optional) box12_entries array — Coded benefit/deferral entries (up to 4 per W-2) (optional) items: code enum A | AA | B | BB | C | D | DD | E | ... — Box 12 code amount number ≥0 — Dollar amount for this code box13_statutory_employee boolean — Statutory employee — wages go to Schedule C (optional) box13_retirement_plan boolean — Retirement plan participant — affects IRA phaseout (optional) box13_third_party_sick boolean — Third-party sick pay — excluded from SE tax (optional) box14_entries array — Other — employer-labeled items; SDI/PFML deductible on Sch A (optional) box15_state string — State abbreviation (optional) box16_state_wages number ≥0 — State wages, tips, etc. (optional) box17_state_withheld number ≥0 — State income tax withheld (optional) taxpayer_age number ≥0 — Taxpayer age — used for catch-up contribution limit (optional) Output Nodes (19): f1040 agi_aggregator eitc schedule1 schedule2 schedule3 schedule_a schedule_c schedule_se form4137 form2441 form8959 form8889 form8853 form8839 form8880 form8962 ira_deduction_worksheet f8812 $ opentax node inspect --node_type f1099int Node: f1099int Input Schema: f1099ints array (min 1) items: payer_name string payer_tin string (optional) seller_financed boolean (optional) payer_ssn string (optional) payer_address string (optional) payer_city_state_zip string (optional) box1 number ≥0 (optional) — Taxable interest box2 number ≥0 (optional) — Early withdrawal penalty box3 number ≥0 (optional) — US savings bond / Treasury interest box4 number ≥0 (optional) — Federal income tax withheld box5 number ≥0 (optional) box6 number ≥0 (optional) — Foreign tax paid box7 string (optional) — Foreign country name box8 number ≥0 (optional) — Tax-exempt interest box9 number ≥0 (optional) — Specified private activity bond interest box10 number ≥0 (optional) — Market discount box11 number ≥0 (optional) — Bond premium elect_bond_premium_amortization boolean (optional) box12 number ≥0 (optional) — Bond premium on Treasury obligations box13 number ≥0 (optional) — Bond premium on tax-exempt bond box14 string (optional) box15 string (optional) box16 string (optional) box17 number ≥0 (optional) nominee_interest number ≥0 (optional) accrued_interest_paid number ≥0 (optional) non_taxable_oid_adjustment number ≥0 (optional) filing_status string (optional) Output Nodes (6): schedule_b schedule1 f1040 form6251 form_1116 schedule3 $ opentax return create --year 2025 { "returnId": "8b94910c-c9d2-4cb1-b78d-a2677705c7c6" } $ opentax form add --returnId 8b94910c-c9d2-4cb1-b78d-a2677705c7c6 --node_type general '{"filing_status":"single"}' { "id": "general_01", "nodeType": "general" } $ opentax form add --returnId 8b94910c-c9d2-4cb1-b78d-a2677705c7c6 --node_type w2 '{"box1_wages":85000,"box2_fed_withheld":14200,"box4_ss_withheld":5270,"box6_medicare_withheld":1232.50}' { "id": "w2_01", "nodeType": "w2" } $ opentax form add --returnId 8b94910c-c9d2-4cb1-b78d-a2677705c7c6 --node_type f1099int '{"payer_name":"First National Bank","box1":1850,"box4":185}' { "id": "f1099int_01", "nodeType": "f1099int" } $ opentax return get --returnId 8b94910c-c9d2-4cb1-b78d-a2677705c7c6 { "returnId": "8b94910c-c9d2-4cb1-b78d-a2677705c7c6", "year": 2025, "summary": { "line1z_total_wages": 85000, "line9_total_income": 86850, "line11_agi": 86850, "line15_taxable_income": 71100, "line24_total_tax": 10556, "line33_total_payments": 14385, "line35a_refund": 3829 }, "forms": [ "agi_aggregator", "eitc", "f1040", "f1099int", "f2441", "f8812", "form6251", "form8880", "form8959", "form8960", "form8962", "form8995", "general", "income_tax_calculation", "schedule1", "schedule_a", "schedule_b", "standard_deduction", "w2" ], "lines": { "filing_status": "single", "line1a_wages": [ 85000, 85000 ], "line2b_taxable_interest": [ 1850, 1850 ], "line1z_total_wages": 85000, "line9_total_income": 86850, "line11_agi": [ 86850, 86850 ], "line12a_standard_deduction": [ 15750, 15750 ], "line15_taxable_income": [ 71100, 71100 ], "line16_income_tax": [ 10556, 10556 ], "line18_total_tax_before_credits": 10556, "line22_tax_after_credits": 10556, "line24_total_tax": 10556, "line25a_w2_withheld": [ 14200, 14200 ], "line25b_withheld_1099": [ 185, 185 ], "line25d_total_withholding": 14385, "line33_total_payments": 14385, "line34_overpayment": 3829, "line35a_refund": 3829 }, "warnings": [] }