mcp server
opentax
Verifiable US tax oracle for AI agents: cited, machine-checkable federal and state tax computation
Description as published by the maintainer. Source
- version 0.2.1
- active
active — Registry entry last updated 2026-07-23.
What this server can do
15 functions, named and described by the server itself. Parameter names are shown because they say more about what a function does than its name usually does.
calculate_business_tax(asOf, target, corpNCTI, corpFDDEI, corpPHCIncome, llcMemberCount, qreCurrentYear, corpGrossIncome, corpIsREITorRIC, entityLegalForm, corpCapitalGains, corpPriorYearTax, corpCapitalLosses, corpDividendsPaid, corpTaxableIncome, qreAvgPrior3Years, corpSection179Cost, corpStockIssuedFMV, sCorpGrossReceipts, corpFiscalYearFiler, corpForeignResearch, corpNOLCarryforward, employeeAnnualWages, corpDomesticResearch, corpDrdOwnershipTier, corpForeignTaxesNCTI, corpTIThrough3Months, corpTIThrough6Months, corpTIThrough9Months, corpDividendsReceived, sCorpNetPassiveIncome, sCorpShareholderCount, sCorpTaxableIncomeAsC, corpBaseErosionTestMet, corpEquipmentPurchases, corpIsLargeCorporation, corpOrdinaryDeductions, corpOwnedByFiveOrFewer, filedForm2553SElection, generalBusinessCredits, corpAvgGrossReceipts3yr, corpForeignTaxesGeneral, corpStockRepurchasedFMV, corpIsCoveredCorporation, corpSection245ADividends, sCorpHasAccumulatedEandP, corpAccumulatedEandPStart, corpIsPersonalServiceCorp, filedForm8832CorpElection, corpBaseErosionTaxBenefits, corpUndistributedPHCIncome, sCorpRecognizedBuiltInGain, corpBusinessInterestExpense, corpCharitableContributions, corpFilesConsolidatedReturn, corpReasonableNeedsRetention, sCorpHasMultipleStockClasses, sCorpPassiveInvestmentIncome, sCorpHasIneligibleShareholder, corpForeignSourceIncomeGeneral, corpAdjustedOrdinaryGrossIncome, corpPortfolioDebtFinancedPercent, corpAvgAdjustedFinancialStatementIncome)- Compute US federal BUSINESS-ENTITY tax from the same cited corpus: check-the-box entity classification, Form 1120 corporate income tax (§ 179/168(k)/174A/163(j)/DRD/NOL, § 250, GBC/FTC/BEAT), S-corp entity taxes, corporate estimates, the § 4501 buyback excise, AET and PHC taxes. Individual returns → calculate_tax. Unknown keys are rejected; unmodeled territory refuses loudly with the reason.
calculate_fiduciary_tax(asOf, target, fiduciaryType, fiduciaryLongTermGains, fiduciaryIncomeBeforeExemption)- Compute US federal income tax for an ESTATE or TRUST (Form 1041): the § 1(e) compressed brackets and § 642(b) exemption. Input is taxable income before the exemption, after the §§ 651/661 distribution deduction. Retained capital gains refuse loudly (§ 1(h) trust breakpoints not modeled). Grantor trusts belong on the grantor's individual return via calculate_tax.
calculate_tax(asOf, state, filing, income, target, credits, itemized, documents, kiddie_tax, retirement, adjustments, investor_amt, tips_overtime, healthcare_ptc, rentals_passive, self_employment, household_employer, payments_estimates)- Compute US federal INDIVIDUAL income tax (or balance due if withholding is given) from a content-addressed corpus of cited rules. NEVER estimate tax yourself — call this, and report ONLY numbers returned by oracle calls made with the real facts (never hand-check or approximate a line the oracle can compute: your recalled parameters may be stale). Negative result = refund. Returns the answer, every assumption made, and hashes that let anyone re-verify the full derivation offline. Facts are grouped (filing, income, retirement, credits, …) — fill the groups that apply; unknown keys are rejected, and the engine names any missing fact the target needs. When source documents CONFLICT on a value, do not silently pick one: compute both branches, disclose the conflict and your choice; an interview/confirmation answer (rollover, conversion, taxable-amount screens) usually reflects taxpayer intent better than a payer form's box code — prefer it and disclose. That heuristic covers FACTS only: LEGAL classifications (qualifying child vs other dependent, filing status, SSTB) follow the statute's tests, not intake checkbox labels — a generic 'claim dependent credit' flag does not convert a qualifying child into an ODC dependent. TRANSCRIBE documented amounts as given even when they look anomalous (e.g. state withholding in a no-income-tax state): disclose the anomaly, never delete or 'correct' a documented number from outside knowledge. If you believe an oracle result is wrong, report the ORACLE's number and note your dissent — never substitute your own: the corpus is primary-source-verified and your recollection is not. Business entities → calculate_business_tax; estates/trusts → calculate_fiduciary_tax; § 152 dependency → determine_dependent.
compare_filing_statuses(facts)- Compute the answer under every filing status for the same facts — e.g. to answer 'should we file jointly or separately?'. Statuses that need more facts report their error instead of guessing. Required: facts.
compute_return(asOf, state, filing, income, target, credits, itemized, documents, kiddie_tax, retirement, adjustments, investor_amt, tips_overtime, healthcare_ptc, rentals_passive, self_employment, household_employer, payments_estimates)- Compute the COMPLETE Form 1040 bottom-line set in one call — the 17 lines that determine the return (1a, 9, 10, 11, 12e, 15, 16, 17 AMT, 19, 22, 23, 24, 25d, 27a, 28, 32, 33, 34/37), each whole-dollar rounded by the engine. Takes the SAME input as calculate_tax (prefer the documents block: transcribe W-2/1099-R/SSA-1099 boxes and dependent birth dates — SSA-1099s are first-class, box 5 and box 6 are summed for you; the tool derives ages, classifications, Part IV withholding, and penalties deterministically). Never assemble return lines by hand — this tool is the return. TRANSCRIPTION CONVENTIONS: (1) a PRIOR-YEAR Form 1040 in the file supplies CONTINUING conditions the current-year interview omits — the 'Someone can claim: You as a dependent' checkbox and the blindness boxes carry forward unless the current-year data contradicts them; (2) COMMUNITY PROPERTY: do NOT split income 50/50 between MFS spouses when they lived apart all year with no transfers (§ 66(a) allocates earned income to the earner) or when a written separation agreement ended the community — transcribe each document to its named earner; never invent a Form 8958 split the intake does not request; (3) bonus depreciation for assets placed in service 1/1-1/19/2025 is 40% (§ 168(k) pre-OBBBA phase-down; 100% only for property ACQUIRED after 1/19/2025).
compute_state_return(asOf, caAmt, njSrp, wages, caBhst, caYCTC, useTax, njWages, additions, caCalEITC, filingHoh, njPension, dependents, exemptions, federalAGI, njExcessDi, njRentPaid, njScorpNet, paGambling, paInterest, vaYourVagi, federalEITC, filingJoint, njArcherMsa, njCojCredit, njDividends, njExcessFli, njWwcCredit, paDividends, vaItemizing, filingStatus, gaLic65Count, gaUetPenalty, jurisdiction, ncCharitable, ncTaxCredits, njBaitCredit, njBlindCount, subtractions, vaFamilyVagi, vaSpouseVagi, gaNolUtilized, ilK12Expenses, njAlimonyPaid, njBusinessNet, njFederalCdcc, njGamblingNet, njMfsSameHome, njNjclassPaid, njOtherIncome, njSeniorCount, njTuitionPaid, ohEicOverride, paBusinessNet, paEstateTrust, paPropertyNet, caHsaDeduction, filingHohOrQss, gaIndCrCredits, ilChildUnder12, ilEitcOverride, njEitcOverride, njHezDeduction, njVeteranCount, ohAge65OrOlder, vaAgeDeduction, ageOrBlindBoxes, caIsoPreference, caRentersCredit, cityWithholding, gaExclusionTier, gaLicExemptions, ncScorpPayments, njExcessUiWfSwf, vaItemizedOther, extensionPayment, gaDependentCount, ncUseTaxEstimate, njAbcaAdjustment, njChildrenUnder6, njDispositionNet, njGoldStarCredit, njPartnershipNet, njRentRoyaltyNet, nycTaxableIncome, ohBusinessIncome, ohResidentCredit, paRentRoyaltyNet, paResidentCredit, stateWithholding, vaRefundableEitc, yonkersSurcharge, caAmtTaxesAddback, estimatedPayments, gaFederalItemized, ilPropertyTaxPaid, ilTeacherExpenses, ncMedicalExpenses, ncRealEstateTaxes, njAlimonyReceived, njDomesticPartner, njMedicalExpenses, njPensionEligible, njTaxableInterest, nyHouseholdCredit, ohInterestPenalty, paNrk1Withholding, refundableCredits, vaItemizedMedical, claimedAsDependent, gaOtherStateCredit, gaOtherWithholding, gaRetirementIncome, ncBaileyRetirement, ncMortgageInterest, njEitcAgeDecoupled, njSpecialExclusion, nycHouseholdCredit, ohRetirementIncome, pa529Contributions, paScheduleDcCredit, vaItemizedCasualty, vaItemizedGambling, yonkersWithholding, gaMilitaryExclusion, njCollegeDependents, njPensionExcludable, njPropertyTaxesPaid, njSeHealthInsurance, njTaxExemptInterest, ohNonresidentCredit, paAbleContributions, paGrossCompensation, paPenaltiesInterest, paScheduleOcCredits, paSpouseBusinessNet, paSpousePropertyNet, vaAgeQualifyingFull, vaYourAgeBlindBoxes, caAb5NetLossAddition, caItemizedDeductions, gaFederalCdccAllowed, ncMilitaryRetirement, ncQualifyingChildren, nonrefundableCredits, ohFederalCdccAllowed, ohOtherCreditsPreJfc, vaItemizedCharitable, vaItemizedOtherTaxes, vaItemizedSalesTaxes, gaItemizedAdjustments, gaSpouseExclusionTier, ncPartnershipPayments, njNjbestContributions, paEligibilityAddbacks, paMsaHsaContributions, paSpDependentChildren, paStudentLoanInterest, taxableSocialSecurity, vaAgeQualifyingTested, vaSpouseAgeBlindBoxes, vaSpouseTaxAdjustment, caDepreciationAddition, ncUnderpaymentInterest, ncUsObligationInterest, njUnderpaymentInterest, ohFederalCdccTentative, paSpouseRentRoyaltyNet, paUnreimbursedExpenses, spouseStateWithholding, ncClaimOfRightRepayment, njOrganDonationExpenses, njPensionEligibleAmount, vaScheduleAdjDeductions, caAb5GrossIncomeAddition, caHsaTaxableDistribution, gaEligibleItemizerCredit, gaRetirementEarnedIncome, gaSpouseRetirementIncome, unemploymentCompensation, njOtherRetirementEligible, njShelteredWorkshopCredit, vaItemizedRealEstateTaxes, caEducatorExpensesDeducted, caTaxableEarlyDistribution, njConservationContribution, njOrganDonorEmployerCredit, njOtherRetirementExclusion, vaItemizedMortgageInterest, priorYearOverpaymentCredited, vaItemizedInvestmentInterest, ohBothSpousesQualifyingIncome, gaSpouseRetirementEarnedIncome, vaItemizedPersonalPropertyTaxes, vaItemizedStateLocalIncomeTaxes)- Compose a STATE return's printed-form line set deterministically (2025 IL-1040 / VA 760 / CA 540 / NY IT-201 / PA-40 / NJ-1040 / OH IT 1040 / NC D-400 / GA 500) — correct line NUMBERS from the printed forms and whole-dollar rounding, with the state tax computed by the oracle targets internally. NC and GA start from federalAGI: NC runs the AGI-tiered child deduction, the independent itemize-vs-standard selection, and the Bailey/military/SS auto-subtractions; GA FORCES itemizing for federal itemizers (pass gaFederalItemized), runs the per-spouse retirement exclusion and Low Income Credit targets, and caps total credits at the line 16 tax. PA is CLASS-BASED and NJ is CATEGORY-BASED: transcribe the pa*/nj* class-or-category fields (PA: Box 16 compensation, per-spouse loss classes; NJ: the line 15-26 category nets — a category loss is suppressed per the printed rule, and the composer runs the pension-exclusion, Worksheet H deduction-vs-credit, EITC/CTC/CDCC targets itself) — federalAGI is NOT the PA or NJ base. OH starts from federal AGI: pass federalAGI + ohBusinessIncome and the composer runs the Business Income Deduction, MAGI-tiered exemptions, and the Schedule of Credits ordering (retirement/senior/CDCC/exemption credits before the joint filing credit's line-11 base). Workflow: run compute_return first for the federal substrate, compute any state-specific components the citations describe (additions, subtractions, credits without targets — disclose each), then call this ONCE and report its line set VERBATIM. Never hand-assemble state line numbers: transposed lines on correct dollars are the dominant state error mode. ALWAYS pass taxableSocialSecurity and unemploymentCompensation when nonzero (VA/CA/NY subtractions are applied by the composer). ALWAYS transcribe the intake's state-specific block (e.g. ca_tax_return.ca_form540_schca: AB 5 employee-classification additions; va_sch_a fields; county/use-tax questions) — those fields drive composer inputs. For VA MFJ, pass vaYourVagi/vaSpouseVagi (the separate-VAGI worksheet) so the composer can run the Spouse Tax Adjustment worksheet itself. Required: jurisdiction, asOf.
determine_dependent(asOf, depAge, target, depGrossIncome, depFilesJointReturn, depIsFullTimeStudent, depRelationshipChild, depDivorcedParentsRule, depPermanentlyDisabled, depYoungerThanTaxpayer, depRelationshipRelative, taxpayerIsCustodialParent, hasMultipleSupportAgreement, custodialParentReleasedClaim, depIsQualifyingChildOfAnother, depProvidedOwnSupportOverHalf, taxpayerProvidedOverHalfSupport, depLivedWithTaxpayerOverHalfYear, taxpayerProvidedOver10PercentSupport)- Determine whether ONE candidate person is the taxpayer's § 152 dependent — qualifying child or qualifying relative, including multiple-support agreements and the divorced-parents release — as a proof-backed yes/no with citations. Feed the result into calculate_tax's credits group (qualifyingChildren / otherDependents).
explain_rule(ruleId)- Get a tax rule's statutory citation, verbatim excerpt, validity window, parameters, and dependencies. Use to quote the actual law behind an answer. Required: ruleId.
find_tax_cliffs(vary, facts, toDollars, fromDollars, stepDollars)- Find exact dollar amounts where one more cent of an input costs MORE than a cent of tax (marginal rate over 100%) — e.g. the EITC investment-income kill switch, CTC phase-out steps. Every probe is a real evaluation. Required: facts, vary, fromDollars, toDollars.
is_tipped_occupation(job)- Determine whether a job is on the Treasury Tipped Occupation list (Treas. Reg. § 1.224-1, final Apr 2026) for the § 224 'no tax on tips' deduction. Fuzzy-matches the job name; returns the official listing (name, TTC code, category) or a definitive 'not listed'. Required: job.
list_input_facts- Discover every input the tax corpus understands: id, type, whether required, and its documented default. Call this if unsure what information to collect from the user.
lookup_tax_parameter(asOf, query)- Look up the current-law dollar amounts behind a question ('standard deduction', 'CTC phase-out threshold', 'tips deduction cap') with their statutory citations and validity windows. Use this to fact-check ANY tax number before stating it — your training data likely predates the OBBBA. Required: query.
search_tax_rules(asOf, limit, query)- Full-text search over the encoded tax-law corpus ('kiddie tax', 'NIIT threshold', 'california renters credit'). Returns matching rules: id, title, statutory citation, effective window, and a verbatim excerpt of the law text. A hit means the engine computes this; zero hits means it is outside the corpus — say so rather than guessing. Follow up with explain_rule for a hit's full formula, or lookup_tax_parameter for its dollar amounts. Required: query.
verify_fact(asOf, query, filingStatus, claimedAmount)- Fact-check a claimed dollar amount about tax law ('the 2026 MFJ standard deduction is $32,200', 'CTC is $2,000 per child') against the corpus. Returns verified / refuted (with the correct value and citation) / unknown. Never states a verdict it cannot ground. Required: query, claimedAmount.
verify_tax_claim(facts, claimedAmount, toleranceDollars)- Verify a claimed tax amount (yours, a user's, or another tool's) against the law. Returns verdict 'verified' or 'refuted' with the correct value. Use this as a self-check before presenting any tax number. Put asOf (and target, if any) INSIDE the facts object — e.g. facts: {..., "asOf": "2025-12-31"} — otherwise the claim is checked under today's law. Required: facts, claimedAmount.
Last successful function declaration observed on . Source: https://opentax.invaro.ai/mcp. We list what the server declared; we do not call any of these functions.
Endpoint status observed on . Source: https://opentax.invaro.ai/mcp.
Signals
These are separate measurements of different things. They are deliberately not combined into one score, because a popularity number that mixes website traffic with saves and stars cannot be checked or acted on.
| Signal | Value | What it measures | Window | Observed | Source |
|---|---|---|---|---|---|
| Latest published version | 0.2.1 | Latest version string the maintainer published to the registry. | as of fetch | Model Context Protocol | |
| Registry record last updated | 2026-07-23 | When the registry record was last updated by its maintainer. | point in time | Model Context Protocol | |
| First listed in the MCP Registry | 2026-07-23 | Date this server was first published to the official MCP Registry. Not a usage or quality measure. | point in time | Model Context Protocol | |
| mcp tools declared | 15 tools | Number of functions the server itself declared when asked to list them. This is what the server offers an agent, not a measure of how well any of them work. | as of probe | opentax.invaro.ai | |
| mcp endpoint status | ok | The server listed 15 functions when asked. | as of probe | opentax.invaro.ai |
Where to get it
This record as data
Every field on this page, with its source and observation date, is in the catalog JSON. Fetch the whole kind at once instead of parsing this HTML.
GET /api/v1/entries/mcp_server.json