Skip to main content
Glama

federal-regulations-mcp-server

regulations_browse_cfr

regulations_browse_cfr
Read-only

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.

Input Schema

TableJSON 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

TableJSON Schema
NameRequiredDescriptionDefault
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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema 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)."
  2. Changed23 schema 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."
  3. Changed10 schema 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"
      +]
  4. Changed6 schema 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"
      -]
  5. Changed7 schema 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"
      +]
  6. Changed3 schema 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."
  7. Changed8 schema 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"
      +}
  8. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.