cyanheads avatar

Federal Regulations Mcp Server

cyanheads/federal-regulations-mcp-server

If you've ever tried to trace a federal rule from its proposal to its final codified text, you know it means hopping between three different government systems. This server puts all three behind MCP tools. `regulations_search_rules` queries the Federal Register by type, agency, CFR part, docket, RIN, or signing date, and can resolve a page cite like "89 FR 49102" to its document. `regulations_get_cfr_section` reads codified CFR text, including what a section said on a past date, while `regulations_browse_cfr` searches the full CFR. From there, `regulations_get_docket` and `regulations_find_comments` pull Regulations.gov dockets and public comments, and `regulations_list_open_comments` shows what's currently accepting input. Reach for it when you need a rule's full paper trail, not just its headline. It runs over STDIO or Streamable HTTP, and a public hosted instance is available if you'd rather not run it yourself.

GitHub stars
2
tools
7
auth
Secret needed
transport
STDIO, HTTP
env vars
9
last updated
Oct 29, 2026

Install

From registry metadata
$ npx add-mcp https://federal-regulations.caseyjhand.com/mcp --name federal-regulations

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http federal-regulations https://federal-regulations.caseyjhand.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 7 tools

Verified live against the running server on Nov 13, 2026.

regulations_search_rulesSearch the Federal Register — the daily journal of US proposed rules, final rules, notices, and presidential documents (1994–present) — filtering by full-text query, document type, agency slug, publication date range, affected CFR title and part, printed docket number, RIN, EO...22 params

Search the Federal Register — the daily journal of US proposed rules, final rules, notices, and presidential documents (1994–present) — filtering by full-text query, document type, agency slug, publication date range, affected CFR title and part, printed docket number, RIN, EO...

Parameters* required
agenciesarray
Filter to one or more agencies by Federal Register agency slug (e.g. "environmental-protection-agency", "securities-and-exchange-commission") — lowercase kebab-case, not a name or acronym. Every re...
cfr_partstring
Only documents whose cfrReferences list this part of cfr_title: a part number ("141") or a range ("140-143"), such as the part regulations_get_cfr_section just read; a "Part" or "pt." prefix is dro...
cfr_titleinteger
Only documents whose affected CFR parts (cfrReferences) fall in this title (1–50) — such as the title regulations_get_cfr_section just read. Alone it filters to the title; with cfr_part, to that part.
citationvalue
A Federal Register page cite, "89 FR 49102" (volume FR page) — such as one from the source note that ends a regulations_get_cfr_section bodyText. Returns the documents printed on that page, usually...
citation_datevalue
The publication date printed beside the cite in the source note (YYYY-MM-DD) — "89 FR 49102, June 11, 2024" is 2024-06-11. Required with citation; its year is the volume + 1935.
docket_idstring
Only documents carrying this docket number as the Federal Register prints it — a docketIds entry from a result here or from regulations_get_document, with or without a wrapper such as "Docket No."....
effective_aftervalue
Earliest effective date (YYYY-MM-DD) — documents taking effect on or after it.
effective_beforevalue
Latest effective date (YYYY-MM-DD).
executive_order_numberinteger
Only the executive order with this number (14192), as presidential.number on a result carries it. A full-text query on the number instead matches every document that cites the order.
orderstring
Result order. Defaults to relevance with a query, newest without one. relevance without a query falls back to newest first; oldest lists the earliest publications first. Ignored with citation, whos...one of relevance · newest · oldest
pageinteger
Page number (1–50, default 1). The Federal Register serves 50 pages, so a query reaches 50 × per_page matches (5,000 at per_page 100); totalPages and nextPage in the response say how far this one g...default: 1
per_pagenumber
Results per page (at least 2, default 20, capped at 100 with a notice). The Federal Register API treats exactly 1 as its default page size instead of returning one result.default: 20
presidentstring
Only presidential documents issued by this president, by slug: william-j-clinton, george-w-bush, barack-obama, donald-trump, joe-biden (presidential.president.slug on a result). An unknown slug fai...
presidential_document_typearray
Only presidential documents of these subtypes. notice is a presidential notice, not type NOTICE.
published_aftervalue
Earliest publication date, ISO 8601 (YYYY-MM-DD), a real calendar day. Combine with published_before to window large result sets — the FR caps navigation at 50 pages.
published_beforevalue
Latest publication date, ISO 8601 (YYYY-MM-DD), a real calendar day.
querystring
Full-text search across document title and body. Omit to browse by filters alone (e.g. all EPA proposed rules in a date range).
rinstring
Only documents carrying this Regulation Identifier Number — a regulationIdNumbers entry such as "2040-AG18", which follows one rulemaking from proposal to final rule. Pass the complete RIN: a fragm...
signed_aftervalue
Earliest signing date of a presidential document (YYYY-MM-DD). Signing precedes publication by days to weeks, so this window differs from published_after/published_before.
signed_beforevalue
Latest signing date of a presidential document (YYYY-MM-DD).

