mcp-server-taxcode 1.3.0__tar.gz → 1.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/.github/dependabot.yml +5 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/AGENTS.md +3 -3
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/CONTRIBUTING.md +2 -1
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/Dockerfile +2 -2
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/PKG-INFO +5 -5
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/fastmcp.json +6 -5
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/pyproject.toml +4 -4
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/gen_build_backend.py +92 -5
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/catalog.py +450 -44
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/federal/standard_deduction.json +24 -8
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/al.json +351 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/ar.json +355 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/az.json +246 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/ca.json +689 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/can.json +223 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/co.json +10 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/ct.json +14 -1
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/dc.json +13 -1
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/de.json +16 -1
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/ga.json +553 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/hi.json +69 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/ia.json +382 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/id.json +20 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/il.json +26 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/in.json +16 -1
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/ks.json +14 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/ky.json +305 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/la.json +201 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/ma.json +30 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/md.json +387 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/me.json +104 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/mi.json +239 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/mn.json +230 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/mo.json +200 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/ms.json +372 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/mt.json +137 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/nc.json +50 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/nd.json +14 -1
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/ne.json +371 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/nh.json +160 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/nj.json +29 -1
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/nm.json +35 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/ny.json +70 -1
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/oh.json +237 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/ok.json +10 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/or.json +139 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/ri.json +21 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/sc.json +152 -0
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/or.json → mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/sd.json +7 -7
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/us.json +24 -8
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/ut.json +10 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/va.json +13 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/vt.json +443 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/wa.json +52 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/wi.json +205 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/manifest/wv.json +108 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/wy.json +3 -4
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/al.json +108 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/ar.json +284 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/az.json +78 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/ca.json +635 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/co.json +6 -1
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/ct.json +1976 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/dc.json +14 -1
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/de.json +17 -1
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/ga.json +124 -24
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/hi.json +616 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/ia.json +359 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/id.json +28 -2
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/il.json +41 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/in.json +10 -2
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/ks.json +106 -37
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/ky.json +106 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/la.json +143 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/ma.json +56 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/md.json +466 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/me.json +151 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/mi.json +73 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/mn.json +327 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/mo.json +372 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/ms.json +572 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/mt.json +167 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/nc.json +26 -1
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/nd.json +21 -3
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/ne.json +372 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/nh.json +32 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/nj.json +578 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/nm.json +118 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/ny.json +1071 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/oh.json +334 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/ok.json +24 -3
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/or.json +182 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/ri.json +45 -7
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/sc.json +135 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/ut.json +76 -6
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/va.json +18 -2
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/vt.json +524 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/wa.json +3 -0
- mcp_server_taxcode-1.4.0/src/taxcode_mcp/data/rates/wi.json +160 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/wv.json +55 -3
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/tools/compliance.py +989 -100
- mcp_server_taxcode-1.4.0/tests/fixtures/compliance_golden/compliance_evaluate_state_residency.jsonl.gz +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_al_md_ca_data_fixes.py +24 -3
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_batch.py +4 -3
- mcp_server_taxcode-1.4.0/tests/test_build_backend_lock.py +325 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_catalog.py +314 -11
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_compliance_golden.py +2 -1
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_dependents_spouse_inputs.py +12 -3
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_dockerfile.py +1 -1
- mcp_server_taxcode-1.4.0/tests/test_filing_status.py +212 -0
- mcp_server_taxcode-1.4.0/tests/test_hoh_mfs.py +255 -0
- mcp_server_taxcode-1.4.0/tests/test_mfs_spouse_la_credit_sc.py +647 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_prior_years_pin.py +24 -2
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_rate_prose.py +15 -10
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_rate_tables.py +506 -41
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_server.py +43 -17
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/uv.lock +38 -37
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/al.json +0 -98
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/ar.json +0 -62
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/az.json +0 -46
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/ca.json +0 -321
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/ga.json +0 -302
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/ia.json +0 -45
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/ky.json +0 -108
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/la.json +0 -60
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/md.json +0 -101
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/me.json +0 -33
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/mi.json +0 -33
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/mn.json +0 -33
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/mo.json +0 -33
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/ms.json +0 -175
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/mt.json +0 -33
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/ne.json +0 -139
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/nh.json +0 -57
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/oh.json +0 -131
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/sc.json +0 -48
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/sd.json +0 -33
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/vt.json +0 -33
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/wi.json +0 -69
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/manifest/wv.json +0 -46
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/al.json +0 -54
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/ar.json +0 -107
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/az.json +0 -10
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/ca.json +0 -188
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/ct.json +0 -742
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/hi.json +0 -223
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/ia.json +0 -46
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/il.json +0 -13
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/ky.json +0 -27
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/la.json +0 -50
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/ma.json +0 -29
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/md.json +0 -232
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/me.json +0 -44
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/mi.json +0 -15
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/mn.json +0 -52
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/mo.json +0 -84
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/ms.json +0 -177
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/mt.json +0 -36
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/ne.json +0 -214
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/nh.json +0 -17
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/nj.json +0 -78
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/ny.json +0 -90
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/oh.json +0 -172
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/or.json +0 -53
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/sc.json +0 -67
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/vt.json +0 -52
- mcp_server_taxcode-1.3.0/src/taxcode_mcp/data/rates/wi.json +0 -92
- mcp_server_taxcode-1.3.0/tests/fixtures/compliance_golden/compliance_evaluate_state_residency.jsonl.gz +0 -0
- mcp_server_taxcode-1.3.0/tests/test_build_backend_lock.py +0 -145
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/.github/CODEOWNERS +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/.github/workflows/ci.yml +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/.github/workflows/dependabot-automerge.yml +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/.github/workflows/release.yml +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/.gitignore +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/CHANGELOG.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/CODE_OF_CONDUCT.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/LICENSE +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/README.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/SECURITY.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/conformance-baseline.yml +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docker/build-backend.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docker/pip-bootstrap.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docker/uv-bootstrap.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ak/alaska stat._43_05_080.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ak/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/al/ala. code_40_18_2.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/al/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ar/a.c.a._26_51_201.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ar/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/az/a.r.s._43_1011.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/az/a.r.s._43_104.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/az/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/caccr_17014.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17014.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17015.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17016.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17041.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17041_i.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17043.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17043_2024.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17052_10.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17054.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17062.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17071.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17951.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17952.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_17952_5.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_18001.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_18002.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_18662.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ca/rtc_19900.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_114.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_115.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_117.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_117_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_117_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_117_2023.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_118.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_118_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_118_2020.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_118_2023.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_128_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_153.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_2.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_212.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_250.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/ita_38.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/itr_100.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/itr_102.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/itr_103.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/itr_105.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/itr_202.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/itr_2600.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/itr_2601.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/itr_805.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/can/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/co/c.r.s._39_22_103.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/co/c.r.s._39_22_104.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/co/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ct/c.g.s._12_700.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ct/c.g.s._12_701.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ct/c.g.s._12_711.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ct/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/dc/d.c. code_47_1806_03.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/dc/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/de/del. code_1102.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/de/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/fl/flconst_art__vii_sec__5.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/fl/flstat_196_031.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/fl/flstat_222_17.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/fl/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ga/gareg_560_7_3__01.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ga/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ga/ocga_48_7_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ga/ocga_48_7_20.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ga/ocga_48_7_20_2024.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ga/ocga_48_7_20_2025.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ga/ocga_48_7_27.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ga/ocga_48_7_30.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/hi/hrs_235_51.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/hi/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ia/iowa code_422_5.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ia/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/id/idaho code_63_3024.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/id/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_1501_a_14.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_1501_a_16.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_1501_a_20.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_201.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_201_p.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_202.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_203_a.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_204.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_208.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_301.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_302.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_303.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_304_a.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_305.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_601_b_3.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/ilcs_5_701.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/il/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/in/ind. code_6_3_2_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/in/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ks/k.s.a._79_32,110.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ks/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ky/krs_141_020.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ky/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/la/la. r.s._47_32.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/la/la. r.s._47_32_2022.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/la/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/llms.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/maconst_art__xliv.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_1_f.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_2.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_3_b_a_9.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_3_b_a_9_2022.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_3_b_b.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_4.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_4_a.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_5a.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_6_a.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_6_h.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_6_k.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62_6_x.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_62b_2.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ma/mgl_63d_2.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/md/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/md/md. code_10_101.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/md/md. code_10_105.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/md/md. code_10_106.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/me/36 m.r.s._5111.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/me/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/mi/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/mi/mcl_206_51.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/mn/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/mn/minn. stat._290_06.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/mo/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/mo/rsmo_143_011.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ms/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ms/miss. code_27_7_5.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/mt/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/mt/mca_15_30_2103.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nc/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nc/n.c.g.s._105_153_3.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nc/n.c.g.s._105_153_7.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nd/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nd/n.d.c.c._57_38_30_3.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ne/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ne/neb. rev. stat._77_2715_03.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nh/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nh/rsa_77_1_2024.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njac_18_35_5_2.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_12_3.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_12_5.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_1_2.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_1_2_m/342/200/223_n.md" +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_2_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_3_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_3a_17.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_4_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_4_1_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_5_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_5_2.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_5_8.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_5_8_2022.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_7_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nj/njsa_54a_9_17_e.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nm/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nm/nmsa_7_2_7.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nv/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/nv/nev. const._art__10,_/302/247_1.md" +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nycrr_105_20.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nycrr_132_18.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_601.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_601_d.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_605.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_605_b_1_a.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_611.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_612.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_614.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_615.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_616.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_620.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_631.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_632.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_638.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_639.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_671.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ny/nytax_861.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/oh/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/oh/r.c._5747_02.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/oh/r.c._5747_24.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ok/68 o.s._2355.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ok/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/or/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/or/ors_316_037.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pa/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pa/p.s._7301.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pa/p.s._7302.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pa/pa. code_109_8.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/cri_1010_01.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/cri_1031_01.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/cri_1031_02.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/cri_1031_02_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/cri_1062_01.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/cri_1062_01_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/cri_1062_03.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/cri_1062_03_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley22_3_2012.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_1020_02.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_1020_02_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_1020_02_2020.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_2021_01.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_2022_01.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_2022_01_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_2022_02.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_2022_02_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_2031_01.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_2032_01.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_6020_03.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_6020_03_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_6020_10.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_6020_10_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_6020_10_2020.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_6020_10_2022.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_6020_10_2024.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_6020_10_2025.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_6060_05.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/ley60_6070_55.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/pr/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ri/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ri/r.i.g.l._44_30_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/sc/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/sc/s.c. code_12_6_510.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/sd/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/sd/s.d. const._art__xi,_/302/247_2.md" +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/tn/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/tn/tenn. const._art__ii,_/302/247_28.md" +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/tx/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/tx/txconst_art__viii_sec__24_a.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/tx/txtax_171_001.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/cfr_1_937_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/cfr_1_937_2.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/cfr_1_937_3.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/cfr_1_937_3_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_1411.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_1_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_1_2020.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_24.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_24_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_24_2021.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_32.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_32_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_6012.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_61.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_62.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_62_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_62_2020.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_62_2021.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_63.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_63_2019.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_63_2021.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_6688.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_865.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_911.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_933.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_937.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/irc_957.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/us/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ut/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/ut/utah code_59_10_104.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/va/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/va/va. code_58_1_302.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/va/va. code_58_1_320.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/va/va. code_58_1_342.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/vt/32 v.s.a._5822.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/vt/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/wa/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/wa/rcw_82_87_020.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/wa/rcw_82_87_040.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/wa/waconst_art__vii_sec__1.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/wi/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/wi/wis. stat._71_06.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/wv/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/wv/w. va. code_11_21_4e.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/wy/llms-full.txt +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/docs/wy/wyo. const._art__15,_/302/247_18.md" +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/build_catalog.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/build_corrected_pins.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/build_prior_years_pins.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/check_conformance.sh +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/check_openapi_drift.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/check_tool_contract.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/check_version.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/extract_canada_lims.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/ingest_statutes.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/release_notes.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/scripts/setup_repo_governance.sh +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/server.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/skills/taxcode-mcp/SKILL.md +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/__init__.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/auth.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/client.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/config.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/jurisdictions.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/ak.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/fl.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/nv.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/pa.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/pr.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/tn.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/manifest/tx.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/publications/can.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/publications/ga.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/publications/md.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/publications/oh.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/publications/pa.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/publications/pr.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/publications/us.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/publications/va.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/ak.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/can.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/nv.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/pa.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/sd.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/tn.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/rates/wy.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ak.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/al.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ar.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/az.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ca.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/can.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/co.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ct.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/dc.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/de.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/fl.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ga.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/hi.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ia.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/id.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/il.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/in.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ks.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ky.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/la.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ma.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/md.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/me.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/mi.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/mn.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/mo.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ms.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/mt.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/nc.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/nd.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ne.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/nh.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/nj.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/nm.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/nv.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ny.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/oh.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ok.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/or.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/pa.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/pr.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ri.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/sc.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/sd.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/tn.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/tx.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/us.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/ut.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/va.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/vt.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/wa.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/wi.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/wv.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/data/statutes/wy.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/db.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/disclaimers.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/errors.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/middleware.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/paging.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/profiles.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/server.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/ssrf.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/tools/__init__.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/tools/canada.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/tools/statutes.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/src/taxcode_mcp/tools/system.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/conftest.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fake_network.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/compliance_golden/compliance_calculate_built_in_gain_sourcing.jsonl.gz +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/compliance_golden/compliance_cross_border_tax_analysis.jsonl.gz +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/compliance_golden/compliance_evaluate_georgia_residency.jsonl.gz +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/compliance_golden/compliance_evaluate_pr_bona_fide_residency.jsonl.gz +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/compliance_golden/constants.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/prior_years/corrected_answers.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/prior_years/f4f0d5d_pins.json.gz +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/usc26_sample.xml +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/wave1/existing_rows.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/wave1/searches.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/fixtures/wave1/sources.json +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/golden_compliance.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_canada_federal.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_check_version.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_client.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_code_mode_extra.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_config.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_conftest_auth_env.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_ct_md_edges.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_db.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_disclaimers.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_drift.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_e2e_live.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_errors.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_fastmcp_json_floor.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_federal.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_http_auth.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_ingest.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_layered.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_network_guard.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_notfound_pointer.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_otel_spans.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_paging.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_prior_years.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_prior_years_pr.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_profiles.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_protocol.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_release_notes.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_search_normalize.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_search_snippets.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_ssrf.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_statute_section_slash.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_undated_current_rows.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_version.py +0 -0
- {mcp_server_taxcode-1.3.0 → mcp_server_taxcode-1.4.0}/tests/test_wave1_state_statutes.py +0 -0
|
@@ -2,6 +2,11 @@ version: 2
|
|
|
2
2
|
updates:
|
|
3
3
|
- package-ecosystem: "uv"
|
|
4
4
|
directory: "/"
|
|
5
|
+
# Generated from uv.lock by scripts/gen_build_backend.py. The uv scan treats
|
|
6
|
+
# requirements-shaped *.txt files as pip manifests, so ignore this one.
|
|
7
|
+
# Lock bumps still land in uv.lock; regenerate the file with the script.
|
|
8
|
+
exclude-paths:
|
|
9
|
+
- "docker/build-backend.txt"
|
|
5
10
|
schedule:
|
|
6
11
|
interval: "weekly"
|
|
7
12
|
day: "sunday"
|
|
@@ -139,10 +139,10 @@ When translating an API documentation page, `llm.txt`, or OpenAPI specification
|
|
|
139
139
|
- Tool execution errors reach the client as `tools/call` results with `isError: true` and the redacted message (`tool_error`, raised `from None` after the `except` block ends, so neither `__cause__` nor `__context__` holds the original exception); `ParentAuditMiddleware` logs the same redacted message. A batch tool's per-item errors and its `batch_failed` error (`tool_failure`, raised `from None` outside any `except` block) carry redacted messages too.
|
|
140
140
|
- An unknown tool stays FastMCP 4.0.11's tool result (`isError: true`). The spec's JSON-RPC `-32602` (`Unknown tool: invalid_tool_name`) is a known gap; do not change the wire format. See `COOKBOOK.md` Recipe 12.
|
|
141
141
|
3. **Multi-Stage Non-Root Containers**:
|
|
142
|
-
- The `Dockerfile` must use a multi-stage build (`python:3.14-slim AS builder` $\rightarrow$ runtime, pulled from Docker Hub and pinned by digest) creating and executing under non-root `USER mcp` with virtual environment `/opt/venv`. The runtime stage carries `LABEL io.modelcontextprotocol.server.name` equal to the `server.json` `name` (MCP Registry OCI ownership check), and the default command stays stdio.
|
|
142
|
+
- The `Dockerfile` must use a multi-stage build (`python:3.14-slim-trixie AS builder` $\rightarrow$ runtime, pulled from Docker Hub and pinned by digest (both stages share the same pin); glibc is keyed by the Debian release in the tag, not the digest) creating and executing under non-root `USER mcp` with virtual environment `/opt/venv`. The runtime stage carries `LABEL io.modelcontextprotocol.server.name` equal to the `server.json` `name` (MCP Registry OCI ownership check), and the default command stays stdio.
|
|
143
143
|
- Trust stores follow FastMCP's [certificate authority incident notice (October 2026)](https://github.com/PrefectHQ/fastmcp/blob/main/SECURITY.md#certificate-authority-incident-october-2026): both stages upgrade the OS `ca-certificates` package and fail the build below the patched Debian version (`ARG CA_CERTIFICATES_FLOOR`, declared once), the builder does so before any pip runs because pip trusts the OS store as well as its bundled certifi, the builder bootstraps pip 26.2.2, and `certifi>=2026.10.19` is a direct dependency. `tests/test_dockerfile.py` and CI's `docker-build` job enforce the order and the floor.
|
|
144
144
|
- The pip bootstrap is hash-pinned in `docker/pip-bootstrap.txt` and installed with `--require-hashes`, so it does not depend on the TLS trust of the base image's older pip and certifi; whoever raises the pip floor updates that pin and its sha256 from PyPI (`https://pypi.org/pypi/pip/<version>/json`, the `py3-none-any` wheel's `digests.sha256`), because Dependabot does not track the file.
|
|
145
|
-
- Runtime dependencies install from `uv.lock`, so the image runs the versions CI tests: the builder installs uv from `docker/uv-bootstrap.txt` (hash-pinned, `--require-hashes`, into `/tmp/uv` outside the venv, so the runtime image has no uv), runs `uv export --locked --no-dev --no-emit-project --format requirements.txt` (base dependencies only, a hash for every package, and the build fails if `uv.lock` is stale), installs that file with pip in hash-checking mode, then installs the project build backend from `docker/build-backend.txt` (hash-pinned hatchling, uv-dynamic-versioning, and every transitive build dependency, `--require-hashes --only-binary=:all:`, into `/tmp/build-backend` outside the venv, so the runtime image has no build backend) and the project with `PYTHONPATH=/tmp/build-backend pip install --no-deps --no-build-isolation .`. Never install the project with its dependencies (`pip install .`), which resolves them fresh at build time. Dependabot's weekly `uv` updates bump the uv pin and rewrite its sha256 values, writing one for every wheel and the sdist published for that version. Whoever changes `[tool.uv] required-version` keeps the uv pin within it, and a hand bump takes a sha256 for every wheel and the sdist from `https://pypi.org/pypi/uv/<version>/json` (`digests.sha256`); the manylinux x86_64 and aarch64 wheels are the ones the image build installs. The build-backend pins are the `build-backend` dependency group in `pyproject.toml` (exact versions inside the `[build-system]` ranges, not installed by default), so `uv.lock` carries their closure with hashes. After `uv lock`, `uv run python scripts/gen_build_backend.py` rewrites `docker/build-backend.txt` from `uv.lock` (`--check` reports drift instead), and `tests/test_build_backend_lock.py` fails if the file, the lock or the ranges disagree.
|
|
145
|
+
- Runtime dependencies install from `uv.lock`, so the image runs the versions CI tests: the builder installs uv from `docker/uv-bootstrap.txt` (hash-pinned, `--require-hashes`, into `/tmp/uv` outside the venv, so the runtime image has no uv), runs `uv export --locked --no-dev --no-emit-project --format requirements.txt` (base dependencies only, a hash for every package, and the build fails if `uv.lock` is stale), installs that file with pip in hash-checking mode, then installs the project build backend from `docker/build-backend.txt` (hash-pinned hatchling, uv-dynamic-versioning, and every transitive build dependency, `--require-hashes --only-binary=:all:`, into `/tmp/build-backend` outside the venv, so the runtime image has no build backend) and the project with `PYTHONPATH=/tmp/build-backend pip install --no-deps --no-build-isolation .`. Never install the project with its dependencies (`pip install .`), which resolves them fresh at build time. Dependabot's weekly `uv` updates bump the uv pin and rewrite its sha256 values, writing one for every wheel and the sdist published for that version. Whoever changes `[tool.uv] required-version` keeps the uv pin within it, and a hand bump takes a sha256 for every wheel and the sdist from `https://pypi.org/pypi/uv/<version>/json` (`digests.sha256`); the manylinux x86_64 and aarch64 wheels are the ones the image build installs. The build-backend pins are the `build-backend` dependency group in `pyproject.toml` (exact versions inside the `[build-system]` ranges, not installed by default), so `uv.lock` carries their closure with hashes. After `uv lock`, `uv run python scripts/gen_build_backend.py` rewrites `docker/build-backend.txt` from `uv.lock` (`--check` reports drift instead), and `tests/test_build_backend_lock.py` fails if the file, the lock or the ranges disagree. The file is generated from `uv.lock` by `scripts/gen_build_backend.py`, must never be edited by hand, and the `uv` Dependabot entry excludes it via `exclude-paths`. `tests/test_dockerfile.py` enforces the install steps and the pins.
|
|
146
146
|
- Lowering `CA_CERTIFICATES_FLOOR` with `--build-arg` is unsupported; the build-arg exists only so CI can raise it for the negative floor check, and CI and the release workflow never pass it otherwise.
|
|
147
147
|
4. **Registry Metadata Constraint**:
|
|
148
148
|
- In `server.json`, the root `description` must be **strictly $\le$ 100 characters** to pass MCP Registry schema validation (longer strings trigger HTTP 422 errors).
|
|
@@ -211,6 +211,6 @@ coderabbit review --agent --uncommitted
|
|
|
211
211
|
|
|
212
212
|
## 🔄 CI & Releases
|
|
213
213
|
|
|
214
|
-
CI is defined in `.github/workflows/ci.yml` (jobs: `lint-and-types`, `test` on Python 3.11–3.14, `tool-contract`, `build-check`, `docker-build` (builds the image without pushing, checks its MCP server-name label against `server.json`, checks that the runtime image has the project and none of the build-only packages (runtime dependencies such as `packaging` stay), checks that the image answers `initialize` and `tools/list` over stdio with no network, and checks that the builder stage fails at its `ca-certificates` floor check, before any pip step, when the floor is above the installed version), and `drift-check` (the same OpenAPI drift check as its own job; scheduled and manual runs only)). It runs on pushes and pull requests to `main`, weekly on `main` on Sunday at 15:53 America/New_York (`schedule` with `timezone`, after the Sunday 09:30 America/New_York Dependabot run in `.github/dependabot.yml`), and on manual dispatch (`workflow_dispatch`); the weekly run exists because merges by `dependabot-automerge.yml` use `GITHUB_TOKEN`, and pushes made with `GITHUB_TOKEN` don't trigger push workflows, so those merges get no `push` run. Run the commands above before opening a PR. `dependabot-automerge.yml` turns on squash auto-merge only for Dependabot PRs whose highest update is minor or patch; major updates wait for a human review. Docker base image updates (`package-ecosystem` `docker`) never auto-merge and always wait for a human review: Dependabot's docker ecosystem can move the image tag, not just its digest (for example `python:3.12-slim` to `python:3.14-slim`, a Python runtime upgrade that Dependabot labels a minor update), so the job logs a notice and leaves the PR open.
|
|
214
|
+
CI is defined in `.github/workflows/ci.yml` (jobs: `lint-and-types`, `test` on Python 3.11–3.14, `tool-contract`, `build-check`, `docker-build` (builds the image without pushing, checks its MCP server-name label against `server.json`, checks that the runtime image has the project and none of the build-only packages (runtime dependencies such as `packaging` stay), checks that the image answers `initialize` and `tools/list` over stdio with no network, and checks that the builder stage fails at its `ca-certificates` floor check, before any pip step, when the floor is above the installed version), and `drift-check` (the same OpenAPI drift check as its own job; scheduled and manual runs only)). It runs on pushes and pull requests to `main`, weekly on `main` on Sunday at 15:53 America/New_York (`schedule` with `timezone`, after the Sunday 09:30 America/New_York Dependabot run in `.github/dependabot.yml`), and on manual dispatch (`workflow_dispatch`); the weekly run exists because merges by `dependabot-automerge.yml` use `GITHUB_TOKEN`, and pushes made with `GITHUB_TOKEN` don't trigger push workflows, so those merges get no `push` run. Run the commands above before opening a PR. `dependabot-automerge.yml` turns on squash auto-merge only for Dependabot PRs whose highest update is minor or patch; major updates wait for a human review. Docker base image updates (`package-ecosystem` `docker`) never auto-merge and always wait for a human review: Dependabot's docker ecosystem can move the image tag, not just its digest (for example `python:3.12-slim-trixie` to `python:3.14-slim-trixie`, a Python runtime upgrade that Dependabot labels a minor update), so the job logs a notice and leaves the PR open.
|
|
215
215
|
|
|
216
216
|
`release.yml` runs on `v*` tag pushes only: it creates the GitHub Release, then builds the container image, pushes it to GHCR, attests it, and publishes to the MCP Registry. In the template repo the image is built only (no push), and the attest and registry jobs skip. Release procedure (tag-based versioning, release notes, pre-tag checks): **`COOKBOOK.md`** Recipes 1–2; product-repo migration steps: Recipe 9.
|
|
@@ -9,6 +9,7 @@ Thank you for your interest in contributing!
|
|
|
9
9
|
5. Open a Pull Request. Merges are performed via **Squash Merge** with Conventional Commit titles (`feat:`, `fix:`, `docs:`, `chore:`).
|
|
10
10
|
6. Changing statute or publication rows? Follow "Adding or changing a row" below and run `uv run python scripts/build_catalog.py --check`.
|
|
11
11
|
7. Do not edit version numbers or `CHANGELOG.md`: the git tag is the version, and GitHub Releases are the changelog. The squash commit message is the PR body, so a breaking (`feat!:` / `fix!:`) PR ends its body with one `BREAKING CHANGE:` final paragraph that lists the breaking items, with no migration steps.
|
|
12
|
+
8. Do not edit `docker/build-backend.txt` by hand.
|
|
12
13
|
|
|
13
14
|
## Adding or changing a row
|
|
14
15
|
|
|
@@ -58,7 +59,7 @@ Every deduction, exemption, bracket, rate and per-year value the compliance tool
|
|
|
58
59
|
- `brackets` and `rates` are lists tried in order: the first step whose `over` the taxable income exceeds (or whose `from_year` the tax year has reached) applies, and the last step's `over` or `from_year` is `null`. Filing-status values are `{"single": ..., "mfj": ...}`.
|
|
59
60
|
- Each `rates` step also carries its prose: a `flat_by_year` step (CO, NC) its whole `rate_desc`, and a `georgia` step the `law` that set that year's rate, which both Georgia answers cite. Georgia's flat rate starts with tax year 2024, so an earlier tax year gets the oldest step and its answers say they are an estimate.
|
|
60
61
|
- Each table has a `source_url` and a `rate_table` entry in `manifest/<code>.json` with the same `url`. A table whose numbers have not been checked against official text keeps `"not_recorded"` in both. Record a source only once it has been checked, and only an official one: `url` is the document the brackets were read from, `retrieved` the day it was fetched and `content_sha256` the hash of the fetched bytes (`"not_recorded"` when the bytes could not be kept).
|
|
61
|
-
- `registry` tables keep their original keys. A `_YYYY` suffix holds the value from that tax year on, and the unsuffixed key covers the years before. Never copy a current value into an earlier year.
|
|
62
|
+
- `registry` tables keep their original keys. A `_YYYY` suffix holds the value from that tax year on, and the unsuffixed key covers the years before. Never copy a current value into an earlier year. A year with no sourced amount is a `not_recorded` entry on `params`, `{"param", "tax_year", "reason"}`, omitted when empty, and the rate table's manifest entry repeats that list after `year_sources`. `param` is the base series (`deduction`, `brackets`, `rates`, `credit_base`, ...); one entry covers both filing statuses. The lookup stops on that exact year. A later year with no marker still uses the last real `_YYYY` value. The catalog rejects a marker on a year the tools read for a different year (Georgia's 2024 and 2026 standard deduction, and Georgia's 2026 rate step) and a Georgia `standard_deduction` marker for a year before 2018, which reads the 2024 amount. A table with no `_YYYY` key and no `rates` step cannot mark a year. The federal standard deduction table has no such list.
|
|
62
63
|
- The `flat_with_surtax` table's `surtax`, the `capital_gains_excise` table's `capital_gains_deduction` and the `brackets_cumulative` table's `brackets` and `exemption` follow the same convention: `surtax_2024`, `capital_gains_deduction_2024`, `brackets_2025` or `exemption_2025`, after the model's own fields with years ascending for each name, holds the value from that year on, and the unsuffixed key keeps the earlier years. The `capital_gains_excise` table's `tier` (`{"over": ..., "rate": ...}`, an additional rate on the taxable gains over `over`) takes only `tier_YYYY` keys and doesn't apply before the first one. The `georgia` table's `standard_deduction` and `retirement_exclusion` take `_YYYY` keys the same way (`standard_deduction_2026`, `retirement_exclusion_2027`), after `rates`, years ascending. A tax year after `GA_LAST_FIXED_YEAR` (the last year whose deduction and rate HB 463 of 2026 fixes) uses that year's figures and is labeled an estimate, because HB 463's later increases and rate cuts depend on revenue tests.
|
|
63
64
|
- Registry deductions take `_2024`, `_2025` and `_2026`. Registry `brackets` and `rate_desc` take `brackets_YYYY` and `rate_desc_YYYY` for 2024 to 2030, and the four `credit_base_*` / `credit_phaseout_*` amounts take `_2025`. Each needs its unsuffixed key and comes after it, years ascending; `brackets_YYYY` is validated like `brackets` and doesn't count as one of the three graduated keys below. A tax year after `MS_LAST_ENACTED_RATE_YEAR`, `UT_LAST_CREDIT_AMOUNT_YEAR`, `NE_LAST_PUBLISHED_SCHEDULE_YEAR` or `OH_LAST_FIXED_SCHEDULE_YEAR` (tied by tests to the last year each table holds) carries that table's figures forward and is labeled an estimate in its rate prose.
|
|
64
65
|
- A graduated `registry` table says how it taxes income below its top bracket with exactly one of two keys. `brackets` is the state's official marginal schedule (`over` and `rate` only, the lowest step's `over` is `null`), and replaces the `top_*`, `zero_*` and `middle_*` keys. `middle_rate` is a single statutory rate for the middle band. Every `evaluate_state_residency` answer carries `middle_rate_is_estimate` (always `false`; the former 65%-of-top stand-in is gone). Never invent a middle-band rate where an official schedule exists.
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
ARG CA_CERTIFICATES_FLOOR=20250419+deb13u1
|
|
19
19
|
|
|
20
20
|
# ─── Stage 1: Builder ─────────────────────────────────────────────────────────
|
|
21
|
-
FROM python:3.14-slim@sha256:fbecd461fc72d21b2143c6eaba25143738079154a6d0ea3da3aec724f50eed4a AS builder
|
|
21
|
+
FROM python:3.14-slim-trixie@sha256:fbecd461fc72d21b2143c6eaba25143738079154a6d0ea3da3aec724f50eed4a AS builder
|
|
22
22
|
|
|
23
23
|
ARG CA_CERTIFICATES_FLOOR
|
|
24
24
|
RUN apt-get update && \
|
|
@@ -75,7 +75,7 @@ RUN pip install --no-cache-dir --require-hashes --only-binary=:all: -r /tmp/pip-
|
|
|
75
75
|
PYTHONPATH=/tmp/build-backend pip install --no-cache-dir --no-deps --no-build-isolation .
|
|
76
76
|
|
|
77
77
|
# ─── Stage 2: Runtime ─────────────────────────────────────────────────────────
|
|
78
|
-
FROM python:3.14-slim@sha256:fbecd461fc72d21b2143c6eaba25143738079154a6d0ea3da3aec724f50eed4a AS runtime
|
|
78
|
+
FROM python:3.14-slim-trixie@sha256:fbecd461fc72d21b2143c6eaba25143738079154a6d0ea3da3aec724f50eed4a AS runtime
|
|
79
79
|
|
|
80
80
|
# MCP Registry ownership check for the OCI package: must equal server.json "name".
|
|
81
81
|
# https://modelcontextprotocol.io/registry/package-types#docker%2Foci-images
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: mcp-server-taxcode
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Summary: Enterprise Model Context Protocol (MCP) server for Tax Code
|
|
5
5
|
Project-URL: Homepage, https://github.com/christianclaudio/mcp-server-taxcode
|
|
6
6
|
Project-URL: Documentation, https://github.com/christianclaudio/mcp-server-taxcode#readme
|
|
@@ -22,17 +22,17 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.14
|
|
23
23
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
24
|
Requires-Python: >=3.11
|
|
25
|
-
Requires-Dist: certifi>=2026.10.
|
|
25
|
+
Requires-Dist: certifi>=2026.10.23
|
|
26
26
|
Requires-Dist: duckdb>=1.5.6
|
|
27
|
-
Requires-Dist: fastmcp>=4.1.
|
|
27
|
+
Requires-Dist: fastmcp>=4.1.8
|
|
28
28
|
Requires-Dist: httpx>=0.28.1
|
|
29
29
|
Requires-Dist: mcp>=2.3.0
|
|
30
30
|
Requires-Dist: pydantic-settings>=2.15.0
|
|
31
31
|
Requires-Dist: pydantic>=2.13.5
|
|
32
32
|
Provides-Extra: code-mode
|
|
33
|
-
Requires-Dist: fastmcp[code-mode]>=4.1.
|
|
33
|
+
Requires-Dist: fastmcp[code-mode]>=4.1.8; extra == 'code-mode'
|
|
34
34
|
Provides-Extra: dev
|
|
35
|
-
Requires-Dist: fastmcp[code-mode]>=4.1.
|
|
35
|
+
Requires-Dist: fastmcp[code-mode]>=4.1.8; extra == 'dev'
|
|
36
36
|
Requires-Dist: mypy>=2.4.0; extra == 'dev'
|
|
37
37
|
Requires-Dist: opentelemetry-sdk>=1.45.1; extra == 'dev'
|
|
38
38
|
Requires-Dist: pytest-asyncio>=1.4.0; extra == 'dev'
|
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
"environment": {
|
|
8
8
|
"dependencies": [
|
|
9
9
|
"mcp>=2.3.0",
|
|
10
|
-
"fastmcp>=4.1.
|
|
11
|
-
"certifi>=2026.10.
|
|
12
|
-
"httpx>=0.28.
|
|
13
|
-
"pydantic>=2.
|
|
14
|
-
"pydantic-settings>=2.
|
|
10
|
+
"fastmcp>=4.1.8",
|
|
11
|
+
"certifi>=2026.10.23",
|
|
12
|
+
"httpx>=0.28.1",
|
|
13
|
+
"pydantic>=2.13.5",
|
|
14
|
+
"pydantic-settings>=2.15.0",
|
|
15
|
+
"duckdb>=1.5.6"
|
|
15
16
|
]
|
|
16
17
|
},
|
|
17
18
|
"deployment": {
|
|
@@ -27,11 +27,11 @@ classifiers = [
|
|
|
27
27
|
]
|
|
28
28
|
dependencies = [
|
|
29
29
|
"mcp>=2.3.0",
|
|
30
|
-
"fastmcp>=4.1.
|
|
30
|
+
"fastmcp>=4.1.8",
|
|
31
31
|
# certifi floor from FastMCP's October 2026 certificate authority incident notice:
|
|
32
32
|
# https://github.com/PrefectHQ/fastmcp/blob/main/SECURITY.md#certificate-authority-incident-october-2026
|
|
33
33
|
# httpx verifies upstream TLS against certifi's bundle.
|
|
34
|
-
"certifi>=2026.10.
|
|
34
|
+
"certifi>=2026.10.23",
|
|
35
35
|
"httpx>=0.28.1",
|
|
36
36
|
"pydantic>=2.13.5",
|
|
37
37
|
"pydantic-settings>=2.15.0",
|
|
@@ -42,10 +42,10 @@ dependencies = [
|
|
|
42
42
|
# Code Mode is optional: FastMCP ships its pydantic-monty sandbox as the code-mode extra.
|
|
43
43
|
# Users install mcp-server-<name>[code-mode]; dev repeats the same pin so tests run execute.
|
|
44
44
|
code-mode = [
|
|
45
|
-
"fastmcp[code-mode]>=4.1.
|
|
45
|
+
"fastmcp[code-mode]>=4.1.8",
|
|
46
46
|
]
|
|
47
47
|
dev = [
|
|
48
|
-
"fastmcp[code-mode]>=4.1.
|
|
48
|
+
"fastmcp[code-mode]>=4.1.8",
|
|
49
49
|
"pytest>=9.1.1",
|
|
50
50
|
"pytest-asyncio>=1.4.0",
|
|
51
51
|
"pytest-cov>=7.1.0",
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
The Dockerfile installs the project build backend from that file with ``--require-hashes``,
|
|
4
4
|
outside the runtime venv. uv.lock already records the group's closure with every wheel hash,
|
|
5
5
|
so this keeps only the wheels the base image can install: ``py3-none-any``, or for compiled
|
|
6
|
-
packages
|
|
6
|
+
packages one manylinux x86_64 wheel and one manylinux aarch64 wheel for the base image's CPython ABI
|
|
7
|
+
whose glibc floor that image can load. A higher floor installs and then fails to load.
|
|
7
8
|
|
|
8
9
|
Usage: ``uv run python scripts/gen_build_backend.py`` writes the file; ``--check`` exits 1 and
|
|
9
10
|
lists the differences instead. tests/test_build_backend_lock.py runs the same check.
|
|
@@ -25,6 +26,29 @@ ROOT = Path(__file__).resolve().parent.parent
|
|
|
25
26
|
GROUP = "build-backend"
|
|
26
27
|
TARGET = ROOT / "docker" / "build-backend.txt"
|
|
27
28
|
ARCHES = ("x86_64", "aarch64")
|
|
29
|
+
# glibc of the Debian release named by the base image tag (python:X.Y-slim-<release>).
|
|
30
|
+
# The digest is not the key. Sources are the libc6 packages for each release:
|
|
31
|
+
# trixie (Debian 13): https://packages.debian.org/trixie/libc6 is 2.41
|
|
32
|
+
# bookworm (Debian 12): https://packages.debian.org/bookworm/libc6 is 2.36
|
|
33
|
+
_DEBIAN_GLIBC: dict[str, tuple[int, int]] = {
|
|
34
|
+
"trixie": (2, 41),
|
|
35
|
+
"bookworm": (2, 36),
|
|
36
|
+
}
|
|
37
|
+
# PEP 600: manylinux_X_Y_<arch> means glibc X.Y. Legacy aliases: manylinux1 = 2.5
|
|
38
|
+
# (PEP 513), manylinux2010 = 2.12 (PEP 571), manylinux2014 = 2.17 (PEP 599).
|
|
39
|
+
_MANYLINUX_ALIAS: dict[str, tuple[int, int]] = {
|
|
40
|
+
"manylinux1": (2, 5),
|
|
41
|
+
"manylinux2010": (2, 12),
|
|
42
|
+
"manylinux2014": (2, 17),
|
|
43
|
+
}
|
|
44
|
+
# The image reference ends at whitespace (`` AS builder``) or end of line. Without
|
|
45
|
+
# that anchor a longer token matches as a prefix, and image_glibc then accepts it
|
|
46
|
+
# or reports the wrong error.
|
|
47
|
+
_FROM_SLIM = re.compile(
|
|
48
|
+
r"^FROM python:\d+\.\d+-slim(?:-(?P<release>[A-Za-z0-9.]+))?"
|
|
49
|
+
r"(?:@(?P<digest>sha256:[0-9a-f]{64}))?(?=\s|$)",
|
|
50
|
+
re.MULTILINE,
|
|
51
|
+
)
|
|
28
52
|
HEADER = (
|
|
29
53
|
"# Build backend for the Dockerfile project install: the build-backend dependency group in",
|
|
30
54
|
"# pyproject.toml and its closure from uv.lock. Generated by scripts/gen_build_backend.py;",
|
|
@@ -42,6 +66,37 @@ def base_python(dockerfile: str) -> str:
|
|
|
42
66
|
return versions.pop()
|
|
43
67
|
|
|
44
68
|
|
|
69
|
+
def image_glibc(dockerfile: str) -> tuple[int, int]:
|
|
70
|
+
"""Return the glibc of the Debian release named by the base image tag.
|
|
71
|
+
|
|
72
|
+
``base_python`` still requires one ``python:X.Y-slim`` version. The floor is
|
|
73
|
+
the ``_DEBIAN_GLIBC`` entry for the release suffix, so a digest change within
|
|
74
|
+
that release does not move it. An unpinned base, a tag with no release, a
|
|
75
|
+
``FROM python:`` line the pattern does not match, two FROM lines that name
|
|
76
|
+
different releases, or an unknown release raises ``ValueError``.
|
|
77
|
+
"""
|
|
78
|
+
base_python(dockerfile)
|
|
79
|
+
images = list(_FROM_SLIM.finditer(dockerfile))
|
|
80
|
+
# Every FROM python: line has to match. A malformed stage must not disappear
|
|
81
|
+
# behind a valid one.
|
|
82
|
+
from_python = re.findall(r"^FROM python:", dockerfile, re.MULTILINE)
|
|
83
|
+
if len(from_python) != len(images):
|
|
84
|
+
raise ValueError("expected a pinned python:X.Y-slim-<release>@sha256 base image")
|
|
85
|
+
if not images or any(image.group("digest") is None for image in images):
|
|
86
|
+
raise ValueError("expected a pinned python:X.Y-slim-<release>@sha256 base image")
|
|
87
|
+
releases = [image.group("release") for image in images]
|
|
88
|
+
if any(release is None for release in releases):
|
|
89
|
+
raise ValueError("python:X.Y-slim has no Debian release suffix")
|
|
90
|
+
names = sorted({release for release in releases if release is not None})
|
|
91
|
+
if len(names) != 1:
|
|
92
|
+
raise ValueError(f"expected one Debian release, found {names}")
|
|
93
|
+
release = names[0]
|
|
94
|
+
glibc = _DEBIAN_GLIBC.get(release)
|
|
95
|
+
if glibc is None:
|
|
96
|
+
raise ValueError(f"Debian release {release} has no glibc entry; update _DEBIAN_GLIBC")
|
|
97
|
+
return glibc
|
|
98
|
+
|
|
99
|
+
|
|
45
100
|
def _environment(python: str, machine: str) -> dict[str, str]:
|
|
46
101
|
return {
|
|
47
102
|
"implementation_name": "cpython",
|
|
@@ -103,7 +158,34 @@ def _closure(lock: dict[str, Any], python: str) -> list[dict[str, Any]]:
|
|
|
103
158
|
return [seen[name] for name in sorted(seen)]
|
|
104
159
|
|
|
105
160
|
|
|
106
|
-
def
|
|
161
|
+
def _manylinux_tag(platform: str) -> tuple[tuple[int, int], str] | None:
|
|
162
|
+
"""Return ``(glibc floor, arch)`` for a manylinux tag, or None for anything else."""
|
|
163
|
+
perennial = re.fullmatch(r"manylinux_(\d+)_(\d+)_(.+)", platform)
|
|
164
|
+
if perennial:
|
|
165
|
+
floor = (int(perennial.group(1)), int(perennial.group(2)))
|
|
166
|
+
return floor, perennial.group(3)
|
|
167
|
+
legacy = re.fullmatch(r"(manylinux2010|manylinux2014|manylinux1)_(.+)", platform)
|
|
168
|
+
if legacy is None:
|
|
169
|
+
return None
|
|
170
|
+
return _MANYLINUX_ALIAS[legacy.group(1)], legacy.group(2)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def _loads_on(platform: str, arch: str, glibc: tuple[int, int]) -> bool:
|
|
174
|
+
"""True when ``platform`` is manylinux for ``arch`` and its floor is <= ``glibc``."""
|
|
175
|
+
parsed = _manylinux_tag(platform)
|
|
176
|
+
if parsed is None:
|
|
177
|
+
return False
|
|
178
|
+
floor, tag_arch = parsed
|
|
179
|
+
return tag_arch == arch and floor <= glibc
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def _digests(package: dict[str, Any], python: str, glibc: tuple[int, int]) -> list[str]:
|
|
183
|
+
"""Return wheel hashes the base image can install.
|
|
184
|
+
|
|
185
|
+
A ``py3-none-any`` wheel wins. Otherwise exactly one cp wheel per architecture,
|
|
186
|
+
counting a wheel when any dotted manylinux tag for that arch has a glibc floor
|
|
187
|
+
at or below ``glibc``. musllinux never qualifies.
|
|
188
|
+
"""
|
|
107
189
|
abi = "cp" + python.replace(".", "")
|
|
108
190
|
universal: list[str] = []
|
|
109
191
|
native: dict[str, list[str]] = {arch: [] for arch in ARCHES}
|
|
@@ -116,7 +198,7 @@ def _digests(package: dict[str, Any], python: str) -> list[str]:
|
|
|
116
198
|
elif py_tag == abi and abi_tag == abi:
|
|
117
199
|
platforms = platform_tag.split(".")
|
|
118
200
|
for arch in ARCHES:
|
|
119
|
-
if any(
|
|
201
|
+
if any(_loads_on(platform, arch, glibc) for platform in platforms):
|
|
120
202
|
native[arch].append(digest)
|
|
121
203
|
if universal:
|
|
122
204
|
return sorted(universal)
|
|
@@ -128,9 +210,14 @@ def _digests(package: dict[str, Any], python: str) -> list[str]:
|
|
|
128
210
|
def expected() -> dict[str, tuple[str, list[str]]]:
|
|
129
211
|
"""Map package name to (version, sha256 digests) for the group closure in uv.lock."""
|
|
130
212
|
lock = tomllib.loads((ROOT / "uv.lock").read_text(encoding="utf-8"))
|
|
131
|
-
|
|
213
|
+
dockerfile = (ROOT / "Dockerfile").read_text(encoding="utf-8")
|
|
214
|
+
python = base_python(dockerfile)
|
|
215
|
+
glibc = image_glibc(dockerfile)
|
|
132
216
|
return {
|
|
133
|
-
canonicalize_name(package["name"]): (
|
|
217
|
+
canonicalize_name(package["name"]): (
|
|
218
|
+
package["version"],
|
|
219
|
+
_digests(package, python, glibc),
|
|
220
|
+
)
|
|
134
221
|
for package in _closure(lock, python)
|
|
135
222
|
}
|
|
136
223
|
|