Skip to main content
Glama

federal-regulations-mcp-server

Server Details

Search and trace US federal rules across the Federal Register, eCFR, and Regulations.gov.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 44 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/federal-regulations-mcp-server
GitHub Stars
1
Server Listing
federal-regulations-mcp-server

TDQS

A4.6/5.0

Scored across 7 tools

Disambiguation5/5

Each tool handles a distinct resource or action: browsing/structure vs. reading CFR text, searching the Federal Register, fetching a specific document, pulling a docket, and retrieving comments. Even related tools like search_rules and browse_cfr operate on different corpora, and get_docket vs. find_comments serve clearly separate purposes. No two tools could be confused for the same operation.

Naming Consistency5/5

All tools share the 'regulations_' prefix and follow a consistent 'verb_noun' pattern (browse_cfr, find_comments, get_cfr_section, get_docket, get_document, list_open_comments, search_rules). The snake_case style is uniform, and each verb accurately reflects the action. The naming is predictable and easy to navigate.

Tool Count5/5

Seven tools is in the sweet spot for a domain-specific server. They cover the full research workflow—CFR discovery and reading, Federal Register search, document/docket retrieval, and comment access—without redundancy or unnecessary bloat. Each tool has a clear role and nothing feels extraneous.

Completeness5/5

The toolset provides end-to-end coverage for researching U.S. federal regulations: browse and search CFR, read specific sections, search and retrieve Federal Register documents, pull dockets, and list/fetch public comments. Cross-linking between these resources is built in (e.g., document IDs chain into dockets and CFR sections). No critical operations appear missing for the stated purpose.

Available Tools

7 tools
regulations_browse_cfrregulations_browse_cfrA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoPoint-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.
modeYes"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.
pageNo1-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.
partNoCFR 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".
queryNoFull-text search phrase (search mode, required in that mode). Ignored in structure mode.
titleNoCFR 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.
per_pageNoRows per page — search results, or nodes of a part's listing in structure mode (1–50, default 20).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateNoResolved point-in-time date — the hierarchy snapshot (structure mode), or the day whose section text was searched (search mode).
modeNoWhich mode produced this result.
pageNoThe page served — of search results, or of a part's listing.
errorNoPresent when the call failed. Absent on success.
nodesNoStructure mode: the 50 titles, a title's top-level divisions, or this page of a part's sections and appendices in document order.
shownNoRows returned on this page.
noticeNoGuidance: the next page to request, a page past the end, an empty result, or what the count means.
sourceNoProvenance: the synced mirror index, or the live eCFR search API (search mode).
resultsNoMatching CFR sections and appendices, this page, one row per section however many of its versions matched (search mode).
truncatedNoTrue when another page follows this one.
countBasisNoWhat 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.
totalCountNoTotal matches before pagination — search results (see countBasis for what they count), or the nodes in a part's listing.
sourceScopeNoWhat 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.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral detail beyond the readOnlyHint and openWorldHint annotations: paging behavior, flattened part listings, one-result-per-section search, corpus source reporting, date-dependent search semantics, and truncation notices. This gives an agent a realistic model of the tool's runtime behavior without needing to call it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: it covers the dual modes, their distinct behaviors, parameter scoping, the relationship to regulations_get_cfr_section, and result metadata. The first sentence front-loads the core purpose, and no filler or repetition is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex two-mode tool with 7 parameters and an output schema, the description is complete: it explains mode-specific behavior, scoping, paging limits, corpus provenance, and the downstream workflow. The output schema covers return values, so no additional description of those is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all 7 parameters with high coverage, including mode, title, part, query, date, page, and per_page. The description restates that title and part narrow scope and that query is required in search mode, but it adds little semantic meaning beyond what the schema descriptions already provide, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Explore the codified Code of Federal Regulations via eCFR') and precisely distinguishes its two modes, structure and search, with concrete behaviors for each. It differentiates from siblings by emphasizing the codified CFR and by noting that both modes feed regulations_get_cfr_section, giving an agent a clear identity for the tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when each mode is appropriate: structure mode for enumerating titles, divisions, and sections, and search mode for full-text queries. It does not explicitly name alternatives or state when not to use the tool, but the codified-CFR scope and the workflow link to regulations_get_cfr_section provide solid guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

regulations_find_commentsregulations_find_commentsA
Read-only
Inspect

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/).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1–40, default 1). Regulations.gov serves 40 pages, so a list reaches 40 × per_page comments (10,000 at per_page 250); totalPages and nextPage in the response say how far this one goes. To reach past that, take the set one posted_after/posted_before window at a time.
per_pageNoComments per page (5–250, default 25). Regulations.gov requires a minimum page size of 5.
docket_idNoFetch all comments in a docket by Regulations.gov docket ID (e.g. "EPA-HQ-OAR-2025-0194") — regulationsGovDocketId on a regulations_search_rules or regulations_list_open_comments row, or docketId from regulations_get_document, not an entry of the printed docketIds. Broadest scope. Exactly one of docket_id / document_object_id / fr_document_number / comment_id is required — supplying two is rejected, not resolved by precedence.
comment_idNoFetch one comment's full detail and attachments by its Regulations.gov comment ID (e.g. "EPA-HQ-OAR-2025-0194-31102"). Use to read a single comment's body after finding it in a list. Mutually exclusive with the other three targeting parameters — pass it alone, not alongside the docket it came from — and takes none of the list filters.
search_termNoList mode: keep only comments whose text matches, as Regulations.gov full-text search reads it — stemmed, so "flaring" also matches "flare" and "flares". Each hit then carries highlightedContent, the passages that matched.
posted_afterNoList 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_beforeNoList mode: latest posted date, inclusive, ISO 8601 (YYYY-MM-DD), a real calendar day. The same date as posted_after selects that one day.
document_object_idNoFetch comments on one specific Regulations.gov document, by either handle: its object ID, 16 hex characters (e.g. "0900006485883ec6", the objectId in regulations_get_docket's documents), or its document ID (e.g. "EPA-HQ-OW-2022-0114-0027", the regulationsGovDocumentId from regulations_get_document). Comments usually attach to the docket's primary (proposed-rule) document. Mutually exclusive with the other three targeting parameters.
fr_document_numberNoConvenience: 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe most comments 40 pages reach at this per_page (40 × per_page); set with truncated (list mode).
modeNoWhich mode produced this result.
errorNoPresent when the call failed. Absent on success.
shownNoComments returned on this page (list mode).
titleNoComment title (detail mode).
noticeNoGuidance — 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.
targetNoWhat was queried — the docket, document, or FR document, with any search_term and posted-date filters (list mode).
bodyTextNoComment body, HTML-stripped. A stub ("See Attached") when content is in attachments; null when empty (detail mode).
commentsNoComments matching the target, this page (list mode). Bodies/attachments require comment_id detail mode.
docketIdNoDocket ID, or null (detail mode).
nextPageNoPage to request next — present only when a later page holds comments (list mode).
commentIdNoComment ID (detail mode).
truncatedNoTrue 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).
withdrawnNoTrue when the comment was withdrawn (detail mode).
postedDateNoPosted date (detail mode).
totalCountNoTotal comments matching the target (list mode).
totalPagesNoPages of comments at this per_page, at most the 40 Regulations.gov serves; 0 when none matched (list mode).
attachmentsNoAttachment files — substance lives here when attachmentOnly is true (detail mode).
organizationNoSubmitter organization, or null (detail mode).
postmarkDateNoPostmark on a mailed submission, or null — many agencies record none (detail mode).
receivedDateNoDate Regulations.gov received the comment, or null when not recorded (detail mode).
submitterNameNoSubmitter name when public, or null (detail mode).
attachmentOnlyNoTrue when attachments exist and the body is a stub/empty — the substance is in the attachment files (detail mode).
restrictReasonNoReason the comment is restricted, or null (detail mode).
duplicateCommentsNoIdentical 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).
commentOnDocumentIdNoDocument the comment was filed on, or null (detail mode).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite readOnlyHint=true covering the safety profile, the description adds substantial behavioral context: the list endpoint returns no body/attachment info, attachment-only comments return a stub body with attachmentOnly=true and download URLs, the 40-page/10,000-comment ceiling with the windowing workaround, stemmed search semantics, and the REGULATIONS_GOV_API_KEY requirement. This goes well beyond what annotations provide and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long (~250 words) but densely packed — the core purpose is front-loaded, then targeting modes, then list/detail behavior, then the attachment caveat, then auth. Nearly every sentence earns its place given the genuine complexity of 9 parameters with 4 mutually exclusive targeting modes. It loses a point only because some parameter-level guidance (e.g., mutual exclusivity) is restated in both the description and the schema, creating mild redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with this complexity — 9 parameters, four-way mutual exclusion, a list-vs-detail behavioral split, attachment stubs, pagination ceilings, and an auth requirement — the description is remarkably complete. It covers every targeting mode, the list/detail distinction, the pagination workaround, error behavior (not_found), and the API key. An output schema exists, so return-value documentation is not the description's job.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 with the schema doing the heavy lifting. The description genuinely adds meaning beyond it: the exactly-one-targeting-parameter rule, that supplying two is 'rejected, not resolved by precedence,' the 'broadest scope' ranking, comment_id's post-list use case, and the fr_document_number 'saves a hop' convenience framing. Not a 5 because the schema already documents each parameter's format and examples thoroughly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb (Fetch) and resource (public comments on a Federal Register document or Regulations.gov docket), and the opening clause 'the unique corpus of what citizens and organizations actually submitted' distinguishes it from the sibling tools, all of which deal with regulations/dockets/documents rather than the submitted comments corpus. An agent can tell this apart from list_open_comments and search_rules without examining the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit routing for each targeting mode: docket_id is 'broadest,' fr_document_number is a 'convenience' that 'saves a get_document → get_docket hop,' and comment_id is to be used 'after finding it in a list.' It also names exact sibling tools as ID sources (regulations_search_rules, regulations_list_open_comments, regulations_get_document, regulations_get_docket) and states a negative case ('a presidential document, for one, answers not_found'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