+2 more parameters. See the server's own documentation for the full schema.

regulations_get_documentFetch one Federal Register document by its FR document number — full metadata (title, type, agencies, abstract, action, effective/comment dates, RINs, EO 12866 significance, and for a presidential document its subtype, number, signing date, and president) plus the cross-source...4 params

Fetch one Federal Register document by its FR document number — full metadata (title, type, agencies, abstract, action, effective/comment dates, RINs, EO 12866 significance, and for a presidential document its subtype, number, signing date, and president) plus the cross-source...

Parameters* required
document_number*string
Federal Register document number, as regulations_search_rules returns it in documentNumber: "2024-07773" from 2010 on, older and correction numbers like "98-1572", "E9-25990", or "C1-2009-30484".
include_full_textboolean
When true, inline one window of the document body as plain text (see offset and max_chars). Omitted, the body URLs alone come back unless offset or max_chars is passed; fetch full text only when yo...
max_charsnumber
Most body characters to return in this window (at least 1, default 64,000, capped at 200,000 with a notice). Implies include_full_text.
offsetinteger
Character offset into the plain-text body where the window starts (default 0). Pass the fullTextNextOffset from the previous call to read on. Implies include_full_text.
regulations_browse_cfrExplore the codified Code of Federal Regulations via eCFR in three modes. "structure" lists all 50 titles; with a title, that title's top-level divisions (its chapters, or subtitles); and with a title and part, every section and appendix in the part, flattened and paged, each...9 params

Explore the codified Code of Federal Regulations via eCFR in three modes. "structure" lists all 50 titles; with a title, that title's top-level divisions (its chapters, or subtitles); and with a title and part, every section and appendix in the part, flattened and paged, each...

Parameters* required
changed_sincevalue
Versions mode: keep only versions published by an eCFR issue dated on or after this day (YYYY-MM-DD). With title alone, lists what changed across the title. Ignored in other modes.
datevalue
Point-in-time date, ISO 8601 (YYYY-MM-DD). Defaults to current. Structure mode uses it for the historical hierarchy, and rejects a date past the title's up-to-date date. Search mode matches only th...
mode*string
"structure": list titles, a title's top-level divisions, or a part's sections and appendices, to find a cite. "search": full-text search the codified CFR for sections matching a phrase. "versions":...one of structure · search · versions
pageinteger
1-based page of search results, of a part's listing in structure mode, or of versions (default 1); ignored by a structure listing above a part, which comes back whole. A truncation notice names the...default: 1
partstring
CFR part within the title, in every mode — structure mode lists every section and appendix in the part, flattened and paged by page/per_page; search mode restricts matches to text inside that part;...
per_pagenumber
Rows per page — search results, nodes of a part's listing in structure mode, or versions (at least 1, default 20, capped at 50 with a notice).default: 20
queryvalue
Full-text search phrase (search mode, required in that mode). Ignored in structure and versions modes.
sectionstring
Versions mode: list one section's versions rather than its part's ("141.61"). Requires part. "61", "§ 141.61", "141.61(c)", and "40 CFR 141.61" resolve to the section, with a notice. Ignored in oth...
titleinteger
CFR title number (1–50). Structure mode: omit to list all 50 titles; provide it alone to list the title's top-level divisions (chapters, or subtitles) — not the parts beneath them — or with part to...
regulations_get_cfr_sectionRead the codified text at a CFR location via eCFR — current or as of a past date. Answers "what does 40 CFR 50.1 say today?" and "...as of 2019-01-01?". Three locations: title + part + section for one section; title + part alone for the whole part, with its Authority and Sourc...7 params

Read the codified text at a CFR location via eCFR — current or as of a past date. Answers "what does 40 CFR 50.1 say today?" and "...as of 2019-01-01?". Three locations: title + part + section for one section; title + part alone for the whole part, with its Authority and Sourc...

