Skip to main content
Glama

usaspending-mcp-server

Get Award Subawards

usaspending_get_award_subawards
Read-onlyIdempotent

List subaward contracts or grants under a prime federal award. Reveals the sub-contractor or sub-grantee layer — the organizations that actually perform the work. Each row shows the subaward number, amount, description, action date, and recipient. Check subaward_count on usaspending_get_award first to confirm subawards exist before calling this tool.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "award_id": "<award_id>"
    },
    "name": "usaspending_get_award_subawards"
  }
}

Input Schema

NameRequiredDescriptionDefault
pageNoPage number (1-based)
sortNoSort field for subawardsaction_date
limitNoMaximum subawards per page (1–100)
orderNoSort directiondesc
award_idYesGenerated unique award ID (generated_internal_id from usaspending_search_awards)

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no subawards were returned — suggests checking subaward_count from usaspending_get_award first. Absent when results are present.
resultsNoList of subawards under this prime award
award_idNoPrime award ID queried
totalCountNoTotal subaward count across all pages (when available)
current_pageNoCurrent page returned
has_next_pageNoWhether there are more pages of subawards
page_metadataNoPagination metadata
prime_award_idNoPrime award ID whose subawards were listed

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedOutput schema / properties / results / items / description
      Previous value: -"Subaward record with amount, recipient, and location"New value: +"Subaward record with identifier, amount, recipient, date, and description"
    • removedOutput schema / properties / results / items / properties / place_of_performance
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "Subaward place of performance",
      -  "properties": {
      -    "city": {
      -      "description": "City of performance",
      -      "type": "string"
      -    },
      -    "country": {
      -      "description": "Country code",
      -      "type": "string"
      -    },
      -    "state": {
      -      "description": "State code",
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
    • removedOutput schema / properties / results / items / properties / recipient_uei
      Removed value: -{
      -  "description": "Sub-recipient Unique Entity Identifier",
      -  "type": "string"
      -}
  2. 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": [
      +      "award_id",
      +      "results",
      +      "page_metadata",
      +      "prime_award_id",
      +      "current_page",
      +      "has_next_page"
      +    ]
      +  },
      +  {
      +    "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: `api_unavailable`: USAspending.gov API is unreachable or returns an error. `api_timeout`: USAspending.gov did not respond before the request deadline elapsed. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "api_unavailable",
      +            "api_timeout"
      +          ],
      +          "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: -[
      -  "award_id",
      -  "results",
      -  "page_metadata",
      -  "prime_award_id",
      -  "current_page",
      -  "has_next_page"
      -]
  3. Changed2 schema fields changed
    • removedOutput schema / properties / subaward_total
      Removed value: -{
      -  "description": "Total subaward count across all pages (when available)",
      -  "type": "number"
      -}
    • addedOutput schema / properties / totalCount
      Added value: +{
      +  "description": "Total subaward count across all pages (when available)",
      +  "type": "number"
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance when no subawards were returned — suggests checking subaward_count from usaspending_get_award first. Absent when results are present.",
      +  "type": "string"
      +}
  5. Changed5 schema fields changed
    • addedOutput schema / properties / current_page
      Added value: +{
      +  "description": "Current page returned",
      +  "type": "number"
      +}
    • addedOutput schema / properties / has_next_page
      Added value: +{
      +  "description": "Whether there are more pages of subawards",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / prime_award_id
      Added value: +{
      +  "description": "Prime award ID whose subawards were listed",
      +  "type": "string"
      +}
    • addedOutput schema / properties / subaward_total
      Added value: +{
      +  "description": "Total subaward count across all pages (when available)",
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "award_id",
      -  "results",
      -  "page_metadata"
      -]New value: +[
      +  "award_id",
      +  "results",
      +  "page_metadata",
      +  "prime_award_id",
      +  "current_page",
      +  "has_next_page"
      +]
  6. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, and closed-world behavior, so the bar is lower. The description adds useful context beyond the annotations by describing what the result rows contain and clarifying the real-world meaning of subawards. It does not address pagination behavior or rate limits, which keeps it from a 5.

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?

Three sentences, each earning its place: the purpose and semantic layer come first, the row contents second, and the precondition last. There is no filler or repetition.

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

Completeness4/5

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

With an output schema present and annotations covering safety, the description supplies the key missing context — the real-world meaning of a subaward and the prerequisite check. It is nearly complete, though it could mention pagination expectations for large subaward sets.

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 page, sort, limit, order, and award_id with enums and defaults. The description adds only indirect context by mentioning the returned fields, which map loosely to the sort enum, but provides no additional parameter guidance. Baseline 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 states a specific verb and resource ('List subaward contracts or grants under a prime federal award') and explains the semantic layer being retrieved — the sub-contractor or sub-grantee organizations that actually perform the work. This clearly distinguishes it from siblings like usaspending_get_award or usaspending_get_award_transactions.

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

Usage Guidelines5/5

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

It gives an explicit precondition and names the sibling to consult first: 'Check subaward_count on usaspending_get_award first to confirm subawards exist before calling this tool.' That directly tells the agent when to call this versus the parent award tool, removing guesswork.

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.