federal-regulations-mcp-server
An open-source MCP server that allows AI agents to search the Federal Register for proposed and final rules, browse and read codified text from the eCFR, and access rulemaking dockets and public comments from Regulations.gov. It supports filtering by agency, date, CFR part, and document type, enabling comprehensive tracking of US federal regulatory changes.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://federal-regulations.caseyjhand.com/mcpWhat its tools do
7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search Federal Register for proposed or final rules by agency or date range
- Read codified CFR text for a specific section or part
- Fetch public comments on a specific rulemaking docket
- Trace a rule from proposal through public comments to codified text
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- federal-regulations-mcp-server 0.6.1
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 7 advertised
- Resources
- 3 advertised
- Resource templates
- 3 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": true,
"listChanged": true
},
"extensions": {
"io.modelcontextprotocol/skills": {
"directoryRead": true
}
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
7 advertised
regulations_search_rules — regulations_search_rules
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 12866 significance, effective date range, and for presidential documents the executive order number, subtype, president, and signing date range, all combined. A page cite from a CFR source note ("89 FR 49102", with its date) resolves to the documents printed on that page. The primary discovery entry point: results carry the document number (open with regulations_get_document), its citation and page range, each issuing agency with its filterable slug, printed docket numbers, Regulations.gov docket and document IDs, comment count and comment URL, whether the comment period is open, RINs, significance, presidential-document identifiers, and affected CFR parts that chain into the comment and codified-text tools. A query ranks by relevance unless order says otherwise; filter-only browsing lists newest first. The Federal Register caps navigation at 50 pages and the match count at 10,000; when a result set is larger, narrow with published_after/published_before rather than paging deeper.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"rin": {
"type": "string",
"description": "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 fragment (\"2040\") matches every RIN that contains it."
},
"page": {
"type": "integer",
"default": 1,
"maximum": 50,
"minimum": 1,
"description": "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 goes. To reach past that, narrow with published_after/published_before rather than paging deeper."
},
"type": {
"type": "array",
"items": {
"enum": [
"PRORULE",
"RULE",
"NOTICE",
"PRESDOCU"
],
"type": "string"
},
"description": "Document types to include. PRORULE=Proposed Rule, RULE=Final Rule, NOTICE=Notice, PRESDOCU=Presidential Document. Omit for all types."
},
"order": {
"enum": [
"relevance",
"newest",
"oldest"
],
"type": "string",
"description": "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, whose matches come in page order."
},
"query": {
"type": "string",
"description": "Full-text search across document title and body. Omit to browse by filters alone (e.g. all EPA proposed rules in a date range)."
},
"agencies": {
"type": "array",
"items": {
"type": "string"
},
"description": "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 result lists its agencies with their slugs; if unsure, search by query and read agencies[].slug off a result. One unrecognized slug fails the whole request."
},
"cfr_part": {
"type": "string",
"description": "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 dropped. Requires cfr_title. A part with a letter in it (\"1203a\") cannot be filtered on. Unlike a query of \"40 CFR 141\", which matches documents that mention the part, this matches the documents whose CFR references list it."
},
"citation": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\s*(\\d{1,3})\\s*[Ff]\\.?\\s?[Rr]\\.?\\s*(\\d{1,6})\\s*$",
"description": "Federal Register volume and page, \"89 FR 49102\"."
}
],
"description": "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 one and sometimes a few sharing it, ordered by start page. Requires citation_date and replaces published_after/published_before. Volume 59 (1994) onward."
},
"per_page": {
"type": "number",
"default": 20,
"minimum": 2,
"multipleOf": 1,
"description": "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."
},
"cfr_title": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "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."
},
"docket_id": {
"type": "string",
"description": "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.\". Lists a docket's Federal Register documents with no REGULATIONS_GOV_API_KEY. A Regulations.gov docket ID matches only where the Federal Register prints it. Pass the complete number: a fragment (\"FAA-2026\") matches every docket that contains it."
},
"president": {
"type": "string",
"description": "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 fails the request."
},
"significant": {
"type": "boolean",
"description": "true: only documents the Federal Register flags significant under EO 12866. false: only documents flagged not significant. Documents with no determination — every presidential document and most notices — match neither."
},
"signed_after": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "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."
},
"citation_date": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "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."
},
"signed_before": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "Latest signing date of a presidential document (YYYY-MM-DD)."
},
"effective_after": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "Earliest effective date (YYYY-MM-DD) — documents taking effect on or after it."
},
"published_after": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "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."
},
"effective_before": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "Latest effective date (YYYY-MM-DD)."
},
"published_before": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "Latest publication date, ISO 8601 (YYYY-MM-DD), a real calendar day."
},
"executive_order_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "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."
},
"presidential_document_type": {
"type": "array",
"items": {
"enum": [
"determination",
"executive_order",
"memorandum",
"notice",
"other",
"presidential_order",
"proclamation"
],
"type": "string"
},
"description": "Only presidential documents of these subtypes. notice is a presidential notice, not type NOTICE."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"results",
"totalCount",
"totalPages"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The most matches 50 pages reach at this per_page (50 × per_page); set with truncated."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"upstream_unavailable",
"invalid_filter",
"type_conflict",
"date_range_inverted",
"title_required_for_part",
"citation_incomplete",
"citation_out_of_range"
],
"description": "Machine-readable failure mode. Declared by this tool: `upstream_unavailable`: Federal Register returned a 5xx, timed out, or served an HTML error page. `invalid_filter`: The Federal Register rejected a filter value — most often an agency name or acronym passed where a slug belongs. `type_conflict`: A presidential filter (executive_order_number, presidential_document_type, president, signed_after/signed_before) was combined with a type that leaves out PRESDOCU, or significant with a search limited to presidential documents, which carry no significance determination. `date_range_inverted`: The start of a date range is later than its end. `title_required_for_part`: cfr_part was given with no cfr_title. Part numbers repeat across titles, and the Federal Register rejects a part filter that names no title. `citation_incomplete`: citation or citation_date was given without the other, or together with published_after/published_before. `citation_out_of_range`: The cite's volume predates the Federal Register API (before volume 59, 1994), or citation_date falls in a different year from the volume. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"shown": {
"type": "number",
"description": "Results returned on this page."
},
"notice": {
"type": "string",
"description": "Guidance when per_page was above its ceiling, when nothing matched, when the page is past the end, or when matches lie beyond the last page."
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"documentNumber",
"title",
"type",
"abstract",
"publicationDate",
"citation",
"startPage",
"endPage",
"agencies",
"docketIds",
"regulationsGovDocketId",
"regulationsGovDocumentId",
"commentCount",
"commentUrl",
"regulationIdNumbers",
"cfrReferences",
"commentsCloseOn",
"commentPeriodOpen",
"effectiveOn",
"significant",
"presidential",
"htmlUrl"
],
"properties": {
"type": {
"type": "string",
"description": "Document type: Proposed Rule, Final Rule, Notice, or Presidential Document."
},
"title": {
"type": "string",
"description": "Document title."
},
"endPage": {
"type": [
"number",
"null"
],
"description": "Last Federal Register page the document is printed on; null when unrecorded."
},
"htmlUrl": {
"type": "string",
"description": "Federal Register web URL for the document."
},
"abstract": {
"type": [
"string",
"null"
],
"description": "Abstract summary, or null when absent."
},
"agencies": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"slug"
],
"properties": {
"name": {
"type": "string",
"description": "Agency name."
},
"slug": {
"type": [
"string",
"null"
],
"description": "Federal Register agency slug — pass it back as the agencies filter. Null when the Federal Register lists the agency by raw name only, so it cannot be filtered on."
}
},
"description": "One issuing agency.",
"additionalProperties": false
},
"description": "Issuing agencies."
},
"citation": {
"type": [
"string",
"null"
],
"description": "Where the document starts in the Federal Register (\"89 FR 49101\"); null when none is recorded, as for most of 1994."
},
"docketIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Docket numbers as the Federal Register prints them — an agency's own number (\"REG-101355-26\"), or an ID inside a wrapper (\"Docket No. FAA-2026-8449\"). Pass one back as the docket_id filter. Not always a Regulations.gov ID: for regulations_get_docket / regulations_find_comments use regulationsGovDocketId."
},
"startPage": {
"type": [
"number",
"null"
],
"description": "First Federal Register page the document is printed on; null when unrecorded."
},
"commentUrl": {
"type": [
"string",
"null"
],
"description": "Regulations.gov page for submitting a comment on this document, as the Federal Register lists it. Null when it lists none, as it usually stops doing once the comment period closes."
},
"effectiveOn": {
"type": [
"string",
"null"
],
"description": "Effective date (ISO 8601), or null."
},
"significant": {
"type": [
"boolean",
"null"
],
"description": "Whether the Federal Register flags the document significant under EO 12866; null when no determination is recorded (every presidential document, most notices)."
},
"commentCount": {
"type": [
"number",
"null"
],
"description": "Comments Regulations.gov received on this document, as the Federal Register reports it; null when not on Regulations.gov. Can exceed the comment records regulations_find_comments lists."
},
"presidential": {
"anyOf": [
{
"type": "object",
"required": [
"type",
"number",
"signingDate",
"president"
],
"properties": {
"type": {
"type": [
"string",
"null"
],
"description": "Subtype: \"Executive Order\", \"Proclamation\", \"Determination\", …; null when unrecorded."
},
"number": {
"type": [
"string",
"null"
],
"description": "Executive order, proclamation, or determination (\"2026-22\") number; null when the document has none. An executive order number passes back as executive_order_number."
},
"president": {
"anyOf": [
{
"type": "object",
"required": [
"name",
"slug"
],
"properties": {
"name": {
"type": "string",
"description": "President name."
},
"slug": {
"type": "string",
"description": "President slug — pass it back as the president filter."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The issuing president; null when unrecorded."
},
"signingDate": {
"type": [
"string",
"null"
],
"description": "Signing date (ISO 8601); null when unrecorded."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Presidential-document identifiers; null on every document that is not a presidential document."
},
"cfrReferences": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"part"
],
"properties": {
"part": {
"type": "string",
"description": "CFR part."
},
"title": {
"type": "number",
"description": "CFR title number."
}
},
"description": "A single affected CFR title + part.",
"additionalProperties": false
},
"description": "Affected CFR parts — chain into regulations_get_cfr_section."
},
"documentNumber": {
"type": "string",
"description": "Federal Register document number — chains into regulations_get_document."
},
"commentsCloseOn": {
"type": [
"string",
"null"
],
"description": "Last day of the comment period this document printed (ISO 8601), inclusive, in Eastern time; null when it prints none. A later extension published as its own document is not reflected here."
},
"publicationDate": {
"type": "string",
"description": "Publication date (ISO 8601)."
},
"commentPeriodOpen": {
"type": [
"boolean",
"null"
],
"description": "Whether that comment period is open today: true through 11:59 PM Eastern on commentsCloseOn, false after it, null when commentsCloseOn is null."
},
"regulationIdNumbers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Regulation Identifier Number(s) (RIN)."
},
"regulationsGovDocketId": {
"type": [
"string",
"null"
],
"description": "Regulations.gov docket ID — chains into regulations_get_docket / regulations_find_comments(docket_id). Null when the document is not on Regulations.gov. An <AGENCY>_FRDOC_0001 docket (EPA_FRDOC_0001 holds 3,451 documents) is Regulations.gov's catch-all for Federal Register documents outside a rulemaking docket, so this document's comments come from regulationsGovDocumentId instead."
},
"regulationsGovDocumentId": {
"type": [
"string",
"null"
],
"description": "Regulations.gov document ID — pass as document_object_id to regulations_find_comments for the comments filed on this document. Null when absent."
}
},
"description": "One matching Federal Register document.",
"additionalProperties": false
},
"description": "Matching Federal Register documents (this page)."
},
"nextPage": {
"type": "number",
"description": "Page to request next — present only when a later page holds matches."
},
"truncated": {
"type": "boolean",
"description": "True when more documents matched than 50 pages reach at this per_page, so some are on no page — set on every page of such a set."
},
"totalCount": {
"type": "number",
"description": "Matches before pagination. The Federal Register stops counting at 10,000, so 10,000 means at least that many."
},
"totalPages": {
"type": "number",
"description": "Pages at this per_page, at most the 50 the Federal Register serves; 0 when nothing matched."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}regulations_get_document — regulations_get_document
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 handles that make this a workflow server. The output carries the Regulations.gov docket ID (chain into regulations_get_docket or regulations_find_comments), the docket numbers the Federal Register prints (chain back into regulations_search_rules as docket_id), the comment count and comment URL, and the affected CFR parts (chain into regulations_get_cfr_section). Set include_full_text only when the rule body itself is needed: it returns the plain-text body as a window of up to 64,000 characters (max_chars raises it to 200,000), with the body's total length and, when text remains, the offset to resume from. Short documents return whole; major final rules run past a million characters, so page through with offset rather than reading them in one call.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"document_number"
],
"properties": {
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "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."
},
"max_chars": {
"type": "number",
"minimum": 1,
"multipleOf": 1,
"description": "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."
},
"document_number": {
"type": "string",
"pattern": "^[A-Za-z]?[0-9]{1,4}-[0-9]{1,6}(-[0-9]{1,6})?$",
"description": "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_text": {
"type": "boolean",
"description": "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 you need to read the rule itself, not just its metadata and cross-links."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"documentNumber",
"title",
"type",
"abstract",
"action",
"dates",
"publicationDate",
"citation",
"startPage",
"endPage",
"effectiveOn",
"significant",
"presidential",
"commentsCloseOn",
"commentPeriodOpen",
"agencies",
"regulationIdNumbers",
"cfrReferences",
"docketIds",
"docketId",
"regulationsGovDocumentId",
"commentCount",
"commentUrl",
"supportingDocuments",
"bodyHtmlUrl",
"rawTextUrl",
"htmlUrl"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"type": {
"type": "string",
"description": "Document type."
},
"dates": {
"type": [
"string",
"null"
],
"description": "Free-text dates summary from the rule, or null."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"full_text_disabled",
"not_found",
"upstream_unavailable"
],
"description": "Machine-readable failure mode. Declared by this tool: `full_text_disabled`: offset or max_chars was passed together with include_full_text: false. `not_found`: No Federal Register document exists with that number. `upstream_unavailable`: Federal Register returned a 5xx, timed out, served an HTML error page, or failed to serve the body URL it published (include_full_text only). Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"title": {
"type": "string",
"description": "Document title."
},
"action": {
"type": [
"string",
"null"
],
"description": "Action line (e.g. \"Final rule.\"), or null."
},
"notice": {
"type": "string",
"description": "Guidance when max_chars was above its ceiling, or when the requested offset is at or past the end of the body."
},
"endPage": {
"type": [
"number",
"null"
],
"description": "Last Federal Register page the document is printed on; null when unrecorded. A CFR source-note cite to any page from startPage to endPage points at this document."
},
"htmlUrl": {
"type": "string",
"description": "Federal Register web URL for the document."
},
"abstract": {
"type": [
"string",
"null"
],
"description": "Abstract summary, or null."
},
"agencies": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"slug"
],
"properties": {
"name": {
"type": "string",
"description": "Agency name."
},
"slug": {
"type": [
"string",
"null"
],
"description": "Federal Register agency slug — the value the agencies filter on regulations_search_rules and regulations_list_open_comments takes. Null when the Federal Register lists the agency by raw name only."
}
},
"description": "One issuing agency.",
"additionalProperties": false
},
"description": "Issuing agencies."
},
"citation": {
"type": [
"string",
"null"
],
"description": "Where the document starts in the Federal Register (\"89 FR 49101\"); null when none is recorded, as for most of 1994."
},
"docketId": {
"type": [
"string",
"null"
],
"description": "Regulations.gov docket ID — chain into regulations_get_docket / regulations_find_comments(docket_id). Null when not on Regulations.gov. An <AGENCY>_FRDOC_0001 docket (EPA_FRDOC_0001 holds 3,451 documents) is Regulations.gov's catch-all for Federal Register documents outside a rulemaking docket, so this document's comments come from regulationsGovDocumentId instead."
},
"fullText": {
"type": "string",
"description": "One window of the plain-text body, starting at fullTextOffset — present only when full text was requested. Empty when the offset is at or past the end."
},
"docketIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Docket numbers as the Federal Register prints them — an agency's own number (\"REG-101355-26\"), or an ID inside a wrapper (\"Docket No. FAA-2026-8449\"). Pass one to regulations_search_rules as docket_id for every Federal Register document in the docket. Not always a Regulations.gov ID: docketId is."
},
"startPage": {
"type": [
"number",
"null"
],
"description": "First Federal Register page the document is printed on; null when unrecorded."
},
"commentUrl": {
"type": [
"string",
"null"
],
"description": "Regulations.gov page for submitting a comment on this document, as the Federal Register lists it. Null when it lists none, as it usually stops doing once the comment period closes."
},
"rawTextUrl": {
"type": "string",
"description": "URL of the plain-text body."
},
"bodyHtmlUrl": {
"type": "string",
"description": "URL of the rendered HTML body."
},
"effectiveOn": {
"type": [
"string",
"null"
],
"description": "Effective date (ISO 8601), or null."
},
"significant": {
"type": [
"boolean",
"null"
],
"description": "Whether the Federal Register flags the document significant under EO 12866; null when no determination is recorded (every presidential document, most notices)."
},
"commentCount": {
"type": [
"number",
"null"
],
"description": "Comments Regulations.gov received on this document, as the Federal Register reports it; null when not on Regulations.gov. Can exceed the comment records regulations_find_comments lists."
},
"presidential": {
"anyOf": [
{
"type": "object",
"required": [
"type",
"number",
"signingDate",
"president"
],
"properties": {
"type": {
"type": [
"string",
"null"
],
"description": "Subtype: \"Executive Order\", \"Proclamation\", \"Determination\", …; null when unrecorded."
},
"number": {
"type": [
"string",
"null"
],
"description": "Executive order, proclamation, or determination (\"2026-22\") number; null when the document has none. An executive order number passes back as executive_order_number."
},
"president": {
"anyOf": [
{
"type": "object",
"required": [
"name",
"slug"
],
"properties": {
"name": {
"type": "string",
"description": "President name."
},
"slug": {
"type": "string",
"description": "President slug — pass it back as the president filter."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "The issuing president; null when unrecorded."
},
"signingDate": {
"type": [
"string",
"null"
],
"description": "Signing date (ISO 8601); null when unrecorded."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Presidential-document identifiers; null on every document that is not a presidential document."
},
"cfrReferences": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"part"
],
"properties": {
"part": {
"type": "string",
"description": "CFR part."
},
"title": {
"type": "number",
"description": "CFR title number."
}
},
"description": "A single affected CFR title + part.",
"additionalProperties": false
},
"description": "Affected CFR parts — chain into regulations_get_cfr_section."
},
"documentNumber": {
"type": "string",
"description": "Federal Register document number."
},
"fullTextLength": {
"type": "number",
"description": "Characters in the whole plain-text body — present with fullText."
},
"fullTextOffset": {
"type": "number",
"description": "Character offset fullText starts at — present with fullText."
},
"commentsCloseOn": {
"type": [
"string",
"null"
],
"description": "Last day of the comment period this document printed (ISO 8601), inclusive, in Eastern time; null when it prints none. A later extension published as its own document is not reflected here."
},
"publicationDate": {
"type": "string",
"description": "Publication date (ISO 8601)."
},
"commentPeriodOpen": {
"type": [
"boolean",
"null"
],
"description": "Whether that comment period is open today: true through 11:59 PM Eastern on commentsCloseOn, false after it, null when commentsCloseOn is null."
},
"fullTextNextOffset": {
"type": "number",
"description": "Offset to pass as offset to read the next window — present only when body text remains past this window."
},
"regulationIdNumbers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Regulation Identifier Number(s) (RIN)."
},
"supportingDocuments": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"documentId"
],
"properties": {
"title": {
"type": "string",
"description": "Supporting document title."
},
"documentId": {
"type": "string",
"description": "Regulations.gov document ID."
}
},
"description": "One related Regulations.gov supporting document.",
"additionalProperties": false
},
"description": "Related Regulations.gov supporting documents."
},
"regulationsGovDocumentId": {
"type": [
"string",
"null"
],
"description": "Regulations.gov document ID — pass as document_object_id to regulations_find_comments for the comments filed on this document alone. Null when absent."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"idempotentHint": true
}regulations_browse_cfr — regulations_browse_cfr
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 naming the subpart and subject group it sits under — the way to enumerate a part's sections without reading its text. "search" runs a full-text query across the codified CFR and returns matching sections with their hierarchy path and a snippet, one result per section, paged. "versions" lists the dates a part's or one section's text changed, oldest first per section, paged, with the latest amendment date; with changed_since, what changed across a title. Every mode accepts title and part to narrow the scope, and all three feed regulations_get_cfr_section — a version row's `date` reads that version. Every search result reports which corpus answered it — the synced local mirror or the live eCFR index — and what that corpus covers, in `source` and `sourceScope`.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"mode"
],
"properties": {
"date": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "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 the section text in effect on that day, so a past date searches the CFR as it read then; eCFR indexes 2017-01-03 onward and rejects a date past its current index date. Ignored in versions mode, where each row carries its own date."
},
"mode": {
"enum": [
"structure",
"search",
"versions"
],
"type": "string",
"description": "\"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\": list the dates a part's or section's text changed (title plus part or changed_since)."
},
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "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 next page. Live eCFR search pages through its first 10,000 hits only, so a page starting past them is refused — narrow the query instead of paging deeper."
},
"part": {
"type": "string",
"description": "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; versions mode lists the part's versions, appendices included. Requires title; a part on its own is rejected. Parts can be alphanumeric (\"1203a\", \"16A\") and are matched exactly once a leading \"Part\" or \"Pt.\" is dropped, so pass the identifier as eCFR writes it — \"58\" (\"Part 58\" also reads as 58), not \"058\"."
},
"query": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"minLength": 2,
"description": "Search phrase, at least 2 characters."
}
],
"description": "Full-text search phrase (search mode, required in that mode). Ignored in structure and versions modes."
},
"title": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "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 list that part. Search mode: optional filter restricting matches to that title — e.g. 40 for environmental rules, 21 for food and drugs. Versions mode: required, with part or changed_since."
},
"section": {
"type": "string",
"description": "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 other modes."
},
"per_page": {
"type": "number",
"default": 20,
"minimum": 1,
"multipleOf": 1,
"description": "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)."
},
"changed_since": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"mode"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"date": {
"type": "string",
"description": "Resolved point-in-time date — the hierarchy snapshot (structure mode), or the day whose section text was searched (search mode)."
},
"mode": {
"enum": [
"structure",
"search",
"versions"
],
"type": "string",
"description": "Which mode produced this result."
},
"page": {
"type": "number",
"description": "The page served — of search results, a part's listing, or versions."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"query_required",
"title_not_found",
"title_required_for_part",
"versions_scope_required",
"conflicting_title",
"date_out_of_range",
"page_out_of_window",
"upstream_unavailable"
],
"description": "Machine-readable failure mode. Declared by this tool: `query_required`: mode=\"search\" with no query phrase. `title_not_found`: Structure mode where eCFR publishes no tree for the title at that date (a reserved title, or a date before its coverage), or where the part is absent from the tree it does publish. `title_required_for_part`: A part was given with no title. Part identifiers repeat across titles, and eCFR rejects a part filter that names no title. `versions_scope_required`: Versions mode with no title; with a title but neither part nor changed_since; or with a section but no part. `conflicting_title`: Versions mode with section written as a full cite (\"21 CFR 141.61\") naming a different title than title. `date_out_of_range`: A date past what eCFR serves: in structure mode, past the title's up-to-date date; in search mode, outside the indexed window (before 2017-01-03, or past its current index date). `page_out_of_window`: A live search page that starts past the 10,000 hits eCFR pages through for one query. `upstream_unavailable`: eCFR returned a 5xx, timed out, or served an HTML error page (live path). Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"nodes": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"identifier",
"label",
"description",
"reserved",
"cfrCite",
"appendix",
"subpart",
"subjectGroup"
],
"properties": {
"type": {
"type": "string",
"description": "Node type: title, subtitle, or chapter above a part; section or appendix in a part listing. Treat an unknown type as passthrough."
},
"label": {
"type": "string",
"description": "Human-readable label, plain text."
},
"cfrCite": {
"type": [
"string",
"null"
],
"description": "Assembled cite → regulations_get_cfr_section: \"40 CFR 50.1\" for a section (\"14 CFR 241 § 25\" for one numbered without its part), \"Appendix A-1 to Part 50, Title 40\" for an appendix. Null on a level with no read path (title, subtitle, chapter)."
},
"subpart": {
"type": [
"string",
"null"
],
"description": "In a part listing, the label of the subpart the node sits under (\"Subpart A—General\"); null when no subpart encloses it, and on every node above a part."
},
"appendix": {
"type": [
"string",
"null"
],
"description": "On an appendix node, the identifier to pass straight back as regulations_get_cfr_section's `appendix` input; null on every other node type. It is free-form prose, not a letter (\"Schedule I to Part 789\", \"Special Federal Aviation Regulation No. 88\"), so pass it verbatim rather than abbreviating it."
},
"reserved": {
"type": "boolean",
"description": "True when the node is reserved/empty."
},
"identifier": {
"type": "string",
"description": "Node identifier (e.g. \"40\", \"I\", \"50.1\")."
},
"description": {
"type": [
"string",
"null"
],
"description": "Label description, or null."
},
"subjectGroup": {
"type": [
"string",
"null"
],
"description": "In a part listing, the heading of the subject group the node sits under (a group of sections inside a part or subpart); null when it sits in none, and on every node above a part."
}
},
"description": "One hierarchy node.",
"additionalProperties": false
},
"description": "Structure mode: the 50 titles, a title's top-level divisions, or this page of a part's sections and appendices in document order."
},
"shown": {
"type": "number",
"description": "Rows returned on this page."
},
"notice": {
"type": "string",
"description": "Guidance: per_page above its ceiling, the next page to request, a page past the end, an empty result, what the count means, or how a section was read."
},
"source": {
"enum": [
"mirror",
"live"
],
"type": "string",
"description": "Provenance: the synced mirror index, or the live eCFR search API (search mode)."
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"part",
"section",
"appendix",
"heading",
"hierarchyPath",
"excerpt",
"cfrCite"
],
"properties": {
"part": {
"type": "string",
"description": "CFR part."
},
"title": {
"type": "number",
"description": "CFR title number."
},
"cfrCite": {
"type": "string",
"description": "Assembled cite → regulations_get_cfr_section. A section hit cites the section (\"40 CFR 51.190\"); an appendix hit cites the appendix in eCFR's own form (\"Appendix C to Part 58, Title 40\"), not the part around it, since the part's sections do not contain the matched text."
},
"excerpt": {
"type": "string",
"description": "Matched text snippet."
},
"heading": {
"type": "string",
"description": "What the matched node is called — the section, appendix, or part heading. Distinct from cfrCite, which is where it lives."
},
"section": {
"type": [
"string",
"null"
],
"description": "Section identifier, or null when the match is an appendix or a whole part."
},
"appendix": {
"type": [
"string",
"null"
],
"description": "On an appendix hit, the identifier to pass straight back as regulations_get_cfr_section's `appendix` input; null on a section hit. Always null on a mirror hit — the index holds section text only, so mirror-sourced results never match an appendix."
},
"hierarchyPath": {
"type": "string",
"description": "Path down to the match. A live hit names the part it sits in — \"Title 40 › Chapter I › Subchapter C › Part 51 — Requirements for Preparation, Adoption, and Submittal of Implementation Plans › § 51.190\" — so the subject matter is readable without a second call. A mirror hit is structural only (\"Title 14 › Part 25 › § 25.1043\"): the index stores no level names. Check `source` before comparing paths across results."
}
},
"description": "One matching CFR section or appendix.",
"additionalProperties": false
},
"description": "Matching CFR sections and appendices, this page, one row per section however many of its versions matched (search mode)."
},
"versions": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"identifier",
"heading",
"part",
"subpart",
"cfrCite",
"date",
"issueDate",
"substantive",
"removed"
],
"properties": {
"date": {
"type": "string",
"description": "Day this version took effect: pass it as regulations_get_cfr_section `date` to read it. A row dated before 2017-01-01 is the text in force when eCFR coverage begins, read at 2017-01-01. A removed row's date reads nothing; the previous row's date reads the last text."
},
"part": {
"type": "string",
"description": "The part it sits in."
},
"type": {
"type": "string",
"description": "\"section\" or \"appendix\". Treat an unknown type as passthrough."
},
"cfrCite": {
"type": "string",
"description": "Cite → regulations_get_cfr_section, as structure mode cites the same node."
},
"heading": {
"type": "string",
"description": "The section or appendix name, plain text."
},
"removed": {
"type": "boolean",
"description": "True on the row that removed the section or appendix."
},
"subpart": {
"type": [
"string",
"null"
],
"description": "Subpart identifier (\"G\"), or null when in none."
},
"issueDate": {
"type": "string",
"description": "The eCFR issue that published this version, which can postdate `date`; changed_since filters on it."
},
"identifier": {
"type": "string",
"description": "Section number (\"141.61\"); on an appendix row, the identifier regulations_get_cfr_section takes as `appendix`, verbatim."
},
"substantive": {
"type": "boolean",
"description": "False when eCFR flags the version as an editorial re-issue."
}
},
"description": "One version of a section or appendix.",
"additionalProperties": false
},
"description": "Versions mode: this page of versions in eCFR order — document order by identifier, oldest first within each."
},
"truncated": {
"type": "boolean",
"description": "True when another page follows this one."
},
"countBasis": {
"enum": [
"sections",
"section_versions"
],
"type": "string",
"description": "What a search totalCount counts. \"sections\": distinct sections and appendices, one per result row. \"section_versions\": eCFR's own hit count, which counts every indexed version of each section — an upper bound on the rows the query pages through, reported until the whole hit list has been read."
},
"totalCount": {
"type": "number",
"description": "Total matches before pagination — search results (see countBasis for what they count), the nodes in a part's listing, or versions."
},
"sourceScope": {
"type": "string",
"description": "What the answering corpus covers — the mirror's title coverage, or the live index and the date it was read at — narrowed by whichever of title and part the call supplied (search mode). Read it before concluding a query found nothing."
},
"latestAmendmentDate": {
"type": [
"string",
"null"
],
"description": "Versions mode: the newest `date` across every listed version, not just this page; null when none matched."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}regulations_get_cfr_section — regulations_get_cfr_section
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 Source notes, an index of its sections, and the names of its appendices; title + appendix for one appendix, passing the identifier exactly as regulations_browse_cfr emits it. A section can be written as people cite it — "61", "§ 141.61", "141.61(c)", or the full cite "40 CFR 141.61" in part 141 all read 40 CFR 141.61 — and a part as "Part 141"; the response names the identifier it read. Text comes back as a window of up to 64,000 characters (max_chars raises it to 200,000) with the total length and, when text remains, the offset to resume from; whole parts run to millions of characters, so page with offset or read a single section. eCFR retains historical versions from 2017 through the title's up-to-date date; a date outside that window is rejected with the window named. Current single-section reads are served from a synced local mirror when it holds the title's latest eCFR issue; the source is reported.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title"
],
"properties": {
"date": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "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, naming the window."
},
"part": {
"type": "string",
"description": "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 recommended: an appendix identifier is unique within a part, not within a title, so without a part eCFR picks one of the matches. Obtain from regulations_browse_cfr or a Federal Register document's cfrReferences."
},
"title": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "CFR title number (1–50). E.g. 40 for \"Protection of Environment\"."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "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."
},
"section": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"description": "Section identifier (e.g. \"50.1\")."
}
],
"description": "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)\"), which reads the whole section, and the full cite this tool returns as cfrCite (\"40 CFR 141.61\", \"14 CFR 241 § 25\"), whose title has to match title. Identifiers eCFR writes differently are read as given — 14 CFR 241 numbers its sections \"25\" and \"1-1\". Omit to fetch the entire part. Cannot be combined with appendix."
},
"appendix": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"description": "Appendix identifier (e.g. \"Appendix A-1 to Part 50\")."
}
],
"description": "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 letter: \"Appendix A-1 to Part 50\", \"Appendix A to Subpart C of Part 4\", \"Schedule I to Part 789\", \"Special Federal Aviation Regulation No. 88\". Pass the whole phrase; a short form such as \"A-1\" matches nothing. Cannot be combined with section."
},
"max_chars": {
"type": "number",
"minimum": 1,
"multipleOf": 1,
"description": "Most text characters to return in this window (at least 1, default 64,000, capped at 200,000 with a notice)."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"cfrCite",
"title",
"part",
"section",
"appendix",
"heading",
"hierarchyPath",
"date",
"source",
"bodyText",
"bodyTextOffset",
"bodyTextLength"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"date": {
"type": "string",
"description": "The issue/point-in-time date the text reflects (ISO 8601)."
},
"part": {
"type": [
"string",
"null"
],
"description": "CFR part; null only for an appendix that hangs off a chapter, subchapter, or subtitle rather than a part."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"not_found",
"location_required",
"conflicting_target",
"conflicting_title",
"date_out_of_range",
"upstream_unavailable"
],
"description": "Machine-readable failure mode. Declared by this tool: `not_found`: No such title/part/section/appendix at that date, under the section as given or any form it resolves to. `location_required`: Neither part nor appendix was given, so the call names no location to read. `conflicting_target`: Both section and appendix were given. They name two different locations, and picking one silently would return text the call did not ask for. `conflicting_title`: section is written as a full cite (\"21 CFR 141.61\") naming a different title than title. `date_out_of_range`: The requested date precedes eCFR historical coverage (2017-01-01) or is past the title's up-to-date date. `upstream_unavailable`: eCFR returned a 5xx, timed out, or served an HTML error page (live path). Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notes": {
"type": "array",
"items": {
"type": "string",
"description": "One note, its label dropped."
},
"description": "The part's editorial, general, and OMB control-number notes, in document order; empty when it has none. Present only on a whole-part read."
},
"title": {
"type": "number",
"description": "CFR title number."
},
"notice": {
"type": "string",
"description": "That max_chars was above its ceiling, how a part or section written another way was resolved, that hierarchyPath holds only the cited levels when eCFR could not supply the rest, and guidance when the offset is at or past the end of the text."
},
"source": {
"enum": [
"mirror",
"live"
],
"type": "string",
"description": "Provenance: the synced mirror, or the live eCFR API."
},
"cfrCite": {
"type": "string",
"description": "Assembled cite — \"40 CFR 50.1\" for a section, \"40 CFR 50\" for a part, \"Appendix A-1 to Part 50, Title 40\" for an appendix (eCFR's own form, leading with the identifier this tool takes back as `appendix`)."
},
"heading": {
"type": "string",
"description": "Section, part, or appendix heading — for a whole part, the part's own (\"PART 141—NATIONAL PRIMARY DRINKING WATER REGULATIONS\")."
},
"section": {
"type": [
"string",
"null"
],
"description": "Section identifier that was read — the resolved form when the input was written differently (\"141.61\" for \"§ 141.61(c)\"); null when a whole part or an appendix was fetched."
},
"appendix": {
"type": [
"string",
"null"
],
"description": "Appendix identifier; null when a section or whole part was fetched."
},
"bodyText": {
"type": "string",
"description": "One window of the location's text, starting at bodyTextOffset, XML stripped to plain text. A whole part's text is each section's heading and body in order. Paragraphs, subheadings, editorial notes, tables (one pipe-delimited line per row), figure references (\"[Figure: /graphics/…]\"), a section's own statutory authority and OMB control-number note, and its trailing source citation are kept in document order; part-, subpart-, and subject-group-level Authority and Source are not (see authority, sourceNote, and sections[]). Superscripts read ^x and subscripts _x, braced where the run would otherwise be ambiguous (3 × 10^−8, SO_2, CO_{2}e); a footnote reference or label reads [n]; diacritics and overlines are Unicode combining marks on their base character (x̄, R̅M̅). The source citation is the bracketed Federal Register history a section ends in (\"[36 FR 22384, Nov. 25, 1971, as amended at 81 FR 68276, Oct. 3, 2016]\") — to reach the rulemaking that produced this text, pass one of its cites from 1994 on to regulations_search_rules as citation (\"81 FR 68276\") with the date printed beside it as citation_date (\"2016-10-03\"). Empty when the offset is at or past the end, or where the location is a placeholder carrying nothing but its heading (\"[Reserved]\")."
},
"sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"section",
"heading",
"cfrCite",
"offset"
],
"properties": {
"offset": {
"type": "number",
"description": "Offset in the whole part's text where this section starts — pass as offset to read from it."
},
"cfrCite": {
"type": "string",
"description": "Assembled cite for the section."
},
"heading": {
"type": "string",
"description": "Section heading."
},
"section": {
"type": "string",
"description": "Section identifier — pass as section to read it alone."
},
"authority": {
"type": "string",
"description": "The Authority its subpart or subject group states for this section; absent when the part's authority applies."
},
"sourceNote": {
"type": "string",
"description": "The Source note its subpart or subject group states for this section; absent when the part's sourceNote applies."
}
},
"description": "One section of the part, without its text.",
"additionalProperties": false
},
"description": "Present only on a whole-part fetch — the part's sections whose text falls in this window, in order, without their text (bodyText carries it). A section that begins before the window and runs into it is included, so its offset can be below bodyTextOffset. Empty when the offset is past the end. To list every section and appendix of a part without reading its text, use regulations_browse_cfr in structure mode with title and part."
},
"authority": {
"type": [
"string",
"null"
],
"description": "The part's Authority — the statutes it is issued under, without the \"Authority:\" label; null when the part states none. Present only on a whole-part read. A subpart or subject group that states its own carries it on its sections[] entries; a single-section or appendix read carries no part- or subpart-level notes, so read the whole part for them."
},
"appendices": {
"type": "array",
"items": {
"type": "object",
"required": [
"appendix",
"heading"
],
"properties": {
"heading": {
"type": "string",
"description": "Appendix heading."
},
"appendix": {
"type": "string",
"description": "Appendix identifier, for a follow-up read."
}
},
"description": "One appendix in the part, named but not inlined.",
"additionalProperties": false
},
"description": "Present on a whole-part fetch when the part has appendices — their identifiers and headings, without their text. A part's appendices routinely run several times the length of its sections, so they are not inlined; call this tool again with `appendix` set to one of these identifiers to read it. Absent means the part has no appendices; a single-section or appendix fetch never carries this field."
},
"sourceNote": {
"type": [
"string",
"null"
],
"description": "The part's Source note — the Federal Register document it was issued in, without the \"Source:\" label (\"40 FR 59570, Dec. 24, 1975, unless otherwise noted.\"), which holds for every section with no source citation of its own; null when the part states none. Not to be confused with source, which names the corpus that answered. Present only on a whole-part read; subpart and subject-group Source notes ride on sections[] entries."
},
"hierarchyPath": {
"type": "string",
"description": "Human-readable hierarchy path, title down to the location read (\"Title 40 › Chapter I › Subchapter D › Part 141 › Subpart G › § 141.61\"). When eCFR cannot supply it, only the cited levels (\"Title 40 › Part 141 › § 141.61\"), and notice says so."
},
"bodyTextLength": {
"type": "number",
"description": "Characters in the location's whole text."
},
"bodyTextOffset": {
"type": "number",
"description": "Character offset bodyText starts at."
},
"bodyTextNextOffset": {
"type": "number",
"description": "Offset to pass as offset to read the next window — present only when text remains past this window."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"idempotentHint": true
}regulations_get_docket — regulations_get_docket
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 URLs and attachments, which a docket listing does not carry. Provide exactly one of docket_id / document_id. The docket is the folder holding a rule's whole paper trail; each returned document's objectId feeds regulations_find_comments. A docket often contains hundreds of supporting materials — find one with search_term, or filter document_types to "Proposed Rule"/"Rule" for the rule documents themselves. Requires REGULATIONS_GOV_API_KEY (free at https://api.data.gov/signup/); the Federal Register and eCFR tools work without it.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 40,
"minimum": 1,
"description": "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 this one goes. Beyond that, narrow with search_term or document_types."
},
"per_page": {
"type": "number",
"default": 25,
"minimum": 5,
"multipleOf": 1,
"description": "Documents per page (at least 5, default 25, capped at 250 with a notice). Regulations.gov requires a minimum page size of 5."
},
"docket_id": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"description": "A docket ID."
}
],
"description": "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 regulations_get_document. The printed docketIds on those tools are not always Regulations.gov IDs (\"REG-101355-26\" is the IRS's own number for docket IRS-2026-0925). Exactly one of docket_id / document_id."
},
"document_id": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"description": "A document ID."
}
],
"description": "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 download URLs and attachments. Pass it alone, without docket_id or the list filters."
},
"search_term": {
"type": "string",
"description": "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."
},
"document_types": {
"type": "array",
"items": {
"enum": [
"Proposed Rule",
"Rule",
"Notice",
"Supporting & Related Material",
"Other"
],
"type": "string"
},
"description": "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 documents."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"mode"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The most documents 40 pages reach at this per_page (40 × per_page); set with truncated."
},
"rin": {
"type": [
"string",
"null"
],
"description": "Regulation Identifier Number (\"Not Assigned\" when none), or null (list mode)."
},
"mode": {
"enum": [
"list",
"detail"
],
"type": "string",
"description": "Which mode produced this result: list (docket_id) or detail (document_id)."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"auth_required",
"target_required",
"multiple_targets",
"filter_requires_list_mode",
"not_found",
"rate_limited",
"upstream_unavailable"
],
"description": "Machine-readable failure mode. Declared by this tool: `auth_required`: REGULATIONS_GOV_API_KEY is not configured, or Regulations.gov rejected the key that is. `target_required`: Neither docket_id nor document_id was given. `multiple_targets`: Both docket_id and document_id were given. `filter_requires_list_mode`: search_term or document_types was given with document_id, which reads one document and takes no filters. `not_found`: No docket exists with that docket_id, or no document with that document_id. `rate_limited`: Regulations.gov returned 429 (1,000 requests/hour per key). `upstream_unavailable`: Regulations.gov returned a 5xx, timed out, or could not be reached at all. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"shown": {
"type": "number",
"description": "Documents returned on this page."
},
"title": {
"type": "string",
"description": "Docket title (list mode)."
},
"notice": {
"type": "string",
"description": "Guidance when per_page was above its ceiling, no documents matched, the page is past the end, documents lie beyond the last page, or a document has no main file."
},
"abstract": {
"type": [
"string",
"null"
],
"description": "Docket abstract, or null (list mode)."
},
"agencyId": {
"type": [
"string",
"null"
],
"description": "Agency ID (e.g. \"EPA\"), or null (list mode)."
},
"docketId": {
"type": "string",
"description": "Regulations.gov docket ID (list mode)."
},
"document": {
"type": "object",
"required": [
"documentId",
"docketId",
"title",
"documentType",
"postedDate",
"frDocNum",
"objectId",
"withdrawn",
"abstract",
"pageCount",
"fileFormats",
"attachments",
"restrictReasonType"
],
"properties": {
"title": {
"type": [
"string",
"null"
],
"description": "Document title, or null."
},
"abstract": {
"type": [
"string",
"null"
],
"description": "Document abstract, or null."
},
"docketId": {
"type": [
"string",
"null"
],
"description": "Docket the document is filed in, or null."
},
"frDocNum": {
"type": [
"string",
"null"
],
"description": "Federal Register document number — chains back into regulations_get_document. Null when absent."
},
"objectId": {
"type": [
"string",
"null"
],
"description": "Document object ID — chains into regulations_find_comments(document_object_id). Null when absent."
},
"pageCount": {
"type": [
"number",
"null"
],
"description": "Pages in the document, or null when Regulations.gov counts none."
},
"withdrawn": {
"type": [
"boolean",
"null"
],
"description": "True when the document was withdrawn; null when Regulations.gov does not say."
},
"documentId": {
"type": "string",
"description": "Regulations.gov document ID."
},
"postedDate": {
"type": [
"string",
"null"
],
"description": "Posted date, or null."
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"formats",
"restrictReasonType"
],
"properties": {
"title": {
"type": "string",
"description": "Attachment title."
},
"formats": {
"type": "array",
"items": {
"type": "object",
"required": [
"format",
"fileUrl",
"size"
],
"properties": {
"size": {
"type": [
"number",
"null"
],
"description": "File size in bytes, or null."
},
"format": {
"type": "string",
"description": "File format (e.g. \"pdf\")."
},
"fileUrl": {
"type": "string",
"description": "Download URL."
}
},
"description": "One downloadable file format.",
"additionalProperties": false
},
"description": "Available file formats for the attachment; empty when the file is withheld."
},
"restrictReasonType": {
"type": [
"string",
"null"
],
"description": "Why the file is withheld (e.g. \"Copyrighted\"), or null when Regulations.gov gives no reason."
}
},
"description": "One attachment with its available formats.",
"additionalProperties": false
},
"description": "Attachments in upload order, withheld ones included."
},
"fileFormats": {
"type": "array",
"items": {
"type": "object",
"required": [
"format",
"fileUrl",
"size"
],
"properties": {
"size": {
"type": [
"number",
"null"
],
"description": "File size in bytes, or null."
},
"format": {
"type": "string",
"description": "File format (e.g. \"pdf\")."
},
"fileUrl": {
"type": "string",
"description": "Download URL."
}
},
"description": "One downloadable file format.",
"additionalProperties": false
},
"description": "The document's main file in each format; empty when it has none — the content may then be in its attachments."
},
"documentType": {
"type": [
"string",
"null"
],
"description": "Document type (e.g. \"Supporting & Related Material\"), or null."
},
"restrictReasonType": {
"type": [
"string",
"null"
],
"description": "Why the document's content is withheld (e.g. \"Copyrighted\"), or null."
}
},
"description": "One document with its download URLs and attachments (detail mode).",
"additionalProperties": false
},
"nextPage": {
"type": "number",
"description": "Page to request next — present only when a later page holds documents."
},
"objectId": {
"type": [
"string",
"null"
],
"description": "Docket object ID, or null (list mode)."
},
"documents": {
"type": "array",
"items": {
"type": "object",
"required": [
"documentId",
"objectId",
"title",
"documentType",
"postedDate",
"frDocNum",
"commentEndDate",
"commentPeriodOpen",
"withdrawn"
],
"properties": {
"title": {
"type": "string",
"description": "Document title."
},
"frDocNum": {
"type": [
"string",
"null"
],
"description": "Federal Register document number — chains back into regulations_get_document. Null when absent."
},
"objectId": {
"type": "string",
"description": "Document object ID — chains into regulations_find_comments(document_object_id)."
},
"withdrawn": {
"type": "boolean",
"description": "True when the document was withdrawn."
},
"documentId": {
"type": "string",
"description": "Regulations.gov document ID."
},
"postedDate": {
"type": "string",
"description": "Posted date."
},
"documentType": {
"type": "string",
"description": "Document type."
},
"commentEndDate": {
"type": [
"string",
"null"
],
"description": "The UTC instant the comment period ends, or null. Periods end at 11:59 PM Eastern, so \"2023-05-31T03:59:59Z\" is the close date 2023-05-30 the Federal Register prints."
},
"commentPeriodOpen": {
"type": [
"boolean",
"null"
],
"description": "Whether the document is open for comment now, as Regulations.gov reports it (its openForComment); null when Regulations.gov doesn't say."
}
},
"description": "One document filed in the docket.",
"additionalProperties": false
},
"description": "Documents filed in the docket (this page; list mode). Download URLs require document_id detail mode."
},
"truncated": {
"type": "boolean",
"description": "True when the docket holds more documents than 40 pages reach at this per_page, so some are on no page — set on every page of such a docket."
},
"docketType": {
"type": [
"string",
"null"
],
"description": "Docket type (e.g. \"Rulemaking\"), or null (list mode)."
},
"modifyDate": {
"type": [
"string",
"null"
],
"description": "Last-modified date, or null (list mode)."
},
"totalPages": {
"type": "number",
"description": "Pages of documents at this per_page, at most the 40 Regulations.gov serves; 0 when there are none (list mode)."
},
"documentCount": {
"type": "number",
"description": "Documents in the docket matching search_term and document_types, before pagination (list mode)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"idempotentHint": true
}regulations_find_comments — regulations_find_comments
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 one document, by its object ID or document ID), fr_document_number (convenience — resolves the FR number to the Regulations.gov document carrying it), or comment_id (one comment's full detail and attachments). A list narrows by comment text with search_term (each hit then carries the matching passages) and by posted date with posted_after/posted_before. The list endpoint returns no body text or attachment info — call with comment_id to read a comment's body. When a comment's real content is a PDF/DOCX attachment, the body is a stub and attachmentOnly is true; the attachment download URLs are returned. Requires REGULATIONS_GOV_API_KEY (free at https://api.data.gov/signup/).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 40,
"minimum": 1,
"description": "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. To reach past that, take the set one posted_after/posted_before window at a time."
},
"per_page": {
"type": "number",
"default": 25,
"minimum": 5,
"multipleOf": 1,
"description": "Comments per page (at least 5, default 25, capped at 250 with a notice). Regulations.gov requires a minimum page size of 5."
},
"docket_id": {
"type": "string",
"description": "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 from regulations_get_document, not an entry of the printed docketIds. Broadest scope. Exactly one of docket_id / document_object_id / fr_document_number / comment_id is required — supplying two is rejected, not resolved by precedence."
},
"comment_id": {
"type": "string",
"description": "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 exclusive with the other three targeting parameters — pass it alone, not alongside the docket it came from — and takes none of the list filters."
},
"search_term": {
"type": "string",
"description": "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, the passages that matched."
},
"posted_after": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "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_before": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "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."
},
"document_object_id": {
"type": "string",
"description": "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 document ID (e.g. \"EPA-HQ-OW-2022-0114-0027\", the regulationsGovDocumentId from regulations_get_document). Comments usually attach to the docket's primary (proposed-rule) document. Mutually exclusive with the other three targeting parameters."
},
"fr_document_number": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^[A-Za-z]?[0-9]{1,4}-[0-9]{1,6}(-[0-9]{1,6})?$",
"description": "Federal Register document number (e.g. \"2023-05471\", \"E9-25990\")."
}
],
"description": "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-0114-0027\") is not an FR number; pass it as document_object_id. Saves a get_document → get_docket hop. A document that is not on Regulations.gov — a presidential document, for one — answers not_found. Mutually exclusive with the other three targeting parameters."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"mode"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The most comments 40 pages reach at this per_page (40 × per_page); set with truncated (list mode)."
},
"mode": {
"enum": [
"list",
"detail"
],
"type": "string",
"description": "Which mode produced this result."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"auth_required",
"target_required",
"multiple_targets",
"filter_requires_list_mode",
"date_range_inverted",
"not_found",
"rate_limited",
"upstream_unavailable"
],
"description": "Machine-readable failure mode. Declared by this tool: `auth_required`: REGULATIONS_GOV_API_KEY is not configured, or Regulations.gov rejected the key that is. `target_required`: None of docket_id / document_object_id / fr_document_number / comment_id was given. `multiple_targets`: More than one of docket_id / document_object_id / fr_document_number / comment_id was given. `filter_requires_list_mode`: search_term, posted_after, or posted_before was given with comment_id, which reads one comment and takes no filters. `date_range_inverted`: The start of a date range is later than its end. `not_found`: The target docket, document, or comment does not exist on Regulations.gov (a docket_id that lists no comments is looked up to tell), or no Regulations.gov document carries the FR number. `rate_limited`: Regulations.gov returned 429. `upstream_unavailable`: Regulations.gov returned a 5xx, timed out, or could not be reached at all. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"shown": {
"type": "number",
"description": "Comments returned on this page (list mode)."
},
"title": {
"type": "string",
"description": "Comment title (detail mode)."
},
"notice": {
"type": "string",
"description": "Guidance — per_page above its ceiling, no comments matched, the page is past the end, comments lie beyond the last page, or the substance of a comment is in its attachments."
},
"target": {
"type": "string",
"description": "What was queried — the docket, document, or FR document, with any search_term and posted-date filters (list mode)."
},
"bodyText": {
"type": [
"string",
"null"
],
"description": "Comment body, HTML-stripped. A stub (\"See Attached\") when content is in attachments; null when empty (detail mode)."
},
"comments": {
"type": "array",
"items": {
"type": "object",
"required": [
"commentId",
"title",
"documentType",
"postedDate",
"agencyId",
"objectId",
"withdrawn"
],
"properties": {
"title": {
"type": "string",
"description": "Comment title (e.g. \"Comment from Gates, Andrew\")."
},
"agencyId": {
"type": [
"string",
"null"
],
"description": "Agency ID, or null."
},
"objectId": {
"type": "string",
"description": "Comment object ID."
},
"commentId": {
"type": "string",
"description": "Comment ID — chains into comment_id for full detail."
},
"withdrawn": {
"type": "boolean",
"description": "True when the comment was withdrawn."
},
"postedDate": {
"type": "string",
"description": "Posted date."
},
"documentType": {
"type": "string",
"description": "Document type (e.g. \"Public Submission\")."
},
"highlightedContent": {
"type": "string",
"description": "The passages of the comment text that matched search_term, as plain text — present only when search_term was given."
}
},
"description": "One comment summary.",
"additionalProperties": false
},
"description": "Comments matching the target, this page (list mode). Bodies/attachments require comment_id detail mode."
},
"docketId": {
"type": [
"string",
"null"
],
"description": "Docket ID, or null (detail mode)."
},
"nextPage": {
"type": "number",
"description": "Page to request next — present only when a later page holds comments (list mode)."
},
"commentId": {
"type": "string",
"description": "Comment ID (detail mode)."
},
"truncated": {
"type": "boolean",
"description": "True when more comments matched than 40 pages reach at this per_page, so some are on no page — set on every page of such a set (list mode)."
},
"withdrawn": {
"type": "boolean",
"description": "True when the comment was withdrawn (detail mode)."
},
"postedDate": {
"type": "string",
"description": "Posted date (detail mode)."
},
"totalCount": {
"type": "number",
"description": "Total comments matching the target (list mode)."
},
"totalPages": {
"type": "number",
"description": "Pages of comments at this per_page, at most the 40 Regulations.gov serves; 0 when none matched (list mode)."
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"formats",
"restrictReasonType"
],
"properties": {
"title": {
"type": "string",
"description": "Attachment title."
},
"formats": {
"type": "array",
"items": {
"type": "object",
"required": [
"format",
"fileUrl",
"size"
],
"properties": {
"size": {
"type": [
"number",
"null"
],
"description": "File size in bytes, or null."
},
"format": {
"type": "string",
"description": "File format (e.g. \"pdf\")."
},
"fileUrl": {
"type": "string",
"description": "Download URL."
}
},
"description": "One downloadable file format.",
"additionalProperties": false
},
"description": "Available file formats for the attachment; empty when the file is withheld."
},
"restrictReasonType": {
"type": [
"string",
"null"
],
"description": "Why the file is withheld (e.g. \"Copyrighted\"), or null when Regulations.gov gives no reason."
}
},
"description": "One attachment with its available formats.",
"additionalProperties": false
},
"description": "Attachments in upload order, withheld ones included — substance lives here when attachmentOnly is true (detail mode)."
},
"organization": {
"type": [
"string",
"null"
],
"description": "Submitter organization, or null (detail mode)."
},
"postmarkDate": {
"type": [
"string",
"null"
],
"description": "Postmark on a mailed submission, or null — many agencies record none (detail mode)."
},
"receivedDate": {
"type": [
"string",
"null"
],
"description": "Date Regulations.gov received the comment, or null when not recorded (detail mode)."
},
"submitterName": {
"type": [
"string",
"null"
],
"description": "Submitter name when public, or null (detail mode)."
},
"attachmentOnly": {
"type": "boolean",
"description": "True when attachments exist and the body is a stub/empty — the substance is in the attachment files (detail mode)."
},
"restrictReason": {
"type": [
"string",
"null"
],
"description": "Reason the comment is restricted, or null (detail mode)."
},
"duplicateComments": {
"type": [
"number",
"null"
],
"description": "Identical submissions this record stands for. 0 or 1 is an ordinary submission, depending on the agency; above 1 marks a mass-mail campaign record standing for that many identical submissions. Null when not recorded (detail mode)."
},
"commentOnDocumentId": {
"type": [
"string",
"null"
],
"description": "Document the comment was filed on, or null (detail mode)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}regulations_list_open_comments — regulations_list_open_comments
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 comment (direct final and interim final rules) by default; add NOTICE for the much larger set of notices with comment periods. Runs on the Federal Register's open-comment window and needs no key: each row carries its Regulations.gov docket and document IDs, comment count, and comment URL from the Federal Register document's embedded Regulations.gov info. Open one row with regulations_get_document for the full document, or pull the comments with regulations_find_comments (which, like regulations_get_docket, needs REGULATIONS_GOV_API_KEY).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 10000,
"minimum": 1,
"description": "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."
},
"type": {
"type": "array",
"items": {
"enum": [
"PRORULE",
"RULE",
"NOTICE"
],
"type": "string"
},
"description": "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 comment periods — a much larger set). Default, and when empty: [\"PRORULE\", \"RULE\"]."
},
"query": {
"type": "string",
"description": "Full-text filter across open documents. Omit to list every document currently open for comment."
},
"agencies": {
"type": "array",
"items": {
"type": "string"
},
"description": "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; read agencies[].slug off a row here or in regulations_search_rules. One unrecognized slug fails the whole request."
},
"per_page": {
"type": "number",
"default": 20,
"minimum": 1,
"multipleOf": 1,
"description": "Documents per page (at least 1, default 20, capped at 100 with a notice)."
},
"closing_before": {
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
],
"description": "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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"asOf",
"keyed",
"results",
"totalCount",
"totalPages"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The Federal Register document limit that was reached."
},
"asOf": {
"type": "string",
"description": "The \"today\" the open window was computed from — the current date in US Eastern time (ISO 8601). A comment period stays open through 11:59 PM Eastern on its close date."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"upstream_unavailable",
"invalid_filter"
],
"description": "Machine-readable failure mode. Declared by this tool: `upstream_unavailable`: Federal Register returned a 5xx, timed out, or served an HTML error page. `invalid_filter`: The Federal Register rejected a filter value — most often an agency name or acronym passed where a slug belongs. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"keyed": {
"type": "boolean",
"description": "Whether REGULATIONS_GOV_API_KEY is set, which decides whether regulations_get_docket and regulations_find_comments can follow up on a row. Every row field is filled either way."
},
"shown": {
"type": "number",
"description": "Documents returned on this page."
},
"notice": {
"type": "string",
"description": "Guidance when per_page was above its ceiling, when nothing matched, when the page is past the end, or when the window was truncated."
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"documentNumber",
"title",
"type",
"agencies",
"publicationDate",
"commentsCloseOn",
"daysRemaining",
"docketIds",
"regulationsGovDocketId",
"regulationsGovDocumentId",
"commentCount",
"commentUrl"
],
"properties": {
"type": {
"type": "string",
"description": "Document type — \"Proposed Rule\", \"Rule\", or \"Notice\"; \"Unknown\" when unlisted."
},
"title": {
"type": "string",
"description": "Document title."
},
"agencies": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"slug"
],
"properties": {
"name": {
"type": "string",
"description": "Agency name."
},
"slug": {
"type": [
"string",
"null"
],
"description": "Federal Register agency slug — pass it back as the agencies filter. Null when the Federal Register lists the agency by raw name only, so it cannot be filtered on."
}
},
"description": "One issuing agency.",
"additionalProperties": false
},
"description": "Issuing agencies."
},
"docketIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Docket numbers as the Federal Register prints them — an agency's own number (\"REG-101355-26\"), or an ID inside a wrapper (\"Docket No. FAA-2026-8449\"). Pass one to regulations_search_rules as docket_id. Not always a Regulations.gov ID: for regulations_get_docket / regulations_find_comments use regulationsGovDocketId."
},
"commentUrl": {
"type": [
"string",
"null"
],
"description": "Regulations.gov page for submitting a comment on this document, as the Federal Register lists it; null when it lists none."
},
"commentCount": {
"type": [
"number",
"null"
],
"description": "Comments Regulations.gov received on this document, as the Federal Register reports it; null when not on Regulations.gov. Can exceed the comment records regulations_find_comments lists."
},
"daysRemaining": {
"type": "number",
"description": "Whole days from asOf to commentsCloseOn; 0 means comments close at the end of today."
},
"documentNumber": {
"type": "string",
"description": "Federal Register document number — chains into regulations_get_document."
},
"commentsCloseOn": {
"type": "string",
"description": "Last day of the comment period (ISO 8601), inclusive, in Eastern time."
},
"publicationDate": {
"type": "string",
"description": "Publication date (ISO 8601)."
},
"regulationsGovDocketId": {
"type": [
"string",
"null"
],
"description": "Regulations.gov docket ID — chains into regulations_get_docket / regulations_find_comments(docket_id). Null when the document is not on Regulations.gov. An <AGENCY>_FRDOC_0001 docket (EPA_FRDOC_0001 holds 3,451 documents) is Regulations.gov's catch-all for Federal Register documents outside a rulemaking docket, so this document's comments come from regulationsGovDocumentId instead."
},
"regulationsGovDocumentId": {
"type": [
"string",
"null"
],
"description": "Regulations.gov document ID — pass as document_object_id to regulations_find_comments for the comments filed on this document. Null when absent."
}
},
"description": "One document open for comment.",
"additionalProperties": false
},
"description": "Documents open for comment on this page, closing soonest first; documents closing the same day are ordered by document number."
},
"nextPage": {
"type": "number",
"description": "Page to request next — present only when documents remain past this page."
},
"truncated": {
"type": "boolean",
"description": "True when the Federal Register reported its 10,000-document maximum, so the window holds only the 10,000 most recently published matches."
},
"totalCount": {
"type": "number",
"description": "Documents open for comment matching the filters — the window the pages run over."
},
"totalPages": {
"type": "number",
"description": "Pages in the window at this per_page."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true
}Prompts
0 advertised
Resources
3 advertised
Example Federal Register document — Federal Register document
A single Federal Register document by FR number: metadata, citation and pages, EO 12866 significance, presidential-document identifiers (subtype, number, signing date, president), and the cross-source handles (Regulations.gov docket and document IDs, printed docket numbers, affected CFR parts, comment count and comment URL) that chain into the search, comment, and codified-text tools. Mirrors regulations_get_document (full text omitted).
regulations://document/2025-14555Example CFR section (40 CFR 50.1) — CFR section (current)
Codified text of a current CFR section by title/part/section (e.g. regulations://cfr/40/50/50.1). Mirrors regulations_get_cfr_section at the current date and its default 64,000-character window — mirror-backed with a live eCFR fallback. The part and section resolve as the tool resolves them ("Part 141"; "61", "§ 141.61", "141.61(c)", "40 CFR 141.61"); `part` and `section` name what was read and `notice` says how, and also when hierarchyPath holds only the cited levels because eCFR could not supply the rest. When bodyTextNextOffset is present the section runs past the window — read on through regulations_get_cfr_section with that offset. Sections only; read an appendix through regulations_get_cfr_section with its `appendix` input.
regulations://cfr/40/50/50.1federal-regulations-guide
Research rulemaking history, codified CFR text, and public comments with regulations_* tools. Use when tracing a rule across sources, finding the publication behind a CFR source note, checking comment deadlines, or assessing public-comment evidence.
skill://federal-regulations-guide/SKILL.mdfederal-register-document — Federal Register document
A single Federal Register document by FR number: metadata, citation and pages, EO 12866 significance, presidential-document identifiers (subtype, number, signing date, president), and the cross-source handles (Regulations.gov docket and document IDs, printed docket numbers, affected CFR parts, comment count and comment URL) that chain into the search, comment, and codified-text tools. Mirrors regulations_get_document (full text omitted).
regulations://document/{documentNumber}cfr-section — CFR section (current)
Codified text of a current CFR section by title/part/section (e.g. regulations://cfr/40/50/50.1). Mirrors regulations_get_cfr_section at the current date and its default 64,000-character window — mirror-backed with a live eCFR fallback. The part and section resolve as the tool resolves them ("Part 141"; "61", "§ 141.61", "141.61(c)", "40 CFR 141.61"); `part` and `section` name what was read and `notice` says how, and also when hierarchyPath holds only the cited levels because eCFR could not supply the rest. When bodyTextNextOffset is present the section runs past the window — read on through regulations_get_cfr_section with that offset. Sections only; read an appendix through regulations_get_cfr_section with its `appendix` input.
regulations://cfr/{title}/{part}/{section}io.modelcontextprotocol/skills
skill://{+path}90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 881 ms
- 95th percentile latency
- 881 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 881 ms · metadata changed · 7 tool(s), 3 resource(s), 3 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http federal-regulations-mcp-server https://federal-regulations.caseyjhand.com/mcpCodex
codex mcp add federal-regulations-mcp-server --url https://federal-regulations.caseyjhand.com/mcpCursor
{
"mcpServers": {
"federal-regulations-mcp-server": {
"url": "https://federal-regulations.caseyjhand.com/mcp"
}
}
}Cline
{
"mcpServers": {
"federal-regulations-mcp-server": {
"type": "streamableHttp",
"url": "https://federal-regulations.caseyjhand.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"federal-regulations-mcp-server": {
"type": "http",
"url": "https://federal-regulations.caseyjhand.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http federal-regulations-mcp-server https://federal-regulations.caseyjhand.com/mcpClaude Desktop
https://federal-regulations.caseyjhand.com/mcpWindsurf
{
"mcpServers": {
"federal-regulations-mcp-server": {
"serverUrl": "https://federal-regulations.caseyjhand.com/mcp"
}
}
}Let your agent find its tools
Find servers like federal-regulations-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.