@pipeworx/dc-code
Connect: https://pipeworx.io/mcp — every tool in the catalog, including @pipeworx/dc-code’s. Install: one-click buttons
Connect to just the @pipeworx/dc-code pack
https://gateway.pipeworx.io/dc-code/mcp — only @pipeworx/dc-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
District of Columbia Code (D.C. Code — DC statutes) — full section text by citation, and topic/chapter search over official headings.
Tools
dc_statute(citation)— full current text of one D.C. Code section (e.g."22-2101", murder in the first degree), with the official heading, disposition (in force / repealed / transferred / reserved), legislative History annotations, Prior Codifications, and Cross References.dc_search(query?, title?, limit?)— topic/keyword search over every section’s official heading (e.g."eviction notice","concealed carry permit"), optionally scoped to onetitle. Passtitlealone (noquery) to list every section under that title — a chapter-list/browse mode. Not full-text search — the DC Council does not publish one.
Auth
Keyless.
Data sources
https://raw.githubusercontent.com/DCCouncil/law-xml-codified/{branch}/us/dc/council/code/titles/{title}/sections/{citation}.xml— one section’s current XML (its heading, body text, and annotations).dc_statutecalls this live, per request, pinned to the branch baked below.- Same repo’s
us/dc/council/code/index.xmlandtitles/{title}/index.xml— structure only (title/chapter/subchapter headings + section citation lists, no catchlines). Used only byscripts/bake-index.mjs. https://api.github.com/repos/DCCouncil/law-xml-codified/branches— used only byscripts/bake-index.mjsto resolve the current publication branch (see below).
Licence — public domain, and why this pack is allowed to bake an index
code.dccouncil.gov’s own footer: “The codes and laws on this website are in
the public domain.” The same footer: “Please do not scrape. Instead, bulk
download the HTML or XML” from the Council’s GitHub organization. This pack
follows that instruction literally — it never touches code.dccouncil.gov,
only raw.githubusercontent.com content from DCCouncil/law-xml-codified.
Public-domain content plus the publisher’s own explicit redistribution
channel means baking a catchline index from this repo needs no separate
grant (root CLAUDE.md, “mirror-needs-grant-proxy-does-not” — the
licence-permits-it branch, not the silent/forbidden one). Statutory text
itself is also never baked — dc_statute always fetches it live, per call.
The default-branch trap
GET /repos/DCCouncil/law-xml-codified reports default_branch: "publication/2021-10-18" — real git metadata, frozen at a 2021
codification, five years stale, even though the repo is actively published:
406 branches existed at bake time, the newest a
publication/{base-date}.{amendment-date} pair updated within days.
GitHub’s “default branch” setting is unrelated to which branch is current.
scripts/bake-index.mjs lists every branch (paginated, ~5 unauthenticated
requests) and picks the lexicographically-latest name — safe because every
name is an ISO-8601 date or a dotted pair of them, so string order is
chronological order. The resolved name is baked as DC_CODE_BRANCH and is
what dc_statute’s live fetch pins to.
Section XML shape
A short section is one flat <text> element; a section with
lettered/numbered subsections nests <para> elements, each with its own
<num> (“(a)”) and <text>, repeatedly — sometimes nested one level
deeper. A reason element reading “Repealed” (or Reserved/Transferred)
marks a non-substantive stub whose body text is literally “Repealed.” —
surfaced as disposition rather than left for the caller to infer. A
trailing annotations block (History, Prior Codifications, Cross
References, Editor’s Notes) is excluded from the body-text walk and returned
as its own grouped fields.
One parsing trap worth knowing: a num or heading element can carry a
NESTED inline element (e.g. Title 7 Chapter 2B’s chapter number carries an
embedded effective-date annotation tag inside its own num element) — a
tight “no-nested-tag” regex silently drops that chapter’s number instead of
erroring. scripts/bake-index.mjs strips any nested tag content rather than
assuming num/heading are always tag-free.
Capabilities — two available, two are not
- Citation lookup —
dc_statute. Direct URL construction from the citation; no index lookup needed (title is the citation’s own prefix before its first-). - Topic/chapter search —
dc_search, over official headings only (see below). Matches 24,198 sections’ real headings, baked once perscripts/bake-index.mjsrun — see its header for why per-section fetches were unavoidable (the index tree carries no catchlines, unlike South Dakota’s or Oklahoma’s siblings). - Amendments/enactment history — PARTIALLY AVAILABLE. Every amended
section’s
annotationsblock carries one or moretype="History"entries naming the enacting/amending Act;dc_statutereturns these ashistory. There is no single canonical “effective date” field separate from these citations. - Historical version (the text as it read before an amendment) — NOT
AVAILABLE.
DCCouncil/law-xml-codifiedpublishes only the CURRENT codified text, no per-amendment archive and no endpoint returning a prior version’s text.
Refresh path
DC Council publishes a new amendment branch roughly every few days and a new
base codification a few times a year. Re-run
node scripts/bake-index.mjs > src/dc-index-data.ts whenever a caller’s
index_live_mismatch or a stale data_as_of suggests the baked index has
fallen behind the live branch — nothing else in the pack needs to change;
dc_statute always fetches section text live, pinned to whatever branch the
bake most recently resolved. No scheduled workflow exists for this (same as
every sibling state-code pack in this family) — it is a manual re-run.
Tools
- dc_statute — Get the FULL TEXT of a section of the District of Columbia Code (D.C. Code) — DC statutes — by citation. “22-2101” is murder in the first degree; “42-3505.01” covers eviction notice requirements. Acce
- dc_search — Search the District of Columbia Code by TOPIC/keyword, and/or browse one TITLE’s chapters and sections. Pass “query” to search official section headings (catchlines) — e.g. “landlord eviction notice”,
Tools
dc_search— Search the District of Columbia Code by TOPIC/keyword, and/or browse one TITLE's chapters and sections. Pass query to search official section headings (catchlines) — e.g. landlord eviction notice , codc_statute— Get the FULL TEXT of a section of the District of Columbia Code (D.C. Code) — DC statutes — by citation. 22-2101 is murder in the first degree; 42-3505.01 covers eviction notice requirements. Accepts