@pipeworx/washington-code
Connect: https://pipeworx.io/mcp — every tool in the catalog, including @pipeworx/washington-code’s. Install: one-click buttons
Connect to just the @pipeworx/washington-code pack
https://gateway.pipeworx.io/washington-code/mcp — only @pipeworx/washington-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: 6
Washington state law from the Legislature’s own site, keyless: the Revised Code of Washington (RCW, statutes) by citation, and the Washington Administrative Code (WAC, agency rules) by citation, by topic, by structure, by year-end archive, and by rule-making history.
Tools
| Tool | What it answers |
|---|---|
wa_rcw_section({section: "9A.32.030"}) | Full text and heading of an RCW statute. |
wa_wac_section({section: "296-800-110"}) | CURRENT text of a WAC rule: caption, body, the statutory-authority history line, and the RCW sections the agency cited as authority. |
wa_wac_search({query: "safety bulletin board", limit?, cite_prefix?}) | FULL-TEXT search across every WAC section via the Legislature’s own site-search index; returns citations, captions, highlighted snippets and the index-wide match count. cite_prefix (“296” or “296-800”) restricts to a title or chapter. |
wa_wac_browse({cite?}) | Structure: no cite → every WAC title with its agency; a title (“296”) → its chapters; a chapter (“296-800”) → its sections with captions and subheadings. |
wa_wac_archived_section({section, year}) | Text of a WAC rule AS IT STOOD at the end of a past year (full text 2019 onward; PDF-only 2004–2018, see below). |
wa_wac_filings({cite}) | Every Washington State Register (WSR) rule-making filing that touched a section or chapter — number, type, date filed, link — newest first. |
Citations accept the RCW/WAC prefix, letter-suffixed titles and chapters
(296-14A-100, 132C-120-010), and typographic dashes. Every response carries
data_as_of, source and the exact upstream url.
The four capabilities, and which one is only partly there
| Capability | WAC | How |
|---|---|---|
| Section by citation | yes | wa_wac_section, live fetch of app.leg.wa.gov/WAC/default.aspx?cite=…. |
| Topic search | yes, full text | wa_wac_search calls the SearchUnify index behind leg.wa.gov/search, restricted to the WAC source. This matches rule TEXT, not just captions. |
| Historical version | yes for 2019 onward; link-only before | wa_wac_archived_section reads the Legislature’s year-end HTML archive. 2004–2018 were published as PDF only: the tool returns the chapter PDF link for 2016–2018 and the archive directory for earlier years, as found:false, reason:"pdf_only_year" — never a guess at the text. |
| Amendments / history | yes | wa_wac_section.history (the [Statutory Authority: … WSR …] line, with authority_rcw parsed out) and wa_wac_filings (the WSR filing list, including pending proposals and emergency rules). |
Miss signals — positive, not inferred
- RCW: a bad citation renders a panel with the id
pnlCitationNotFound(HTTP 200). The pack keys on that panel. - WAC: a nonexistent section answers an HTTP 302 to the chapter’s
dispositions page (
?dispo=true&cite=296-800). The pack fetches withredirect: 'manual'and reads the miss from the status line, returningfound:false, reason:"section_not_found"with the dispositions link. - Anything else that is not a 200 throws a loud error naming the upstream
status. A transport failure is never reshaped into
found:false(src/index.test.tspins this — the oklahoma-code lesson, fleet #2742).
Archive filenames are fixed-width (measured 2026-10-07)
lawfilesext.leg.wa.gov/law/wacarchive/<year>/htm/… names files with
space-padded fields: the numeric title and chapter are right-aligned to 3
characters and padded to 4, the section is appended as typed:
296-800-110 → WAC 296 -800 -110.htm
1-04-010 → WAC 1 - 04 -010.htm
2019–2023 nest the file under WAC 296 TITLE/WAC 296 -800 CHAPTER/; 2024
onward is flat under WAC 296 -800 CHAPTER/. The resolver tries the likely
layout for the year first and the other second; a 404 at both is
section_not_in_archive with the URLs tried, so a one-space error cannot
masquerade as “the rule did not exist that year”. The tests pin both layouts.
The search index is the Legislature’s own, read as its client does
leg.wa.gov/search is a thin client over a SearchUnify instance. Its host,
client uid and per-client access token are served to every anonymous visitor
inside the client bundle (an.js), so they are configuration we read, not a
credential we hold; the pack caches them and re-reads the bundle once if the
API rejects them. Requests identify as pipeworx-mcp-washington-code — no
Origin or Referer is sent and none is needed (verified 2026-10-07: identical
results with and without). cite_prefix filtering is client-side over the top
50 index hits, and the response says so in total_matches_note.
Edge probe (2026-10-07)
Per the standing rule for any new upstream host, every URL shape the WAC tools
use was fetched from a throwaway wrangler dev --remote Worker on the prod
account before deploy. All answered a Cloudflare Worker exactly as they answer
a laptop — no relay needed:
app.leg.wa.gov/WAC/default.aspx?cite=296-800-110 200 117,345 B
app.leg.wa.gov/WAC/default.aspx?cite=296-800-99999 302 → /WAC/default.aspx?dispo=true&cite=296-800
app.leg.wa.gov/WAC/ 200 144,207 B
app.leg.wa.gov/WAC/default.aspx?cite=296-800 200 187,138 B
app.leg.wa.gov/WAC/registerfiling.aspx?cite=296-800-110 200 109,878 B
lawfilesext…/wacarchive/2020/htm/WAC 296 TITLE/… 200 10,076 B
lawfilesext…/wacarchive/2024/htm/WAC 296 -800 CHAPTER/… 200 10,076 B
lh112524p.searchunify.com/search/searchResultByPost 200 11,313 matches for "safety bulletin board"
Smoke (pre-deploy, 2026-10-07)
smoke.json holds the arguments; all six tools returned non-empty payloads:
wa_wac_section 296-800-110 1,386 chars of text + 4-filing history,
wa_wac_search "safety bulletin board" 5 of 11,313, wa_wac_browse 296-800
136 sections, wa_wac_archived_section 296-800-110 @2020 1,386 chars,
wa_wac_filings 296-800-110 4 WSR filings.
Caveats
- RCW and WAC numbers are not contiguous; repealed and recodified sections are
normal.
wa_wac_browseon the chapter shows what exists today. - A
cite_prefixsearch that returns zero is a real zero under that prefix in the top 50 hits, not a failure; thenotesays how many index-wide matches there were.
Data source
Washington State Legislature — app.leg.wa.gov (current RCW and WAC, WSR
filings), lawfilesext.leg.wa.gov (annual WAC archive), and the Legislature’s
site-search index. Keyless. Washington statutes and agency rules are public
record.
Tools
- wa_rcw_section — Get the FULL TEXT of a section of the Revised Code of Washington (RCW) — Washington state STATUTES — by citation. “RCW 9A.32.030” is first degree murder. Returns the statutory text and its heading. Ke
- wa_wac_section — Get the CURRENT FULL TEXT of a section of the Washington Administrative Code (WAC) — Washington state agency RULES / regulations — by citation. “WAC 296-800-110” is L&I’s safe-workplace summary; “458-
- wa_wac_search — Search the FULL TEXT of the Washington Administrative Code (WAC) by topic or keyword — “workplace safety bulletin board”, “security deposit”, “septic system permit”, “cannabis retailer”. Calls the Was
- wa_wac_browse — Browse the structure of the Washington Administrative Code (WAC): with no cite, lists every WAC TITLE with the agency it belongs to (Title 296 = Labor and Industries, 458 = Revenue, 388 = Social and H
- wa_wac_archived_section — Get the text of a Washington Administrative Code (WAC) section AS IT STOOD at the end of a PAST YEAR, from the Legislature’s annual WAC archive. Year-end snapshots with full text for 2019 onward (e.g.
- wa_wac_filings — List the Washington State Register (WSR) rule-making FILINGS that affected a Washington Administrative Code (WAC) section or chapter — the amendment history as agency actions: WSR number, filing type
Tools
wa_rcw_section— Get the FULL TEXT of a section of the Revised Code of Washington (RCW) — Washington state STATUTES — by citation. RCW 9A.32.030 is first degree murder. Returns the statutory text and its heading. Keylwa_wac_archived_section— Get the text of a Washington Administrative Code (WAC) section AS IT STOOD at the end of a PAST YEAR, from the Legislature's annual WAC archive. Year-end snapshots with full text for 2019 onward (e.g.wa_wac_browse— Browse the structure of the Washington Administrative Code (WAC): with no cite, lists every WAC TITLE with the agency it belongs to (Title 296 = Labor and Industries, 458 = Revenue, 388 = Social and Hwa_wac_filings— List the Washington State Register (WSR) rule-making FILINGS that affected a Washington Administrative Code (WAC) section or chapter — the amendment history as agency actions: WSR number, filing typewa_wac_search— Search the FULL TEXT of the Washington Administrative Code (WAC) by topic or keyword — workplace safety bulletin board , security deposit , septic system permit , cannabis retailer . Calls the Washingwa_wac_section— Get the CURRENT FULL TEXT of a section of the Washington Administrative Code (WAC) — Washington state agency RULES / regulations — by citation. WAC 296-800-110 is L&I's safe-workplace summary; 458-20-