Server definition
- Hash
- sha256:daa31788b614ca6f72d6fb77b0a034ef8c53496b8773d6d35cc36f2b42f2c3cd
- What it is
- What a remote MCP server returned when asked what it offers: 7 tools
The blob, as servednamed by its sha256
{
"instructions": "US federal regulatory law over three official sources. The Federal Register (regulations_search_rules, regulations_get_document, regulations_list_open_comments) and eCFR (regulations_browse_cfr, regulations_get_cfr_section) tools are keyless. The Regulations.gov tools (regulations_get_docket, regulations_find_comments) need REGULATIONS_GOV_API_KEY (free at https://api.data.gov/signup/) and return an actionable auth_required error without it; comment counts and Regulations.gov IDs on the Federal Register tools need no key. Trace a rule end to end: search_rules → get_document (yields docket ID + CFR parts) → find_comments → get_cfr_section, and back from a section's source-note cite with search_rules citation + citation_date.",
"tools": [
{
"description": "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`.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"date": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "ISO 8601 date (YYYY-MM-DD).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
],
"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."
},
"mode": {
"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.",
"enum": [
"structure",
"search"
],
"type": "string"
},
"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.",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"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 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\".",
"type": "string"
},
"per_page": {
"default": 20,
"description": "Rows per page — search results, or nodes of a part's listing in structure mode (1–50, default 20).",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"query": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "Search phrase, at least 2 characters.",
"minLength": 2,
"type": "string"
}
],
"description": "Full-text search phrase (search mode, required in that mode). Ignored in structure mode."
},
"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.",
"maximum": 50,
"minimum": 1,
"type": "integer"
}
},
"required": [
"mode"
],
"type": "object"
},
"name": "regulations_browse_cfr",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"mode"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"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.",
"enum": [
"sections",
"section_versions"
],
"type": "string"
},
"date": {
"description": "Resolved point-in-time date — the hierarchy snapshot (structure mode), or the day whose section text was searched (search mode).",
"type": "string"
},
"error": {
"additionalProperties": {},
"description": "Present when the call failed. Absent on success.",
"properties": {
"code": {
"description": "JSON-RPC error code for this failure.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"additionalProperties": {},
"properties": {
"reason": {
"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"
],
"type": "string"
},
"recovery": {
"additionalProperties": {},
"description": "Actionable next step for the caller.",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"type": "object"
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"type": "object"
},
"message": {
"description": "Human-readable description of what went wrong.",
"type": "string"
}
},
"required": [
"code",
"message"
],
"type": "object"
},
"mode": {
"description": "Which mode produced this result.",
"enum": [
"structure",
"search"
],
"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.",
"items": {
"additionalProperties": false,
"description": "One hierarchy node.",
"properties": {
"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"
]
},
"cfrCite": {
"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).",
"type": [
"string",
"null"
]
},
"description": {
"description": "Label description, or null.",
"type": [
"string",
"null"
]
},
"identifier": {
"description": "Node identifier (e.g. \"40\", \"I\", \"50.1\").",
"type": "string"
},
"label": {
"description": "Human-readable label, plain text.",
"type": "string"
},
"reserved": {
"description": "True when the node is reserved/empty.",
"type": "boolean"
},
"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"
]
},
"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"
]
},
"type": {
"description": "Node type: title, subtitle, or chapter above a part; section or appendix in a part listing. Treat an unknown type as passthrough.",
"type": "string"
}
},
"required": [
"type",
"identifier",
"label",
"description",
"reserved",
"cfrCite",
"appendix",
"subpart",
"subjectGroup"
],
"type": "object"
},
"type": "array"
},
"notice": {
"description": "Guidance: the next page to request, a page past the end, an empty result, or what the count means.",
"type": "string"
},
"page": {
"description": "The page served — of search results, or of a part's listing.",
"type": "number"
},
"results": {
"description": "Matching CFR sections and appendices, this page, one row per section however many of its versions matched (search mode).",
"items": {
"additionalProperties": false,
"description": "One matching CFR section or appendix.",
"properties": {
"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"
]
},
"cfrCite": {
"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.",
"type": "string"
},
"excerpt": {
"description": "Matched text snippet.",
"type": "string"
},
"heading": {
"description": "What the matched node is called — the section, appendix, or part heading. Distinct from cfrCite, which is where it lives.",
"type": "string"
},
"hierarchyPath": {
"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.",
"type": "string"
},
"part": {
"description": "CFR part.",
"type": "string"
},
"section": {
"description": "Section identifier, or null when the match is an appendix or a whole part.",
"type": [
"string",
"null"
]
},
"title": {
"description": "CFR title number.",
"type": "number"
}
},
"required": [
"title",
"part",
"section",
"appendix",
"heading",
"hierarchyPath",
"excerpt",
"cfrCite"
],
"type": "object"
},
"type": "array"
},
"shown": {
"description": "Rows returned on this page.",
"type": "number"
},
"source": {
"description": "Provenance: the synced mirror index, or the live eCFR search API (search mode).",
"enum": [
"mirror",
"live"
],
"type": "string"
},
"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"
},
"totalCount": {
"description": "Total matches before pagination — search results (see countBasis for what they count), or the nodes in a part's listing.",
"type": "number"
},
"truncated": {
"description": "True when another page follows this one.",
"type": "boolean"
}
},
"type": "object"
}
},
{
"description": "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/).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"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 — and takes none of the list filters.",
"type": "string"
},
"docket_id": {
"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.",
"type": "string"
},
"document_object_id": {
"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.",
"type": "string"
},
"fr_document_number": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "Federal Register document number (e.g. \"2023-05471\", \"E9-25990\").",
"pattern": "^[A-Za-z]?[0-9]{1,4}-[0-9]{1,6}(-[0-9]{1,6})?$",
"type": "string"
}
],
"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."
},
"page": {
"default": 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.",
"maximum": 40,
"minimum": 1,
"type": "integer"
},
"per_page": {
"default": 25,
"description": "Comments per page (5–250, default 25). Regulations.gov requires a minimum page size of 5.",
"maximum": 250,
"minimum": 5,
"type": "integer"
},
"posted_after": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "ISO 8601 date (YYYY-MM-DD).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
],
"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": [
{
"const": "",
"type": "string"
},
{
"description": "ISO 8601 date (YYYY-MM-DD).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
],
"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."
},
"search_term": {
"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.",
"type": "string"
}
},
"type": "object"
},
"name": "regulations_find_comments",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"mode"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"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).",
"items": {
"additionalProperties": false,
"description": "One attachment with its available formats.",
"properties": {
"formats": {
"description": "Available file formats for the attachment.",
"items": {
"additionalProperties": false,
"description": "One downloadable file format.",
"properties": {
"fileUrl": {
"description": "Download URL.",
"type": "string"
},
"format": {
"description": "File format (e.g. \"pdf\").",
"type": "string"
},
"size": {
"description": "File size in bytes, or null.",
"type": [
"number",
"null"
]
}
},
"required": [
"format",
"fileUrl",
"size"
],
"type": "object"
},
"type": "array"
},
"title": {
"description": "Attachment title.",
"type": "string"
}
},
"required": [
"title",
"formats"
],
"type": "object"
},
"type": "array"
},
"bodyText": {
"description": "Comment body, HTML-stripped. A stub (\"See Attached\") when content is in attachments; null when empty (detail mode).",
"type": [
"string",
"null"
]
},
"cap": {
"description": "The most comments 40 pages reach at this per_page (40 × per_page); set with truncated (list mode).",
"type": "number"
},
"commentId": {
"description": "Comment ID (detail mode).",
"type": "string"
},
"commentOnDocumentId": {
"description": "Document the comment was filed on, or null (detail mode).",
"type": [
"string",
"null"
]
},
"comments": {
"description": "Comments matching the target, this page (list mode). Bodies/attachments require comment_id detail mode.",
"items": {
"additionalProperties": false,
"description": "One comment summary.",
"properties": {
"agencyId": {
"description": "Agency ID, or null.",
"type": [
"string",
"null"
]
},
"commentId": {
"description": "Comment ID — chains into comment_id for full detail.",
"type": "string"
},
"documentType": {
"description": "Document type (e.g. \"Public Submission\").",
"type": "string"
},
"highlightedContent": {
"description": "The passages of the comment text that matched search_term, as plain text — present only when search_term was given.",
"type": "string"
},
"objectId": {
"description": "Comment object ID.",
"type": "string"
},
"postedDate": {
"description": "Posted date.",
"type": "string"
},
"title": {
"description": "Comment title (e.g. \"Comment from Gates, Andrew\").",
"type": "string"
},
"withdrawn": {
"description": "True when the comment was withdrawn.",
"type": "boolean"
}
},
"required": [
"commentId",
"title",
"documentType",
"postedDate",
"agencyId",
"objectId",
"withdrawn"
],
"type": "object"
},
"type": "array"
},
"docketId": {
"description": "Docket ID, or null (detail mode).",
"type": [
"string",
"null"
]
},
"duplicateComments": {
"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).",
"type": [
"number",
"null"
]
},
"error": {
"additionalProperties": {},
"description": "Present when the call failed. Absent on success.",
"properties": {
"code": {
"description": "JSON-RPC error code for this failure.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"additionalProperties": {},
"properties": {
"reason": {
"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, 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.",
"examples": [
"auth_required",
"target_required",
"multiple_targets",
"filter_requires_list_mode",
"date_range_inverted",
"not_found",
"rate_limited",
"upstream_unavailable"
],
"type": "string"
},
"recovery": {
"additionalProperties": {},
"description": "Actionable next step for the caller.",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"type": "object"
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"type": "object"
},
"message": {
"description": "Human-readable description of what went wrong.",
"type": "string"
}
},
"required": [
"code",
"message"
],
"type": "object"
},
"mode": {
"description": "Which mode produced this result.",
"enum": [
"list",
"detail"
],
"type": "string"
},
"nextPage": {
"description": "Page to request next — present only when a later page holds comments (list mode).",
"type": "number"
},
"notice": {
"description": "Guidance — 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.",
"type": "string"
},
"organization": {
"description": "Submitter organization, or null (detail mode).",
"type": [
"string",
"null"
]
},
"postedDate": {
"description": "Posted date (detail mode).",
"type": "string"
},
"postmarkDate": {
"description": "Postmark on a mailed submission, or null — many agencies record none (detail mode).",
"type": [
"string",
"null"
]
},
"receivedDate": {
"description": "Date Regulations.gov received the comment, or null when not recorded (detail mode).",
"type": [
"string",
"null"
]
},
"restrictReason": {
"description": "Reason the comment is restricted, or null (detail mode).",
"type": [
"string",
"null"
]
},
"shown": {
"description": "Comments returned on this page (list mode).",
"type": "number"
},
"submitterName": {
"description": "Submitter name when public, or null (detail mode).",
"type": [
"string",
"null"
]
},
"target": {
"description": "What was queried — the docket, document, or FR document, with any search_term and posted-date filters (list mode).",
"type": "string"
},
"title": {
"description": "Comment title (detail mode).",
"type": "string"
},
"totalCount": {
"description": "Total comments matching the target (list mode).",
"type": "number"
},
"totalPages": {
"description": "Pages of comments at this per_page, at most the 40 Regulations.gov serves; 0 when none matched (list mode).",
"type": "number"
},
"truncated": {
"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).",
"type": "boolean"
},
"withdrawn": {
"description": "True when the comment was withdrawn (detail mode).",
"type": "boolean"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"appendix": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "Appendix identifier (e.g. \"Appendix A-1 to Part 50\").",
"type": "string"
}
],
"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."
},
"date": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "ISO 8601 date (YYYY-MM-DD).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
],
"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."
},
"max_chars": {
"description": "Most text characters to return in this window (1–200,000, default 64,000).",
"maximum": 200000,
"minimum": 1,
"type": "integer"
},
"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.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"part": {
"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.",
"type": "string"
},
"section": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "Section identifier (e.g. \"50.1\").",
"type": "string"
}
],
"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."
},
"title": {
"description": "CFR title number (1–50). E.g. 40 for \"Protection of Environment\".",
"maximum": 50,
"minimum": 1,
"type": "integer"
}
},
"required": [
"title"
],
"type": "object"
},
"name": "regulations_get_cfr_section",
"outputSchema": {
"$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"
]
}
],
"properties": {
"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.",
"items": {
"additionalProperties": false,
"description": "One appendix in the part, named but not inlined.",
"properties": {
"appendix": {
"description": "Appendix identifier, for a follow-up read.",
"type": "string"
},
"heading": {
"description": "Appendix heading.",
"type": "string"
}
},
"required": [
"appendix",
"heading"
],
"type": "object"
},
"type": "array"
},
"appendix": {
"description": "Appendix identifier; null when a section or whole part was fetched.",
"type": [
"string",
"null"
]
},
"authority": {
"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.",
"type": [
"string",
"null"
]
},
"bodyText": {
"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]\").",
"type": "string"
},
"bodyTextLength": {
"description": "Characters in the location's whole text.",
"type": "number"
},
"bodyTextNextOffset": {
"description": "Offset to pass as offset to read the next window — present only when text remains past this window.",
"type": "number"
},
"bodyTextOffset": {
"description": "Character offset bodyText starts at.",
"type": "number"
},
"cfrCite": {
"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`).",
"type": "string"
},
"date": {
"description": "The issue/point-in-time date the text reflects (ISO 8601).",
"type": "string"
},
"error": {
"additionalProperties": {},
"description": "Present when the call failed. Absent on success.",
"properties": {
"code": {
"description": "JSON-RPC error code for this failure.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"additionalProperties": {},
"properties": {
"reason": {
"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.",
"examples": [
"not_found",
"location_required",
"conflicting_target",
"conflicting_title",
"date_out_of_range",
"upstream_unavailable"
],
"type": "string"
},
"recovery": {
"additionalProperties": {},
"description": "Actionable next step for the caller.",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"type": "object"
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"type": "object"
},
"message": {
"description": "Human-readable description of what went wrong.",
"type": "string"
}
},
"required": [
"code",
"message"
],
"type": "object"
},
"heading": {
"description": "Section, part, or appendix heading — for a whole part, the part's own (\"PART 141—NATIONAL PRIMARY DRINKING WATER REGULATIONS\").",
"type": "string"
},
"hierarchyPath": {
"description": "Human-readable hierarchy path.",
"type": "string"
},
"notes": {
"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.",
"items": {
"description": "One note, its label dropped.",
"type": "string"
},
"type": "array"
},
"notice": {
"description": "How a part or section written another way was resolved, and guidance when the offset is at or past the end of the text.",
"type": "string"
},
"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"
]
},
"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.",
"items": {
"additionalProperties": false,
"description": "One section of the part, without its text.",
"properties": {
"authority": {
"description": "The Authority its subpart or subject group states for this section; absent when the part's authority applies.",
"type": "string"
},
"cfrCite": {
"description": "Assembled cite for the section.",
"type": "string"
},
"heading": {
"description": "Section heading.",
"type": "string"
},
"offset": {
"description": "Offset in the whole part's text where this section starts — pass as offset to read from it.",
"type": "number"
},
"section": {
"description": "Section identifier — pass as section to read it alone.",
"type": "string"
},
"sourceNote": {
"description": "The Source note its subpart or subject group states for this section; absent when the part's sourceNote applies.",
"type": "string"
}
},
"required": [
"section",
"heading",
"cfrCite",
"offset"
],
"type": "object"
},
"type": "array"
},
"source": {
"description": "Provenance: the synced mirror, or the live eCFR API.",
"enum": [
"mirror",
"live"
],
"type": "string"
},
"sourceNote": {
"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.",
"type": [
"string",
"null"
]
},
"title": {
"description": "CFR title number.",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"docket_id": {
"description": "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).",
"pattern": "^[A-Za-z0-9_-]+$",
"type": "string"
},
"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.",
"items": {
"enum": [
"Proposed Rule",
"Rule",
"Notice",
"Supporting & Related Material",
"Other"
],
"type": "string"
},
"type": "array"
},
"page": {
"default": 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 document_types.",
"maximum": 40,
"minimum": 1,
"type": "integer"
},
"per_page": {
"default": 25,
"description": "Documents per page (5–250, default 25). Regulations.gov requires a minimum page size of 5.",
"maximum": 250,
"minimum": 5,
"type": "integer"
}
},
"required": [
"docket_id"
],
"type": "object"
},
"name": "regulations_get_docket",
"outputSchema": {
"$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",
"totalPages"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"abstract": {
"description": "Docket abstract, or null.",
"type": [
"string",
"null"
]
},
"agencyId": {
"description": "Agency ID (e.g. \"EPA\"), or null.",
"type": [
"string",
"null"
]
},
"cap": {
"description": "The most documents 40 pages reach at this per_page (40 × per_page); set with truncated.",
"type": "number"
},
"docketId": {
"description": "Regulations.gov docket ID.",
"type": "string"
},
"docketType": {
"description": "Docket type (e.g. \"Rulemaking\"), or null.",
"type": [
"string",
"null"
]
},
"documentCount": {
"description": "Total documents in the docket (before pagination).",
"type": "number"
},
"documents": {
"description": "Documents filed in the docket (this page).",
"items": {
"additionalProperties": false,
"description": "One document filed in the docket.",
"properties": {
"commentEndDate": {
"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.",
"type": [
"string",
"null"
]
},
"commentPeriodOpen": {
"description": "Whether the document is open for comment now, as Regulations.gov reports it (its openForComment); null when Regulations.gov doesn't say.",
"type": [
"boolean",
"null"
]
},
"documentId": {
"description": "Regulations.gov document ID.",
"type": "string"
},
"documentType": {
"description": "Document type.",
"type": "string"
},
"frDocNum": {
"description": "Federal Register document number — chains back into regulations_get_document. Null when absent.",
"type": [
"string",
"null"
]
},
"objectId": {
"description": "Document object ID — chains into regulations_find_comments(document_object_id).",
"type": "string"
},
"postedDate": {
"description": "Posted date.",
"type": "string"
},
"title": {
"description": "Document title.",
"type": "string"
},
"withdrawn": {
"description": "True when the document was withdrawn.",
"type": "boolean"
}
},
"required": [
"documentId",
"objectId",
"title",
"documentType",
"postedDate",
"frDocNum",
"commentEndDate",
"commentPeriodOpen",
"withdrawn"
],
"type": "object"
},
"type": "array"
},
"error": {
"additionalProperties": {},
"description": "Present when the call failed. Absent on success.",
"properties": {
"code": {
"description": "JSON-RPC error code for this failure.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"additionalProperties": {},
"properties": {
"reason": {
"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"
],
"type": "string"
},
"recovery": {
"additionalProperties": {},
"description": "Actionable next step for the caller.",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"type": "object"
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"type": "object"
},
"message": {
"description": "Human-readable description of what went wrong.",
"type": "string"
}
},
"required": [
"code",
"message"
],
"type": "object"
},
"modifyDate": {
"description": "Last-modified date, or null.",
"type": [
"string",
"null"
]
},
"nextPage": {
"description": "Page to request next — present only when a later page holds documents.",
"type": "number"
},
"notice": {
"description": "Guidance when the docket has no documents, when the page is past the end, or when documents lie beyond the last page.",
"type": "string"
},
"objectId": {
"description": "Docket object ID, or null.",
"type": [
"string",
"null"
]
},
"rin": {
"description": "Regulation Identifier Number (\"Not Assigned\" when none), or null.",
"type": [
"string",
"null"
]
},
"shown": {
"description": "Documents returned on this page.",
"type": "number"
},
"title": {
"description": "Docket title.",
"type": "string"
},
"totalPages": {
"description": "Pages of documents at this per_page, at most the 40 Regulations.gov serves; 0 when there are none.",
"type": "number"
},
"truncated": {
"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.",
"type": "boolean"
}
},
"type": "object"
}
},
{
"description": "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 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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"document_number": {
"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\".",
"pattern": "^[A-Za-z]?[0-9]{1,4}-[0-9]{1,6}(-[0-9]{1,6})?$",
"type": "string"
},
"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"
},
"max_chars": {
"description": "Most body characters to return in this window (1–200,000, default 64,000). Implies include_full_text.",
"maximum": 200000,
"minimum": 1,
"type": "integer"
},
"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.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"document_number"
],
"type": "object"
},
"name": "regulations_get_document",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"documentNumber",
"title",
"type",
"abstract",
"action",
"dates",
"publicationDate",
"citation",
"startPage",
"endPage",
"effectiveOn",
"commentsCloseOn",
"commentPeriodOpen",
"agencies",
"regulationIdNumbers",
"cfrReferences",
"docketIds",
"docketId",
"regulationsGovDocumentId",
"commentCount",
"commentUrl",
"supportingDocuments",
"bodyHtmlUrl",
"rawTextUrl",
"htmlUrl"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"abstract": {
"description": "Abstract summary, or null.",
"type": [
"string",
"null"
]
},
"action": {
"description": "Action line (e.g. \"Final rule.\"), or null.",
"type": [
"string",
"null"
]
},
"agencies": {
"description": "Issuing agencies.",
"items": {
"additionalProperties": false,
"description": "One issuing agency.",
"properties": {
"name": {
"description": "Agency name.",
"type": "string"
},
"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"
],
"type": "object"
},
"type": "array"
},
"bodyHtmlUrl": {
"description": "URL of the rendered HTML body.",
"type": "string"
},
"cfrReferences": {
"description": "Affected CFR parts — chain into regulations_get_cfr_section.",
"items": {
"additionalProperties": false,
"description": "A single affected CFR title + part.",
"properties": {
"part": {
"description": "CFR part.",
"type": "string"
},
"title": {
"description": "CFR title number.",
"type": "number"
}
},
"required": [
"title",
"part"
],
"type": "object"
},
"type": "array"
},
"citation": {
"description": "Where the document starts in the Federal Register (\"89 FR 49101\"); null when none is recorded, as for most of 1994.",
"type": [
"string",
"null"
]
},
"commentCount": {
"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.",
"type": [
"number",
"null"
]
},
"commentPeriodOpen": {
"description": "Whether that comment period is open today: true through 11:59 PM Eastern on commentsCloseOn, false after it, null when commentsCloseOn is null.",
"type": [
"boolean",
"null"
]
},
"commentUrl": {
"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.",
"type": [
"string",
"null"
]
},
"commentsCloseOn": {
"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.",
"type": [
"string",
"null"
]
},
"dates": {
"description": "Free-text dates summary from the rule, or null.",
"type": [
"string",
"null"
]
},
"docketId": {
"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.",
"type": [
"string",
"null"
]
},
"docketIds": {
"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.",
"items": {
"type": "string"
},
"type": "array"
},
"documentNumber": {
"description": "Federal Register document number.",
"type": "string"
},
"effectiveOn": {
"description": "Effective date (ISO 8601), or null.",
"type": [
"string",
"null"
]
},
"endPage": {
"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.",
"type": [
"number",
"null"
]
},
"error": {
"additionalProperties": {},
"description": "Present when the call failed. Absent on success.",
"properties": {
"code": {
"description": "JSON-RPC error code for this failure.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"additionalProperties": {},
"properties": {
"reason": {
"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"
],
"type": "string"
},
"recovery": {
"additionalProperties": {},
"description": "Actionable next step for the caller.",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"type": "object"
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"type": "object"
},
"message": {
"description": "Human-readable description of what went wrong.",
"type": "string"
}
},
"required": [
"code",
"message"
],
"type": "object"
},
"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"
},
"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"
},
"fullTextOffset": {
"description": "Character offset fullText starts at — present with fullText.",
"type": "number"
},
"htmlUrl": {
"description": "Federal Register web URL for the document.",
"type": "string"
},
"notice": {
"description": "Guidance when the requested offset is at or past the end of the body.",
"type": "string"
},
"publicationDate": {
"description": "Publication date (ISO 8601).",
"type": "string"
},
"rawTextUrl": {
"description": "URL of the plain-text body.",
"type": "string"
},
"regulationIdNumbers": {
"description": "Regulation Identifier Number(s) (RIN).",
"items": {
"type": "string"
},
"type": "array"
},
"regulationsGovDocumentId": {
"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.",
"type": [
"string",
"null"
]
},
"startPage": {
"description": "First Federal Register page the document is printed on; null when unrecorded.",
"type": [
"number",
"null"
]
},
"supportingDocuments": {
"description": "Related Regulations.gov supporting documents.",
"items": {
"additionalProperties": false,
"description": "One related Regulations.gov supporting document.",
"properties": {
"documentId": {
"description": "Regulations.gov document ID.",
"type": "string"
},
"title": {
"description": "Supporting document title.",
"type": "string"
}
},
"required": [
"title",
"documentId"
],
"type": "object"
},
"type": "array"
},
"title": {
"description": "Document title.",
"type": "string"
},
"type": {
"description": "Document type.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "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).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"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.",
"items": {
"type": "string"
},
"type": "array"
},
"closing_before": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "ISO 8601 date (YYYY-MM-DD).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
],
"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."
},
"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.",
"maximum": 10000,
"minimum": 1,
"type": "integer"
},
"per_page": {
"default": 20,
"description": "Documents per page (1–100, default 20).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"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\"].",
"items": {
"enum": [
"PRORULE",
"RULE",
"NOTICE"
],
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": "regulations_list_open_comments",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"asOf",
"keyed",
"results",
"totalCount",
"totalPages"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"asOf": {
"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.",
"type": "string"
},
"cap": {
"description": "The Federal Register document limit that was reached.",
"type": "number"
},
"error": {
"additionalProperties": {},
"description": "Present when the call failed. Absent on success.",
"properties": {
"code": {
"description": "JSON-RPC error code for this failure.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"additionalProperties": {},
"properties": {
"reason": {
"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"
],
"type": "string"
},
"recovery": {
"additionalProperties": {},
"description": "Actionable next step for the caller.",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"type": "object"
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"type": "object"
},
"message": {
"description": "Human-readable description of what went wrong.",
"type": "string"
}
},
"required": [
"code",
"message"
],
"type": "object"
},
"keyed": {
"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.",
"type": "boolean"
},
"nextPage": {
"description": "Page to request next — present only when documents remain past this page.",
"type": "number"
},
"notice": {
"description": "Guidance when nothing matched, when the page is past the end, or when the window was truncated.",
"type": "string"
},
"results": {
"description": "Documents open for comment on this page, closing soonest first; documents closing the same day are ordered by document number.",
"items": {
"additionalProperties": false,
"description": "One document open for comment.",
"properties": {
"agencies": {
"description": "Issuing agencies.",
"items": {
"additionalProperties": false,
"description": "One issuing agency.",
"properties": {
"name": {
"description": "Agency name.",
"type": "string"
},
"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"
],
"type": "object"
},
"type": "array"
},
"commentCount": {
"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.",
"type": [
"number",
"null"
]
},
"commentUrl": {
"description": "Regulations.gov page for submitting a comment on this document, as the Federal Register lists it; null when it lists none.",
"type": [
"string",
"null"
]
},
"commentsCloseOn": {
"description": "Last day of the comment period (ISO 8601), inclusive, in Eastern time.",
"type": "string"
},
"daysRemaining": {
"description": "Whole days from asOf to commentsCloseOn; 0 means comments close at the end of today.",
"type": "number"
},
"docketIds": {
"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.",
"items": {
"type": "string"
},
"type": "array"
},
"documentNumber": {
"description": "Federal Register document number — chains into regulations_get_document.",
"type": "string"
},
"publicationDate": {
"description": "Publication date (ISO 8601).",
"type": "string"
},
"regulationsGovDocketId": {
"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.",
"type": [
"string",
"null"
]
},
"regulationsGovDocumentId": {
"description": "Regulations.gov document ID — pass as document_object_id to regulations_find_comments for the comments filed on this document. Null when absent.",
"type": [
"string",
"null"
]
},
"title": {
"description": "Document title.",
"type": "string"
},
"type": {
"description": "Document type — \"Proposed Rule\", \"Rule\", or \"Notice\"; \"Unknown\" when unlisted.",
"type": "string"
}
},
"required": [
"documentNumber",
"title",
"type",
"agencies",
"publicationDate",
"commentsCloseOn",
"daysRemaining",
"docketIds",
"regulationsGovDocketId",
"regulationsGovDocumentId",
"commentCount",
"commentUrl"
],
"type": "object"
},
"type": "array"
},
"shown": {
"description": "Documents returned on this page.",
"type": "number"
},
"totalCount": {
"description": "Documents open for comment matching the filters — the window the pages run over.",
"type": "number"
},
"totalPages": {
"description": "Pages in the window at this per_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"
}
},
"type": "object"
}
},
{
"description": "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, and RIN, 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, 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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"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.",
"items": {
"type": "string"
},
"type": "array"
},
"cfr_part": {
"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.",
"type": "string"
},
"cfr_title": {
"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.",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"citation": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "Federal Register volume and page, \"89 FR 49102\".",
"pattern": "^\\s*(\\d{1,3})\\s*[Ff]\\.?\\s?[Rr]\\.?\\s*(\\d{1,6})\\s*$",
"type": "string"
}
],
"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."
},
"citation_date": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "ISO 8601 date (YYYY-MM-DD).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
],
"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."
},
"docket_id": {
"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.",
"type": "string"
},
"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. Ignored with citation, whose matches come in page order.",
"enum": [
"relevance",
"newest",
"oldest"
],
"type": "string"
},
"page": {
"default": 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.",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"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.",
"maximum": 100,
"minimum": 2,
"type": "integer"
},
"published_after": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "ISO 8601 date (YYYY-MM-DD).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
],
"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."
},
"published_before": {
"anyOf": [
{
"const": "",
"type": "string"
},
{
"description": "ISO 8601 date (YYYY-MM-DD).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
],
"description": "Latest publication date, ISO 8601 (YYYY-MM-DD), a real calendar day."
},
"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"
},
"rin": {
"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.",
"type": "string"
},
"type": {
"description": "Document types to include. PRORULE=Proposed Rule, RULE=Final Rule, NOTICE=Notice, PRESDOCU=Presidential Document. Omit for all types.",
"items": {
"enum": [
"PRORULE",
"RULE",
"NOTICE",
"PRESDOCU"
],
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": "regulations_search_rules",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"results",
"totalCount",
"totalPages"
]
},
{
"required": [
"error"
]
}
],
"properties": {
"cap": {
"description": "The most matches 50 pages reach at this per_page (50 × per_page); set with truncated.",
"type": "number"
},
"error": {
"additionalProperties": {},
"description": "Present when the call failed. Absent on success.",
"properties": {
"code": {
"description": "JSON-RPC error code for this failure.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"data": {
"additionalProperties": {},
"properties": {
"reason": {
"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. `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.",
"examples": [
"upstream_unavailable",
"invalid_filter",
"date_range_inverted",
"title_required_for_part",
"citation_incomplete",
"citation_out_of_range"
],
"type": "string"
},
"recovery": {
"additionalProperties": {},
"description": "Actionable next step for the caller.",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"type": "object"
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"type": "object"
},
"message": {
"description": "Human-readable description of what went wrong.",
"type": "string"
}
},
"required": [
"code",
"message"
],
"type": "object"
},
"nextPage": {
"description": "Page to request next — present only when a later page holds matches.",
"type": "number"
},
"notice": {
"description": "Guidance when nothing matched, when the page is past the end, or when matches lie beyond the last page.",
"type": "string"
},
"results": {
"description": "Matching Federal Register documents (this page).",
"items": {
"additionalProperties": false,
"description": "One matching Federal Register document.",
"properties": {
"abstract": {
"description": "Abstract summary, or null when absent.",
"type": [
"string",
"null"
]
},
"agencies": {
"description": "Issuing agencies.",
"items": {
"additionalProperties": false,
"description": "One issuing agency.",
"properties": {
"name": {
"description": "Agency name.",
"type": "string"
},
"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"
],
"type": "object"
},
"type": "array"
},
"cfrReferences": {
"description": "Affected CFR parts — chain into regulations_get_cfr_section.",
"items": {
"additionalProperties": false,
"description": "A single affected CFR title + part.",
"properties": {
"part": {
"description": "CFR part.",
"type": "string"
},
"title": {
"description": "CFR title number.",
"type": "number"
}
},
"required": [
"title",
"part"
],
"type": "object"
},
"type": "array"
},
"citation": {
"description": "Where the document starts in the Federal Register (\"89 FR 49101\"); null when none is recorded, as for most of 1994.",
"type": [
"string",
"null"
]
},
"commentCount": {
"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.",
"type": [
"number",
"null"
]
},
"commentPeriodOpen": {
"description": "Whether that comment period is open today: true through 11:59 PM Eastern on commentsCloseOn, false after it, null when commentsCloseOn is null.",
"type": [
"boolean",
"null"
]
},
"commentUrl": {
"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.",
"type": [
"string",
"null"
]
},
"commentsCloseOn": {
"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.",
"type": [
"string",
"null"
]
},
"docketIds": {
"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.",
"items": {
"type": "string"
},
"type": "array"
},
"documentNumber": {
"description": "Federal Register document number — chains into regulations_get_document.",
"type": "string"
},
"effectiveOn": {
"description": "Effective date (ISO 8601), or null.",
"type": [
"string",
"null"
]
},
"endPage": {
"description": "Last Federal Register page the document is printed on; null when unrecorded.",
"type": [
"number",
"null"
]
},
"htmlUrl": {
"description": "Federal Register web URL for the document.",
"type": "string"
},
"publicationDate": {
"description": "Publication date (ISO 8601).",
"type": "string"
},
"regulationIdNumbers": {
"description": "Regulation Identifier Number(s) (RIN).",
"items": {
"type": "string"
},
"type": "array"
},
"regulationsGovDocketId": {
"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.",
"type": [
"string",
"null"
]
},
"regulationsGovDocumentId": {
"description": "Regulations.gov document ID — pass as document_object_id to regulations_find_comments for the comments filed on this document. Null when absent.",
"type": [
"string",
"null"
]
},
"startPage": {
"description": "First Federal Register page the document is printed on; null when unrecorded.",
"type": [
"number",
"null"
]
},
"title": {
"description": "Document title.",
"type": "string"
},
"type": {
"description": "Document type: Proposed Rule, Final Rule, Notice, or Presidential Document.",
"type": "string"
}
},
"required": [
"documentNumber",
"title",
"type",
"abstract",
"publicationDate",
"citation",
"startPage",
"endPage",
"agencies",
"docketIds",
"regulationsGovDocketId",
"regulationsGovDocumentId",
"commentCount",
"commentUrl",
"regulationIdNumbers",
"cfrReferences",
"commentsCloseOn",
"commentPeriodOpen",
"effectiveOn",
"htmlUrl"
],
"type": "object"
},
"type": "array"
},
"shown": {
"description": "Results returned on this page.",
"type": "number"
},
"totalCount": {
"description": "Matches before pagination. The Federal Register stops counting at 10,000, so 10,000 means at least that many.",
"type": "number"
},
"totalPages": {
"description": "Pages at this per_page, at most the 50 the Federal Register serves; 0 when nothing matched.",
"type": "number"
},
"truncated": {
"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.",
"type": "boolean"
}
},
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:daa31788b614ca6f72d6fb77b0a034ef8c53496b8773d6d35cc36f2b42f2c3cd | sha256sum