OpenTax Engine

An Open Tax Technology Alliance project

OpenTax Engine

Open source 1040 tax calculation engine for AI agents and developers. Runs on your own hardware, with no account and no cloud dependency. For filing your taxes, visit irs.gov.

⭐ Star on GitHub Install the CLI

Built and maintained by Filed

186 registered nodes 131 input types Tax year 2025 macOS, Linux, Windows AGPL v3

Open Tax Technology Alliance

Two open initiatives

Filed and Crimson Tree Software founded the Alliance and co-develop both projects. Neither will be monetised.

OpenTax

A complete federal 1040 calculation engine, free under AGPL v3. One binary, 186 registered nodes and 131 input types, covering W-2s, the 1099 series, K-1s and Schedules A, C and E. It checks returns against the IRS MeF business rule set and exports Modernized e-File XML.

AGPL v3 + commercial Tax year 2025 filedcom/opentax →

Open Tax Document

A free YAML standard for creating and reading Schedule K-1 data, published as a public draft. Readable and implementable by anyone. There is no licence to acquire and no vendor to go through.

Public draft Free standard otd-spec →
Status · pending

OpenTax has an application in with the IRS Modernized e-File system. On acceptance it would be the first open-source route into federal e-filing, and the Alliance intends to run it as a free one, open to individuals, firms, developers and AI agents.

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

Your AI does the thinking. OpenTax 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
Claude Code

Install as a plugin

Keeps the skills always available, including /opentax:tax-preparer and /opentax:tax-reviewer.

/plugin marketplace add filedcom/opentax /plugin install opentax@opentax

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...
+
Opus 5

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?

OpenTax 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...
+
Opus 5

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 OpenTax 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": [] }

FAQ

Questions about the engine

If something here is wrong or missing, open an issue on GitHub.

What is OpenTax?

OpenTax is a free, open source federal tax calculation engine. It computes Form 1040 and its schedules from source-document inputs, checks the result against the IRS Modernized e-File business rule set, and exports MeF XML or a filled IRS PDF. It ships as a single binary for macOS, Linux and Windows, and it is built to be driven by AI agents as much as by people.

Is OpenTax really free?

Yes. The engine is licensed under AGPL v3 at no cost. A separate commercial licence is available for organisations whose policies prohibit AGPL. Both founding members of the Open Tax Technology Alliance have committed that neither OpenTax nor the Open Tax Document standard will be monetised.

Can I file my tax return with OpenTax?

No. OpenTax calculates and validates returns, and it can export e-file-ready MeF XML, but it is not a filing service and it does not transmit anything to the IRS. To file your taxes, go to irs.gov. An application to the IRS Modernized e-File system is pending; if it is accepted, the Alliance intends to operate a free e-filing route.

Which forms and tax years does OpenTax support?

Form 1040 for tax year 2025, across 186 registered nodes and 131 input types. That covers W-2s, the 1099 series, K-1s, and Schedules A, C and E, along with the major credits and capital transactions. Additional forms and state returns are planned but not implemented. Run opentax node list to see everything currently registered.

Does my tax data leave my computer?

No. The binary runs locally and stores returns as files on your own disk. There is no account to create, no cloud service in the path, and no telemetry on your return data. A firm can run OpenTax on its own hardware and re-check returns it has already filed without any client data leaving the building.

How is the engine tested for accuracy?

The repository includes 133 benchmark scenarios drawn from official IRS material, including VITA Publication 4491 training exercises, Publication 17 worked examples, and MeF test packages. Each case pairs inputs with expected output so regressions surface immediately. Returns are also validated against the IRS MeF business rules, with hard failures separated from softer warnings. The benchmark suite and the tests are public, so you can run them yourself with deno task bench.

How do I use OpenTax with Claude or ChatGPT?

Three ways. Add the MCP connector, which works across all sessions in either assistant. Paste the skill URL into a Claude chat, which fetches and installs everything for you with no prior setup. Or, in Claude Code, install it as a plugin with /plugin marketplace add filedcom/opentax followed by /plugin install opentax@opentax.

What is Open Tax Document?

Open Tax Document is a free YAML standard for creating and reading Schedule K-1 data, published as a public draft at opentaxdocument/otd-spec. It is the second Alliance initiative, separate from the engine. Anyone can read and implement it, with no licence to acquire and no vendor to go through.

Who builds and maintains OpenTax?

Filed and Crimson Tree Software founded the Open Tax Technology Alliance and co-develop both initiatives. The engine's day-to-day maintenance runs largely through AI agents that read IRS instructions, write node implementations, generate test cases from official IRS exercises, and fix regressions, with IRS publications as the source of truth and a human reviewing changes before merge.

Can I contribute or build on it?

Yes, and the Alliance is open to any firm, developer or individual. You can extend the K-1 standard or build additional IRS forms into the engine. One restriction: the right to apply for IRS MeF Software Developer or Transmitter authorisation using this codebase is reserved to Filed and its authorised partners, so contact Filed in writing first if that is your plan.

How do I install and update the CLI?

One command installs it: curl -fsSL https://raw.githubusercontent.com/filedcom/opentax/main/install.sh | sh. It detects your OS and architecture and puts the right binary on your PATH. Signed release binaries for Apple Silicon, Intel Mac, Windows x64, Linux x64 and Linux ARM are also on the GitHub releases page. The CLI tells you when a new version exists, and opentax update replaces the binary in place.

How does OpenTax differ from Filed's commercial products?

OpenTax is the calculation layer on its own: deterministic arithmetic, no interface, no document reading. Filed is the commercial product that reads source documents the way a preparer does and then prepares and reviews returns inside a firm's existing tax software. OpenTax gives an AI assistant a calculator it can trust; Filed does the professional work around it.

The Alliance

Open to any firm, developer or individual

Federal tax calculation has been closed software since the 1990s, sold on annual licences by a small number of vendors. The arithmetic is no longer the hard part of tax work, and keeping it proprietary holds back everyone building on top of it.

Founding members

Filed

AI that works inside a tax firm's existing software. Reads the same source documents a preparer reads, then prepares and reviews returns. Supports 1040, 1041, 1065, 1120, 1120-S and 990, and works with CCH Axcess, UltraTax, Lacerte, Drake and ProConnect.

Crimson Tree Software

Partnership tax automation for large public accounting firms, covering federal, state and international compliance for complex allocations and tiered structures. Joins as co-founding member and co-develops both initiatives.

Contributors can extend the K-1 standard or build additional IRS forms into the engine. Both founders have committed that neither initiative will be monetised.

Commercial use

Firms intending to build an MeF transmitter on the codebase should contact Filed for written authorisation first.

Contribute to the engine Read the K-1 spec