regulations_get_cfr_sectionregulations_get_cfr_sectionA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoPoint-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.
partNoCFR 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.
titleYesCFR title number (1–50). E.g. 40 for "Protection of Environment".
offsetNoCharacter 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.
sectionNoSection 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.
appendixNoAppendix identifier, verbatim as eCFR writes it — the `appendix` field or the leading phrase of the `cfrCite` on a regulations_browse_cfr appendix node or search hit. It is free-form prose, not a letter: "Appendix A-1 to Part 50", "Appendix A to Subpart C of Part 4", "Schedule I to Part 789", "Special Federal Aviation Regulation No. 88". Pass the whole phrase; a short form such as "A-1" matches nothing. Cannot be combined with section.
max_charsNoMost text characters to return in this window (1–200,000, default 64,000).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateNoThe issue/point-in-time date the text reflects (ISO 8601).
partNoCFR part; null only for an appendix that hangs off a chapter, subchapter, or subtitle rather than a part.
errorNoPresent when the call failed. Absent on success.
notesNoThe part's editorial, general, and OMB control-number notes, in document order; empty when it has none. Present only on a whole-part read.
titleNoCFR title number.
noticeNoHow a part or section written another way was resolved, and guidance when the offset is at or past the end of the text.
sourceNoProvenance: the synced mirror, or the live eCFR API.
cfrCiteNoAssembled 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`).
headingNoSection, part, or appendix heading — for a whole part, the part's own ("PART 141—NATIONAL PRIMARY DRINKING WATER REGULATIONS").
sectionNoSection 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.
appendixNoAppendix identifier; null when a section or whole part was fetched.
bodyTextNoOne 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]").
sectionsNoPresent 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.
authorityNoThe 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.
appendicesNoPresent 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.
sourceNoteNoThe 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.
hierarchyPathNoHuman-readable hierarchy path.
bodyTextLengthNoCharacters in the location's whole text.
bodyTextOffsetNoCharacter offset bodyText starts at.
bodyTextNextOffsetNoOffset to pass as offset to read the next window — present only when text remains past this window.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses pagination behavior (64k default, 200k max, offset to resume), date availability window (2017 to up-to-date), rejection behavior with the window named, and the local mirror serving current single-section reads with source reporting. These add substantial context beyond the readOnly/idempotent annotations, and there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Though long, the description is information-dense and logically organized: purpose, three location modes, citation flexibility, window/pagination, date bounds, and mirror behavior. Each sentence carries actionable information with no filler, making the length justified for a tool with this complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all three location modes, explains all seven parameters' behaviors, describes return windowing and error handling, and points to regulations_browse_cfr for identifier discovery. With an output schema present, nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description far exceeds the baseline by explaining accepted section citation formats ('61', '§ 141.61', '141.61(c)'), appendix verbatim matching, offset semantics for paging, and date range constraints. This makes parameter usage much clearer than the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence, 'Read the codified text at a CFR location via eCFR — current or as of a past date', is a specific verb+resource statement. The example questions ('what does 40 CFR 50.1 say today?') and the three location modes make the tool's purpose unambiguous and distinct from sibling tools that browse, search, or handle dockets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on when to use this tool (reading current or historical CFR text) and how to target sections, parts, or appendices. It references regulations_browse_cfr as the source for identifiers, implicitly distinguishing browsing from reading, but it does not explicitly name alternatives or exclusions. The use case is well-specified, so this is a strong 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

regulations_get_docketregulations_get_docketA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage 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.
per_pageNoDocuments per page (5–250, default 25). Regulations.gov requires a minimum page size of 5.
docket_idYesRegulations.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).
document_typesNoFilter 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe most documents 40 pages reach at this per_page (40 × per_page); set with truncated.
rinNoRegulation Identifier Number ("Not Assigned" when none), or null.
errorNoPresent when the call failed. Absent on success.
shownNoDocuments returned on this page.
titleNoDocket title.
noticeNoGuidance when the docket has no documents, when the page is past the end, or when documents lie beyond the last page.
abstractNoDocket abstract, or null.
agencyIdNoAgency ID (e.g. "EPA"), or null.
docketIdNoRegulations.gov docket ID.
nextPageNoPage to request next — present only when a later page holds documents.
objectIdNoDocket object ID, or null.
documentsNoDocuments filed in the docket (this page).
truncatedNoTrue 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.
docketTypeNoDocket type (e.g. "Rulemaking"), or null.
modifyDateNoLast-modified date, or null.
totalPagesNoPages of documents at this per_page, at most the 40 Regulations.gov serves; 0 when there are none.
documentCountNoTotal documents in the docket (before pagination).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool read-only and idempotent, so the description does not need to restate that. It adds useful behavioral context: the REGULATIONS_GOV_API_KEY requirement, the large volume of supporting materials, and the relationship to downstream comment retrieval. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-organized paragraph that front-loads the core purpose and then adds practical guidance without repetition. Every sentence earns its place: purpose, conceptual model, downstream use, filtering advice, and API-key requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema and output schema, the description covers the essential operational details: what a docket is, what is returned, how to filter large dockets, how returned documents feed comment retrieval, and the required API key. An agent has enough context to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces the document_types filter and gives a docket ID example, but the parameter-level details are already well documented in the schema; the description adds only modest extra meaning beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Pull a rulemaking docket from Regulations.gov by docket ID.' It names what is returned (metadata plus filed documents) and clarifies the docket concept as a folder, which distinguishes it from sibling document-level tools like regulations_get_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for when this tool is useful, such as retrieving a rule's whole paper trail and using returned objectIds to feed regulations_find_comments. It also advises filtering document_types to find rule documents, and notes that FR/eCFR tools work without the API key. It does not explicitly contrast with every sibling, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

regulations_get_documentregulations_get_documentA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoCharacter offset into the plain-text body where the window starts (default 0). Pass the fullTextNextOffset from the previous call to read on. Implies include_full_text.
max_charsNoMost body characters to return in this window (1–200,000, default 64,000). Implies include_full_text.
document_numberYesFederal Register document number, as regulations_search_rules returns it in documentNumber: "2024-07773" from 2010 on, older and correction numbers like "98-1572", "E9-25990", or "C1-2009-30484".
include_full_textNoWhen 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeNoDocument type.
datesNoFree-text dates summary from the rule, or null.
errorNoPresent when the call failed. Absent on success.
titleNoDocument title.
actionNoAction line (e.g. "Final rule."), or null.
noticeNoGuidance when the requested offset is at or past the end of the body.
endPageNoLast 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.
htmlUrlNoFederal Register web URL for the document.
abstractNoAbstract summary, or null.
agenciesNoIssuing agencies.
citationNoWhere the document starts in the Federal Register ("89 FR 49101"); null when none is recorded, as for most of 1994.
docketIdNoRegulations.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.
fullTextNoOne 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.
docketIdsNoDocket 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.
startPageNoFirst Federal Register page the document is printed on; null when unrecorded.
commentUrlNoRegulations.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.
rawTextUrlNoURL of the plain-text body.
bodyHtmlUrlNoURL of the rendered HTML body.
effectiveOnNoEffective date (ISO 8601), or null.
commentCountNoComments 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.
cfrReferencesNoAffected CFR parts — chain into regulations_get_cfr_section.
documentNumberNoFederal Register document number.
fullTextLengthNoCharacters in the whole plain-text body — present with fullText.
fullTextOffsetNoCharacter offset fullText starts at — present with fullText.
commentsCloseOnNoLast 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.
publicationDateNoPublication date (ISO 8601).
commentPeriodOpenNoWhether that comment period is open today: true through 11:59 PM Eastern on commentsCloseOn, false after it, null when commentsCloseOn is null.
fullTextNextOffsetNoOffset to pass as offset to read the next window — present only when body text remains past this window.
regulationIdNumbersNoRegulation Identifier Number(s) (RIN).
supportingDocumentsNoRelated Regulations.gov supporting documents.
regulationsGovDocumentIdNoRegulations.gov document ID — pass as document_object_id to regulations_find_comments for the comments filed on this document alone. Null when absent.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint and idempotentHint, and the description adds substantial operational behavior beyond that: full-text windows default to 64,000 characters, max_chars raises to 200,000, large rules require paging via offset, and the response carries body length and a resume offset. This gives the agent a realistic model of call behavior and network cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then uses the dash to introduce metadata and cross-source handles. The remaining sentences compactly explain the full-text window behavior, paging, and size thresholds without filler. Every clause carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool of this complexity, the description covers workflow chaining, pagination through long bodies, parameter dependencies, and document number variants. An output schema exists, so a field-by-field return breakdown is unnecessary. Nothing needed to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters have detailed schema descriptions (100% coverage), so the baseline is already strong. The description adds further value by explaining when include_full_text should be set, how offset and max_chars interplay, and what document number formats are legal, including examples like '98-1572' and 'E9-25990'. This goes well beyond the structured schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb-resource pair: 'Fetch one Federal Register document by its FR document number' and enumerates the exact metadata fields returned. It further distinguishes itself from siblings by naming the chain destinations (regulations_get_docket, regulations_find_comments, regulations_search_rules, regulations_get_cfr_section), so an agent can immediately tell this is the workflow hub tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use the tool: retrieve one document by FR number, then chain into related tools, and set include_full_text only when the rule body is needed. However, it never explicitly states when a sibling should be chosen instead (e.g., if you already have a docket ID, call regulations_get_docket directly), so exclusions are missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

regulations_list_open_commentsregulations_list_open_commentsA
Read-only
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage 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.
typeNoDocument 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"].
queryNoFull-text filter across open documents. Omit to list every document currently open for comment.
agenciesNoFilter to one or more agencies by Federal Register agency slug (e.g. "environmental-protection-agency") — lowercase kebab-case, not a name or acronym. Every row lists its agencies with their slugs; read agencies[].slug off a row here or in regulations_search_rules. One unrecognized slug fails the whole request.
per_pageNoDocuments per page (1–100, default 20).
closing_beforeNoOnly 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe Federal Register document limit that was reached.
asOfNoThe "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.
errorNoPresent when the call failed. Absent on success.
keyedNoWhether 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.
shownNoDocuments returned on this page.
noticeNoGuidance when nothing matched, when the page is past the end, or when the window was truncated.
resultsNoDocuments open for comment on this page, closing soonest first; documents closing the same day are ordered by document number.
nextPageNoPage to request next — present only when documents remain past this page.
truncatedNoTrue when the Federal Register reported its 10,000-document maximum, so the window holds only the 10,000 most recently published matches.
totalCountNoDocuments open for comment matching the filters — the window the pages run over.
totalPagesNoPages in the window at this per_page.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=true, openWorldHint=true) already carry the safety profile, so the bar is lower; the description adds substantial behavior beyond them: default type coverage and the much-larger NOTICE set, the no-key auth disclosure, row composition (docket/document IDs, comment count, comment URL), and regulatory-ref cross-linking. No contradiction with annotations — read-only and open-world phrasing is consistent throughout.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core function is front-loaded in sentence one, and every subsequent sentence adds value: type defaults, auth requirements, row contents, and sibling routing. It is slightly dense — 'needs no key' and 'needs REGULATIONS_GOV_API_KEY' make the same point twice, and the rhetorical question adds flavor without information — but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, safety covered by annotations, and an input schema at 100% coverage, the description fills the remaining gaps: defaults, auth, row shape, and follow-up routes. Minor omissions: no explicit statement on when to prefer regulations_search_rules over this tool, and no hint of how the NOTICE set's size affects pagination or response volume.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with unusually rich per-parameter documentation (defaults, enum meanings, slug format, error behavior, response pagination hints, calendar-day semantics). The description summarizes the filters ('document type, agency slug, and topic') and re-emphasizes the NOTICE expansion, but adds no meaning the schema lacks. Baseline 3 applies because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') + resource ('Federal Register documents currently open for public comment') + scope ('across the whole open window'), with an explicit sort order ('closing date, soonest first'). The use-case shorthand 'What can I still weigh in on?' and the precise default-type behavior (PRORULE/RULE with NOTICE opt-in) make it distinguishable from the sibling search/list tools at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes to alternatives: regulations_get_document for full documents, regulations_find_comments for comments, and distinguishes them by the REGULATIONS_GOV_API_KEY requirement while noting this tool 'needs no key'. The open-comment-window scope implies the contrast with historical searches, but it never explicitly names regulations_search_rules as the alternative for non-open documents, leaving that exclusion to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

regulations_search_rulesregulations_search_rulesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
rinNoOnly 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.
pageNoPage 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.
typeNoDocument types to include. PRORULE=Proposed Rule, RULE=Final Rule, NOTICE=Notice, PRESDOCU=Presidential Document. Omit for all types.
orderNoResult 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.
queryNoFull-text search across document title and body. Omit to browse by filters alone (e.g. all EPA proposed rules in a date range).
agenciesNoFilter to one or more agencies by Federal Register agency slug (e.g. "environmental-protection-agency", "securities-and-exchange-commission") — lowercase kebab-case, not a name or acronym. Every result lists its agencies with their slugs; if unsure, search by query and read agencies[].slug off a result. One unrecognized slug fails the whole request.
cfr_partNoOnly 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.
citationNoA Federal Register page cite, "89 FR 49102" (volume FR page) — such as one from the source note that ends a regulations_get_cfr_section bodyText. Returns the documents printed on that page, usually one and sometimes a few sharing it, ordered by start page. Requires citation_date and replaces published_after/published_before. Volume 59 (1994) onward.
per_pageNoResults per page (2–100, default 20). The Federal Register API treats exactly 1 as its default page size instead of returning one result.
cfr_titleNoOnly documents whose affected CFR parts (cfrReferences) fall in this title (1–50) — such as the title regulations_get_cfr_section just read. Alone it filters to the title; with cfr_part, to that part.
docket_idNoOnly 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.
citation_dateNoThe 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.
published_afterNoEarliest 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_beforeNoLatest publication date, ISO 8601 (YYYY-MM-DD), a real calendar day.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe most matches 50 pages reach at this per_page (50 × per_page); set with truncated.
errorNoPresent when the call failed. Absent on success.
shownNoResults returned on this page.
noticeNoGuidance when nothing matched, when the page is past the end, or when matches lie beyond the last page.
resultsNoMatching Federal Register documents (this page).
nextPageNoPage to request next — present only when a later page holds matches.
truncatedNoTrue 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.
totalCountNoMatches before pagination. The Federal Register stops counting at 10,000, so 10,000 means at least that many.
totalPagesNoPages at this per_page, at most the 50 the Federal Register serves; 0 when nothing matched.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint, yet the description discloses far more: ranking defaults ("A query ranks by relevance unless order says otherwise; filter-only browsing lists newest first"), hard platform limits ("caps navigation at 50 pages and the match count at 10,000"), citation-specific ordering, the per_page=1 interpretation quirk, and failure modes like "One unrecognized slug fails the whole request." This goes well beyond the safety profile the annotations already provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense; every sentence earns its place for a 14-parameter tool, covering the search action, filter dimensions, citation resolution, result payload, ordering defaults, and platform limits. The core action is front-loaded in the first clause. It is a single dense paragraph rather than scannable structure, which is the only minor cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's high complexity (14 parameters, zero required, six siblings), the description covers the essential operational knowledge: when to use it, what results contain, the citation-resolution flow, ordering behavior, and the 50-page/10,000-match limits with an explicit mitigation. An output schema exists, so the summary of result fields in the description is a bonus rather than a requirement. Only explicit sibling exclusion guidance is absent, which keeps this below a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline of 3 applies — each of the 14 parameters already has a detailed schema description covering fragment matching, kebab-case slugs, date patterns, and constraints. The tool-level description adds only modest value beyond the schema, such as the narrowing strategy with published_after/published_before and the citation-date dependency. It does not repeat or need to repeat the schema's per-parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource — "Search the Federal Register ... filtering by full-text query, document type, agency slug, publication date range, affected CFR title and part, printed docket number, and RIN, all combined." It enumerates the full filter surface and positions itself as "The primary discovery entry point," distinguishing it from siblings like regulations_get_document and regulations_browse_cfr.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: it is the "primary discovery entry point," and it explains the result chain — "open with regulations_get_document" and "chain into the comment and codified-text tools." It also advises narrowing with published_after/published_before when results exceed navigation caps. However, it never explicitly says when NOT to use it versus alternatives such as regulations_browse_cfr or regulations_find_comments; the differentiation is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedregulations_browse_cfr3 fields changed
      • changedInput schema / properties / part / description
        Previous value: -"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\"."New value: +"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\"."
      • changedOutput schema / properties / date / description
        Previous value: -"Resolved point-in-time date — the hierarchy snapshot (structure mode), or the day whose section text was searched (search mode, live source only)."New value: +"Resolved point-in-time date — the hierarchy snapshot (structure mode), or the day whose section text was searched (search mode)."
      • changedOutput schema / properties / nodes / items / properties / cfrCite / description
        Previous value: -"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)."New value: +"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)."
    • Changedregulations_get_cfr_section12 fields changed
      • changedInput schema / properties / part / description
        Previous value: -"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."New value: +"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."
      • changedInput schema / properties / section / description
        Previous value: -"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."New value: +"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."
      • addedOutput schema / properties / authority
        Added value: +{
        +  "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"
        +  ]
        +}
      • changedOutput schema / properties / bodyText / description
        Previous value: -"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]\") — 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]\")."New value: +"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]\")."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "not_found",
        -  "location_required",
        -  "conflicting_target",
        -  "date_out_of_range",
        -  "upstream_unavailable"
        -]New value: +[
        +  "not_found",
        +  "location_required",
        +  "conflicting_target",
        +  "conflicting_title",
        +  "date_out_of_range",
        +  "upstream_unavailable"
        +]
      • changedOutput schema / properties / heading / description
        Previous value: -"Section, part, or appendix heading."New value: +"Section, part, or appendix heading — for a whole part, the part's own (\"PART 141—NATIONAL PRIMARY DRINKING WATER REGULATIONS\")."
      • addedOutput schema / properties / notes
        Added value: +{
        +  "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"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"How a section written another way was resolved, and guidance when the offset is at or past the end of the text."New value: +"How a part or section written another way was resolved, and guidance when the offset is at or past the end of the text."
      • addedOutput schema / properties / sections / items / properties / authority
        Added value: +{
        +  "description": "The Authority its subpart or subject group states for this section; absent when the part's authority applies.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / sections / items / properties / sourceNote
        Added value: +{
        +  "description": "The Source note its subpart or subject group states for this section; absent when the part's sourceNote applies.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / sourceNote
        Added value: +{
        +  "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"
        +  ]
        +}
  2. 6 tool updates
    • Changedregulations_find_comments1 field changed
      • changedInput schema / properties / docket_id / description
        Previous value: -"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."New value: +"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."
    • Changedregulations_get_cfr_section1 field changed
      • changedOutput schema / properties / bodyText / description
        Previous value: -"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]\")."New value: +"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]\") — 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]\")."
    • Changedregulations_get_docket4 fields changed
      • changedInput schema / properties / docket_id / description
        Previous value: -"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."New value: +"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)."
      • changedOutput schema / properties / documents / items / properties / commentEndDate / description
        Previous value: -"Comment-period end date; when set, open for comment."New value: +"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."
      • addedOutput schema / properties / documents / items / properties / commentPeriodOpen
        Added value: +{
        +  "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"
        +  ]
        +}
      • changedOutput schema / properties / documents / items / required
        Previous value: -[
        -  "documentId",
        -  "objectId",
        -  "title",
        -  "documentType",
        -  "postedDate",
        -  "frDocNum",
        -  "commentEndDate",
        -  "withdrawn"
        -]New value: +[
        +  "documentId",
        +  "objectId",
        +  "title",
        +  "documentType",
        +  "postedDate",
        +  "frDocNum",
        +  "commentEndDate",
        +  "commentPeriodOpen",
        +  "withdrawn"
        +]
    • Changedregulations_get_document10 fields changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "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"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "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"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / citation
        Added value: +{
        +  "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"
        +  ]
        +}
      • changedOutput schema / properties / commentCount / description
        Previous value: -"FR-reported comment count from Regulations.gov; null when not on Regulations.gov."New value: +"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."
      • addedOutput schema / properties / commentPeriodOpen
        Added value: +{
        +  "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"
        +  ]
        +}
      • addedOutput schema / properties / commentUrl
        Added value: +{
        +  "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"
        +  ]
        +}
      • changedOutput schema / properties / commentsCloseOn / description
        Previous value: -"Comment-period close date (ISO 8601); when set, still open for comment."New value: +"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."
      • changedOutput schema / properties / docketId / description
        Previous value: -"Regulations.gov docket ID — chain into regulations_get_docket / find_comments. Null when not on Regulations.gov."New value: +"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."
      • addedOutput schema / properties / docketIds
        Added value: +{
        +  "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"
        +}
      • addedOutput schema / properties / endPage
        Added value: +{
        +  "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"
        +  ]
        +}
      • addedOutput schema / properties / startPage
        Added value: +{
        +  "description": "First Federal Register page the document is printed on; null when unrecorded.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
    • Changedregulations_list_open_comments11 fields changed
      • changedOutput schema / properties / asOf / description
        Previous value: -"The \"today\" the open-window filter used (ISO 8601)."New value: +"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."
      • changedOutput schema / properties / keyed / description
        Previous value: -"Whether comment counts were enriched (REGULATIONS_GOV_API_KEY present)."New value: +"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."
      • changedOutput schema / properties / notice / description
        Previous value: -"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."New value: +"Guidance when nothing matched, when the page is past the end, or when the window was truncated."
      • changedOutput schema / properties / results / items / properties / commentCount / description
        Previous value: -"Comment count from the FR document's Regulations.gov info; null when unkeyed or not on Regulations.gov."New value: +"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."
      • addedOutput schema / properties / results / items / properties / commentUrl
        Added value: +{
        +  "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"
        +  ]
        +}
      • changedOutput schema / properties / results / items / properties / commentsCloseOn / description
        Previous value: -"Comment-period close date (ISO 8601)."New value: +"Last day of the comment period (ISO 8601), inclusive, in Eastern time."
      • changedOutput schema / properties / results / items / properties / daysRemaining / description
        Previous value: -"Whole days from asOf until the comment period closes."New value: +"Whole days from asOf to commentsCloseOn; 0 means comments close at the end of today."
      • changedOutput schema / properties / results / items / properties / docketIds / description
        Previous value: -"Docket IDs — chain into regulations_get_docket / find_comments."New value: +"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."
      • addedOutput schema / properties / results / items / properties / regulationsGovDocketId
        Added value: +{
        +  "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"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / regulationsGovDocumentId
        Added value: +{
        +  "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"
        +  ]
        +}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "documentNumber",
        -  "title",
        -  "type",
        -  "agencies",
        -  "publicationDate",
        -  "commentsCloseOn",
        -  "daysRemaining",
        -  "docketIds",
        -  "commentCount"
        -]New value: +[
        +  "documentNumber",
        +  "title",
        +  "type",
        +  "agencies",
        +  "publicationDate",
        +  "commentsCloseOn",
        +  "daysRemaining",
        +  "docketIds",
        +  "regulationsGovDocketId",
        +  "regulationsGovDocumentId",
        +  "commentCount",
        +  "commentUrl"
        +]
    • Changedregulations_search_rules20 fields changed
      • addedInput schema / properties / cfr_part
        Added value: +{
        +  "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"
        +}
      • addedInput schema / properties / cfr_title
        Added value: +{
        +  "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"
        +}
      • addedInput schema / properties / citation
        Added value: +{
        +  "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."
        +}
      • addedInput schema / properties / citation_date
        Added value: +{
        +  "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."
        +}
      • addedInput schema / properties / docket_id
        Added value: +{
        +  "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"
        +}
      • changedInput schema / properties / order / description
        Previous value: -"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."New value: +"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."
      • addedInput schema / properties / rin
        Added value: +{
        +  "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"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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. Other values are possible when a failure originates below the handler."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "upstream_unavailable",
        -  "invalid_filter",
        -  "date_range_inverted"
        -]New value: +[
        +  "upstream_unavailable",
        +  "invalid_filter",
        +  "date_range_inverted",
        +  "title_required_for_part",
        +  "citation_incomplete",
        +  "citation_out_of_range"
        +]
      • addedOutput schema / properties / results / items / properties / citation
        Added value: +{
        +  "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"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / commentCount
        Added value: +{
        +  "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"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / commentPeriodOpen
        Added value: +{
        +  "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"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / commentUrl
        Added value: +{
        +  "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"
        +  ]
        +}
      • changedOutput schema / properties / results / items / properties / commentsCloseOn / description
        Previous value: -"Comment-period close date (ISO 8601); when set, still open for comment."New value: +"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."
      • changedOutput schema / properties / results / items / properties / docketIds / description
        Previous value: -"Docket IDs — chain into regulations_get_docket / regulations_find_comments."New value: +"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."
      • addedOutput schema / properties / results / items / properties / endPage
        Added value: +{
        +  "description": "Last Federal Register page the document is printed on; null when unrecorded.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / regulationsGovDocketId
        Added value: +{
        +  "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"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / regulationsGovDocumentId
        Added value: +{
        +  "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"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / startPage
        Added value: +{
        +  "description": "First Federal Register page the document is printed on; null when unrecorded.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "documentNumber",
        -  "title",
        -  "type",
        -  "abstract",
        -  "publicationDate",
        -  "agencies",
        -  "docketIds",
        -  "regulationIdNumbers",
        -  "cfrReferences",
        -  "commentsCloseOn",
        -  "effectiveOn",
        -  "htmlUrl"
        -]New value: +[
        +  "documentNumber",
        +  "title",
        +  "type",
        +  "abstract",
        +  "publicationDate",
        +  "citation",
        +  "startPage",
        +  "endPage",
        +  "agencies",
        +  "docketIds",
        +  "regulationsGovDocketId",
        +  "regulationsGovDocumentId",
        +  "commentCount",
        +  "commentUrl",
        +  "regulationIdNumbers",
        +  "cfrReferences",
        +  "commentsCloseOn",
        +  "commentPeriodOpen",
        +  "effectiveOn",
        +  "htmlUrl"
        +]
  3. 4 tool updates
    • Changedregulations_find_comments22 fields changed
      • changedInput schema / properties / comment_id / description
        Previous value: -"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."New value: +"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."
      • changedInput schema / properties / document_object_id / description
        Previous value: -"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."New value: +"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."
      • addedInput schema / properties / fr_document_number / anyOf
        Added value: +[
        +  {
        +    "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"
        +  }
        +]
      • changedInput schema / properties / fr_document_number / description
        Previous value: -"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."New value: +"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."
      • removedInput schema / properties / fr_document_number / type
        Removed value: -"string"
      • changedInput schema / properties / page / description
        Previous value: -"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."New value: +"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."
      • changedInput schema / properties / page / maximum
        Previous value: -20New value: +40
      • addedInput schema / properties / posted_after
        Added value: +{
        +  "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."
        +}
      • addedInput schema / properties / posted_before
        Added value: +{
        +  "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."
        +}
      • addedInput schema / properties / search_term
        Added value: +{
        +  "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"
        +}
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The most comments 40 pages reach at this per_page (40 × per_page); set with truncated (list mode).",
        +  "type": "number"
        +}
      • addedOutput schema / properties / comments / items / properties / highlightedContent
        Added value: +{
        +  "description": "The passages of the comment text that matched search_term, as plain text — present only when search_term was given.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / duplicateComments
        Added value: +{
        +  "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"
        +  ]
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "auth_required",
        -  "target_required",
        -  "multiple_targets",
        -  "not_found",
        -  "rate_limited",
        -  "upstream_unavailable"
        -]New value: +[
        +  "auth_required",
        +  "target_required",
        +  "multiple_targets",
        +  "filter_requires_list_mode",
        +  "date_range_inverted",
        +  "not_found",
        +  "rate_limited",
        +  "upstream_unavailable"
        +]
      • addedOutput schema / properties / nextPage
        Added value: +{
        +  "description": "Page to request next — present only when a later page holds comments (list mode).",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance — empty results, or that bodies need comment_id detail mode."New value: +"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."
      • addedOutput schema / properties / postmarkDate
        Added value: +{
        +  "description": "Postmark on a mailed submission, or null — many agencies record none (detail mode).",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / receivedDate / description
        Previous value: -"Received date, or null (detail mode)."New value: +"Date Regulations.gov received the comment, or null when not recorded (detail mode)."
      • changedOutput schema / properties / target / description
        Previous value: -"What was queried — docket / document / FR doc (list mode)."New value: +"What was queried — the docket, document, or FR document, with any search_term and posted-date filters (list mode)."
      • addedOutput schema / properties / totalPages
        Added value: +{
        +  "description": "Pages of comments at this per_page, at most the 40 Regulations.gov serves; 0 when none matched (list mode).",
        +  "type": "number"
        +}
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when comments exceed the 5,000-record ceiling (list mode)."New value: +"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)."
    • Changedregulations_get_docket8 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"Page number (1-based). Regulations.gov caps a query at 20 pages (5,000 records); beyond that, narrow with document_types."New value: +"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."
      • changedInput schema / properties / page / maximum
        Previous value: -20New value: +40
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "docketId",
        -      "title",
        -      "docketType",
        -      "agencyId",
        -      "rin",
        -      "abstract",
        -      "modifyDate",
        -      "objectId",
        -      "documentCount",
        -      "documents"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "docketId",
        +      "title",
        +      "docketType",
        +      "agencyId",
        +      "rin",
        +      "abstract",
        +      "modifyDate",
        +      "objectId",
        +      "documentCount",
        +      "documents",
        +      "totalPages"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The most documents 40 pages reach at this per_page (40 × per_page); set with truncated.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / nextPage
        Added value: +{
        +  "description": "Page to request next — present only when a later page holds documents.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when the docket has no documents."New value: +"Guidance when the docket has no documents, when the page is past the end, or when documents lie beyond the last page."
      • addedOutput schema / properties / totalPages
        Added value: +{
        +  "description": "Pages of documents at this per_page, at most the 40 Regulations.gov serves; 0 when there are none.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when documentCount exceeds the returned set / 5,000 ceiling."New value: +"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."
    • Changedregulations_get_document3 fields changed
      • changedInput schema / properties / document_number / description
        Previous value: -"Federal Register document number (e.g. \"2025-14555\"). Obtain from regulations_search_rules results (the documentNumber field)."New value: +"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\"."
      • changedInput schema / properties / document_number / pattern
        Previous value: -"^[0-9]{4}-[0-9]+$"New value: +"^[A-Za-z]?[0-9]{1,4}-[0-9]{1,6}(-[0-9]{1,6})?$"
      • changedOutput schema / properties / regulationsGovDocumentId / description
        Previous value: -"Regulations.gov document ID — chain into regulations_find_comments (document-scoped). Null when absent."New value: +"Regulations.gov document ID — pass as document_object_id to regulations_find_comments for the comments filed on this document alone. Null when absent."
    • Changedregulations_search_rules10 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"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."New value: +"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."
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "results",
        -      "totalCount"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "totalCount",
        +      "totalPages"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The most matches 50 pages reach at this per_page (50 × per_page); set with truncated.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"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. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "upstream_unavailable",
        -  "invalid_filter"
        -]New value: +[
        +  "upstream_unavailable",
        +  "invalid_filter",
        +  "date_range_inverted"
        +]
      • addedOutput schema / properties / nextPage
        Added value: +{
        +  "description": "Page to request next — present only when a later page holds matches.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when nothing matched or when results were truncated."New value: +"Guidance when nothing matched, when the page is past the end, or when matches lie beyond the last page."
      • changedOutput schema / properties / totalCount / description
        Previous value: -"Total matches before pagination (FR count; capped at 10,000 by the API window)."New value: +"Matches before pagination. The Federal Register stops counting at 10,000, so 10,000 means at least that many."
      • addedOutput schema / properties / totalPages
        Added value: +{
        +  "description": "Pages at this per_page, at most the 50 the Federal Register serves; 0 when nothing matched.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when matches exceed the FR 50-page (5,000-record) navigation ceiling."New value: +"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."
  4. 2 tool updates
    • Changedregulations_browse_cfr23 fields changed
      • changedInput schema / properties / date / description
        Previous value: -"Point-in-time date, ISO 8601 (YYYY-MM-DD). Defaults to current. Structure mode uses it for the historical hierarchy. 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."New value: +"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."
      • changedInput schema / properties / mode / description
        Previous value: -"\"structure\": browse the CFR tree (titles, or one title's chapters/parts/sections) to find a cite. \"search\": full-text search the codified CFR for sections matching a phrase."New value: +"\"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."
      • addedInput schema / properties / page
        Added value: +{
        +  "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"
        +}
      • changedInput schema / properties / part / description
        Previous value: -"CFR part within the title, in both modes — structure mode narrows the returned tree to that part's sections, 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\"."New value: +"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\"."
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page in search mode (1–50, default 20). Ignored in structure mode."New value: +"Rows per page — search results, or nodes of a part's listing in structure mode (1–50, default 20)."
      • changedInput schema / properties / title / description
        Previous value: -"CFR title number (1–50). Structure mode: omit to list all 50 titles, or provide to expand one title. Search mode: optional filter restricting matches to that title — e.g. 40 for environmental rules, 21 for food and drugs."New value: +"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."
      • addedOutput schema / properties / countBasis
        Added value: +{
        +  "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"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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 outside 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`: Search mode with a date outside eCFR's indexed window (before 2017-01-03, or past its current index 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."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "query_required",
        -  "title_not_found",
        -  "title_required_for_part",
        -  "date_out_of_range",
        -  "upstream_unavailable"
        -]New value: +[
        +  "query_required",
        +  "title_not_found",
        +  "title_required_for_part",
        +  "date_out_of_range",
        +  "page_out_of_window",
        +  "upstream_unavailable"
        +]
      • changedOutput schema / properties / nodes / description
        Previous value: -"Hierarchy nodes at the requested level (structure mode)."New value: +"Structure mode: the 50 titles, a title's top-level divisions, or this page of a part's sections and appendices in document order."
      • changedOutput schema / properties / nodes / items / properties / cfrCite / description
        Previous value: -"Assembled cite → regulations_get_cfr_section: \"40 CFR 50\" / \"40 CFR 50.1\" for a part or section, \"Appendix A-1 to Part 50, Title 40\" for an appendix. Null on a level with no read path (chapter, subchapter, subpart, subject group)."New value: +"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)."
      • changedOutput schema / properties / nodes / items / properties / identifier / description
        Previous value: -"Node identifier (e.g. \"40\", \"I\", \"50\", \"50.1\")."New value: +"Node identifier (e.g. \"40\", \"I\", \"50.1\")."
      • changedOutput schema / properties / nodes / items / properties / label / description
        Previous value: -"Human-readable label."New value: +"Human-readable label, plain text."
      • addedOutput schema / properties / nodes / items / properties / subjectGroup
        Added value: +{
        +  "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"
        +  ]
        +}
      • addedOutput schema / properties / nodes / items / properties / subpart
        Added value: +{
        +  "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"
        +  ]
        +}
      • changedOutput schema / properties / nodes / items / properties / type / description
        Previous value: -"Node type: title, chapter, subchapter, subpart, part, section, appendix, subject_group, or other (treat unknown types as passthrough)."New value: +"Node type: title, subtitle, or chapter above a part; section or appendix in a part listing. Treat an unknown type as passthrough."
      • changedOutput schema / properties / nodes / items / required
        Previous value: -[
        -  "type",
        -  "identifier",
        -  "label",
        -  "description",
        -  "reserved",
        -  "cfrCite",
        -  "appendix"
        -]New value: +[
        +  "type",
        +  "identifier",
        +  "label",
        +  "description",
        +  "reserved",
        +  "cfrCite",
        +  "appendix",
        +  "subpart",
        +  "subjectGroup"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when nothing matched."New value: +"Guidance: the next page to request, a page past the end, an empty result, or what the count means."
      • addedOutput schema / properties / page
        Added value: +{
        +  "description": "The page served — of search results, or of a part's listing.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / results / description
        Previous value: -"Matching CFR sections, this page (search mode)."New value: +"Matching CFR sections and appendices, this page, one row per section however many of its versions matched (search mode)."
      • changedOutput schema / properties / shown / description
        Previous value: -"Results returned on this page (search mode)."New value: +"Rows returned on this page."
      • changedOutput schema / properties / totalCount / description
        Previous value: -"Total search matches before pagination (search mode)."New value: +"Total matches before pagination — search results (see countBasis for what they count), or the nodes in a part's listing."
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when search results were capped at per_page."New value: +"True when another page follows this one."
    • Changedregulations_get_cfr_section19 fields changed
      • changedInput schema / properties / date / description
        Previous value: -"Point-in-time date, ISO 8601 (YYYY-MM-DD). Default current. eCFR retains historical versions back to ~2017; a date before coverage is rejected."New value: +"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."
      • addedInput schema / properties / max_chars
        Added value: +{
        +  "description": "Most text characters to return in this window (1–200,000, default 64,000).",
        +  "maximum": 200000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "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"
        +}
      • changedInput schema / properties / section / description
        Previous value: -"Section identifier within the part (e.g. \"50.1\"). Omit to fetch the entire part — large parts can be very long; prefer a specific section when you know it. Cannot be combined with appendix."New value: +"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."
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "cfrCite",
        -      "title",
        -      "part",
        -      "section",
        -      "appendix",
        -      "heading",
        -      "hierarchyPath",
        -      "date",
        -      "source",
        -      "bodyText"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "cfrCite",
        +      "title",
        +      "part",
        +      "section",
        +      "appendix",
        +      "heading",
        +      "hierarchyPath",
        +      "date",
        +      "source",
        +      "bodyText",
        +      "bodyTextOffset",
        +      "bodyTextLength"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / bodyText / description
        Previous value: -"Text of the section, part, or appendix, XML stripped to plain text. Paragraphs, subheadings, editorial notes, tables (one pipe-delimited line per row), figure references (\"[Figure: /graphics/…]\"), and the trailing source citation are kept in document order. The source citation is the bracketed Federal Register history the text 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 only where the location is a placeholder carrying nothing but its heading — \"[Reserved]\", or an agency variant of it."New value: +"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]\")."
      • addedOutput schema / properties / bodyTextLength
        Added value: +{
        +  "description": "Characters in the location's whole text.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / bodyTextNextOffset
        Added value: +{
        +  "description": "Offset to pass as offset to read the next window — present only when text remains past this window.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / bodyTextOffset
        Added value: +{
        +  "description": "Character offset bodyText starts at.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `not_found`: No such title/part/section/appendix at that date. `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. `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."New value: +"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."
      • addedOutput schema / properties / notice
        Added value: +{
        +  "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"
        +}
      • changedOutput schema / properties / section / description
        Previous value: -"Section identifier; null when a whole part or an appendix was fetched."New value: +"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."
      • changedOutput schema / properties / sections / description
        Previous value: -"Present only when a whole part was fetched — each section in the part."New value: +"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."
      • changedOutput schema / properties / sections / items / description
        Previous value: -"One section within the part."New value: +"One section of the part, without its text."
      • removedOutput schema / properties / sections / items / properties / bodyText
        Removed value: -{
        -  "description": "Section text.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / sections / items / properties / cfrCite
        Added value: +{
        +  "description": "Assembled cite for the section.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / sections / items / properties / offset
        Added value: +{
        +  "description": "Offset in the whole part's text where this section starts — pass as offset to read from it.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / sections / items / properties / section / description
        Previous value: -"Section identifier."New value: +"Section identifier — pass as section to read it alone."
      • changedOutput schema / properties / sections / items / required
        Previous value: -[
        -  "section",
        -  "heading",
        -  "bodyText"
        -]New value: +[
        +  "section",
        +  "heading",
        +  "cfrCite",
        +  "offset"
        +]
  5. 3 tool updates
    • Changedregulations_get_document17 fields changed
      • removedInput schema / properties / include_full_text / default
        Removed value: -false
      • changedInput schema / properties / include_full_text / description
        Previous value: -"When true, fetch and inline the document body as plain text (can be large). Default false returns the body URLs only; fetch full text only when you need to read the rule itself, not just its metadata and cross-links."New value: +"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."
      • addedInput schema / properties / max_chars
        Added value: +{
        +  "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"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "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"
        +}
      • changedOutput schema / properties / agencies / description
        Previous value: -"Issuing agency names."New value: +"Issuing agencies."
      • addedOutput schema / properties / agencies / items / additionalProperties
        Added value: +false
      • addedOutput schema / properties / agencies / items / description
        Added value: +"One issuing agency."
      • addedOutput schema / properties / agencies / items / properties
        Added value: +{
        +  "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"
        +    ]
        +  }
        +}
      • addedOutput schema / properties / agencies / items / required
        Added value: +[
        +  "name",
        +  "slug"
        +]
      • changedOutput schema / properties / agencies / items / type
        Previous value: -"string"New value: +"object"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `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."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "not_found",
        -  "upstream_unavailable"
        -]New value: +[
        +  "full_text_disabled",
        +  "not_found",
        +  "upstream_unavailable"
        +]
      • changedOutput schema / properties / fullText / description
        Previous value: -"Inlined plain-text body — present only when include_full_text=true."New value: +"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."
      • addedOutput schema / properties / fullTextLength
        Added value: +{
        +  "description": "Characters in the whole plain-text body — present with fullText.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / fullTextNextOffset
        Added value: +{
        +  "description": "Offset to pass as offset to read the next window — present only when body text remains past this window.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / fullTextOffset
        Added value: +{
        +  "description": "Character offset fullText starts at — present with fullText.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when the requested offset is at or past the end of the body.",
        +  "type": "string"
        +}
    • Changedregulations_list_open_comments28 fields changed
      • changedInput schema / properties / agencies / description
        Previous value: -"Filter to one or more agencies by Federal Register agency slug (e.g. \"environmental-protection-agency\")."New value: +"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."
      • changedInput schema / properties / closing_before / description
        Previous value: -"Only rules whose comment period closes on or before this date, ISO 8601 (YYYY-MM-DD). Use to find deadlines you need to act on soon."New value: +"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."
      • changedInput schema / properties / page / description
        Previous value: -"Page number (1–50). The FR caps total_pages at 50; with per_page=100 this covers up to 5,000 open rules."New value: +"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."
      • changedInput schema / properties / page / maximum
        Previous value: -50New value: +10000
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (2–100, default 20). The Federal Register API treats exactly 1 as its default page size instead of returning one result."New value: +"Documents per page (1–100, default 20)."
      • changedInput schema / properties / per_page / minimum
        Previous value: -2New value: +1
      • changedInput schema / properties / query / description
        Previous value: -"Full-text filter across open rules. Omit to list all rules currently open for comment."New value: +"Full-text filter across open documents. Omit to list every document currently open for comment."
      • addedInput schema / properties / type
        Added value: +{
        +  "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"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "asOf",
        -      "keyed",
        -      "results",
        -      "totalCount"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "asOf",
        +      "keyed",
        +      "results",
        +      "totalCount",
        +      "totalPages"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The Federal Register document limit that was reached.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `upstream_unavailable`: Federal Register returned a 5xx, timed out, or served an HTML error page. Other values are possible when a failure originates below the handler."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "upstream_unavailable"
        -]New value: +[
        +  "upstream_unavailable",
        +  "invalid_filter"
        +]
      • addedOutput schema / properties / nextPage
        Added value: +{
        +  "description": "Page to request next — present only when documents remain past this page.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when nothing matched, or that comment counts are unavailable without a key."New value: +"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."
      • changedOutput schema / properties / results / description
        Previous value: -"Rules open for comment (this page), closing soonest first."New value: +"Documents open for comment on this page, closing soonest first; documents closing the same day are ordered by document number."
      • changedOutput schema / properties / results / items / description
        Previous value: -"One open-for-comment rule."New value: +"One document open for comment."
      • changedOutput schema / properties / results / items / properties / agencies / description
        Previous value: -"Issuing agency names."New value: +"Issuing agencies."
      • addedOutput schema / properties / results / items / properties / agencies / items / additionalProperties
        Added value: +false
      • addedOutput schema / properties / results / items / properties / agencies / items / description
        Added value: +"One issuing agency."
      • addedOutput schema / properties / results / items / properties / agencies / items / properties
        Added value: +{
        +  "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"
        +    ]
        +  }
        +}
      • addedOutput schema / properties / results / items / properties / agencies / items / required
        Added value: +[
        +  "name",
        +  "slug"
        +]
      • changedOutput schema / properties / results / items / properties / agencies / items / type
        Previous value: -"string"New value: +"object"
      • changedOutput schema / properties / results / items / properties / title / description
        Previous value: -"Rule title."New value: +"Document title."
      • changedOutput schema / properties / results / items / properties / type / description
        Previous value: -"Document type."New value: +"Document type — \"Proposed Rule\", \"Rule\", or \"Notice\"; \"Unknown\" when unlisted."
      • changedOutput schema / properties / shown / description
        Previous value: -"Results returned on this page."New value: +"Documents returned on this page."
      • changedOutput schema / properties / totalCount / description
        Previous value: -"Total rules open for comment matching the filters."New value: +"Documents open for comment matching the filters — the window the pages run over."
      • addedOutput schema / properties / totalPages
        Added value: +{
        +  "description": "Pages in the window at this per_page.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / truncated / description
        Previous value: -"True when matches exceed the FR 5,000-record navigation ceiling."New value: +"True when the Federal Register reported its 10,000-document maximum, so the window holds only the 10,000 most recently published matches."
    • Changedregulations_search_rules12 fields changed
      • changedInput schema / properties / agencies / description
        Previous value: -"Filter to one or more agencies by Federal Register agency slug (e.g. \"environmental-protection-agency\", \"securities-and-exchange-commission\"). Slugs are the kebab-case agency name; if unsure, search by query and read the agency slugs off the results."New value: +"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."
      • addedInput schema / properties / order
        Added value: +{
        +  "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.",
        +  "enum": [
        +    "relevance",
        +    "newest",
        +    "oldest"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / published_after / description
        Previous value: -"Earliest publication date, ISO 8601 (YYYY-MM-DD). Combine with published_before to window large result sets — the FR caps navigation at 50 pages."New value: +"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."
      • changedInput schema / properties / published_before / description
        Previous value: -"Latest publication date, ISO 8601 (YYYY-MM-DD)."New value: +"Latest publication date, ISO 8601 (YYYY-MM-DD), a real calendar day."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `upstream_unavailable`: Federal Register returned a 5xx, timed out, or served an HTML error page. Other values are possible when a failure originates below the handler."New value: +"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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "upstream_unavailable"
        -]New value: +[
        +  "upstream_unavailable",
        +  "invalid_filter"
        +]
      • changedOutput schema / properties / results / items / properties / agencies / description
        Previous value: -"Issuing agency names."New value: +"Issuing agencies."
      • addedOutput schema / properties / results / items / properties / agencies / items / additionalProperties
        Added value: +false
      • addedOutput schema / properties / results / items / properties / agencies / items / description
        Added value: +"One issuing agency."
      • addedOutput schema / properties / results / items / properties / agencies / items / properties
        Added value: +{
        +  "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"
        +    ]
        +  }
        +}
      • addedOutput schema / properties / results / items / properties / agencies / items / required
        Added value: +[
        +  "name",
        +  "slug"
        +]
      • changedOutput schema / properties / results / items / properties / agencies / items / type
        Previous value: -"string"New value: +"object"
  6. 7 tool updates
    • Changedregulations_browse_cfr10 fields changed
      • removedOutput schema / properties / nodes / items / properties / appendix / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / nodes / items / properties / appendix / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / nodes / items / properties / cfrCite / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / nodes / items / properties / cfrCite / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / nodes / items / properties / description / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / nodes / items / properties / description / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / appendix / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / appendix / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / section / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / section / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedregulations_find_comments18 fields changed
      • removedOutput schema / properties / attachments / items / properties / formats / items / properties / size / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / attachments / items / properties / formats / items / properties / size / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / bodyText / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / bodyText / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / commentOnDocumentId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / commentOnDocumentId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / comments / items / properties / agencyId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / comments / items / properties / agencyId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / docketId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / docketId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / organization / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / organization / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / receivedDate / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / receivedDate / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / restrictReason / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / restrictReason / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / submitterName / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / submitterName / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedregulations_get_cfr_section6 fields changed
      • removedOutput schema / properties / appendix / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / appendix / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / part / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / part / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / section / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / section / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedregulations_get_docket16 fields changed
      • removedOutput schema / properties / abstract / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / abstract / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / agencyId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / agencyId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / docketType / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / docketType / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / documents / items / properties / commentEndDate / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / documents / items / properties / commentEndDate / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / documents / items / properties / frDocNum / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / documents / items / properties / frDocNum / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / modifyDate / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / modifyDate / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / objectId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / objectId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / rin / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / rin / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedregulations_get_document16 fields changed
      • removedOutput schema / properties / abstract / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / abstract / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / action / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / action / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / commentCount / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / commentCount / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / commentsCloseOn / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / commentsCloseOn / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / dates / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / dates / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / docketId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / docketId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / effectiveOn / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / effectiveOn / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / regulationsGovDocumentId / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / regulationsGovDocumentId / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedregulations_list_open_comments2 fields changed
      • removedOutput schema / properties / results / items / properties / commentCount / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / commentCount / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedregulations_search_rules6 fields changed
      • removedOutput schema / properties / results / items / properties / abstract / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / abstract / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / commentsCloseOn / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / commentsCloseOn / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / effectiveOn / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / effectiveOn / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  7. 7 tool updates
    • Changedregulations_browse_cfr6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mode"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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 outside 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`: Search mode with a date outside eCFR's indexed window (before 2017-01-03, or past its current index 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": [
        +            "query_required",
        +            "title_not_found",
        +            "title_required_for_part",
        +            "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mode"
        -]
    • Changedregulations_find_comments6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "mode"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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. `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"
        +          ],
        +          "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "mode"
        -]
    • Changedregulations_get_cfr_section6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "cfrCite",
        +      "title",
        +      "part",
        +      "section",
        +      "appendix",
        +      "heading",
        +      "hierarchyPath",
        +      "date",
        +      "source",
        +      "bodyText"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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. `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. `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"
        +          ],
        +          "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "cfrCite",
        -  "title",
        -  "part",
        -  "section",
        -  "appendix",
        -  "heading",
        -  "hierarchyPath",
        -  "date",
        -  "source",
        -  "bodyText"
        -]
    • Changedregulations_get_docket6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "docketId",
        +      "title",
        +      "docketType",
        +      "agencyId",
        +      "rin",
        +      "abstract",
        +      "modifyDate",
        +      "objectId",
        +      "documentCount",
        +      "documents"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "docketId",
        -  "title",
        -  "docketType",
        -  "agencyId",
        -  "rin",
        -  "abstract",
        -  "modifyDate",
        -  "objectId",
        -  "documentCount",
        -  "documents"
        -]
    • Changedregulations_get_document6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "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"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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 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": [
        +            "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "documentNumber",
        -  "title",
        -  "type",
        -  "abstract",
        -  "action",
        -  "dates",
        -  "publicationDate",
        -  "effectiveOn",
        -  "commentsCloseOn",
        -  "agencies",
        -  "regulationIdNumbers",
        -  "cfrReferences",
        -  "docketId",
        -  "regulationsGovDocumentId",
        -  "commentCount",
        -  "supportingDocuments",
        -  "bodyHtmlUrl",
        -  "rawTextUrl",
        -  "htmlUrl"
        -]
    • Changedregulations_list_open_comments8 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (1–100, default 20)."New value: +"Results per page (2–100, default 20). The Federal Register API treats exactly 1 as its default page size instead of returning one result."
      • changedInput schema / properties / per_page / minimum
        Previous value: -1New value: +2
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "asOf",
        +      "keyed",
        +      "results",
        +      "totalCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "asOf",
        -  "keyed",
        -  "results",
        -  "totalCount"
        -]
    • Changedregulations_search_rules8 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / per_page / description
        Previous value: -"Results per page (1–100, default 20)."New value: +"Results per page (2–100, default 20). The Federal Register API treats exactly 1 as its default page size instead of returning one result."
      • changedInput schema / properties / per_page / minimum
        Previous value: -1New value: +2
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "totalCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "totalCount"
        -]
  8. 1 tool update
    • Changedregulations_get_cfr_section1 field changed
      • changedOutput schema / properties / bodyText / description
        Previous value: -"Text of the section, part, or appendix, XML stripped to plain text. Paragraphs, subheadings, editorial notes, and tables (one pipe-delimited line per row) are kept in document order. Empty for a reserved appendix and for one whose whole content is a figure image."New value: +"Text of the section, part, or appendix, XML stripped to plain text. Paragraphs, subheadings, editorial notes, tables (one pipe-delimited line per row), figure references (\"[Figure: /graphics/…]\"), and the trailing source citation are kept in document order. The source citation is the bracketed Federal Register history the text 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 only where the location is a placeholder carrying nothing but its heading — \"[Reserved]\", or an agency variant of it."
  9. 2 tool updates
    • Changedregulations_browse_cfr7 fields changed
      • addedOutput schema / properties / nodes / items / properties / appendix
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "On an appendix node, the identifier to pass straight back as regulations_get_cfr_section's `appendix` input; null on every other node type. It is free-form prose, not a letter (\"Schedule I to Part 789\", \"Special Federal Aviation Regulation No. 88\"), so pass it verbatim rather than abbreviating it."
        +}
      • changedOutput schema / properties / nodes / items / properties / cfrCite / description
        Previous value: -"Assembled cite for a part/section → regulations_get_cfr_section; null otherwise."New value: +"Assembled cite → regulations_get_cfr_section: \"40 CFR 50\" / \"40 CFR 50.1\" for a part or section, \"Appendix A-1 to Part 50, Title 40\" for an appendix. Null on a level with no read path (chapter, subchapter, subpart, subject group)."
      • changedOutput schema / properties / nodes / items / required
        Previous value: -[
        -  "type",
        -  "identifier",
        -  "label",
        -  "description",
        -  "reserved",
        -  "cfrCite"
        -]New value: +[
        +  "type",
        +  "identifier",
        +  "label",
        +  "description",
        +  "reserved",
        +  "cfrCite",
        +  "appendix"
        +]
      • changedOutput schema / properties / results / items / description
        Previous value: -"One matching CFR section."New value: +"One matching CFR section or appendix."
      • addedOutput schema / properties / results / items / properties / appendix
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "On an appendix hit, the identifier to pass straight back as regulations_get_cfr_section's `appendix` input; null on a section hit. Always null on a mirror hit — the index holds section text only, so mirror-sourced results never match an appendix."
        +}
      • changedOutput schema / properties / results / items / properties / cfrCite / description
        Previous value: -"Assembled cite → regulations_get_cfr_section."New value: +"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."
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "title",
        -  "part",
        -  "section",
        -  "heading",
        -  "hierarchyPath",
        -  "excerpt",
        -  "cfrCite"
        -]New value: +[
        +  "title",
        +  "part",
        +  "section",
        +  "appendix",
        +  "heading",
        +  "hierarchyPath",
        +  "excerpt",
        +  "cfrCite"
        +]
    • Changedregulations_get_cfr_section14 fields changed
      • addedInput schema / properties / appendix
        Added value: +{
        +  "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."
        +}
      • changedInput schema / properties / part / description
        Previous value: -"CFR part within the title (e.g. \"50\"). Parts can be alphanumeric. Obtain from regulations_browse_cfr or a Federal Register document's cfrReferences."New value: +"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."
      • changedInput schema / properties / section / description
        Previous value: -"Section identifier within the part (e.g. \"50.1\"). Omit to fetch the entire part — large parts can be very long; prefer a specific section when you know it."New value: +"Section identifier within the part (e.g. \"50.1\"). Omit to fetch the entire part — large parts can be very long; prefer a specific section when you know it. Cannot be combined with appendix."
      • changedInput schema / required
        Previous value: -[
        -  "title",
        -  "part"
        -]New value: +[
        +  "title"
        +]
      • addedOutput schema / properties / appendices
        Added value: +{
        +  "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"
        +}
      • addedOutput schema / properties / appendix
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Appendix identifier; null when a section or whole part was fetched."
        +}
      • changedOutput schema / properties / bodyText / description
        Previous value: -"Section text, XML stripped to plain text (paragraph structure preserved)."New value: +"Text of the section, part, or appendix, XML stripped to plain text. Paragraphs, subheadings, editorial notes, and tables (one pipe-delimited line per row) are kept in document order. Empty for a reserved appendix and for one whose whole content is a figure image."
      • changedOutput schema / properties / cfrCite / description
        Previous value: -"Assembled cite, e.g. \"40 CFR 50.1\"."New value: +"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`)."
      • changedOutput schema / properties / heading / description
        Previous value: -"Section/part heading."New value: +"Section, part, or appendix heading."
      • addedOutput schema / properties / part / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / part / description
        Previous value: -"CFR part."New value: +"CFR part; null only for an appendix that hangs off a chapter, subchapter, or subtitle rather than a part."
      • removedOutput schema / properties / part / type
        Removed value: -"string"
      • changedOutput schema / properties / section / description
        Previous value: -"Section identifier; null when a whole part was fetched."New value: +"Section identifier; null when a whole part or an appendix was fetched."
      • changedOutput schema / required
        Previous value: -[
        -  "cfrCite",
        -  "title",
        -  "part",
        -  "section",
        -  "heading",
        -  "hierarchyPath",
        -  "date",
        -  "source",
        -  "bodyText"
        -]New value: +[
        +  "cfrCite",
        +  "title",
        +  "part",
        +  "section",
        +  "appendix",
        +  "heading",
        +  "hierarchyPath",
        +  "date",
        +  "source",
        +  "bodyText"
        +]
  10. 2 tool updates
    • Changedregulations_browse_cfr3 fields changed
      • changedInput schema / properties / part / description
        Previous value: -"CFR part within the title (structure mode, optional) — narrows the returned tree to one part's sections. Parts can be alphanumeric."New value: +"CFR part within the title, in both modes — structure mode narrows the returned tree to that part's sections, 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\"."
      • changedOutput schema / properties / results / items / properties / hierarchyPath / description
        Previous value: -"Structural path down to the match, e.g. \"Title 40 › Chapter I › Part 51 › § 51.190\"."New value: +"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."
      • changedOutput schema / properties / sourceScope / description
        Previous value: -"What the answering corpus covers — the mirror's title coverage, or the live index and the date it was read at (search mode). Read it before concluding a query found nothing."New value: +"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."
    • Changedregulations_find_comments4 fields changed
      • changedInput schema / properties / comment_id / description
        Previous value: -"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."New value: +"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."
      • changedInput schema / properties / docket_id / description
        Previous value: -"Fetch all comments in a docket by docket ID (e.g. \"EPA-HQ-OAR-2025-0194\"). Broadest scope. One of docket_id / document_object_id / fr_document_number / comment_id is required."New value: +"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."
      • changedInput schema / properties / document_object_id / description
        Previous value: -"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."New value: +"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."
      • changedInput schema / properties / fr_document_number / description
        Previous value: -"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."New value: +"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."
  11. 1 tool update
    • Changedregulations_browse_cfr8 fields changed
      • changedInput schema / properties / date / description
        Previous value: -"Point-in-time date, ISO 8601 (YYYY-MM-DD). Defaults to current. Structure mode uses this date for historical hierarchy; in search mode, a past date enables point-in-time search."New value: +"Point-in-time date, ISO 8601 (YYYY-MM-DD). Defaults to current. Structure mode uses it for the historical hierarchy. 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."
      • changedInput schema / properties / title / description
        Previous value: -"CFR title number (1–50). Structure mode: omit to list all 50 titles, or provide to expand one title. Search mode: optional filter to restrict to one title."New value: +"CFR title number (1–50). Structure mode: omit to list all 50 titles, or provide to expand one title. Search mode: optional filter restricting matches to that title — e.g. 40 for environmental rules, 21 for food and drugs."
      • changedOutput schema / properties / date / description
        Previous value: -"Resolved point-in-time date (structure mode)."New value: +"Resolved point-in-time date — the hierarchy snapshot (structure mode), or the day whose section text was searched (search mode, live source only)."
      • changedOutput schema / properties / results / items / properties / heading / description
        Previous value: -"Section/part heading."New value: +"What the matched node is called — the section, appendix, or part heading. Distinct from cfrCite, which is where it lives."
      • changedOutput schema / properties / results / items / properties / hierarchyPath / description
        Previous value: -"Human-readable hierarchy path."New value: +"Structural path down to the match, e.g. \"Title 40 › Chapter I › Part 51 › § 51.190\"."
      • changedOutput schema / properties / results / items / properties / section / description
        Previous value: -"Section identifier, or null."New value: +"Section identifier, or null when the match is an appendix or a whole part."
      • changedOutput schema / properties / source / description
        Previous value: -"Provenance: the synced mirror index, or the live eCFR search fallback (search mode)."New value: +"Provenance: the synced mirror index, or the live eCFR search API (search mode)."
      • addedOutput schema / properties / sourceScope
        Added value: +{
        +  "description": "What the answering corpus covers — the mirror's title coverage, or the live index and the date it was read at (search mode). Read it before concluding a query found nothing.",
        +  "type": "string"
        +}
  12. 7 tool updates
    • First observedregulations_browse_cfr
    • First observedregulations_find_comments
    • First observedregulations_get_cfr_section
    • First observedregulations_get_docket
    • First observedregulations_get_document
    • First observedregulations_list_open_comments
    • First observedregulations_search_rules

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables searching, browsing, and retrieving current US Code of Federal Regulations text—including full-text search across all 50 titles, title structures, and exact section or part wording—via the official eCFR API.
    220 npm
    MIT
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables interaction with the Regulations.gov API to search federal rulemaking dockets, proposed and final rules, public comments, and comment periods. Supports tracking FAR/DFARS case histories and monitoring open comment periods across federal agencies with optional API key authentication for higher rate limits.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.