Parameters* required
appendixvalue
Appendix identifier, verbatim as eCFR writes it — the `appendix` field or the leading phrase of the `cfrCite` on a regulations_browse_cfr appendix node or search hit. It is free-form prose, not a l...
datevalue
Point-in-time date, ISO 8601 (YYYY-MM-DD). Default current. eCFR serves 2017-01-01 through the title's up-to-date date, usually a few days behind today; a date outside that window is rejected, nami...
max_charsnumber
Most text characters to return in this window (at least 1, default 64,000, capped at 200,000 with a notice).
offsetinteger
Character offset into the text where the window starts (default 0). Pass bodyTextNextOffset from the previous call to read on, or a sections[].offset from a whole-part read to jump to that section.
partstring
CFR part within the title (e.g. "50"). Parts can be alphanumeric; a leading "Part" or "Pt." is dropped ("Part 141" reads part 141). Required unless appendix is given, where it is optional but recom...
sectionvalue
Section within the part, normally written part.section as eCFR identifies it ("141.61"). Also accepted: the number alone ("61" in part 141), a leading "§" or "Sec.", a paragraph cite ("141.61(c)"),...
title*integer
CFR title number (1–50). E.g. 40 for "Protection of Environment".
regulations_get_docketPull a rulemaking docket from Regulations.gov by docket ID (e.g. "EPA-HQ-OAR-2025-0194") — the docket's metadata (title, agency, RIN, abstract) and the documents filed in it (NPRM, final rule, supporting materials) — or read one document by document_id for its file download UR...6 params

Pull a rulemaking docket from Regulations.gov by docket ID (e.g. "EPA-HQ-OAR-2025-0194") — the docket's metadata (title, agency, RIN, abstract) and the documents filed in it (NPRM, final rule, supporting materials) — or read one document by document_id for its file download UR...

