@pipeworx/wyoming-code

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

Connect to just the @pipeworx/wyoming-code pack

https://gateway.pipeworx.io/wyoming-code/mcp — only @pipeworx/wyoming-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

Wyoming Statutes by citation, plus full-text topic search. Keyless.

Source (fleet #2744)

The Wyoming Legislative Service Office (wyoleg.gov) runs an Angular SPA for its “Wyoming Statutes & Constitution” page. Probed live 2026-10-06 by downloading the SPA’s own JS bundles (main-*.js, the lazily-loaded chunk-_lXRwsur.js for its StateStatutesModule) and grepping for an API base URL or any lsoservice.wyoleg.gov reference — none exists for statute TEXT. The “Download the Wyoming Statutes” page is a plain static list of links to per-TITLE PDFs:

https://wyoleg.gov/statutes/compress/title06.pdf   (Title 6, Crimes and Offenses)

A .docx sibling (the task’s other named possibility) does NOT exist — every .docx path probed (several casings and locations) returns the SPA’s own catch-all shell (HTTP 200, not a real 404), confirmed by checking content-type/length rather than status code. PDF is the only route.

The PDF trap, and why shared/src/pdf-text.ts needed extending

Wyoming’s per-title PDFs are PDF 1.6, linearized, and store their Catalog and Pages root inside a compressed object stream (/Type/ObjStm) — a shape shared/src/pdf-text.ts explicitly did not support before this pack (its own header said so; Kentucky’s PDFs, the only prior user, never hit it). Verified directly against Title 6’s PDF: 5205 0 obj (its Pages root) never appears literally in the file at all; it exists only as an entry inside a decompressed ObjStm. Separately, the Catalog object IS direct but the original discovery regex broke the moment a nested dict (/MarkInfo<</Marked true>>) appeared before /Type/Catalog in the same object — also true here, not Wyoming- specific bad luck.

Both gaps are now fixed in shared/src/pdf-text.ts itself (see that file’s header for the mechanism), not worked around in this pack, since a future PDF-only state with a compressing producer hits the identical wall. Verified end-to-end: Title 6 (441 KB, 210 pages) extracts to 387,932 characters with zero warnings, and W.S. 6-2-101 (“Murder in the first degree”) comes back with its correct text.

MB-scale files — never fetched whole per call

Per-title PDFs run from ~300 KB (Title 97, the Constitution — not covered, see below) to ~2.9 MB (Title 35, Public Health and Safety) across the 44 titles this pack covers. Exactly like mcps/indiana-code, one JSON bundle per title is pre-fetched into the shared pipeworx-datasets R2 bucket (statutes/wy/<title>.json, via scripts/ingest-wyoming-statutes.mjs) plus a full-text search shard (wy-statutes). wy_statute reads the pre-sliced section straight out of the bundle; a live PDF fetch is the FALLBACK only — for a title the bundle does not yet cover, or a standalone (non-hosted) install with no R2 binding — and even then fetches only the ONE requested title’s PDF, never the whole corpus.

Tools

  • wy_statute(citation) — full text of a Wyoming Statutes section by citation (“6-2-101” is murder in the first degree, Title 6; “20-1-105” is divorce grounds, Title 20). Accepts “6-2-101”, “W.S. 6-2-101”, ”§ 6-2-101”. Returns the current text, the section heading, and — only where the source carries one cleanly — an enactment history note (see below).
  • wy_search(query, limit?) — full-text search over the statutory body text across all 44 covered titles via the shared FTS5 search shard. Returns matching citations and headings; call wy_statute for the full text.

Citations

Wyoming cites title-chapter-section, dash separated, e.g. “6-2-101” or “20-1-105”. A few titles carry a decimal number (e.g. “34.1-1-101”, the Uniform Commercial Code). Title numbers map directly to the PDF filename (title06.pdf, title34.1.pdf, title99.pdf — single-digit titles are zero-padded, everything else is used as-is).

Slicing a section out of a whole title

Wyoming’s extracted PDF text has no HTML-style structural markers (unlike Indiana’s <div class="section" id="...">) — it is one long run per page, because the content streams use relative Td/T* text positioning rather than the absolute Tm this repo’s PDF extractor tracks for line breaks. The citation itself is what locates a section: every real heading is typeset “N-N-N. Caption text.” (a two-space sentence gap, confirmed in the raw content stream and used consistently throughout). A plain citation match is not enough on its own, though — a cross-reference (“…sentenced in accordance with the provisions of W.S. 6-2-102.”) uses the exact same two-space convention after ITS OWN trailing period, so a naive match finds both the real heading and every inline cross-reference to the same number.

This pack uses the shared sliceSection “most text wins” heuristic (shared/src/statute-html.ts, already relied on by the Colorado/Iowa/ Nevada/Oregon pack family) rather than inventing a Wyoming-specific one: among every literal occurrence of the target citation followed by two spaces, the real heading is whichever has the most text before the next citation-shaped boundary. Proven on 6-2-101 specifically — its only other occurrence in Title 6 is a cross-reference that sits one sentence before the immediately next real section (6-2-202), so it resolves to near-zero trailing text and loses decisively. The ingest script applies the same “longest wins” principle in one pass across a whole title (grouping every boundary by citation) rather than per-citation, since a full crawl has no single “target” to search for.

Four capabilities — two available, two are not

  • Citation lookup — available, wy_statute.
  • Topic/full-text search — available, wy_search.
  • Amendments/enactment history — BEST EFFORT ONLY. Some titles (e.g. 99, Noncodified Statutes — mostly older uniform-act material) carry a clean trailing (Laws 1985, ch. ...) parenthetical per section, which wy_statute pulls into a separate history field when present. Title 6 (the current recodified criminal code) carries NO such trailing block — amendment/repeal notes appear INLINE at the subsection level (“(E) Repealed by Laws 2020, ch. 90, § 3.”) as ordinary statutory text, with no structural marker separating them. history is null on most sections; that is not an extraction failure.
  • Historical version (the text of a section before a given amendment, or a prior year’s edition) — NOT AVAILABLE. wyoleg.gov’s statutes page serves only the current edition (“as they exist as of July 1, 2026” per its own download page) — no year parameter, no archive link. Confirmed by grepping the SPA bundle for any “historical”/“archive” reference: none exists. wy_statute says so explicitly in its response rather than omitting the field silently.

Out of scope

Title 97 (the Wyoming Constitution) cites “Article N, Section N” rather than “N-N-N” — a different grammar entirely — and is excluded from this pack’s citation parsing and from the ingest script’s title list. A Wyoming Constitution pack, if built, is a separate source. Title 99 (Noncodified Statutes) DOES use the standard “N-N-N” scheme and IS included.

Coverage

All 44 titles that use the title-chapter-section citation scheme: 1-42, the decimal 34.1 (Uniform Commercial Code), and 99 (Noncodified Statutes). 21,268 sections ingested.

Refresh

node scripts/ingest-wyoming-statutes.mjs — re-run periodically (the Legislature convenes annually; no daily-freshness need). No schedule is wired up: dispatch by hand, following scripts/ingest-indiana-statutes.mjs’s pattern. PDF extraction is duplicated as plain JS in scripts/lib/pdf-text.mjs (a deliberate line-for-line port of shared/src/pdf-text.ts’s extractPdfText) because scripts/ cannot resolve a bare @pipeworx/shared specifier outside the pnpm workspace’s own per-package node_modules link — see that file’s header.

Data source

Official state legislature site (wyoleg.gov). Wyoming statutes are public record; no reuse restriction was found on the per-title PDF paths used here.

Tools

  • wy_statute — Get the FULL TEXT of a section of the Wyoming Statutes (W.S.) — Wyoming state law — by citation. “6-2-101” is murder in the first degree (Title 6, Crimes and Offenses); “20-1-105” is divorce grounds (
  • wy_search — Search the Wyoming Statutes BY TOPIC or keyword rather than citation — “landlord security deposit”, “concealed firearm permit”, “murder penalty”. Full-text search over the statutory body text across a

Tools

  • wy_search — Search the Wyoming Statutes BY TOPIC or keyword rather than citation — landlord security deposit , concealed firearm permit , murder penalty . Full-text search over the statutory body text across all
  • wy_statute — Get the FULL TEXT of a section of the Wyoming Statutes (W.S.) — Wyoming state law — by citation. 6-2-101 is murder in the first degree (Title 6, Crimes and Offenses); 20-1-105 is divorce grounds (Titl

Regenerated from source · build October 7, 2026