itr-mcp
Locally compute and verify Indian income-tax figures, recommend an ITR form, plan filing, and reconcile tax documents.
Compute FY 2025-26 income tax under new/old regimes, including slabs, standard deduction, 87A rebate/marginal relief, 111A/112A gains, surcharge, cess, and rounding.
Compare old vs new regimes side by side and get the recommended regime and savings.
Recommend ITR-1/2/3/4 from residency, income heads, losses, and disqualifier flags, with deadline and late-fee guidance.
Generate a form-specific filing checklist and portal walkthrough to e-verification.
Plan advance-tax installments and compute 234A/234B/234C interest.
Compute HRA exemption and 80GG alternative; list old-regime deduction caps.
Parse Form 26AS text exports and encrypted AIS JSON on-device.
Reconcile Form 16 vs AIS vs 26AS and draft-return figures to catch mismatches.
List supported fiscal years and filing deadlines.
Run the guided
file_my_itrinterview prompt for one-question-at-a-time filing help.
All tools are read-only and deterministic; the server never files the return for you.
Provides tools for parsing Zerodha tax P&L statements to aggregate capital gains (planned for v0.3).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@itr-mcpCompare old and new regime for a salary of 12 lakhs."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
itr-agent
Local-first ITR filing agent for Indian income tax. Claude interviews you one question at a time, picks your ITR form, computes your tax deterministically on your machine, reconciles your documents, and walks you to the portal's submit button -- no accounts, no uploads, no cloud.
Works with Claude Desktop, Claude Code, and any MCP client. Formerly published as itr-mcp.
You: Help me file my ITR.
Claude: [file_my_itr] One question at a time. First: were you a resident of India
for all of FY 2025-26?
You: Yes, salaried, and I have vested US RSUs from my employer.
Claude: [recommend_itr_form] Foreign assets (Schedule FA) rule out ITR-1: you file
ITR-2, due 2026-07-31. Next: how many employers this year?Those are the calls Claude makes during the interview, sent to the built server by scripts/demo.mjs. Every figure in the animation is one that run printed.
Why
Every Indian tax tool wants your data on their servers. itr-agent flips it: your documents stay local, the LLM never does arithmetic, and every number comes from a versioned rule pack you can audit. The agent layer drives the interview; the deterministic engine does the math.
What it will never do: submit the return for you. India has no public filing API -- returns are filed by you on incometax.gov.in (or by an authorized ERI/CA). The agent takes you to that button with every number verified; you press it.
Related MCP server: mcp-india-stack
The agent
file_my_itr (MCP prompt) runs the guided interview:
Residency, age band -- one question at a time
Income heads: salary, house property, capital gains, business/F&O, other sources
Disqualifier sweep: foreign RSUs/ESPP, director role, unlisted shares, ESOP deferral
Losses, current and brought-forward (they change the form)
recommend_itr_form-> the form, with rule-by-rule reasoningcompare_regimes-> the regime, with real numbersparse_ais/parse_form26as/reconcile_documents-> fix mismatches BEFORE filingschedule_advance_tax/compute_interest_234if applicablefiling_checklist-> schedule-by-schedule portal walkthrough, ending at e-verification
Tools (v0.5)
Tool | What it does |
| ITR-1/2/3/4 selection with rule-by-rule reasoning and loss-continuity awareness: brought-forward business losses force ITR-3 even with zero current-year business income (Schedule CFL). Knows the AY 2026-27 two-house-property allowance, the s.194N bar, and the 44AD/44ADA turnover ceilings (when you pass the turnover). Returns each deadline with its statutory citation |
| Ordered, form-specific walkthrough: documents, reconciliation, computation, portal steps schedule by schedule, e-verification |
| Full FY 2025-26 (AY 2026-27) computation: new/old regime slabs (incl. the senior and super-senior slab sets), standard deduction, employer NPS under 80CCD(2) in both regimes, house-property loss set-off (s.71(3A) cap; none under 115BAC), 87A rebate (new regime: Rs 60,000 where TOTAL income is up to Rs 12L with marginal relief, never offsetting 111A/112A tax; old regime: Rs 12,500 on total income up to Rs 5L, no marginal relief, offsets 111A), 111A (20%) / 112A (12.5% above 1.25L) capital gains with the unexhausted-basic-exemption set-off, surcharge with the 15% gains cap and its own marginal relief, 4% cess, s.288A/288B rounding |
| Old vs new side by side, recommended regime, savings amount |
| Jun/Sep/Dec/Mar installment plan (15/45/75/100%) with shortfall tracking |
| Sections 234A/234B/234C interest with the statutory 12%/36% safe harbors, the s.234B(2) self-assessment payment ladder, and Rule 119A rounding (principal floored to Rs 100, part month = full month). Reports which sections it skipped and why |
| HRA exemption per Rule 2A, period-wise (least of three limbs; FY 2025-26 metros: Delhi/Mumbai/Kolkata/Chennai) + the 80GG alternative, with its Rs 5,000-per-month cap and the bars under the new regime and alongside HRA |
| Old-regime deduction checklist with statutory caps (80C, 80CCD(1B), 80D tiers, HRA metros) |
| Parse the caret-delimited Form 26AS Text export from TRACES into structured TDS entries with booking status (only F is creditable; the tool reports |
| Decrypt + parse the AIS JSON export on-device (AES-256-CBC/PBKDF2 with the password derived from PAN + DOB); normalized rows with label-matched amounts/dates/codes |
| Form 16 vs AIS vs 26AS mismatch report -- the checks that pre-empt 143(1)(a) intimations and 139(9) defect notices (TDS over-claim against the creditable 26AS total, non-final booking status, missing employer, undeclared AIS interest/dividend) |
| Supported fiscal years + AY 2026-27 filing deadlines with their statutory citations |
All tools are read-only (readOnlyHint: true), take zod-validated inputs, and return structuredContent alongside the human-readable text.
Install
What npx installs today. The npm badge at the top is live. While it reads 0.3.0, npx -y itr-agent installs the July 2026 engine without the 0.4.0 and 0.5.0 fixes (senior slab sets, surcharge marginal relief, s.87A on total income, 26AS booking status). No publish has reached npm since then: every npm publish from publish.yml has been refused by npmjs.com, most recently for v0.5.3 on 2026-10-20. Until the badge reads 0.5.x, use the .mcpb from the v0.5.3 release (one click, below) or install from source.
Claude Code
claude mcp add itr-agent -- npx -y itr-agentClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"itr-agent": {
"command": "npx",
"args": ["-y", "itr-agent"]
}
}
}Claude Desktop, one click
From the v0.5.3 release on, every GitHub release carries itr-agent-<version>.mcpb and its .sha256. The bundle inlines the server and its dependencies into one file, so there is no npm or npx step: double-click it, or use Settings > Extensions > Install Extension in Claude Desktop. It needs Node 22 or later, like the npm package. pnpm bundle builds the same file locally into build/.
From source
git clone https://github.com/Sagargupta16/itr-agent
cd itr-agent
pnpm install
pnpm build
node dist/index.js # stdio serverMigrating from itr-mcp
Same server, new name. Replace itr-mcp with itr-agent in your MCP config; the itr-mcp npm package is deprecated and frozen at v0.2.0.
Example prompts
"Help me file my ITR." (starts the guided interview)
"I'm salaried with US RSUs and 2L of equity LTCG -- which ITR form am I supposed to file?"
"My CTC is 18L with 50K NPS through my employer -- which regime should I pick for FY 2025-26?"
"My estimated tax is 2.4L and TDS covers 1.8L. Plan my advance tax installments."
"Parse
C:/tax/26AS.txtand total the TDS my employer deposited."
Filing after the due date
The s.139(1) due date for FY 2025-26 is in deadlines (list_tax_years prints them, with the statutory basis for each in deadlineCitations). Once it has passed, the return is belated under s.139(4) and four things change. file_my_itr asks about timing before anything else, because two of them are cheaper to know up front.
The pack's deadlines.itr1_2 is 2026-07-31 (s.139(1) Explanation 2(c)). deadlines.itr3_4_nonAudit is 2026-08-31: Finance Act 2026 moved non-audit assessees with business or professional income to 31 August from AY 2026-27, and CBDT granted no further extension (checked 2026-09-10). Audit cases are later again (deadlines.audit, 31 October), and no tool ever selects it because nothing here takes a 44AB input, so recommend_itr_form and filing_checklist both report the non-audit date and both say so in notes.
You can still file, up to
deadlines.belated(2026-12-31 for AY 2026-27) or before the assessment is completed, whichever is earlier.s.234F fee: Rs 5,000, or Rs 1,000 where total income does not exceed Rs 5 lakh. Both figures come from the rule pack (
lateFee234F) and are returned byrecommend_itr_formandfiling_checklist.s.234A interest: 1% per month, or part of a month, on the tax still outstanding after TDS/TCS, advance tax and reliefs, running from the day after the due date to the date of filing. Call
compute_interest_234withmonthsLateFiling(part month = full month, Rule 119A).s.80 forfeits this year's loss carry-forward. Business, speculative and capital losses of the current year cannot be carried forward in a belated return. Set-off of losses already determined in an earlier year survives, and so does the house-property loss carry-forward (s.71B).
recommend_itr_formsays this innoteswhenever a business, speculative or capital loss flag is set, so its ITR-3 recommendation is not read as an unconditional carry-forward. A house-property-only loss does not trigger it, because s.71B carries that one forward either way.
Revising a filed return. Finance Act 2026 substituted s.139(5): a revised return may now be filed any time before the end of the AY (deadlines.revised, 2027-03-31), no longer three months before it. A revision filed after deadlines.revisedWithoutFee234I (2026-12-31) attracts the new s.234I fee; its tiers are not in the pack because no primary source for them was found, so read the amount off the portal.
Not modeled, deliberately: whether a belated business filer keeps the old-regime election (s.115BAC(6) / Form 10-IEA is due on or before the s.139(1) date). Ask a CA before relying on either answer.
Validation
docs/validation.md runs 20 cases (58 figures) through the built server and puts each next to its source. Nine come from the Finance Minister's own table in the Budget Speech 2025-26 (Annexure to Part-B, printed page 47): slab tax, rebate and tax after rebate from 8 to 50 lakh. The other eleven are worked by hand from the statute, with the arithmetic in the table: the 87A marginal relief and its crossover, gains that cost the rebate, the old-regime age bands, and the 10% surcharge with its own marginal relief. All 58 match. CI runs pnpm validate on every leg and fails if a figure stops matching or the committed table goes stale.
It is not a comparison with the e-Filing portal's own calculator, which refuses automated browsers. A case from a CA-prepared computation is the most useful pull request this repo can get.
Scope and limitations
Honest boundaries, so you know before you rely on it. docs/v0.2-spec.md carries the statutory citations behind each rule, the per-section implementation status, and the register of claims that were researched and refuted.
Resident individuals, FY 2025-26 (AY 2026-27). NRI/RNOR computation differs (the form recommendation accounts for residency, the tax engine assumes resident).
No filing. There is no public API to submit an ITR; only you or an authorized ERI can file. The agent prepares and verifies everything, then hands over.
You supply the income figures.
compute_taxcomputes tax on the heads you give it: salary, other income, 111A STCG, 112A LTCG, a house-property loss (as a positive number; it applies the s.71(3A) cap and the s.115BAC bar), employer NPS under 80CCD(2), and old-regime deductions as a single total. It does not itself compute house-property income (30% standard deduction, 24(b) interest), other capital-gains heads (112 debt/property, 115BBH crypto, slab-rate debt MF under 50AA), or business P&L -- work those out separately, or withlist_deductionsfor the Chapter VI-A caps, and pass the totals in.s.87A under the new regime tests total income. The statute's first proviso says "total income" and this engine follows it, so 12 lakh of salary plus any equity gains loses the Rs 60,000 rebate. Some practitioners read the threshold as slab-rate income only;
compute_taxsays which reading it applied whenever gains are present, and the rule pack can encode the other one (thresholdBasis: "normalIncome").Not yet modeled: house-property and business P&L computation (
presumptivepicks the single-installment 234C schedule and, withpresumptiveTurnover, the 44AD/44ADA ceilings -- the income itself is not computed), crypto/VDA (115BBH), non-equity capital gains, loss set-off arithmetic beyond the house-property cap (#4), Schedule FA valuation (#5), Form 16 PDF parsing (reconcile_documentstakes Form 16 figures as input, it does not read the PDF), broker capital-gains statements (#7).Dividend is ordinary income for surcharge purposes. There is no dividend input: it goes in
otherIncome. The First Schedule keeps dividend out of the 25%/37% surcharge bands and caps its surcharge at 15%, andcompute_taxdoes neither for dividend (it does both for 111A/112A gains). Only bites above Rs 2 crore of total income; below that every band rate is already at or under 15%.Transaction-date rules not yet split. The engine applies FY 2025-26 rates uniformly; the 23-Jul-2024 capital-gains rate flip and the 1-Oct-2024 buyback change matter for FY 2024-25 returns, which this pack does not cover.
The encrypted AIS file is not a safe place to store your data. Its password is your PAN plus your date of birth, stretched with only 1,000 PBKDF2-SHA256 iterations. Once someone knows your PAN, every plausible DOB can be tried in about 4 seconds single-threaded (measured on a laptop: 0.11 ms per key derivation over a ~36,600-date space). That is the portal's scheme, not this tool's choice, and nothing here can strengthen it -- treat a downloaded AIS export as effectively unencrypted and delete it when you are done.
parse_aisdecryption is unproven on a live export. The AIS password scheme is reverse-engineered from open-source utilities and verified against this repo's synthetic round-trip, never against a file the portal actually produced. If it fails, the error tells you to passpasswordexplicitly or use the portal's CSV export, and an issue report with your download date helps fix it. Every other tool is unaffected.Not tax advice. Complex cases belong with a CA. Every output says so.
Architecture
One stdio process, three layers, no network. The prompt sequences the interview, the MCP layer validates every input, and pure functions over a versioned JSON rule pack produce every number.
The spec behind the picture is docs/diagrams/architecture.yaml, rendered with orrery; every node names the source file it stands for.
Decision | Why |
stdio only, no HTTP transport | The documents carry PAN, salary and TDS data. No port means nothing to expose; CONTRIBUTING declines network transports outright |
Rule pack in JSON, not code | Tax law changes every Finance Act. A new FY is a new |
The LLM never computes | A figure a model produced cannot be audited or reproduced. The model asks questions and calls tools; every rupee figure is a deterministic function output, returned with |
| Downstream tools ( |
CI asserts computed figures | On Ubuntu and Windows across Node 22/24/26, the smoke test boots |
Design principles
Local-only. stdio transport, no network calls, no telemetry, no accounts. Your documents are read from disk by this process and never uploaded anywhere. AIS decryption happens entirely on-device with Node's crypto -- the reverse-engineered password scheme has un-peppered fallbacks and an explicit
passwordoverride in case the format rotates.What your MCP client still sees. Parsed output is returned to whatever client you connected, so if that client is a hosted LLM, the parsed contents reach that provider like any other message. PAN is masked in the human-readable text mirror, but the
structuredContentpayload carries the full parsed document (PAN, TANs, deductor names, amounts) because downstream tools need it. Local-only describes this server, not your whole stack -- for maximum privacy, run it against a local model.The LLM never does math. Every rupee is computed by pure functions over
data/fy2025-26.json. 151 tests pin the engine to published worked examples and to statute: the 12L zero-tax case, the 12,10,000 marginal-relief case, the 12,70,588 relief exhaustion point on both sides, the 13,25,000 total-income case that loses the rebate, the surcharge bands with the First Schedule exclusion of capital-gains income, all three old-regime age bands, and the 234A/234B/234C/HRA/80GG golden cases.The agent drives, the engine decides. The interview sequencing is a prompt; every number and every form rule is deterministic code. Nothing is estimated.
Year-parameterized. Rules live in per-FY JSON packs. FY 2026-27 (Income-tax Act 2025 and Income-tax Rules 2026: Form 16 becomes Form No. 130 under Rule 215, the HRA metros become eight under Rule 279; Finance Act 2026: buyback reverts to capital gains) lands as a new pack, not code changes. Rule 164(14) of the 2026 Rules keeps FY 2025-26 returns on this year's forms, so none of it touches the pack shipped here.
Not tax advice. Every tool that computes a rupee figure returns a
disclaimersarray and the fiscal year it applied;compute_tax,compute_hraandlist_tax_yearsalso return the exactrulePackVersion. Verify against the official utility before filing.
Roadmap
v0.1 -- tax engine (both regimes + CG + surcharge + cess), regime comparison, advance tax, deduction checklist, 26AS text parser
v0.2 --
parse_ais(encrypted AIS JSON, on-device decrypt),reconcile_documents(the #1-notice-trigger checks), 234B/234C interest with golden-case tests, HRA + 80GG calculators, old-regime 87A semantics fixv0.3 -- renamed to itr-agent;
recommend_itr_formwith loss-continuity awareness (#3),filing_checklist, thefile_my_itrguided interview promptv0.4 -- engine correctness pass (senior/super-senior slab sets, surcharge marginal relief on tax + surcharge, the s.111A/112A basic-exemption set-off, s.288A/288B rounding), positional 26AS amount extraction, s.234A + the s.234B(2) payment ladder, reconcile M4/M5, belated-filing guidance, security pins on the SDK's transitives, an OIDC-with-provenance publish workflow (no run of it has reached npm yet; the npmjs.com trusted-publisher link is pending), and an MCP registry manifest (
server.json)v0.5 -- fact-check of every constant against primary sources; s.87A on total income; AY 2026-27 form changes (two house properties, Schedule AL at 1 crore, Finance Act 2026 deadlines with citations); employer NPS and house-property loss inputs; 44AD/44ADA ceilings and s.194N in the form picker; 26AS booking status, TCS separation and reconcile M2; path allow-list on the parsers
v0.5.2 -- a validation table against the Budget Speech 2025-26 figures and hand-worked statute cases, enforced in CI; the
.mcpbone-click Claude Desktop bundle, attached to each release from v0.5.3 on; a README demo rendered from a real stdio sessionv0.5.3 -- architecture and filing-flow diagrams rendered from
docs/diagrams/with orrery (light and dark, reviewed at README width) in place of the mermaid sketch; the Income-tax Rules 2026 citations (Rules 164, 205, 215, 245, 269, 279) recorded for the FY 2026-27 pack; the README says what npm serves todayv0.6 (priorities validated against a real AY 2026-27 filing) --
compute_loss_setoff(BFLA/CFL engine, #4),parse_form16(TRACES PDF), broker capital-gains parsers -- Groww first, then Zerodha (#7)v0.7 --
compute_schedule_fa(foreign assets/RSU, Rule 115 rates, #5), portal quirks playbook (#6), mutual fund CAS via casparser, draft ITR JSON export
Development
pnpm install
pnpm test # vitest: engine golden files + in-memory MCP client tests
pnpm build
pnpm inspect # MCP inspector against dist/index.js
pnpm validate # docs/validation.md cases against the built server; --write regenerates it
pnpm bundle # build/itr-agent-<version>.mcpb, the Claude Desktop bundle
node scripts/demo.mjs # the README demo sessionContributing
Tax software has a higher correctness bar than most OSS, so the ground rules are written down: CONTRIBUTING.md (tax constants live in data/*.json with a cited source, every calculator change ships a golden test, never commit a real tax document). Version history and every constant that moved: CHANGELOG.md. Found a vulnerability? SECURITY.md has the private reporting path -- please do not open a public issue for it.
Disclaimer
itr-agent is an open-source calculator, document parser, and filing guide. It is not a substitute for professional tax advice, and it never files anything -- output is meant to be verified against the official income tax utility, and the return is always submitted by you on the portal.
License
Available Tools
12 toolscompare_regimesCompare old vs new tax regimeARead-only
Compute tax under BOTH regimes for the same income and return a side-by-side comparison with the recommended regime and the savings amount. Pass the old-regime deductions you could actually claim; the new regime ignores them.
| Name | Required | Description | Default |
|---|---|---|---|
| fy | No | Fiscal year, e.g. '2025-26' (AY 2026-27) | 2025-26 |
| ageBand | No | Age band: below60, senior (60-79), superSenior (80+). Affects old-regime exemption only. | below60 |
| ltcg112A | No | Long-term capital gains under section 112A in INR, BEFORE the 1.25L exemption | |
| stcg111A | No | Short-term capital gains under section 111A (listed equity, STT paid) in INR | |
| deductions | No | Old regime only: total Chapter VI-A deductions (80C, 80D, ...) in INR, EXCLUDING employer NPS (use employerNps80CCD2). Ignored under the new regime. | |
| otherIncome | No | Other normal-rate income in INR (interest, net rent, etc.) | |
| salaryIncome | No | Gross salary income in INR, before standard deduction | |
| employerNps80CCD2 | No | Employer's NPS contribution under s.80CCD(2) in INR. Allowed in BOTH regimes (the one Chapter VI-A deduction 115BAC keeps); capped at 14% of salary in the new regime, 10% (private) / 14% (government) in the old. | |
| housePropertyLoss | No | Loss under the head house property as a POSITIVE number (e.g. s.24(b) home-loan interest on a self-occupied house). Old regime: set off against other heads up to Rs 2 lakh (s.71(3A)), rest carried forward. New regime: no inter-head set-off (s.115BAC(2)), reported as carried forward. | |
| governmentEmployer | No | Central/State Government employer (raises the old-regime 80CCD(2) cap to 14%) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful behavior: it returns a side-by-side comparison, a recommended regime and the savings amount, and clarifies that the new regime ignores old-regime deductions. It does not spell out assumptions or output field details, but it adds meaningful context beyond annotations.
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 computation and return, followed by a compact input rule. No repeated or filler content.
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 tax comparison tool with no output schema, the description gives enough to select and call it: both regimes, same income, comparison output, recommendation, savings, and deduction asymmetry. The rich schema covers parameter detail, though exact response fields and assumptions are not spelled out.
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 10 parameters, including age band, NPS caps, house-property loss treatment, and deduction regime. The description only adds the high-level instruction to pass claimable old-regime deductions and that the new regime ignores them, which largely repeats schema notes. 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 (Compute tax) and resource (both regimes for the same income) and names the return (side-by-side comparison, recommended regime, savings). The 'BOTH regimes' framing distinguishes it from the single-regime sibling compute_tax, even though that sibling is not named.
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 use case is implied: compare both regimes and get a recommendation. It also gives a deduction-input rule, but it never states when to choose this over compute_tax or when not to use it, and no alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_hraCompute HRA exemption (+80GG)ARead-only
HRA exemption per Rule 2A: least of (actual HRA, rent minus 10% of salary, 50% metro / 40% non-metro of salary), computed period-wise. Salary = basic + retirement-forming DA + fixed-percentage turnover commission. Old regime only; metro list for FY 2025-26 is Delhi/Mumbai/Kolkata/Chennai. Also computes the 80GG alternative for rent payers who received no HRA at any time in the year (the two are mutually exclusive).
| Name | Required | Description | Default |
|---|---|---|---|
| fy | No | Fiscal year, e.g. '2025-26' (AY 2026-27) | 2025-26 |
| regime | No | HRA exemption and 80GG are both unavailable under the new regime | old |
| periods | No | Homogeneous periods (amounts are per-period TOTALS, not monthly). Split whenever salary, rent, HRA, or city changes. Required unless eightyGG is supplied. | |
| eightyGG | No | Compute the 80GG alternative instead of HRA (requires: no HRA received at any time in the year) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description is fully consistent with a pure computation. It goes well beyond the annotations by defining the statutory formula, the salary composition (basic + retirement-forming DA + fixed-percentage turnover commission), period-wise treatment, and the metro list for FY 2025-26. It stops short of describing the result shape, which matters since there is no output 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?
Three information-dense sentences, front-loaded with the rule and formula, with constraints following. No wasted text, though the absence of line or clause breaks makes the metro list and 80GG caveat slightly harder to scan.
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?
Given nested objects, a 12-item period array, and no output schema, the description does a good job covering input semantics and statutory constraints. The remaining gap is that it never says what the response contains (per-period breakdown, which limb was binding, final exemption amount), which an agent calling a compute tool would want.
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%, so the baseline is 3; the description earns an extra point by clarifying that amounts are per-period totals and by defining what 'salary' includes, which gives meaning to the optional daRetirement and turnoverCommission fields that the schema only labels. The 80GG mutual-exclusivity rule also disambiguates which parameter branch to populate.
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 ('HRA exemption per Rule 2A') and spells out the exact least-of formula being applied, plus the dual 80GG computation. An agent can immediately distinguish this from compute_tax or list_deductions without opening the schema.
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?
Explicit exclusions are given: 'Old regime only', and 80GG applies only to rent payers who received no HRA at any time in the year, with the two declared mutually exclusive. It does not, however, route to any sibling tool (e.g., compare_regimes for regime choice), so the when-to-use context is complete but not alternative-aware.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_interest_234Compute 234A/234B/234C interestARead-only
Deterministic sections 234A, 234B and 234C interest. 234A: 1%/month for filing after the due date, on tax outstanding after all prepaid tax. 234B: 1%/month on assessed-minus-advance when advance < 90% (from 1 April of the AY), reduced by self-assessment payments under s.140A. 234C: per-installment shortfalls with the statutory 12%/36% safe harbors for June/September, measured on tax due on RETURNED income. Rule 119A rounding applied (principal floored to Rs 100, part month = full month). Each section is computed only when its own inputs are supplied; anything skipped is named in skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| fy | No | Fiscal year, e.g. '2025-26' (AY 2026-27) | 2025-26 |
| assessedTax | Yes | 234B base: tax on total income minus TDS/TCS and reliefs, in INR (advance tax is NOT deducted here) | |
| presumptive | No | 44AD/44ADA presumptive: a single 100% installment by Mar 15 instead of four | |
| monthsFor234B | Yes | Months from 1 April of the AY to the date of payment or assessment (part month = full month). Filing on 20 July of the AY is 4. | |
| advanceTaxPaid | No | Total advance tax paid during the FY, in INR | |
| cumulativePaid | No | Cumulative (running-total) advance tax paid by Jun 15 / Sep 15 / Dec 15 / Mar 15, in INR. Required for 234C. | |
| monthsLateFiling | No | 234A: months from the day after the due date to the date of filing (part month = full month). 0 means filed on time. | |
| taxOutstandingFor234A | No | 234A base: tax outstanding after TDS/TCS, advance tax, AND reliefs, in INR. Defaults to assessedTax minus advanceTaxPaid. | |
| selfAssessmentPayments | No | Self-assessment tax paid under s.140A before assessment: each payment stops 234B interest on that amount from its own month (s.234B(2)) | |
| taxDueOnReturnedIncome | No | 234C base: tax due on RETURNED income minus TDS/TCS/reliefs, in INR. Defaults to assessedTax when omitted. | |
| taxOutstandingForms234A | No | Deprecated misspelling of taxOutstandingFor234A; still accepted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and closed-world behavior, but the description adds substantial context: deterministic computation, Rule 119A rounding, part-month-equals-full-month treatment, and the conditional 'skipped' output. It does not contradict the annotations and goes well beyond them, though the full return shape is not described.
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 dense but front-loaded by section, with each sentence carrying statutory information. It could be more scannable with bullets, but it does not waste words and is appropriately sized for a complex tax calculation.
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 computational tool with no output schema, the description explains the legal logic well but leaves the response structure largely unspecified beyond the existence of a `skipped` list. An agent would still need to infer the shape of returned interest amounts and totals.
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%, so the baseline is 3, but the description adds interpretation not present in the schema: the 90% advance-tax threshold for 234B, the 12%/36% safe harbors for 234C, and the Rule 119A rounding convention. These details help an agent understand how the supplied parameters are actually applied.
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 the exact resource (sections 234A, 234B and 234C interest) and a specific verb (compute), and distinguishes itself from generic siblings through statutory detail. An agent can tell this is a specialized interest calculator rather than a general tax or scheduling 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 implied by the section-specific rules and the note that each section runs only when its inputs are supplied. However, it never explicitly says when to choose this over compute_tax, schedule_advance_tax, or filing_checklist, nor does it state any when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_taxCompute Indian income taxARead-only
Deterministic Indian income tax computation for a fiscal year. Handles new/old regime slabs, standard deduction, 87A rebate with marginal relief (threshold tested on TOTAL income per the statute; rebate never offsets 111A/112A tax under the new regime), employer NPS under 80CCD(2) in both regimes, house-property loss set-off (s.71(3A) cap; none under 115BAC), 111A/112A capital gains rates with the basic-exemption set-off, surcharge (with the 15% cap on gains and marginal relief), and 4% cess. All arithmetic is done in code from a versioned rule pack -- never estimated.
| Name | Required | Description | Default |
|---|---|---|---|
| fy | No | Fiscal year, e.g. '2025-26' (AY 2026-27) | 2025-26 |
| regime | Yes | Tax regime. 'new' (115BAC) is the default regime since FY 2023-24. | |
| ageBand | No | Age band: below60, senior (60-79), superSenior (80+). Affects old-regime exemption only. | below60 |
| ltcg112A | No | Long-term capital gains under section 112A in INR, BEFORE the 1.25L exemption | |
| stcg111A | No | Short-term capital gains under section 111A (listed equity, STT paid) in INR | |
| deductions | No | Old regime only: total Chapter VI-A deductions (80C, 80D, ...) in INR, EXCLUDING employer NPS (use employerNps80CCD2). Ignored under the new regime. | |
| otherIncome | No | Other normal-rate income in INR (interest, net rent, etc.) | |
| salaryIncome | No | Gross salary income in INR, before standard deduction | |
| employerNps80CCD2 | No | Employer's NPS contribution under s.80CCD(2) in INR. Allowed in BOTH regimes (the one Chapter VI-A deduction 115BAC keeps); capped at 14% of salary in the new regime, 10% (private) / 14% (government) in the old. | |
| housePropertyLoss | No | Loss under the head house property as a POSITIVE number (e.g. s.24(b) home-loan interest on a self-occupied house). Old regime: set off against other heads up to Rs 2 lakh (s.71(3A)), rest carried forward. New regime: no inter-head set-off (s.115BAC(2)), reported as carried forward. | |
| governmentEmployer | No | Central/State Government employer (raises the old-regime 80CCD(2) cap to 14%) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered; the description adds genuinely useful behavioral context beyond that — deterministic execution from a versioned rule pack and 'never estimated', which tells the agent the numbers are reproducible and not LLM-fabricated. It stops short of describing validation failures, rounding/unit behavior on output, or what happens for unsupported FYs.
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?
Front-loaded with the purpose before the parenthetical breakdown, and every clause names a distinct rule that matters. It is a dense wall of parentheticals, though, and one or two items (e.g. the cess percentage) are arguably detail an agent does not need to choose or call the tool.
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, high-complexity tool with no output schema, the description explains inputs thoroughly but says nothing about the return payload — no indication of whether it returns a breakdown (taxable income, slab tax, rebate, surcharge, cess, effective rate), a carry-forward figure, or a comparison. An agent cannot tell what it will get back or how to read it.
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%, so baseline is 3; the description earns above baseline by disclosing cross-parameter statutory interactions the schema cannot express — rebate threshold tested on TOTAL income, rebate never offsetting 111A/112A under the new regime, the 15% surcharge cap on gains, and the 115BAC carve-outs affecting deductions and housePropertyLoss. It does not map semantics per parameter name, so not a 5.
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?
Opens with a specific verb+resource and scope ('Deterministic Indian income tax computation for a fiscal year'), then enumerates the exact statutory mechanics covered (regime slabs, 87A rebate, 111A/112A, surcharge, cess). An agent can distinguish this from compute_hra, compare_regimes, and compute_interest_234 without opening the schema.
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?
Scope is richly implied by the enumeration of covered computations, but there is no explicit routing statement such as 'use compare_regimes to decide which regime, then call this'. Notably it never says whether HRA-exempt salary should already be netted out of salaryIncome before calling (a sibling compute_hra exists), nor any prerequisites/ordering against parse_form26as or parse_ais.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filing_checklistStep-by-step ITR filing checklistARead-only
Ordered, form-specific walkthrough for filing ITR-1/2/3/4 on incometax.gov.in: documents to gather, reconciliation, tax computation, portal steps schedule by schedule, and e-verification. Guidance only -- the taxpayer performs the final submit on the portal themselves.
| Name | Required | Description | Default |
|---|---|---|---|
| fy | No | Fiscal year, e.g. '2025-26' | 2025-26 |
| form | Yes | The ITR form to file (use recommend_itr_form if unsure) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, and the description reinforces that this is 'guidance only' with no automated action. The description adds context about the portal steps and e-verification, going beyond the annotations to clarify the tool's non-destructive nature.
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, well-structured sentence that front-loads the core purpose ('Ordered, form-specific walkthrough') and efficiently lists the covered areas. No extraneous information is included.
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?
Given the tool is read-only guidance with no output schema, the description provides all necessary information: what it covers (documents, reconciliation, computation, portal steps, e-verification), and that it is guidance only. The sibling tools are complementary, making this complete.
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 input schema already provides descriptions for both parameters (fy with default, form with enum and suggestion to use recommend_itr_form). Schema coverage is 100%, so the description does not need to add much. It mentions 'form-specific' which aligns with the form parameter, but does not enhance understanding 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 description clearly states the tool provides an 'ordered, form-specific walkthrough' for filing ITR-1/2/3/4 on incometax.gov.in, covering specific steps like documents, reconciliation, and e-verification. It distinguishes itself from sibling tools which focus on individual computations or deductions.
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 tool is for guidance by stating 'Guidance only -- the taxpayer performs the final submit on the portal themselves.' However, it does not explicitly list when not to use it or directly contrast with sibling tools, though the intent is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deductionsList old-regime deductionsARead-only
Return the old-regime deduction checklist with statutory caps for a fiscal year (80C, 80CCD(1B), 80D tiers, 80TTA/TTB, 24(b), HRA metro list). Useful for estimating the deductions input to compute_tax/compare_regimes.
| Name | Required | Description | Default |
|---|---|---|---|
| fy | No | Fiscal year, e.g. '2025-26' | 2025-26 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true (no side effects) and openWorldHint=false. Description adds value by specifying the checklist includes statutory caps and the exact deduction sections, going beyond the structured fields.
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 redundancy. First sentence describes output; second sentence explains utility. Every word 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 simple one-parameter tool with no output schema, the description adequately covers what the tool returns (checklist with caps) and how to use it. Minor lack of return format details, but overall 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 has 100% coverage for the single parameter 'fy', so the schema already documents it. Description does not add further parameter meaning, meeting baseline for high coverage.
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?
Description clearly states it returns an old-regime deduction checklist with statutory caps for specific sections (80C, 80CCD(1B), etc.), and distinguishes from siblings like compute_tax and compare_regimes by providing the deduction data rather than computing 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?
Description explicitly states it is useful for estimating the 'deductions' input to compute_tax/compare_regimes, providing clear usage context. Does not mention when not to use or alternative tools, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tax_yearsList supported fiscal yearsARead-only
List the fiscal years this server has rule packs for, with filing deadlines for the current assessment year.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=false. The description adds value by specifying that it lists years for which 'rule packs' exist and includes 'filing deadlines for the current assessment year', providing context beyond the annotations about the data scope and additional information returned.
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 sentence of about 15 words, with no redundancy. It is front-loaded with the action and resource, making it easy to parse quickly.
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 listing tool with no parameters, the description covers the essential purpose and additional detail (deadlines). It could mention whether the list is chronological or includes both past and future years, but overall it is sufficient given the tool's simplicity.
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, so schema coverage is trivially 100%. The description does not need to explain parameters, and it adds a hint about what the output contains (filing deadlines), which compensates for the lack of an output 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 description clearly states the verb 'list' and the resource 'fiscal years', specifying that it lists years with rule packs and filing deadlines. This distinguishes it from sibling tools which focus on regimes, computations, or parsing, making the purpose unambiguous.
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 guidance on when to use this tool versus alternatives. However, given its simplicity and distinct function from siblings, the context implies it is for discovering available fiscal years. Still, a sentence about prerequisites or follow-up actions would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_aisParse AIS (Annual Information Statement)ARead-only
Decrypt and parse the AIS JSON export from the income tax portal, entirely on-device. Provide pan + dob (DDMMYYYY) to derive the password, or pass it explicitly. Returns taxpayer info and normalized information rows (TDS entries, SFT transactions) with amounts, dates, and codes extracted by column label. The decryption scheme is reverse-engineered from the AIS utility; if it fails, use the portal's CSV export as a fallback and file an issue.
| Name | Required | Description | Default |
|---|---|---|---|
| dob | No | Date of birth as DDMMYYYY (or DD-MM-YYYY); date of incorporation for non-individuals. NOT ISO YYYY-MM-DD. | |
| pan | No | PAN (used to derive the decryption password) | |
| path | Yes | Absolute path to the downloaded AIS .json file | |
| password | No | Explicit decryption password (overrides pan+dob derivation) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: processing is on-device (consistent with openWorldHint=false), the decryption scheme is reverse-engineered and may fail, and the return payload is described. Missing are error semantics for a wrong password or malformed JSON, which matter for a tool whose own description admits fragility.
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 tight sentences, front-loaded with the action and privacy property, then credentials, then return shape, then fallback. The fallback/issue sentence is slightly operational-tangent but still earns its place as recovery guidance.
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 no output schema, the description correctly carries the return-shape burden ('taxpayer info and normalized information rows... with amounts, dates, and codes'). Combined with the fragility disclosure, an agent has enough to call it and to interpret partial failures, though failure-mode behavior remains unspecified.
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 schema already documents the overrides relationship for password. The description restates the pan+dob derivation hint but adds no format or edge-case detail (e.g., non-individual DOB handling, PAN case sensitivity) beyond what the schema provides. 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 pair and resource ('Decrypt and parse the AIS JSON export from the income tax portal') plus scope ('entirely on-device'). The document-specific framing (AIS JSON, not Form 26AS) lets an agent distinguish it from the sibling parse_form26as without opening either schema.
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?
Explains the two credential paths ('provide pan + dob to derive the password, or pass it explicitly') and gives an explicit failure path (fall back to the portal's CSV export, file an issue). It does not explicitly route between this and parse_form26as when a user has both documents, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_form26asParse Form 26AS (text export)ARead-only
Parse the caret-delimited Form 26AS TEXT export from TRACES into structured TDS entries (deductor, TAN, section, amounts, booking status) with totals, plus TCS rows (206C*) separated into tcsEntries. Reports creditableTdsDeposited (status F rows only) alongside the raw total. Download the 'Text' format from TRACES (the archive opens with your DOB as DDMMYYYY); PDF exports are not supported.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the 26AS .txt file downloaded from TRACES |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover only readOnlyHint/openWorldHint, and the description adds substantial extra context: TCS rows are split out into tcsEntries, creditableTdsDeposited counts only status F rows while the raw total is reported separately, and the DOB-password/PDF-unsupported constraints. That is exactly the kind of non-schema behavior an agent needs.
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 sentences, all load-bearing: the first defines the transformation and output shape, the second flags the creditable-vs-raw distinction, the third states how to obtain a valid input. Nothing is 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?
No output schema exists, yet the description still describes the return structure (TDS entries with deductor/TAN/section/amounts/status, totals, separate tcsEntries, creditableTdsDeposited). Combined with the single fully-described parameter, an agent has everything needed to call it 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?
Only one parameter, and the schema already documents it at 100% coverage as an absolute path to a .txt file. The description adds the qualifying constraint that it must be the TRACES Text export, not a PDF, which meaningfully narrows the accepted input 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?
States a specific verb (Parse) and a precise resource (caret-delimited Form 26AS TEXT export from TRACES) and enumerates the extracted fields, so it is immediately distinguishable from parse_ais and reconcile_documents.
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?
Gives concrete preconditions: download the 'Text' format from TRACES, the archive password is your DOB as DDMMYYYY, and PDF exports are explicitly unsupported. It does not name sibling alternatives (e.g. parse_ais) or say when another tool would be preferred, so it falls 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.
recommend_itr_formRecommend the ITR formARead-only
Recommend ITR-1/2/3/4 for an individual from income heads, residency, losses, and disqualifier flags, with rule-by-rule reasoning. Loss-continuity aware: brought-forward business/speculative losses force ITR-3 even with zero current-year business income (Schedule CFL). Checks the 44AD/44ADA turnover ceilings when presumptiveTurnover is supplied, and the AY 2026-27 two-house-property allowance. Returns the filing deadline with its statutory citation, the belated and revised deadlines, and the 234F late fee.
| Name | Required | Description | Default |
|---|---|---|---|
| fy | No | Fiscal year, e.g. '2025-26' | 2025-26 |
| tds194N | No | TDS was deducted under s.194N on cash withdrawals (rules out ITR-1) | |
| ltcg112A | No | LTCG under 112A in INR before the 1.25L exemption | |
| stcg111A | No | STCG under 111A in INR (any amount rules out ITR-1/ITR-4) | |
| residency | No | Residential status for the FY (RNOR/NRI cannot file ITR-1/ITR-4) | resident |
| agriIncome | No | Agricultural income in INR (above 5,000 rules out ITR-1/ITR-4) | |
| isDirector | No | Director in any company during the FY | |
| capitalLoss | No | Capital loss (STCL/LTCL) brought forward or to carry forward | |
| presumptive | No | Opting for presumptive taxation (44AD/44ADA/44AE) | |
| totalIncome | Yes | Estimated TOTAL income in INR, i.e. after Chapter VI-A deductions -- this is the figure the Rs 50 lakh ITR-1/ITR-4 ceiling tests. Use the gross figure only if you have no deductions. | |
| businessLoss | No | Non-speculative business loss (incl. F&O) brought forward or arising this year | |
| esopDeferral | No | Tax deferred on eligible-startup ESOPs (s80-IAC) | |
| houseProperties | No | Number of house properties with income or loss (ITR-1/ITR-4 admit up to two from AY 2026-27) | |
| isPartnerInFirm | No | Partner in a partnership firm | |
| speculativeLoss | No | Speculative (intraday equity) loss brought forward or arising this year | |
| hasBusinessIncome | No | Any business or professional income this year, incl. F&O trading and freelancing | |
| housePropertyLoss | No | House property loss to carry forward | |
| presumptiveScheme | No | Which presumptive section (drives the turnover ceiling check; defaults to 44AD) | |
| holdsUnlistedShares | No | Held unlisted equity shares during the FY | |
| presumptiveTurnover | No | 44AD turnover or 44ADA gross receipts in INR. Above Rs 2 crore (3 crore with cash receipts within 5%) / Rs 50 lakh (75 lakh) the scheme lapses and ITR-3 with audit applies. Omit to skip the check. | |
| hasOtherCapitalGains | No | Capital gains outside 111A/112A: property, debt MF, unlisted or foreign shares | |
| cashReceiptsWithin5Pct | No | Cash receipts are at most 5% of turnover/receipts (lifts the 44AD/44ADA ceiling to 3 crore / 75 lakh) | |
| hasForeignAssetsOrIncome | No | Foreign assets/income incl. vested RSUs or ESPP of a foreign parent (Schedule FA) | |
| hasLotteryOrGamingIncome | No | Winnings from lottery, online games, or racehorses | |
| hasNonPresumptiveBusiness | No | Also has business/professional income OUTSIDE the presumptive scheme (ITR-4 cannot carry both) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read (readOnlyHint=true, openWorldHint=false), and the description adds substantive behavior beyond them: it explains the Schedule CFL loss-continuity rule, the 44AD/44ADA turnover ceilings when presumptiveTurnover is supplied, the AY 2026-27 two-house allowance, and that it returns reasoning plus statutory deadlines and the 234F fee. With no output schema, this is exactly the disclosure an agent needs to trust the result.
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?
Dense but front-loaded: the recommendation target comes first, then the disambiguating rules, then the return payload. Four long sentences are justified by 25 parameters, though the deadline/fee sentence could be trimmed since it describes output rather than invocation.
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 25-parameter tool with no output schema, the description covers the decision rules and the shape of the response well. Minor gaps remain: the fy parameter's default and AY mapping are left entirely to the schema, and there is no note on what happens with conflicting flags.
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%, so the baseline is 3. The description earns above that by explaining cross-parameter semantics the schema only hints at: brought-forward business/speculative losses forcing ITR-3 even at zero current-year income, presumptiveTurnover triggering a ceiling test, and the interaction between houseProperties and the two-property allowance.
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 ('Recommend ITR-1/2/3/4') plus the exact input domain (income heads, residency, losses, disqualifier flags). No sibling tool does form selection — compute_tax, compare_regimes, and filing_checklist are clearly different jobs — so the agent can route without ambiguity.
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?
Scope is clearly bounded to 'an individual' and it names the triggering conditions (loss continuity, presumptive turnover, house-property allowance) that change the answer. It stops short of naming when to prefer a sibling (e.g. use compute_tax after choosing a form) or stating explicit exclusions such as non-individual filers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reconcile_documentsReconcile Form 16 vs AIS vs 26ASARead-only
Cross-document mismatch report -- the checks that pre-empt 143(1)(a) intimations and 139(9) defect notices: TDS claimed vs 26AS deposited (the ledger of record), missing-employer detection, AIS interest/dividend vs declared, Form 16 vs 26AS per-TAN totals, declared salary below the Form 16 total, and 26AS rows missing the gross amount. Also groups 26AS TDS by income head so each credit can be placed in the right schedule. Pass whichever documents you have; checks needing missing inputs are reported as skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| fy | No | Fiscal year, e.g. '2025-26' (AY 2026-27) | 2025-26 |
| ais | No | AIS aggregates (from parse_ais rows) | |
| form16 | No | Per-employer Form 16 Part A figures | |
| return | No | Figures from the draft return | |
| form26asTds | No | TDS entries from parse_form26as (tdsEntries, not tcsEntries) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds real value beyond that by disclosing that missing inputs yield skipped checks rather than errors, and that output includes per-income-head grouping of 26AS TDS. It stops short of describing the result shape or how mismatches are counted/severity-ranked.
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?
Front-loaded with the purpose and the regulatory rationale (143(1)(a)/139(9)), then a compact enumeration of checks. It is dense and long-ish but nearly every clause names a distinct check or behavior, with little 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 read-only, no-output-schema, all-optional-params tool, the description covers purpose, all checks, and degenerate-input behavior. The main gap is that the return value's structure (fields of the mismatch report) is only implied by naming, not stated.
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%, so the schema already documents all five parameters including the nested AIS/Form 16/26AS/return shapes. The description adds only the semantic framing of 26AS as "the ledger of record" and notes which document each check consumes; the fy parameter and the specific field mappings are left entirely to 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-like operation (cross-document mismatch report) and enumerates the exact checks performed: TDS claimed vs 26AS deposited, missing-employer detection, AIS vs declared, Form 16 vs 26AS per-TAN, and 26AS rows missing gross. This is clearly distinguishable from siblings like parse_form26as or parse_ais, which produce inputs rather than reconcile them.
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?
"Pass whichever documents you have; checks needing missing inputs are reported as skipped" gives clear operating context and explains partial-input behavior. It does not explicitly name the sibling parse tools as the source of the inputs or state when not to use it, so it stops 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.
schedule_advance_taxPlan advance tax installmentsARead-only
Build the advance tax installment plan (Jun 15 / Sep 15 / Dec 15 / Mar 15 at 15/45/75/100%) for an estimated tax liability net of TDS. Reports per-installment amounts and shortfalls against what has been paid so far.
| Name | Required | Description | Default |
|---|---|---|---|
| fy | No | Fiscal year, e.g. '2025-26' | 2025-26 |
| paidSoFar | No | Advance tax already paid per installment, in order | |
| tdsExpected | No | TDS/TCS expected to be deducted during the year in INR | |
| estimatedTax | Yes | Estimated total tax liability for the FY in INR (use compute_tax first) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is known. The description adds useful behavioral context: it discloses the output (per-installment amounts and shortfalls against paid-so-far) and the calculation basis (net of TDS).
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 two compact sentences with no waste. The core function and schedule are front-loaded, followed by the reported output.
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 read-only, four-parameter tool with full schema coverage, the description is nearly complete: it explains the calculation basis, installment schedule, and return content. Minor gaps remain around edge cases such as omitted paidSoFar or FY-specific behavior, but nothing critical 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 coverage is 100%, so the schema already documents all four parameters, including paidSoFar ordering and fiscal-year format. The description adds only the net-of-TDS framing and installment percentages, so the baseline of 3 is appropriate.
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: 'Build the advance tax installment plan'. It also specifies the schedule (Jun/Sep/Dec/Mar at 15/45/75/100%) and the net-of-TDS basis, making it clearly distinguishable from a generic tax computation 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?
It gives implied usage by saying the plan is built 'for an estimated tax liability net of TDS', but it does not explicitly say when to use this instead of siblings such as compute_tax or what prerequisites are required. The compute_tax-first guidance appears only inside the schema, not the description.
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.
8 tool updates
v0.5.3- Added
compare_regimes - Added
compute_hra - Changed
compute_interest_23417 fields changed- changed
Input schema / properties / advanceTaxPaid / descriptionPrevious value: -"Total advance tax paid during the FY"New value: +"Total advance tax paid during the FY, in INR" - added
Input schema / properties / advanceTaxPaid / maximumAdded value: +1000000000000 - changed
Input schema / properties / assessedTax / descriptionPrevious value: -"Tax on total income minus TDS/TCS and reliefs, in INR"New value: +"234B base: tax on total income minus TDS/TCS and reliefs, in INR (advance tax is NOT deducted here)" - added
Input schema / properties / assessedTax / maximumAdded value: +1000000000000 - changed
Input schema / properties / cumulativePaid / descriptionPrevious value: -"Cumulative advance tax paid by Jun 15 / Sep 15 / Dec 15 / Mar 15, for 234C"New value: +"Cumulative (running-total) advance tax paid by Jun 15 / Sep 15 / Dec 15 / Mar 15, in INR. Required for 234C." - added
Input schema / properties / cumulativePaid / items / maximumAdded value: +1000000000000 - added
Input schema / properties / fy / descriptionAdded value: +"Fiscal year, e.g. '2025-26' (AY 2026-27)" - removed
Input schema / properties / monthsFor234B / defaultRemoved value: -4 - changed
Input schema / properties / monthsFor234B / descriptionPrevious value: -"Months from 1 April of the AY to payment/assessment (part month = full month)"New value: +"Months from 1 April of the AY to the date of payment or assessment (part month = full month). Filing on 20 July of the AY is 4." - changed
Input schema / properties / monthsFor234B / maximumPrevious value: -24New value: +36 - added
Input schema / properties / monthsLateFilingAdded value: +{ + "default": 0, + "description": "234A: months from the day after the due date to the date of filing (part month = full month). 0 means filed on time.", + "maximum": 36, + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / presumptive / descriptionPrevious value: -"44AD/44ADA: single 100% installment by Mar 15"New value: +"44AD/44ADA presumptive: a single 100% installment by Mar 15 instead of four" - added
Input schema / properties / selfAssessmentPaymentsAdded value: +{ + "description": "Self-assessment tax paid under s.140A before assessment: each payment stops 234B interest on that amount from its own month (s.234B(2))", + "items": { + "properties": { + "amount": { + "description": "Amount paid, in INR", + "maximum": 1000000000000, + "minimum": 0, + "type": "number" + }, + "monthsFromApril": { + "description": "Months from 1 April of the AY to this payment (part month = full month)", + "maximum": 36, + "minimum": 1, + "type": "integer" + } + }, + "required": [ + "monthsFromApril", + "amount" + ], + "type": "object" + }, + "maxItems": 12, + "type": "array" +} - added
Input schema / properties / taxDueOnReturnedIncomeAdded value: +{ + "description": "234C base: tax due on RETURNED income minus TDS/TCS/reliefs, in INR. Defaults to assessedTax when omitted.", + "maximum": 1000000000000, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / taxOutstandingFor234AAdded value: +{ + "description": "234A base: tax outstanding after TDS/TCS, advance tax, AND reliefs, in INR. Defaults to assessedTax minus advanceTaxPaid.", + "maximum": 1000000000000, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / taxOutstandingForms234AAdded value: +{ + "description": "Deprecated misspelling of taxOutstandingFor234A; still accepted.", + "maximum": 1000000000000, + "minimum": 0, + "type": "number" +} - changed
Input schema / requiredPrevious value: -[ - "assessedTax" -]New value: +[ + "assessedTax", + "monthsFor234B" +]
- Changed
compute_tax9 fields changed- changed
Input schema / properties / deductions / descriptionPrevious value: -"Old regime only: total Chapter VI-A deductions (80C, 80D, ...) in INR. Ignored under the new regime."New value: +"Old regime only: total Chapter VI-A deductions (80C, 80D, ...) in INR, EXCLUDING employer NPS (use employerNps80CCD2). Ignored under the new regime." - added
Input schema / properties / deductions / maximumAdded value: +1000000000000 - added
Input schema / properties / employerNps80CCD2Added value: +{ + "default": 0, + "description": "Employer's NPS contribution under s.80CCD(2) in INR. Allowed in BOTH regimes (the one Chapter VI-A deduction 115BAC keeps); capped at 14% of salary in the new regime, 10% (private) / 14% (government) in the old.", + "maximum": 1000000000000, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / governmentEmployerAdded value: +{ + "default": false, + "description": "Central/State Government employer (raises the old-regime 80CCD(2) cap to 14%)", + "type": "boolean" +} - added
Input schema / properties / housePropertyLossAdded value: +{ + "default": 0, + "description": "Loss under the head house property as a POSITIVE number (e.g. s.24(b) home-loan interest on a self-occupied house). Old regime: set off against other heads up to Rs 2 lakh (s.71(3A)), rest carried forward. New regime: no inter-head set-off (s.115BAC(2)), reported as carried forward.", + "maximum": 1000000000000, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / ltcg112A / maximumAdded value: +1000000000000 - added
Input schema / properties / otherIncome / maximumAdded value: +1000000000000 - added
Input schema / properties / salaryIncome / maximumAdded value: +1000000000000 - added
Input schema / properties / stcg111A / maximumAdded value: +1000000000000
- Added
parse_ais - Added
recommend_itr_form - Added
reconcile_documents - Changed
schedule_advance_tax3 fields changed- added
Input schema / properties / estimatedTax / maximumAdded value: +1000000000000 - added
Input schema / properties / paidSoFar / items / maximumAdded value: +1000000000000 - added
Input schema / properties / tdsExpected / maximumAdded value: +1000000000000
5 tool updates
v0.3.0- Removed
compare_regimes - Removed
compute_hra - Added
filing_checklist - Removed
parse_ais - Removed
reconcile_documents
10 tool updates
v0.2.0- First observed
compare_regimes - First observed
compute_hra - First observed
compute_interest_234 - First observed
compute_tax - First observed
list_deductions - First observed
list_tax_years - First observed
parse_ais - First observed
parse_form26as - First observed
reconcile_documents - First observed
schedule_advance_tax
TDQS
Scored across 12 tools
Each tool targets a distinct operation in a clear tax-filing pipeline: computation (compute_tax, compare_regimes, compute_hra, compute_interest_234), form guidance (recommend_itr_form, filing_checklist), reference data (list_tax_years, list_deductions), document ingestion (parse_form26as, parse_ais), and cross-checking (reconcile_documents). The closest pairs (compute_tax vs compare_regimes, list_deductions vs compute_hra) are explicitly differentiated in their descriptions (both-regime comparison; reference caps vs actual exemption calculation). No two tools appear to do the same job.
Names are consistently snake_case and almost all follow a verb_noun pattern (compute_tax, list_deductions, parse_ais, recommend_itr_form, reconcile_documents). The main deviation is filing_checklist, which is a bare noun phrase with no verb, and parse_form26as embeds a format token, but both remain readable and predictable.
Twelve tools is well within the sweet spot for a domain this broad, and each one maps to a real step a filer needs (compute, compare, recommend form, checklist, deductions, advance tax, 26AS/AIS parsing, interest, HRA, reconciliation). There is no filler or redundant tool.
The surface covers the full individual-filer lifecycle from income computation through document reconciliation, form selection, and deadlines. Minor gaps: there is no Form 16 parser (reconcile_documents checks Form 16 vs 26AS per-TAN totals but must receive Form 16 data as input), and presumptive 44AD/44ADA income computation is only checked for turnover ceilings in recommend_itr_form rather than computed.
Maintenance
Related MCP Connectors
TaxSort — Tollbooth-monetized MCP server for personal tax transaction classification
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
Deterministic cross-border tax engine: PE, GAAR, Indian TP, rule-level lookup. Compiled law, no LLM.
MCP server for Quaderno — tax-rate calculation, invoices, contacts, products, receipts & expenses.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA Python MCP server that calculates French income tax using the official DGFiP source code compiled locally. It enables accurate tax simulations for 2023 income based on real French tax forms without network calls.MIT
- AlicenseAqualityAmaintenanceAn offline-first MCP server for Indian financial, tax, and government APIs, providing tools for identity validation (PAN, Aadhaar, GSTIN), tax calculations (Income Tax, TDS, GST), and master data lookups (IFSC, Pincode, HSN/SAC) with zero authentication required.74149 PyPI66MIT
- AlicenseNot gradedqualityCmaintenanceA sovereign, MIT-licensed MCP server for US tax operations, enabling offline-capable and self-hostable tax workflow management.MIT
- AlicenseAqualityDmaintenanceTurns any MCP host into a finance & tax copilot for Indian taxpayers, using live keyless data and deterministic advisory.16MIT