Parameters* required
docket_idvalue
List mode: Regulations.gov docket ID (e.g. "EPA-HQ-OAR-2025-0194"). Obtain from regulationsGovDocketId on a regulations_search_rules or regulations_list_open_comments row, or docketId from regulati...
document_idvalue
Detail mode: one document by Regulations.gov document ID (e.g. "EPA-HQ-OW-2022-0114-3084") — documentId from a docket listing, or regulationsGovDocumentId from regulations_get_document. Returns its...
document_typesarray
List mode: filter the docket's documents to these types. Omit for all. A docket often contains hundreds of "Supporting & Related Material" items — filter to "Proposed Rule"/"Rule" to find the rule...
pageinteger
Page number (1–40, default 1). Regulations.gov serves 40 pages, so a docket listing reaches 40 × per_page documents (10,000 at per_page 250); totalPages and nextPage in the response say how far thi...default: 1
per_pagenumber
Documents per page (at least 5, default 25, capped at 250 with a notice). Regulations.gov requires a minimum page size of 5.default: 25
search_termstring
List mode: keep only the docket's documents whose text matches, as Regulations.gov full-text search reads it, ranked by relevance instead of newest first. Combines with document_types.
regulations_find_commentsFetch public comments on a Federal Register document or a Regulations.gov docket — the unique corpus of what citizens and organizations actually submitted. Provide exactly one targeting parameter: docket_id (all comments in a docket, broadest), document_object_id (comments on...9 params

Fetch public comments on a Federal Register document or a Regulations.gov docket — the unique corpus of what citizens and organizations actually submitted. Provide exactly one targeting parameter: docket_id (all comments in a docket, broadest), document_object_id (comments on...

Parameters* required
comment_idstring
Fetch one comment's full detail and attachments by its Regulations.gov comment ID (e.g. "EPA-HQ-OAR-2025-0194-31102"). Use to read a single comment's body after finding it in a list. Mutually exclu...
docket_idstring
Fetch all comments in a docket by Regulations.gov docket ID (e.g. "EPA-HQ-OAR-2025-0194") — regulationsGovDocketId on a regulations_search_rules or regulations_list_open_comments row, or docketId f...
document_object_idstring
Fetch comments on one specific Regulations.gov document, by either handle: its object ID, 16 hex characters (e.g. "0900006485883ec6", the objectId in regulations_get_docket's documents), or its doc...
fr_document_numbervalue
Convenience: fetch comments on the Regulations.gov document carrying a Federal Register number (e.g. "2023-05471"; older numbers like "E9-25990" too). A Regulations.gov document ID ("EPA-HQ-OW-2022...
pageinteger
Page number (1–40, default 1). Regulations.gov serves 40 pages, so a list reaches 40 × per_page comments (10,000 at per_page 250); totalPages and nextPage in the response say how far this one goes....default: 1
per_pagenumber
Comments per page (at least 5, default 25, capped at 250 with a notice). Regulations.gov requires a minimum page size of 5.default: 25
posted_aftervalue
List mode: earliest posted date, inclusive, ISO 8601 (YYYY-MM-DD), a real calendar day. Pair with posted_before to take a high-volume set one window at a time.
posted_beforevalue
List mode: latest posted date, inclusive, ISO 8601 (YYYY-MM-DD), a real calendar day. The same date as posted_after selects that one day.
search_termstring
List mode: keep only comments whose text matches, as Regulations.gov full-text search reads it — stemmed, so "flaring" also matches "flare" and "flares". Each hit then carries highlightedContent, t...
regulations_list_open_commentsList Federal Register documents currently open for public comment, sorted by closing date (soonest first) across the whole open window, filterable by document type, agency slug, and topic. "What can I still weigh in on?" Covers proposed rules and the final rules that take comm...6 params

List Federal Register documents currently open for public comment, sorted by closing date (soonest first) across the whole open window, filterable by document type, agency slug, and topic. "What can I still weigh in on?" Covers proposed rules and the final rules that take comm...

Parameters* required
agenciesarray
Filter to one or more agencies by Federal Register agency slug (e.g. "environmental-protection-agency") — lowercase kebab-case, not a name or acronym. Every row lists its agencies with their slugs;...
closing_beforevalue
Only documents whose comment period closes on or before this date, ISO 8601 (YYYY-MM-DD), a real calendar day. Use to find deadlines you need to act on soon.
pageinteger
Page number, default 1. Pages run over the whole open window in closing-date order; totalPages and nextPage in the response say how far it goes.default: 1
per_pagenumber
Documents per page (at least 1, default 20, capped at 100 with a notice).default: 20
querystring
Full-text filter across open documents. Omit to list every document currently open for comment.
typearray
Document types to include: PRORULE (proposed rules), RULE (final rules that request comment, including direct final and interim final rules), NOTICE (information-collection and other notices with c...

Sponsors

Configuration

REGULATIONS_GOV_API_KEYsecret

api.data.gov key for the Regulations.gov tools (get_docket, find_comments). Free at https://api.data.gov/signup/. The Federal Register and eCFR tools work without it.

REGULATIONS_CLAMP_LIMITSdefault: true

Serve a per_page or max_chars above its ceiling at the ceiling, with a notice. Set false to advertise and enforce the ceiling as a schema maximum instead.

MCP_LOG_LEVELdefault: info

Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

MCP_TRANSPORT_TYPEdefault: http

Selects the HTTP transport.

MCP_HTTP_HOSTdefault: 127.0.0.1

The hostname for the HTTP server.

MCP_HTTP_PORTdefault: 3010

The port to run the HTTP server on.

MCP_HTTP_ENDPOINT_PATHdefault: /mcp

The endpoint path for the MCP server.

MCP_AUTH_MODEdefault: none

Authentication mode to use: 'none', 'jwt', or 'oauth'.

ECFR_MIRROR_REFRESH_CRON

Cron expression for an in-process eCFR mirror refresh (e.g. '0 4 * * 0'). Unset registers no job. Each run re-harvests every configured title in full, and a tick is skipped until mirror:init has completed once.

Readme

@cyanheads/federal-regulations-mcp-server

Search and trace US federal rules across the Federal Register (proposed/final rules, notices, and presidential documents), the eCFR (codified, point-in-time CFR full text and amendment history, locally mirrored), and Regulations.gov (rulemaking dockets, document files, and public comments) via MCP. STDIO or Streamable HTTP.

7 Tools • 3 Resources

Details

Repository
github.com/cyanheads/federal-regulations-mcp-server
Categories
Search & Web Crawling, Monitoring & Observability
Package
@cyanheads/federal-regulations-mcp-server
Transport
STDIO, HTTP
Auth
Required
Registry
MCP registry, active
Resources
3
Tools verified
Nov 13, 2026

More from cyanheads

Related Search & Web Crawling MCP servers

View all
1cyanheads avatarOpenfoodfacts Mcp Servercyanheads/openfoodfacts-mcp-serverBarcode lookup, nutrition search, and product comparison for 3M+ crowd-sourced food products.2stars
2cyanheads avatarReliefweb Mcp Servercyanheads/reliefweb-mcp-serverSearch ReliefWeb humanitarian reports, disasters, jobs, training, and country profiles via MCP.2stars
3cyanheads avatarSmithsonian Mcp Servercyanheads/smithsonian-mcp-serverSearch 14.5M Smithsonian Open Access objects, get CC0 images, find cross-collection connections.2stars
4cyberpapiii avatarImessage Maxcyberpapiii/imessage-maxAI-optimized MCP server for iMessage on macOS. Read, search, and send messages.2stars
5davooxbv2 avatarClishopdavooxbv2/clishopOrder anything from your terminal — search, buy, track, and manage via MCP tools.2stars
6cotletdev avatarQuora MCP Server and API by Cotletcotletdev/quora-api-mcp-serverQuora questions and answers community MCP server: search questions, post answer, list my answers.0stars