@pipeworx/tennessee-code
Connect: https://pipeworx.io/mcp — every tool in the catalog, including @pipeworx/tennessee-code’s. Install: one-click buttons
Connect to just the @pipeworx/tennessee-code pack
https://gateway.pipeworx.io/tennessee-code/mcp — only @pipeworx/tennessee-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
Tennessee Code Annotated (T.C.A.) — state statutes by citation and by official catchline (topic search). Keyless.
This pack serves a POINT-IN-TIME SNAPSHOT dated 2021-05-21, not the current code. Read “Why this is a snapshot” below before using it for anything where the exact current text matters — it says so on every response too.
Tools
tn_statute(citation)— full text of a T.C.A. section by citation (“39-13-202” is first degree murder; “66-28-301” is the security-deposit statute). Resolves the citation’s title via a baked index, fetches that title’s HTML live, and cuts the section out of it by its own unique anchor id.tn_search(query, limit?)— topic/keyword search over the baked citation + official-catchline index (not full statutory body text).
Auth
Keyless.
Why this is a snapshot, not the current code
Tennessee’s own publishing arrangement routes the maintained, current TCA
exclusively through LexisNexis’s advance.lexis.com — a cookie/session-gated
SPA with no stable per-citation URL, confirmed live (traced
lexisnexis.com/hottopics/tncode -> advance.lexis.com/container?config=...,
which immediately probes for cookie support and only then begins any
client-side render). That is the same class of wall this pack family treats
as OUT (ASP.NET postback / anti-bot / JS-rendered SPA).
There is no OTHER official electronic route, and that absence is litigated,
not merely undocumented: Public.Resource.Org v. Matthew Bender & Co., 686
S.W.3d 1 (Tenn. Ct. App. 2023) (further appeal denied by the Tennessee
Supreme Court, 2024), held that Tennessee’s Public Records Act does not reach
the electronic TCA, because LexisNexis is a private contractor performing
services for the Code Commission under a separate statutory arrangement
(T.C.A. § 1-2-114), not a state agency holding a public record. Having lost
that fight — and having lost electronic access to the Code even before filing
it — Public.Resource.Org had UniCourt scan and transform the print
volumes, publishing the result at https://unicourt.github.io/cic-code-tn/:
“This repository was created by UniCourt on behalf of Public.Resource.Org. All this work is in the public domain and there are NO RIGHTS RESERVED.” — Release 76, dated 2021.05.21.
That public-domain claim rests on the same “edict of government” theory the
U.S. Supreme Court confirmed for Georgia’s own annotated code in Georgia
v. Public.Resource.Org, 590 U.S. 255 (2020) — and this is literally the
same transform pipeline (cic-beautify-state-codes) and the same stylesheet
reference this repo already trusts for mcps/georgia-code’s upstream.
The same release is also uploaded to archive.org as item gov.tn.tca
(byte-identical statutory text, verified directly). This pack calls the
GitHub Pages copy instead, for two concrete reasons found during
development, not a preference in the abstract:
- Reliability/latency. archive.org’s mirror nodes answered this release
with multiple transient HTTP 500s and multi-second-to-indefinite stalls
while baking the index and smoke-testing
tn_statute(a 7.2MB title took 12.9s on one call and simply never returned on another, even with a 60s client timeout and 3 retries). GitHub Pages was consistently sub-second for the same files, every time. - Completeness. archive.org’s own upload of Title 47 (Commercial
Instruments and Transactions / UCC) carries a LexisNexis ”© … All
rights reserved” notice and different markup entirely (
p.p5) instead of PRO’s public-domain transform (span.boldspan) that every other title there carries — evidently a bad upload of that one file. UniCourt’s copy of Title 47 is the correct public-domain transform, like all 67 other titles. All 68 published titles are covered by this pack as a result (archive.org’s copy would only support 66, with Title 47 and one other transient-failure title missing).
No newer release exists anywhere. Checked both the UniCourt index page’s
own “Release NN dated YYYY.MM.DD” listing and archive.org’s separate upload:
release 76 (2021.05.21) is the newest either has. The 2023-2024 litigation
above is why — Public.Resource.Org was fighting to restore a current
electronic feed and lost. So every response from this pack carries
current_through and data_as_of stating 2021-05-21 explicitly. Roughly
five Tennessee legislative sessions (2021-2025) of amendments are NOT
reflected.
Other free routes were checked and ruled out, not merely skipped:
| Candidate | Result |
|---|---|
wapp.capitol.tn.gov / capitol.tn.gov (TN General Assembly) | Publishes Public Chapters (session laws as passed) and bill text, but no consolidated current code — its own “Tennessee Code” link routes to the same LexisNexis wall above. Session laws are a DIFFERENT document from the codified TCA (see “Public Chapters are not the Code” below). |
law.justia.com/codes/tennessee/ | Serves Cloudflare’s “Just a moment” managed JS challenge (HTTP 403, cf_chl_opt present) to a bare fetch — not a bypassable bare-UA gate, the same bot-wall class this pack family treats as OUT. Google’s own crawler evidently gets through (indexed pages appear in search), a plain HTTP client does not. |
codes.findlaw.com/tn/ | Same Cloudflare managed challenge, same result. |
law.resource.org/pub/us/code/tn/ | This is the litigation docket for the lawsuit above (court filings, 2021-2024), not a code mirror. The actual scanned text lives in the two mirrors above, not on law.resource.org’s own file tree. |
SOS (sos.tn.gov) | Publishes Acts and Resolutions (session laws), not a consolidated code; it directs electronic TCA requests to LexisNexis per the Code Commission’s arrangement. |
Public Chapters are not the Code
Tennessee’s General Assembly publishes Public Chapters — the session
laws as enacted, year by year, e.g.
capitol.tn.gov/Archives/Joint/publications/PublicChapters/2024/... — and
these ARE current and free. But a Public Chapter is an amending instrument
(“AN ACT to amend Tennessee Code Annotated, Title 47…”) , not the
codified text itself — reading one tells you a change happened, not what the
amended section now reads as a whole next to the rest of the code. This pack
does not attempt to fold session laws into the frozen 2021-05-21 text (that
reconciliation is exactly what a Code Commission codification does, and is
out of scope here) — it would be dishonest to call that composite “the
current code” without doing the actual reconciliation work. If a caller needs
what changed since 2021, they need the Public Chapters directly, not this
pack.
Four capabilities — two available, two are not
- Citation lookup — available (
tn_statute), across all 68 titles. - Topic/keyword search — available (
tn_search), but it matches OFFICIAL CATCHLINES (section/chapter headings), not full statutory body text — the same shape asmcps/north-dakota-code’snd_search. There is no live full-text search available for this source (it is a static scan, not a search API). - Amendments/enactment history — partially available: the “Acts YYYY,
ch. N, § N; …” legislative-history line that follows most amended
sections is included in
tn_statute’stextand, when it parses cleanly, surfaced separately ashistory. A section never amended since its original enactment may carry no such line at all. - Historical version (a section’s text as it read before a given amendment) — not available beyond whatever this one 2021-05-21 snapshot preserves. There is no per-year archive the way Colorado or Indiana publish, and the live site that would have one (LexisNexis) is the wall this pack cannot reach.
Cutting a section out of its title file
Unlike most sibling state-code packs, there is no heading-regex ambiguity to
resolve here: Public.Resource.Org’s transform already gives every section a
unique anchor id (id="t{title}c{chapter}s{citation}", e.g.
id="t39c13s39-13-202" for 39-13-202). tn_statute cuts from that id to
whichever comes first: the next section’s id, the next chapter’s <h2>, or
the title’s own h4#...-NOTESTODECISIONS heading — the point where
the annotated text switches from the statute (plus its own legislative/
compiler notes) to a digest of case law. That case-law digest is excluded
from every response, the same editorial-vs-statute line mcps/colorado-code
draws before its own “ANNOTATION” block.
One markup difference from archive.org’s upload of the same release:
UniCourt’s HTML uses a bare <br /> between “Title NN”/“Chapter NN” and the
name, where archive.org’s copy used span.headbreak (empty) —
scripts/bake-index.mjs’s title/chapter regexes accept either, in case a
future release reintroduces the other convention.
Refresh path
Re-run the bake script if Public.Resource.Org/UniCourt ever posts a newer release (it always resolves the SITE’S OWN latest “Release NN dated YYYY.MM.DD” line rather than hard-coding 76):
node mcps/tennessee-code/scripts/bake-index.mjs > mcps/tennessee-code/src/tn-index-data.ts
It fetches all ~68 title files (~145MB total) with a short pause between
requests, and fails loudly rather than silently if it parses suspiciously few
rows — that would mean the source’s markup changed, not that the Code got
smaller. TN_EXCLUDED_TITLES stays wired in as a defensive check: a title
whose HTML does not carry PRO’s “is in the public domain” sentence is
dropped and named there rather than silently served as if it were public
domain (empty today — every title in this release passes).
Citations
Tennessee cites by title-chapter-section, e.g. “39-13-202” (Title 39,
Chapter 13, Section 202: First degree murder) or “66-28-301” (Title 66,
Chapter 28, Section 301: security deposits). tn_statute looks the citation
up against the baked index directly rather than parsing it into parts, so any
suffix shape the index itself uses (e.g. a lettered subsection like
“39-17-417(a)”) round-trips correctly as long as it matches an indexed id
exactly.
Data sources
https://unicourt.github.io/cic-code-tn/— the release index page. Read once per bake, not per call, to resolve the current release tag.https://unicourt.github.io/cic-code-tn/transforms/tn/octn/r76/gov.tn.tca.title.{NN}.html— one title’s full text (statute + legislative notes + case-law digest). Baked ONCE intosrc/tn-index-data.tsas a citation+catchline index (NOT statutory text);tn_statutefetches the specific title live on every call and extracts just the requested section.
Both are plain, keyless, static files on GitHub Pages — no login, no JS, no rate limit observed, consistently sub-second during development.
Tools
- tn_statute — Get a section of the Tennessee Code Annotated (T.C.A.) — Tennessee state law — by citation.
- tn_search — Search the Tennessee Code Annotated (T.C.A.) BY TOPIC or keyword rather than citation —
Tools
tn_search— Search the Tennessee Code Annotated (T.C.A.) BY TOPIC or keyword rather than citation —tn_statute— Get a section of the Tennessee Code Annotated (T.C.A.) — Tennessee state law — by citation.