federal-regulations-mcp-server
Search and trace US federal rules across the Federal Register, eCFR, and Regulations.gov.
Sollte ich dies verwenden
Qualität und Sicherheit
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"federal-regulations-mcp-server": {
"command": "node",
"args": [
"@cyanheads/federal-regulations-mcp-server"
]
}
}
}Ausführbare Pakete
0.5.2streamable-httpRemote-Endpunkte
https://federal-regulations.caseyjhand.com/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (7)
🟢regulations_search_rules(query, type, agencies, published_after, published_before, ...)
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, and publication date range. The primary discovery entry point: results carry the document number (open with regulations_get_document), each issuing agency with its filterable slug, docket IDs, RINs, 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.
Eingabe-Schema
{
"type": "object",
"properties": {
"query": {
"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).",
"type": "string"
},
"type": {
"description": "Document types to include. PRORULE=Proposed Rule, RULE=Final Rule, NOTICE=Notice, PRESDOCU=Presidential Document. Omit for all types.",
"type": "array",
"items": {
"type": "string",
"enum": [
"PRORULE",
"RULE",
"NOTICE",
"PRESDOCU"
]
}
},
"agencies": {
"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.",
"type": "array",
"items": {
"type": "string"
}
},
"published_after": {
"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.",
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
]
},
"published_before": {
"description": "Latest publication date, ISO 8601 (YYYY-MM-DD), a real calendar day.",
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
]
},
"order": {
"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.",
"type": "string",
"enum": [
"relevance",
"newest",
"oldest"
]
},
"per_page": {
"default": 20,
"description": "Results per page (2–100, default 20). The Federal Register API treats exactly 1 as its default page size instead of returning one result.",
"type": "integer",
"minimum": 2,
"maximum": 100
},
"page": {
"default": 1,
"description": "Page number (1–50, default 1). The FR API caps total_pages at 50 — with per_page=100 this allows navigating up to 5,000 results. To reach beyond that window, narrow with published_after/published_before rather than paging deeper.",
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"documentNumber": {
"type": "string",
"description": "Federal Register document number — chains into regulations_get_document."
},
"title": {
"type": "string",
"description": "Document title."
},
"type": {
"type": "string",
"description": "Document type: Proposed Rule, Final Rule, Notice, or Presidential Document."
},
"abstract": {
"description": "Abstract summary, or null when absent.",
"type": [
"string",
"null"
]
},
"publicationDate": {
"type": "string",
"description": "Publication date (ISO 8601)."
},
"agencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Agency name."
},
"slug": {
"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.",
"type": [
"string",
"null"
]
}
},
"required": [
"name",
"slug"
],
"additionalProperties": false,
"description": "One issuing agency."
},
"description": "Issuing agencies."
},
"docketIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Docket IDs — chain into regulations_get_docket / regulations_find_comments."
},
"regulationIdNumbers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Regulation Identifier Number(s) (RIN)."
},
"cfrReferences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "number",
"description": "CFR title number."
},
"part": {
"type": "string",
"description": "CFR part."
}
},
"required": [
"title",
"part"
],
"additionalProperties": false,
"description": "A single affected CFR title + part."
},
"description": "Affected CFR parts — chain into regulations_get_cfr_section."
},
"commentsCloseOn": {
"description": "Comment-period close date (ISO 8601); when set, still open for comment.",
"type": [
"string",
"null"
]
},
"effectiveOn": {
"description": "Effective date (ISO 8601), or null.",
"type": [
"string",
"null"
]
},
"htmlUrl": {
"type": "string",
"description": "Federal Register web URL for the document."
}
},
"required": [
"documentNumber",
"title",
"type",
"abstract",
"publicationDate",
"agencies",
"docketIds",
"regulationIdNumbers",
"cfrReferences",
"commentsCloseOn",
"effectiveOn",
"htmlUrl"
],
"additionalProperties": false,
"description": "One matching Federal Register document."
},
"description": "Matching Federal Register documents (this page)."
},
"totalCount": {
"type": "number",
"description": "Total matches before pagination (FR count; capped at 10,000 by the API window)."
},
"truncated": {
"description": "True when matches exceed the FR 50-page (5,000-record) navigation ceiling.",
"type": "boolean"
},
"shown": {
"description": "Results returned on this page.",
"type": "number"
},
"notice": {
"description": "Guidance when nothing matched or when results were truncated.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"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.",
"examples": [
"upstream_unavailable",
"invalid_filter"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"results",
"totalCount"
]
},
{
"required": [
"error"
]
}
]
}🟢regulations_get_document(document_number, include_full_text, offset, max_chars)
Fetch one Federal Register document by its FR document number — full metadata (title, type, agencies, abstract, action, effective/comment dates, RINs) plus the cross-source handles that make this a workflow server. The output carries the docket ID (chain into regulations_get_docket or regulations_find_comments) 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.
Eingabe-Schema
{
"type": "object",
"properties": {
"document_number": {
"type": "string",
"pattern": "^[0-9]{4}-[0-9]+$",
"description": "Federal Register document number (e.g. \"2025-14555\"). Obtain from regulations_search_rules results (the documentNumber field)."
},
"include_full_text": {
"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.",
"type": "boolean"
},
"offset": {
"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.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"max_chars": {
"description": "Most body characters to return in this window (1–200,000, default 64,000). Implies include_full_text.",
"type": "integer",
"minimum": 1,
"maximum": 200000
}
},
"required": [
"document_number"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"documentNumber": {
"type": "string",
"description": "Federal Register document number."
},
"title": {
"type": "string",
"description": "Document title."
},
"type": {
"type": "string",
"description": "Document type."
},
"abstract": {
"description": "Abstract summary, or null.",
"type": [
"string",
"null"
]
},
"action": {
"description": "Action line (e.g. \"Final rule.\"), or null.",
"type": [
"string",
"null"
]
},
"dates": {
"description": "Free-text dates summary from the rule, or null.",
"type": [
"string",
"null"
]
},
"publicationDate": {
"type": "string",
"description": "Publication date (ISO 8601)."
},
"effectiveOn": {
"description": "Effective date (ISO 8601), or null.",
"type": [
"string",
"null"
]
},
"commentsCloseOn": {
"description": "Comment-period close date (ISO 8601); when set, still open for comment.",
"type": [
"string",
"null"
]
},
"agencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Agency name."
},
"slug": {
"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.",
"type": [
"string",
"null"
]
}
},
"required": [
"name",
"slug"
],
"additionalProperties": false,
"description": "One issuing agency."
},
"description": "Issuing agencies."
},
"regulationIdNumbers": {
"type": "array",
"items": {
"type": "string"
},
"description": "Regulation Identifier Number(s) (RIN)."
},
"cfrReferences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "number",
"description": "CFR title number."
},
"part": {
"type": "string",
"description": "CFR part."
}
},
"required": [
"title",
"part"
],
"additionalProperties": false,
"description": "A single affected CFR title + part."
},
"description": "Affected CFR parts — chain into regulations_get_cfr_section."
},
"docketId": {
"description": "Regulations.gov docket ID — chain into regulations_get_docket / find_comments. Null when not on Regulations.gov.",
"type": [
"string",
"null"
]
},
"regulationsGovDocumentId": {
"description": "Regulations.gov document ID — chain into regulations_find_comments (document-scoped). Null when absent.",
"type": [
"string",
"null"
]
},
"commentCount": {
"description": "FR-reported comment count from Regulations.gov; null when not on Regulations.gov.",
"type": [
"number",
"null"
]
},
"supportingDocuments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Supporting document title."
},
"documentId": {
"type": "string",
"description": "Regulations.gov document ID."
}
},
"required": [
"title",
"documentId"
],
"additionalProperties": false,
"description": "One related Regulations.gov supporting document."
},
"description": "Related Regulations.gov supporting documents."
},
"bodyHtmlUrl": {
"type": "string",
"description": "URL of the rendered HTML body."
},
"rawTextUrl": {
"type": "string",
"description": "URL of the plain-text body."
},
"htmlUrl": {
"type": "string",
"description": "Federal Register web URL for the document."
},
"fullText": {
"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.",
"type": "string"
},
"fullTextOffset": {
"description": "Character offset fullText starts at — present with fullText.",
"type": "number"
},
"fullTextLength": {
"description": "Characters in the whole plain-text body — present with fullText.",
"type": "number"
},
"fullTextNextOffset": {
"description": "Offset to pass as offset to read the next window — present only when body text remains past this window.",
"type": "number"
},
"notice": {
"description": "Guidance when the requested offset is at or past the end of the body.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"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.",
"examples": [
"full_text_disabled",
"not_found",
"upstream_unavailable"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"documentNumber",
"title",
"type",
"abstract",
"action",
"dates",
"publicationDate",
"effectiveOn",
"commentsCloseOn",
"agencies",
"regulationIdNumbers",
"cfrReferences",
"docketId",
"regulationsGovDocumentId",
"commentCount",
"supportingDocuments",
"bodyHtmlUrl",
"rawTextUrl",
"htmlUrl"
]
},
{
"required": [
"error"
]
}
]
}🟢regulations_browse_cfr(mode, title, part, query, date, ...)
Explore the codified Code of Federal Regulations via eCFR in two 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. Both modes accept title and part to narrow the scope. Both feed regulations_get_cfr_section. 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`.
Eingabe-Schema
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"structure",
"search"
],
"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."
},
"title": {
"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.",
"type": "integer",
"minimum": 1,
"maximum": 50
},
"part": {
"description": "CFR part within the title, in both modes — 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. Requires title; a part on its own is rejected. Parts can be alphanumeric (\"1203a\", \"16A\") and are matched exactly, so pass the identifier as eCFR writes it — \"58\", not \"Part 58\" or \"058\".",
"type": "string"
},
"query": {
"description": "Full-text search phrase (search mode, required in that mode). Ignored in structure mode.",
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"minLength": 2,
"description": "Search phrase, at least 2 characters."
}
]
},
"date": {
"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.",
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
]
},
"page": {
"default": 1,
"description": "1-based page of search results, or of a part's listing in structure mode (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.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"per_page": {
"default": 20,
"description": "Rows per page — search results, or nodes of a part's listing in structure mode (1–50, default 20).",
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"required": [
"mode"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"structure",
"search"
],
"description": "Which mode produced this result."
},
"date": {
"description": "Resolved point-in-time date — the hierarchy snapshot (structure mode), or the day whose section text was searched (search mode, live source only).",
"type": "string"
},
"nodes": {
"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.",
"type": "array",
"items": {
"type": "object",
"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."
},
"identifier": {
"type": "string",
"description": "Node identifier (e.g. \"40\", \"I\", \"50.1\")."
},
"label": {
"type": "string",
"description": "Human-readable label, plain text."
},
"description": {
"description": "Label description, or null.",
"type": [
"string",
"null"
]
},
"reserved": {
"type": "boolean",
"description": "True when the node is reserved/empty."
},
"cfrCite": {
"description": "Assembled cite → regulations_get_cfr_section: \"40 CFR 50.1\" for a section, \"Appendix A-1 to Part 50, Title 40\" for an appendix. Null on a level with no read path (title, subtitle, chapter).",
"type": [
"string",
"null"
]
},
"appendix": {
"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.",
"type": [
"string",
"null"
]
},
"subpart": {
"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.",
"type": [
"string",
"null"
]
},
"subjectGroup": {
"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.",
"type": [
"string",
"null"
]
}
},
"required": [
"type",
"identifier",
"label",
"description",
"reserved",
"cfrCite",
"appendix",
"subpart",
"subjectGroup"
],
"additionalProperties": false,
"description": "One hierarchy node."
}
},
"source": {
"description": "Provenance: the synced mirror index, or the live eCFR search API (search mode).",
"type": "string",
"enum": [
"mirror",
"live"
]
},
"sourceScope": {
"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.",
"type": "string"
},
"results": {
"description": "Matching CFR sections and appendices, this page, one row per section however many of its versions matched (search mode).",
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "number",
"description": "CFR title number."
},
"part": {
"type": "string",
"description": "CFR part."
},
"section": {
"description": "Section identifier, or null when the match is an appendix or a whole part.",
"type": [
"string",
"null"
]
},
"appendix": {
"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.",
"type": [
"string",
"null"
]
},
"heading": {
"type": "string",
"description": "What the matched node is called — the section, appendix, or part heading. Distinct from cfrCite, which is where it lives."
},
"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."
},
"excerpt": {
"type": "string",
"description": "Matched text snippet."
},
"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."
}
},
"required": [
"title",
"part",
"section",
"appendix",
"heading",
"hierarchyPath",
"excerpt",
"cfrCite"
],
"additionalProperties": false,
"description": "One matching CFR section or appendix."
}
},
"totalCount": {
"description": "Total matches before pagination — search results (see countBasis for what they count), or the nodes in a part's listing.",
"type": "number"
},
"countBasis": {
"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.",
"type": "string",
"enum": [
"sections",
"section_versions"
]
},
"page": {
"description": "The page served — of search results, or of a part's listing.",
"type": "number"
},
"truncated": {
"description": "True when another page follows this one.",
"type": "boolean"
},
"shown": {
"description": "Rows returned on this page.",
"type": "number"
},
"notice": {
"description": "Guidance: the next page to request, a page past the end, an empty result, or what the count means.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"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. `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.",
"examples": [
"query_required",
"title_not_found",
"title_required_for_part",
"date_out_of_range",
"page_out_of_window",
"upstream_unavailable"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"mode"
]
},
{
"required": [
"error"
]
}
]
}🟢regulations_get_cfr_section(title, part, section, appendix, date, ...)
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 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", or "141.61(c)" in part 141 all read 40 CFR 141.61, and 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 available; the source is reported.
Eingabe-Schema
{
"type": "object",
"properties": {
"title": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "CFR title number (1–50). E.g. 40 for \"Protection of Environment\"."
},
"part": {
"description": "CFR part within the title (e.g. \"50\"). Parts can be alphanumeric. 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.",
"type": "string"
},
"section": {
"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.\", and a paragraph cite (\"141.61(c)\"), which reads the whole section. 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.",
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"description": "Section identifier (e.g. \"50.1\")."
}
]
},
"appendix": {
"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.",
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"description": "Appendix identifier (e.g. \"Appendix A-1 to Part 50\")."
}
]
},
"date": {
"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.",
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
]
},
"offset": {
"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.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"max_chars": {
"description": "Most text characters to return in this window (1–200,000, default 64,000).",
"type": "integer",
"minimum": 1,
"maximum": 200000
}
},
"required": [
"title"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"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`)."
},
"title": {
"type": "number",
"description": "CFR title number."
},
"part": {
"description": "CFR part; null only for an appendix that hangs off a chapter, subchapter, or subtitle rather than a part.",
"type": [
"string",
"null"
]
},
"section": {
"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.",
"type": [
"string",
"null"
]
},
"appendix": {
"description": "Appendix identifier; null when a section or whole part was fetched.",
"type": [
"string",
"null"
]
},
"heading": {
"type": "string",
"description": "Section, part, or appendix heading."
},
"hierarchyPath": {
"type": "string",
"description": "Human-readable hierarchy path."
},
"date": {
"type": "string",
"description": "The issue/point-in-time date the text reflects (ISO 8601)."
},
"source": {
"type": "string",
"enum": [
"mirror",
"live"
],
"description": "Provenance: the synced mirror, or the live eCFR API."
},
"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/…]\"), and each section's trailing source citation are kept in document order. 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]\") — pass one of its FR cites to regulations_search_rules to reach the rulemaking that produced this text. Empty when the offset is at or past the end, or where the location is a placeholder carrying nothing but its heading (\"[Reserved]\")."
},
"bodyTextOffset": {
"type": "number",
"description": "Character offset bodyText starts at."
},
"bodyTextLength": {
"type": "number",
"description": "Characters in the location's whole text."
},
"bodyTextNextOffset": {
"description": "Offset to pass as offset to read the next window — present only when text remains past this window.",
"type": "number"
},
"sections": {
"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.",
"type": "array",
"items": {
"type": "object",
"properties": {
"section": {
"type": "string",
"description": "Section identifier — pass as section to read it alone."
},
"heading": {
"type": "string",
"description": "Section heading."
},
"cfrCite": {
"type": "string",
"description": "Assembled cite for the section."
},
"offset": {
"type": "number",
"description": "Offset in the whole part's text where this section starts — pass as offset to read from it."
}
},
"required": [
"section",
"heading",
"cfrCite",
"offset"
],
"additionalProperties": false,
"description": "One section of the part, without its text."
}
},
"appendices": {
"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.",
"type": "array",
"items": {
"type": "object",
"properties": {
"appendix": {
"type": "string",
"description": "Appendix identifier, for a follow-up read."
},
"heading": {
"type": "string",
"description": "Appendix heading."
}
},
"required": [
"appendix",
"heading"
],
"additionalProperties": false,
"description": "One appendix in the part, named but not inlined."
}
},
"notice": {
"description": "How a section written another way was resolved, and guidance when the offset is at or past the end of the text.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"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. `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.",
"examples": [
"not_found",
"location_required",
"conflicting_target",
"date_out_of_range",
"upstream_unavailable"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"cfrCite",
"title",
"part",
"section",
"appendix",
"heading",
"hierarchyPath",
"date",
"source",
"bodyText",
"bodyTextOffset",
"bodyTextLength"
]
},
{
"required": [
"error"
]
}
]
}🟢regulations_get_docket(docket_id, document_types, per_page, page)
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). 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 — filter document_types to "Proposed Rule"/"Rule" to find 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.
Eingabe-Schema
{
"type": "object",
"properties": {
"docket_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$",
"description": "Regulations.gov docket ID (e.g. \"EPA-HQ-OAR-2025-0194\"). Obtain from a Federal Register document's docketId (regulations_get_document) or an agency rulemaking reference."
},
"document_types": {
"description": "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.",
"type": "array",
"items": {
"type": "string",
"enum": [
"Proposed Rule",
"Rule",
"Notice",
"Supporting & Related Material",
"Other"
]
}
},
"per_page": {
"default": 25,
"description": "Documents per page (5–250, default 25). Regulations.gov requires a minimum page size of 5.",
"type": "integer",
"minimum": 5,
"maximum": 250
},
"page": {
"default": 1,
"description": "Page number (1-based). Regulations.gov caps a query at 20 pages (5,000 records); beyond that, narrow with document_types.",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"docket_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"docketId": {
"type": "string",
"description": "Regulations.gov docket ID."
},
"title": {
"type": "string",
"description": "Docket title."
},
"docketType": {
"description": "Docket type (e.g. \"Rulemaking\"), or null.",
"type": [
"string",
"null"
]
},
"agencyId": {
"description": "Agency ID (e.g. \"EPA\"), or null.",
"type": [
"string",
"null"
]
},
"rin": {
"description": "Regulation Identifier Number (\"Not Assigned\" when none), or null.",
"type": [
"string",
"null"
]
},
"abstract": {
"description": "Docket abstract, or null.",
"type": [
"string",
"null"
]
},
"modifyDate": {
"description": "Last-modified date, or null.",
"type": [
"string",
"null"
]
},
"objectId": {
"description": "Docket object ID, or null.",
"type": [
"string",
"null"
]
},
"documentCount": {
"type": "number",
"description": "Total documents in the docket (before pagination)."
},
"documents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"documentId": {
"type": "string",
"description": "Regulations.gov document ID."
},
"objectId": {
"type": "string",
"description": "Document object ID — chains into regulations_find_comments(document_object_id)."
},
"title": {
"type": "string",
"description": "Document title."
},
"documentType": {
"type": "string",
"description": "Document type."
},
"postedDate": {
"type": "string",
"description": "Posted date."
},
"frDocNum": {
"description": "Federal Register document number — chains back into regulations_get_document. Null when absent.",
"type": [
"string",
"null"
]
},
"commentEndDate": {
"description": "Comment-period end date; when set, open for comment.",
"type": [
"string",
"null"
]
},
"withdrawn": {
"type": "boolean",
"description": "True when the document was withdrawn."
}
},
"required": [
"documentId",
"objectId",
"title",
"documentType",
"postedDate",
"frDocNum",
"commentEndDate",
"withdrawn"
],
"additionalProperties": false,
"description": "One document filed in the docket."
},
"description": "Documents filed in the docket (this page)."
},
"truncated": {
"description": "True when documentCount exceeds the returned set / 5,000 ceiling.",
"type": "boolean"
},
"shown": {
"description": "Documents returned on this page.",
"type": "number"
},
"notice": {
"description": "Guidance when the docket has no documents.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"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. `not_found`: No docket exists with that 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.",
"examples": [
"auth_required",
"not_found",
"rate_limited",
"upstream_unavailable"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"docketId",
"title",
"docketType",
"agencyId",
"rin",
"abstract",
"modifyDate",
"objectId",
"documentCount",
"documents"
]
},
{
"required": [
"error"
]
}
]
}🟢regulations_find_comments(docket_id, document_object_id, fr_document_number, comment_id, per_page, ...)
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, from regulations_get_docket), fr_document_number (convenience — resolves the FR number to its Regulations.gov document internally), or comment_id (one comment's full detail and attachments). 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/).
Eingabe-Schema
{
"type": "object",
"properties": {
"docket_id": {
"description": "Fetch all comments in a docket by docket ID (e.g. \"EPA-HQ-OAR-2025-0194\"). 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.",
"type": "string"
},
"document_object_id": {
"description": "Fetch comments on one specific document by its Regulations.gov object ID (the objectId from regulations_get_docket's documents). Comments usually attach to the docket's primary (proposed-rule) document. Mutually exclusive with the other three targeting parameters.",
"type": "string"
},
"fr_document_number": {
"description": "Convenience: fetch comments for a Federal Register document by its FR number (e.g. \"2025-14555\"). Resolves to the Regulations.gov document internally. Saves a get_document → get_docket hop. Mutually exclusive with the other three targeting parameters.",
"type": "string"
},
"comment_id": {
"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.",
"type": "string"
},
"per_page": {
"default": 25,
"description": "Comments per page (5–250, default 25). Regulations.gov requires a minimum page size of 5.",
"type": "integer",
"minimum": 5,
"maximum": 250
},
"page": {
"default": 1,
"description": "Page number (1-based). Regulations.gov caps a query at 20 pages (5,000 records); for a high-volume docket this surfaces a sample — narrow by document_object_id.",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"list",
"detail"
],
"description": "Which mode produced this result."
},
"target": {
"description": "What was queried — docket / document / FR doc (list mode).",
"type": "string"
},
"comments": {
"description": "Comments matching the target, this page (list mode). Bodies/attachments require comment_id detail mode.",
"type": "array",
"items": {
"type": "object",
"properties": {
"commentId": {
"type": "string",
"description": "Comment ID — chains into comment_id for full detail."
},
"title": {
"type": "string",
"description": "Comment title (e.g. \"Comment from Gates, Andrew\")."
},
"documentType": {
"type": "string",
"description": "Document type (e.g. \"Public Submission\")."
},
"postedDate": {
"type": "string",
"description": "Posted date."
},
"agencyId": {
"description": "Agency ID, or null.",
"type": [
"string",
"null"
]
},
"objectId": {
"type": "string",
"description": "Comment object ID."
},
"withdrawn": {
"type": "boolean",
"description": "True when the comment was withdrawn."
}
},
"required": [
"commentId",
"title",
"documentType",
"postedDate",
"agencyId",
"objectId",
"withdrawn"
],
"additionalProperties": false,
"description": "One comment summary."
}
},
"commentId": {
"description": "Comment ID (detail mode).",
"type": "string"
},
"title": {
"description": "Comment title (detail mode).",
"type": "string"
},
"docketId": {
"description": "Docket ID, or null (detail mode).",
"type": [
"string",
"null"
]
},
"commentOnDocumentId": {
"description": "Document the comment was filed on, or null (detail mode).",
"type": [
"string",
"null"
]
},
"postedDate": {
"description": "Posted date (detail mode).",
"type": "string"
},
"receivedDate": {
"description": "Received date, or null (detail mode).",
"type": [
"string",
"null"
]
},
"submitterName": {
"description": "Submitter name when public, or null (detail mode).",
"type": [
"string",
"null"
]
},
"organization": {
"description": "Submitter organization, or null (detail mode).",
"type": [
"string",
"null"
]
},
"bodyText": {
"description": "Comment body, HTML-stripped. A stub (\"See Attached\") when content is in attachments; null when empty (detail mode).",
"type": [
"string",
"null"
]
},
"attachmentOnly": {
"description": "True when attachments exist and the body is a stub/empty — the substance is in the attachment files (detail mode).",
"type": "boolean"
},
"attachments": {
"description": "Attachment files — substance lives here when attachmentOnly is true (detail mode).",
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Attachment title."
},
"formats": {
"type": "array",
"items": {
"type": "object",
"properties": {
"format": {
"type": "string",
"description": "File format (e.g. \"pdf\")."
},
"fileUrl": {
"type": "string",
"description": "Download URL."
},
"size": {
"description": "File size in bytes, or null.",
"type": [
"number",
"null"
]
}
},
"required": [
"format",
"fileUrl",
"size"
],
"additionalProperties": false,
"description": "One downloadable file format."
},
"description": "Available file formats for the attachment."
}
},
"required": [
"title",
"formats"
],
"additionalProperties": false,
"description": "One attachment with its available formats."
}
},
"withdrawn": {
"description": "True when the comment was withdrawn (detail mode).",
"type": "boolean"
},
"restrictReason": {
"description": "Reason the comment is restricted, or null (detail mode).",
"type": [
"string",
"null"
]
},
"totalCount": {
"description": "Total comments matching the target (list mode).",
"type": "number"
},
"truncated": {
"description": "True when comments exceed the 5,000-record ceiling (list mode).",
"type": "boolean"
},
"shown": {
"description": "Comments returned on this page (list mode).",
"type": "number"
},
"notice": {
"description": "Guidance — empty results, or that bodies need comment_id detail mode.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"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. `not_found`: The target docket/document/comment has no comments or does not exist. `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.",
"examples": [
"auth_required",
"target_required",
"multiple_targets",
"not_found",
"rate_limited",
"upstream_unavailable"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"mode"
]
},
{
"required": [
"error"
]
}
]
}🟢regulations_list_open_comments(query, type, agencies, closing_before, per_page, ...)
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 is fully functional without a key. When REGULATIONS_GOV_API_KEY is configured, each row is enriched with the comment count from the Federal Register document's embedded Regulations.gov info (no extra rate-limited call). Open one row with regulations_get_document for the full document, or pull the comments with regulations_find_comments.
Eingabe-Schema
{
"type": "object",
"properties": {
"query": {
"description": "Full-text filter across open documents. Omit to list every document currently open for comment.",
"type": "string"
},
"type": {
"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\"].",
"type": "array",
"items": {
"type": "string",
"enum": [
"PRORULE",
"RULE",
"NOTICE"
]
}
},
"agencies": {
"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.",
"type": "array",
"items": {
"type": "string"
}
},
"closing_before": {
"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.",
"anyOf": [
{
"type": "string",
"const": ""
},
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "ISO 8601 date (YYYY-MM-DD)."
}
]
},
"per_page": {
"default": 20,
"description": "Documents per page (1–100, default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"default": 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": "integer",
"minimum": 1,
"maximum": 10000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"asOf": {
"type": "string",
"description": "The \"today\" the open-window filter used (ISO 8601)."
},
"keyed": {
"type": "boolean",
"description": "Whether comment counts were enriched (REGULATIONS_GOV_API_KEY present)."
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"documentNumber": {
"type": "string",
"description": "Federal Register document number — chains into regulations_get_document."
},
"title": {
"type": "string",
"description": "Document title."
},
"type": {
"type": "string",
"description": "Document type — \"Proposed Rule\", \"Rule\", or \"Notice\"; \"Unknown\" when unlisted."
},
"agencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Agency name."
},
"slug": {
"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.",
"type": [
"string",
"null"
]
}
},
"required": [
"name",
"slug"
],
"additionalProperties": false,
"description": "One issuing agency."
},
"description": "Issuing agencies."
},
"publicationDate": {
"type": "string",
"description": "Publication date (ISO 8601)."
},
"commentsCloseOn": {
"type": "string",
"description": "Comment-period close date (ISO 8601)."
},
"daysRemaining": {
"type": "number",
"description": "Whole days from asOf until the comment period closes."
},
"docketIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Docket IDs — chain into regulations_get_docket / find_comments."
},
"commentCount": {
"description": "Comment count from the FR document's Regulations.gov info; null when unkeyed or not on Regulations.gov.",
"type": [
"number",
"null"
]
}
},
"required": [
"documentNumber",
"title",
"type",
"agencies",
"publicationDate",
"commentsCloseOn",
"daysRemaining",
"docketIds",
"commentCount"
],
"additionalProperties": false,
"description": "One document open for comment."
},
"description": "Documents open for comment on this page, closing soonest first; documents closing the same day are ordered by document number."
},
"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."
},
"nextPage": {
"description": "Page to request next — present only when documents remain past this page.",
"type": "number"
},
"truncated": {
"description": "True when the Federal Register reported its 10,000-document maximum, so the window holds only the 10,000 most recently published matches.",
"type": "boolean"
},
"shown": {
"description": "Documents returned on this page.",
"type": "number"
},
"cap": {
"description": "The Federal Register document limit that was reached.",
"type": "number"
},
"notice": {
"description": "Guidance when nothing matched, when the page is past the end, when the window was truncated, or that comment counts are unavailable without a key.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"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.",
"examples": [
"upstream_unavailable",
"invalid_filter"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"asOf",
"keyed",
"results",
"totalCount",
"totalPages"
]
},
{
"required": [
"error"
]
}
]
}Community
Nachweis