Skip to main content
Glama

Get Grants.gov Opportunity

grantsgov_get_opportunity
Read-onlyIdempotent

Read the Grants.gov record for up to 5 opportunities, given numeric opportunity ids or opportunity numbers: deadline, funding, eligibility, description, assistance listings, contact, attachments, packages, and latest revision metadata. Lists and narratives are bounded independent pages; follow each record pages continuation to retrieve the remaining section. An opportunity number is resolved across all statuses. A miss or an ambiguous number comes back as an unresolved entry with guidance, not an error.

Input Schema

NameRequiredDescriptionDefault
opportunity_idsNoNumeric Grants.gov ids (e.g. 363423, or "363423" as search rows emit them), from grantsgov_search_opportunities opportunity_id. Accepts one whole string or an array, with at most 50 nonblank entries per list and 50 unique ids and numbers combined. Reads the first 5 identifiers, ids before numbers; remaining inputs have an executable continuation.
attachment_offsetNoZero-based attachment offset; defaults to 0. Page size 30.
description_offsetNoZero-based normalized description character offset; defaults to 0. Page size 12,000.
eligibility_offsetNoZero-based normalized eligibility character offset; defaults to 0. Page size 6,000.
opportunity_numbersNoAgency-assigned opportunity numbers (e.g. HRSA-27-005), matched exactly and case-insensitively across all statuses; one pair of surrounding double quotes is removed. Accepts one whole string or an array, with at most 50 nonblank entries per list and 50 unique ids and numbers combined. Reads the first 5 identifiers, ids before numbers; remaining inputs have an executable continuation. A number shared by several opportunities comes back as ambiguous with candidates.
application_package_offsetNoZero-based open package offset; defaults to 0. Page size 10.
related_opportunity_offsetNoZero-based related opportunity offset; defaults to 0. Page size 10.
funding_category_explanation_offsetNoZero-based normalized category explanation character offset; defaults to 0. Page size 2,000.

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoSummary of unresolved inputs and what to call next.
unresolvedNoInputs that did not resolve to exactly one record. Empty when all resolved.
continuationNoNext identifier batch, omitted when the queue is exhausted.
deferred_idsNoUnprocessed ids, omitted when none remain.
opportunitiesNoRecords found, in input order.
deferred_numbersNoUnprocessed numbers, omitted when none remain.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed28 schema fields changed
    • addedInput schema / properties / application_package_offset
      Added value: +{
      +  "description": "Zero-based open package offset; defaults to 0. Page size 10.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / attachment_offset
      Added value: +{
      +  "description": "Zero-based attachment offset; defaults to 0. Page size 30.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / description_offset
      Added value: +{
      +  "description": "Zero-based normalized description character offset; defaults to 0. Page size 12,000.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / eligibility_offset
      Added value: +{
      +  "description": "Zero-based normalized eligibility character offset; defaults to 0. Page size 6,000.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / funding_category_explanation_offset
      Added value: +{
      +  "description": "Zero-based normalized category explanation character offset; defaults to 0. Page size 2,000.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / opportunity_ids / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "maximum": 9007199254740991,
      +              "minimum": 1,
      +              "type": "integer"
      +            },
      +            {
      +              "pattern": "^\\s*\\d+\\s*$",
      +              "type": "string"
      +            }
      +          ]
      +        },
      +        {
      +          "pattern": "^\\s*$",
      +          "type": "string"
      +        }
      +      ]
      +    },
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / opportunity_ids / description
      Previous value: -"Numeric Grants.gov ids (e.g. 363423, or \"363423\" as search rows emit them), from grantsgov_search_opportunities opportunity_id. Up to 5 combined with opportunity_numbers."New value: +"Numeric Grants.gov ids (e.g. 363423, or \"363423\" as search rows emit them), from grantsgov_search_opportunities opportunity_id. Accepts one whole string or an array, with at most 50 nonblank entries per list and 50 unique ids and numbers combined. Reads the first 5 identifiers, ids before numbers; remaining inputs have an executable continuation."
    • removedInput schema / properties / opportunity_ids / items
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "maximum": 9007199254740991,
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    {
      -      "pattern": "^\\s*\\d+\\s*$",
      -      "type": "string"
      -    }
      -  ]
      -}
    • removedInput schema / properties / opportunity_ids / maxItems
      Removed value: -5
    • removedInput schema / properties / opportunity_ids / type
      Removed value: -"array"
    • addedInput schema / properties / opportunity_numbers / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "anyOf": [
      +        {
      +          "pattern": "^(?:[^\"]*|\\s*\"[^\"]*\"\\s*)$",
      +          "type": "string"
      +        },
      +        {
      +          "pattern": "^\\s*$",
      +          "type": "string"
      +        }
      +      ]
      +    },
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / opportunity_numbers / description
      Previous value: -"Agency-assigned opportunity numbers (e.g. HRSA-27-005), matched exactly and case-insensitively across all statuses; one pair of surrounding double quotes is removed. A number shared by several opportunities comes back as ambiguous with candidates. Up to 5 combined with opportunity_ids."New value: +"Agency-assigned opportunity numbers (e.g. HRSA-27-005), matched exactly and case-insensitively across all statuses; one pair of surrounding double quotes is removed. Accepts one whole string or an array, with at most 50 nonblank entries per list and 50 unique ids and numbers combined. Reads the first 5 identifiers, ids before numbers; remaining inputs have an executable continuation. A number shared by several opportunities comes back as ambiguous with candidates."
    • removedInput schema / properties / opportunity_numbers / items
      Removed value: -{
      -  "pattern": "^(?:[^\"]*|\\s*\"[^\"]*\"\\s*)$",
      -  "type": "string"
      -}
    • removedInput schema / properties / opportunity_numbers / maxItems
      Removed value: -5
    • removedInput schema / properties / opportunity_numbers / type
      Removed value: -"array"
    • addedInput schema / properties / related_opportunity_offset
      Added value: +{
      +  "description": "Zero-based related opportunity offset; defaults to 0. Page size 10.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / continuation
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Next identifier batch, omitted when the queue is exhausted.",
      +  "properties": {
      +    "arguments": {
      +      "additionalProperties": false,
      +      "description": "Executable remaining queue with the original section offsets.",
      +      "properties": {
      +        "application_package_offset": {
      +          "description": "Zero-based open package offset; defaults to 0. Page size 10.",
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "attachment_offset": {
      +          "description": "Zero-based attachment offset; defaults to 0. Page size 30.",
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "description_offset": {
      +          "description": "Zero-based normalized description character offset; defaults to 0. Page size 12,000.",
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "eligibility_offset": {
      +          "description": "Zero-based normalized eligibility character offset; defaults to 0. Page size 6,000.",
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "funding_category_explanation_offset": {
      +          "description": "Zero-based normalized category explanation character offset; defaults to 0. Page size 2,000.",
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "opportunity_ids": {
      +          "description": "Unprocessed numeric ids, in order.",
      +          "items": {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "type": "array"
      +        },
      +        "opportunity_numbers": {
      +          "description": "Unprocessed opportunity numbers, in order.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "related_opportunity_offset": {
      +          "description": "Zero-based related opportunity offset; defaults to 0. Page size 10.",
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "opportunity_ids",
      +        "opportunity_numbers"
      +      ],
      +      "type": "object"
      +    },
      +    "tool": {
      +      "const": "grantsgov_get_opportunity",
      +      "description": "Tool to call.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "tool",
      +    "arguments"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / deferred_ids
      Added value: +{
      +  "description": "Unprocessed ids, omitted when none remain.",
      +  "items": {
      +    "maximum": 9007199254740991,
      +    "minimum": -9007199254740991,
      +    "type": "integer"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / deferred_numbers
      Added value: +{
      +  "description": "Unprocessed numbers, omitted when none remain.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `no_identifiers`: Both opportunity_ids and opportunity_numbers are empty or unset. `too_many_identifiers`: More than 5 ids and numbers combined after de-duplication. `upstream_unavailable`: Grants.gov did not respond, or returned a 5xx, a non-JSON body, a non-zero errorcode, or a backend-unavailable message, after retries. `rate_limited`: Grants.gov answered HTTP 429 (rate limited) through every retry, or asked for a wait longer than the retry budget. `upstream_route_unavailable`: Grants.gov answered HTTP 403 Missing Authentication Token on the detail route, or on the search route used to resolve opportunity numbers: the route no longer exists at the gateway. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_identifiers`: Both opportunity_ids and opportunity_numbers are empty or unset. `too_many_identifiers`: More than 50 ids and numbers combined after de-duplication. `upstream_unavailable`: Grants.gov did not respond, or returned a 5xx, a non-JSON body, a non-zero errorcode, or a backend-unavailable message, after retries. `rate_limited`: Grants.gov answered HTTP 429 (rate limited) through every retry, or asked for a wait longer than the retry budget. `upstream_route_unavailable`: Grants.gov answered HTTP 403 Missing Authentication Token on the detail route, or on the search route used to resolve opportunity numbers: the route no longer exists at the gateway. Other values are possible when a failure originates below the handler."
    • addedOutput schema / properties / opportunities / items / properties / attachments / items / properties / created_date
      Added value: +{
      +  "description": "Upstream attachment timestamp unchanged, including its stated timezone.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / opportunities / items / properties / description_truncated / description
      Previous value: -"True when description was cut at 12,000 characters."New value: +"True when the description page omits a prefix or suffix of the full description."
    • changedOutput schema / properties / opportunities / items / properties / eligibility_narrative_truncated / description
      Previous value: -"True when eligibility_narrative was cut at 6,000 characters."New value: +"True when the eligibility page omits a prefix or suffix of the full narrative."
    • changedOutput schema / properties / opportunities / items / properties / funding_category_explanation_truncated / description
      Previous value: -"True when funding_category_explanation was cut at 2,000 characters."New value: +"True when the category explanation page omits a prefix or suffix."
    • addedOutput schema / properties / opportunities / items / properties / last_revision_changed
      Added value: +{
      +  "description": "Changed public field names; unknown names retain the upstream: prefix. Not a computed historical diff.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / opportunities / items / properties / last_revision_note
      Added value: +{
      +  "description": "Agency note on the latest active synopsis or forecast revision; omitted when unavailable.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / opportunities / items / properties / pages
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Independent bounded pages; execute each continuation literally to retrieve its remaining section.",
      +  "properties": {
      +    "application_package_offset": {
      +      "additionalProperties": false,
      +      "description": "Open application package page.",
      +      "properties": {
      +        "continuation": {
      +          "additionalProperties": false,
      +          "description": "Next call for this section; other offsets default to zero.",
      +          "properties": {
      +            "arguments": {
      +              "additionalProperties": false,
      +              "description": "Executable arguments advancing only this section.",
      +              "properties": {
      +                "application_package_offset": {
      +                  "description": "Zero-based open package offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "attachment_offset": {
      +                  "description": "Zero-based attachment offset; defaults to 0. Page size 30.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "description_offset": {
      +                  "description": "Zero-based normalized description character offset; defaults to 0. Page size 12,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "eligibility_offset": {
      +                  "description": "Zero-based normalized eligibility character offset; defaults to 0. Page size 6,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "funding_category_explanation_offset": {
      +                  "description": "Zero-based normalized category explanation character offset; defaults to 0. Page size 2,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "opportunity_ids": {
      +                  "description": "The single opportunity to continue.",
      +                  "items": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "maxItems": 1,
      +                  "minItems": 1,
      +                  "type": "array"
      +                },
      +                "related_opportunity_offset": {
      +                  "description": "Zero-based related opportunity offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "opportunity_ids"
      +              ],
      +              "type": "object"
      +            },
      +            "tool": {
      +              "const": "grantsgov_get_opportunity",
      +              "description": "Tool to call.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "arguments"
      +          ],
      +          "type": "object"
      +        },
      +        "next_offset": {
      +          "description": "Next offset; absent on the final or past-end page.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "offset": {
      +          "description": "Requested zero-based offset.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "total": {
      +          "description": "Full normalized character or item count. Omitted for an absent narrative.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "offset"
      +      ],
      +      "type": "object"
      +    },
      +    "attachment_offset": {
      +      "additionalProperties": false,
      +      "description": "Attachment page.",
      +      "properties": {
      +        "continuation": {
      +          "additionalProperties": false,
      +          "description": "Next call for this section; other offsets default to zero.",
      +          "properties": {
      +            "arguments": {
      +              "additionalProperties": false,
      +              "description": "Executable arguments advancing only this section.",
      +              "properties": {
      +                "application_package_offset": {
      +                  "description": "Zero-based open package offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "attachment_offset": {
      +                  "description": "Zero-based attachment offset; defaults to 0. Page size 30.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "description_offset": {
      +                  "description": "Zero-based normalized description character offset; defaults to 0. Page size 12,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "eligibility_offset": {
      +                  "description": "Zero-based normalized eligibility character offset; defaults to 0. Page size 6,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "funding_category_explanation_offset": {
      +                  "description": "Zero-based normalized category explanation character offset; defaults to 0. Page size 2,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "opportunity_ids": {
      +                  "description": "The single opportunity to continue.",
      +                  "items": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "maxItems": 1,
      +                  "minItems": 1,
      +                  "type": "array"
      +                },
      +                "related_opportunity_offset": {
      +                  "description": "Zero-based related opportunity offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "opportunity_ids"
      +              ],
      +              "type": "object"
      +            },
      +            "tool": {
      +              "const": "grantsgov_get_opportunity",
      +              "description": "Tool to call.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "arguments"
      +          ],
      +          "type": "object"
      +        },
      +        "next_offset": {
      +          "description": "Next offset; absent on the final or past-end page.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "offset": {
      +          "description": "Requested zero-based offset.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "total": {
      +          "description": "Full normalized character or item count. Omitted for an absent narrative.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "offset"
      +      ],
      +      "type": "object"
      +    },
      +    "description_offset": {
      +      "additionalProperties": false,
      +      "description": "Description character page.",
      +      "properties": {
      +        "continuation": {
      +          "additionalProperties": false,
      +          "description": "Next call for this section; other offsets default to zero.",
      +          "properties": {
      +            "arguments": {
      +              "additionalProperties": false,
      +              "description": "Executable arguments advancing only this section.",
      +              "properties": {
      +                "application_package_offset": {
      +                  "description": "Zero-based open package offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "attachment_offset": {
      +                  "description": "Zero-based attachment offset; defaults to 0. Page size 30.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "description_offset": {
      +                  "description": "Zero-based normalized description character offset; defaults to 0. Page size 12,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "eligibility_offset": {
      +                  "description": "Zero-based normalized eligibility character offset; defaults to 0. Page size 6,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "funding_category_explanation_offset": {
      +                  "description": "Zero-based normalized category explanation character offset; defaults to 0. Page size 2,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "opportunity_ids": {
      +                  "description": "The single opportunity to continue.",
      +                  "items": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "maxItems": 1,
      +                  "minItems": 1,
      +                  "type": "array"
      +                },
      +                "related_opportunity_offset": {
      +                  "description": "Zero-based related opportunity offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "opportunity_ids"
      +              ],
      +              "type": "object"
      +            },
      +            "tool": {
      +              "const": "grantsgov_get_opportunity",
      +              "description": "Tool to call.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "arguments"
      +          ],
      +          "type": "object"
      +        },
      +        "next_offset": {
      +          "description": "Next offset; absent on the final or past-end page.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "offset": {
      +          "description": "Requested zero-based offset.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "total": {
      +          "description": "Full normalized character or item count. Omitted for an absent narrative.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "offset"
      +      ],
      +      "type": "object"
      +    },
      +    "eligibility_offset": {
      +      "additionalProperties": false,
      +      "description": "Eligibility character page.",
      +      "properties": {
      +        "continuation": {
      +          "additionalProperties": false,
      +          "description": "Next call for this section; other offsets default to zero.",
      +          "properties": {
      +            "arguments": {
      +              "additionalProperties": false,
      +              "description": "Executable arguments advancing only this section.",
      +              "properties": {
      +                "application_package_offset": {
      +                  "description": "Zero-based open package offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "attachment_offset": {
      +                  "description": "Zero-based attachment offset; defaults to 0. Page size 30.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "description_offset": {
      +                  "description": "Zero-based normalized description character offset; defaults to 0. Page size 12,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "eligibility_offset": {
      +                  "description": "Zero-based normalized eligibility character offset; defaults to 0. Page size 6,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "funding_category_explanation_offset": {
      +                  "description": "Zero-based normalized category explanation character offset; defaults to 0. Page size 2,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "opportunity_ids": {
      +                  "description": "The single opportunity to continue.",
      +                  "items": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "maxItems": 1,
      +                  "minItems": 1,
      +                  "type": "array"
      +                },
      +                "related_opportunity_offset": {
      +                  "description": "Zero-based related opportunity offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "opportunity_ids"
      +              ],
      +              "type": "object"
      +            },
      +            "tool": {
      +              "const": "grantsgov_get_opportunity",
      +              "description": "Tool to call.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "arguments"
      +          ],
      +          "type": "object"
      +        },
      +        "next_offset": {
      +          "description": "Next offset; absent on the final or past-end page.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "offset": {
      +          "description": "Requested zero-based offset.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "total": {
      +          "description": "Full normalized character or item count. Omitted for an absent narrative.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "offset"
      +      ],
      +      "type": "object"
      +    },
      +    "funding_category_explanation_offset": {
      +      "additionalProperties": false,
      +      "description": "Category explanation character page.",
      +      "properties": {
      +        "continuation": {
      +          "additionalProperties": false,
      +          "description": "Next call for this section; other offsets default to zero.",
      +          "properties": {
      +            "arguments": {
      +              "additionalProperties": false,
      +              "description": "Executable arguments advancing only this section.",
      +              "properties": {
      +                "application_package_offset": {
      +                  "description": "Zero-based open package offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "attachment_offset": {
      +                  "description": "Zero-based attachment offset; defaults to 0. Page size 30.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "description_offset": {
      +                  "description": "Zero-based normalized description character offset; defaults to 0. Page size 12,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "eligibility_offset": {
      +                  "description": "Zero-based normalized eligibility character offset; defaults to 0. Page size 6,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "funding_category_explanation_offset": {
      +                  "description": "Zero-based normalized category explanation character offset; defaults to 0. Page size 2,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "opportunity_ids": {
      +                  "description": "The single opportunity to continue.",
      +                  "items": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "maxItems": 1,
      +                  "minItems": 1,
      +                  "type": "array"
      +                },
      +                "related_opportunity_offset": {
      +                  "description": "Zero-based related opportunity offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "opportunity_ids"
      +              ],
      +              "type": "object"
      +            },
      +            "tool": {
      +              "const": "grantsgov_get_opportunity",
      +              "description": "Tool to call.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "arguments"
      +          ],
      +          "type": "object"
      +        },
      +        "next_offset": {
      +          "description": "Next offset; absent on the final or past-end page.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "offset": {
      +          "description": "Requested zero-based offset.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "total": {
      +          "description": "Full normalized character or item count. Omitted for an absent narrative.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "offset"
      +      ],
      +      "type": "object"
      +    },
      +    "related_opportunity_offset": {
      +      "additionalProperties": false,
      +      "description": "Related opportunity page.",
      +      "properties": {
      +        "continuation": {
      +          "additionalProperties": false,
      +          "description": "Next call for this section; other offsets default to zero.",
      +          "properties": {
      +            "arguments": {
      +              "additionalProperties": false,
      +              "description": "Executable arguments advancing only this section.",
      +              "properties": {
      +                "application_package_offset": {
      +                  "description": "Zero-based open package offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "attachment_offset": {
      +                  "description": "Zero-based attachment offset; defaults to 0. Page size 30.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "description_offset": {
      +                  "description": "Zero-based normalized description character offset; defaults to 0. Page size 12,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "eligibility_offset": {
      +                  "description": "Zero-based normalized eligibility character offset; defaults to 0. Page size 6,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "funding_category_explanation_offset": {
      +                  "description": "Zero-based normalized category explanation character offset; defaults to 0. Page size 2,000.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "opportunity_ids": {
      +                  "description": "The single opportunity to continue.",
      +                  "items": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "maxItems": 1,
      +                  "minItems": 1,
      +                  "type": "array"
      +                },
      +                "related_opportunity_offset": {
      +                  "description": "Zero-based related opportunity offset; defaults to 0. Page size 10.",
      +                  "maximum": 9007199254740991,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "opportunity_ids"
      +              ],
      +              "type": "object"
      +            },
      +            "tool": {
      +              "const": "grantsgov_get_opportunity",
      +              "description": "Tool to call.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "tool",
      +            "arguments"
      +          ],
      +          "type": "object"
      +        },
      +        "next_offset": {
      +          "description": "Next offset; absent on the final or past-end page.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "offset": {
      +          "description": "Requested zero-based offset.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "total": {
      +          "description": "Full normalized character or item count. Omitted for an absent narrative.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "offset"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "attachment_offset",
      +    "application_package_offset",
      +    "description_offset",
      +    "eligibility_offset",
      +    "funding_category_explanation_offset",
      +    "related_opportunity_offset"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / opportunities / items / required
      Previous value: -[
      -  "opportunity_id",
      -  "opportunity_number",
      -  "title",
      -  "status",
      -  "doc_type",
      -  "grants_gov_url",
      -  "close_date_kind",
      -  "close_date_is_estimate",
      -  "past_revision_count",
      -  "money_source",
      -  "applicant_types",
      -  "funding_instruments",
      -  "funding_categories",
      -  "assistance_listings",
      -  "attachments",
      -  "attachment_count",
      -  "application_packages",
      -  "application_package_count",
      -  "closed_package_count",
      -  "related_opportunities",
      -  "related_opportunity_count"
      -]New value: +[
      +  "opportunity_id",
      +  "opportunity_number",
      +  "title",
      +  "status",
      +  "doc_type",
      +  "grants_gov_url",
      +  "close_date_kind",
      +  "close_date_is_estimate",
      +  "past_revision_count",
      +  "pages",
      +  "money_source",
      +  "applicant_types",
      +  "funding_instruments",
      +  "funding_categories",
      +  "assistance_listings",
      +  "attachments",
      +  "attachment_count",
      +  "application_packages",
      +  "application_package_count",
      +  "closed_package_count",
      +  "related_opportunities",
      +  "related_opportunity_count"
      +]
  2. First observed

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld), and the description adds substantial non-obvious behavior: bounded independent pagination per section with a continuation to follow, cross-status exact/case-insensitive number resolution, and the fact that misses and ambiguities return an unresolved entry with guidance rather than an error. That last point materially changes how an agent handles the response.

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?

Four front-loaded sentences whose content maps to purpose, payload, pagination, and edge-case handling, with no filler. The phrasing 'bounded independent pages' and 'follow each record pages continuation' is slightly awkward, but given eight parameters and heavy section paging the length is justified.

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?

With an output schema present, the description doesn't need to enumerate return fields, and it instead covers the things the schema can't: batch read limit, per-section continuation, cross-status resolution, and non-error handling of misses/ambiguity. An agent has everything needed to select and call this 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% and the schema itself is unusually detailed (batch caps, id-vs-number ordering, offset page sizes, quote stripping). The description only echoes the 'up to 5' read limit and identifier kinds, adding no offset or paging semantics beyond what the schema already states, 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.

Purpose4/5

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

The description opens with a specific verb+resource ('Read the Grants.gov record') scoped to a batch ('up to 5 opportunities') and constrained by identifier type (numeric ids or opportunity numbers). It clearly implies a fetch-by-identifier role distinct from searching, but it never names grantsgov_search_opportunities as the sibling that produces those ids, so differentiation is inferential rather than explicit.

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 applies (you already hold ids or opportunity numbers) and resolves the common edge cases an agent would otherwise ask about: unresolved misses, ambiguous numbers, and continuation for inputs beyond the first five identifiers. It stops short of explicitly stating when not to use it or naming the search tool as the discovery alternative.

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.