@pipeworx/illinois-code

Connect: https://pipeworx.io/mcp — every tool in the catalog, including @pipeworx/illinois-code’s. Install: one-click buttons

Connect to just the @pipeworx/illinois-code pack

https://gateway.pipeworx.io/illinois-code/mcp — only @pipeworx/illinois-code’s own tools, nothing else in the catalog.

No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.

Tools: 2

Keyless. 720 ILCS 5/9-1 is first degree murder.

The encoding is derivable

720 ILCS 5/9-1  ->  ?DocName=072000050K9-1
                             ^^^^chapter ^^^^act 0 K+section

Chapter and act zero-padded to four. The site navigates by internal ChapterID and ActID, but none of that is needed — the citation carries everything.

Why the live path was rejected twice first

Earlier probes used the OLD path (fulltext.asp, now 404 after a site restructure) and a needle that does not appear in the statute. Two independent mistakes producing the same “no”, which read as “Illinois is unreachable” rather than “you asked wrong”.

Coverage (fleet #2505)

The live site’s FullText endpoint is unreachable from a Cloudflare Worker for a different, unfixable reason: ilga.gov serves an incomplete TLS certificate chain (its own leaf certificate with no intermediate). curl on a machine whose OS trust store already has the missing Sectigo intermediate succeeds; fetch() — Cloudflare’s or plain Node’s, both strict — fails outright (HTTP 526 at the gateway; fetch failed from Node directly). No retry fixes a certificate chain, which is why illinois-code read upstream_down every day for 14 straight days before this shipped.

ILGA’s own “Access Denied” page for automated traffic to ilga.gov names the fix: a public, nightly-synced file repository at ftp.ilga.gov explicitly meant for bulk/automated consumption (“Automated systems should retrieve files from the repository rather than scraping ILGA.gov”). scripts/ingest-il-statutes.mjs walks it — outside Workers, where curl still works — and writes one JSON bundle per CHAPTER (68 objects, not 72,000 — one per act or per section would cost the same per-write and there is no reason to pay for it) into the shared pipeworx-datasets R2 bucket at statutes/il/<chapter>.json.

il_compiled_statute tries the local bundle first. If the chapter/act has been crawled and the section simply is not in it, that is authoritative — no point retrying a live path that currently fails for every citation regardless of validity — and the tool says section_not_found directly. If the chapter/act has not been crawled at all, it falls back to the live fetch.

data_as_of on every response says whether it came from the pre-fetched text (the crawl’s ingested_at) or a live fetch (now).

il_statute_search answers questions no citation lookup can — “currency exchange license fee”, “concealed carry reciprocity” — via FTS5 in the shared SEARCH_SHARD Durable Object (workers/gateway/src/search-shard.ts, shard name il-statutes; reused, not a new Cloudflare binding — the gateway sits at its text-binding ceiling). The FTS body is the section’s heading + full text, not just the heading: the DO’s contentless design exists to avoid duplicating opinion text at case-law’s 46 GB scale, which does not apply at this corpus’s size, and a topic query’s words are far more often in a section’s body than in its short heading. Hit ids resolve back to citations via statutes/il/_index.json. Search hits carry a citation and heading; call il_compiled_statute with the chapter/act/section from a result for the full text.

Miss behaviour

Live fallback: 200 with no Sec. heading — detected structurally, unchanged from the original pack. Pre-fetched: the chapter/act bundle exists but the section is not in its sections array.

Refresh

node scripts/ingest-il-statutes.mjs — re-run periodically (Illinois’s legislative session runs annually; there is no daily-freshness need here). No schedule is wired up: dispatch it by hand, or via gh workflow run if/when a workflow is added — GitHub’s own schedule: trigger has been unreliable since ~2026-09-09 (see CLAUDE.md), so a recurring refresh should follow the monitor-dispatch pattern rather than a bare cron trigger.

Data source

Illinois General Assembly (ftp.ilga.gov public file repository, and ilga.gov for the live fallback). Illinois statutes are public record; no reuse restriction was found on the bulk file repository.

Tools

  • il_compiled_statute — Get the FULL TEXT of a section of the Illinois Compiled Statutes — Illinois state law — by citation. “720 ILCS 5/9-1” is first degree murder; “625 ILCS 5/11-501” is DUI. Pass the full citation as `cit
  • il_statute_search — Search Illinois Compiled Statutes BY TOPIC or keyword rather than citation — “currency exchange license fee”, “concealed carry reciprocity”, “landlord retaliation”. Returns ranked sections with their

Tools

  • il_compiled_statute — Get the FULL TEXT of a section of the Illinois Compiled Statutes — Illinois state law — by citation. 720 ILCS 5/9-1 is first degree murder; 625 ILCS 5/11-501 is DUI. Pass the full citation as `citatio
  • il_statute_search — Search Illinois Compiled Statutes BY TOPIC or keyword rather than citation — currency exchange license fee , concealed carry reciprocity , landlord retaliation . Returns ranked sections with their cit

Regenerated from source · build October 30, 2026