Skip to main content
Glama

federal-regulations-mcp-server

regulations_find_comments

regulations_find_comments
Read-only

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

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "regulations_find_comments"
  }
}

Input 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 (at least 5, default 25, capped at 250 with a notice). 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

NameRequiredDescriptionDefault
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 — per_page above its ceiling, no comments matched, the page is past the end, comments lie beyond the last page, or the substance of a comment is in its attachments.
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).
attachmentsNoAttachments in upload order, withheld ones included — 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).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • changedInput schema / properties / per_page / description
      Previous value: -"Comments per page (5–250, default 25). Regulations.gov requires a minimum page size of 5."New value: +"Comments per page (at least 5, default 25, capped at 250 with a notice). Regulations.gov requires a minimum page size of 5."
    • removedInput schema / properties / per_page / maximum
      Removed value: -250
    • addedInput schema / properties / per_page / multipleOf
      Added value: +1
    • changedInput schema / properties / per_page / type
      Previous value: -"integer"New value: +"number"
    • changedOutput schema / properties / attachments / description
      Previous value: -"Attachment files — substance lives here when attachmentOnly is true (detail mode)."New value: +"Attachments in upload order, withheld ones included — substance lives here when attachmentOnly is true (detail mode)."
    • changedOutput schema / properties / attachments / items / properties / formats / description
      Previous value: -"Available file formats for the attachment."New value: +"Available file formats for the attachment; empty when the file is withheld."
    • addedOutput schema / properties / attachments / items / properties / restrictReasonType
      Added value: +{
      +  "description": "Why the file is withheld (e.g. \"Copyrighted\"), or null when Regulations.gov gives no reason.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / attachments / items / required
      Previous value: -[
      -  "title",
      -  "formats"
      -]New value: +[
      +  "title",
      +  "formats",
      +  "restrictReasonType"
      +]
    • 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. `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."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 (a docket_id that lists no comments is looked up to tell), or no Regulations.gov document carries the FR number. `rate_limited`: Regulations.gov returned 429. `upstream_unavailable`: Regulations.gov returned a 5xx, timed out, or could not be reached at all. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / notice / description
      Previous 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."New value: +"Guidance — per_page above its ceiling, no comments matched, the page is past the end, comments lie beyond the last page, or the substance of a comment is in its attachments."
  2. Changed1 schema 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."
  3. Changed22 schema 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)."
  4. Changed18 schema 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"
      +]
  5. 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: `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"
      -]
  6. Changed4 schema 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."
  7. First observed

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only supply readOnlyHint and openWorldHint; the description adds the operational facts that matter: the list endpoint returns no body text or attachment info, PDF/DOCX-backed comments come back as stubs with attachmentOnly true plus download URLs, supplying two targeting parameters is rejected rather than resolved by precedence, and an API key is required with a signup URL. It also discloses the 40-page/250-per-page ceiling and the date-windowing workaround.

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 front-loaded with the purpose and the targeting rule before moving to filters, list-vs-detail behavior, attachments, and auth — a logical order. It is dense and long, but nearly every clause (stub bodies, attachmentOnly, API key, pagination cap) carries information an agent would otherwise have to discover by failing.

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 nine-parameter tool with four mutually exclusive modes, the description covers mode selection, filter applicability, the body-text limitation, attachment handling, and authentication, and an output schema exists so return shapes need no explanation. Nothing an agent needs to invoke it correctly appears to be missing.

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 schema already documents every parameter, including mutual exclusivity, examples, date formats and pagination limits. The description mostly restates that model in prose (exactly one target, which one is broadest, comment_id takes no list filters), adding little beyond the per-parameter text. Baseline 3 is appropriate when the schema carries the load.

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

Purpose4/5

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

The opening sentence gives a specific verb and resource ('Fetch public comments on a Federal Register document or a Regulations.gov docket') and immediately characterizes the corpus, so an agent knows exactly what it retrieves. The four targeting modes are named with their scopes. It does not, however, distinguish itself from the sibling regulations_list_open_comments, which is the most likely confusion point.

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?

Usage is spelled out at the mode level: 'Provide exactly one targeting parameter', docket_id is flagged as broadest, fr_document_number as a convenience that 'saves a get_document → get_docket hop', and comment_id as the way to read a body after finding a comment in a list. The one gap is that no alternative sibling tool (e.g. regulations_list_open_comments) is named or excluded.

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.