Skip to main content
Glama

Usa Award Search

usa_award_search
Read-onlyIdempotent

Search US federal PROCUREMENT CONTRACTS / government contract awards for goods and services. Use recipient_name for "contracts won by Lockheed Martin"; keywords searches award descriptions/topics, not contractor identity. Dates are optional and default to the last 12 months for "recent" questions. Dates select awards ACTIVE in the window (not signed in it) and award_amount is the award's LIFETIME obligation, so do not sum it as spending for the period. Results are paged: 100 per page max — pass page (and read page_metadata.has_next) to reach the rest. Returns recipient, award amount, outlays (with an outlays_reported flag, since DoD awards usually report none), dates, and contract type. Umbrella contracts (IDVs — CRS-2, NASA Launch Services II, CCtCap) are a SEPARATE result set in idvs, not in awards: read both, and idv_status says which you got. IDV and child-order amounts are disjoint, so totals.combined_amount is the correct total.

Input Schema

NameRequiredDescriptionDefault
pageNo1-based page number (default 1). total_results can exceed limit; page through with this and read page_metadata.has_next / total_pages to reach every row. The `idvs` array is served on page 1 only.
limitNoNumber of results per page (1-100, default 10)
naicsNoNAICS code to filter by (e.g., "541512")
stateNoPlace-of-performance US state, 2-letter code (e.g., "MD", "TX"). Filters to contracts performed in that state.
agencyNoAwarding agency — full toptier name ("Department of Defense") or the common abbreviation (DOD, DHS, VA, HHS, DOE, NASA, GSA, USDA, EPA…), which is expanded for you.
end_dateNoEnd date in YYYY-MM-DD format
keywordsNoSearch keywords (e.g., ["cybersecurity", "cloud"] or ["goods", "services"])
set_asideNoSmall-business set-aside filter. Accepts a family name ("HUBZone", "8(a)", "WOSB", "EDWOSB", "SDVOSB", "Veteran", "Small business", "Indian"), a FAR code ("HZC", "8AN", "SDVOSBC"), or the literal USAspending description ("HUBZONE SET-ASIDE"). Matches both the set-aside and sole-source variants of a family.
start_dateNoStart date in YYYY-MM-DD format
include_idvsNoInclude umbrella contracts (indefinite delivery vehicles) as a separate `idvs` array. Default true. Leave it on: these are often a recipient's largest awards, and excluding them understates a total silently.
recipient_nameNoContractor/recipient name (e.g., "Lockheed Martin"). Use for awards won by a company; do not put company names in keywords. Matched as a SUBSTRING of the registered legal name, so a brand name can miss the company entirely ("SpaceX" is not inside "SPACE EXPLORATION TECHNOLOGIES CORP."); a known brand that matches nothing is retried under its legal name and the response says so in `recipient_resolution`. An empty result distinguishes `no_match` (no registered recipient has this name) from `recipient_matched_no_awards` (it does, but holds nothing under your window/agency filters) and lists the near-miss names in `recipient_candidates`.

Output Schema

NameRequiredDescriptionDefault
pageYes1-based page of results this response represents
limitYesNumber of results returned
awardsYesList of matching contract awards
period_noteYesStates that the date filter selects awards ACTIVE in the window and that award_amount is a lifetime obligation, not window spending
outlays_noteYesExplains that a null total_outlays means not reported, and why DoD awards usually report none
page_metadataYesWhere this response sits in the full result set
total_resultsYesTotal number of matching awards
total_results_noteNoPresent when no verified total is available for the query shape; says total_results is the rows in this response
outlays_unreported_rowsYesHow many rows in this response carry no outlay figure

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changed
    • addedInput schema / properties / include_idvs
      Added value: +{
      +  "description": "Include umbrella contracts (indefinite delivery vehicles) as a separate `idvs` array. Default true. Leave it on: these are often a recipient's largest awards, and excluding them understates a total silently.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Number of results (1-100, default 10)"New value: +"Number of results per page (1-100, default 10)"
    • addedInput schema / properties / page
      Added value: +{
      +  "description": "1-based page number (default 1). total_results can exceed limit; page through with this and read page_metadata.has_next / total_pages to reach every row. The `idvs` array is served on page 1 only.",
      +  "type": "number"
      +}
    • changedInput schema / properties / recipient_name / description
      Previous value: -"Contractor/recipient name (e.g., \"Lockheed Martin\"). Use for awards won by a company; do not put company names in keywords."New value: +"Contractor/recipient name (e.g., \"Lockheed Martin\"). Use for awards won by a company; do not put company names in keywords. Matched as a SUBSTRING of the registered legal name, so a brand name can miss the company entirely (\"SpaceX\" is not inside \"SPACE EXPLORATION TECHNOLOGIES CORP.\"); a known brand that matches nothing is retried under its legal name and the response says so in `recipient_resolution`. An empty result distinguishes `no_match` (no registered recipient has this name) from `recipient_matched_no_awards` (it does, but holds nothing under your window/agency filters) and lists the near-miss names in `recipient_candidates`."
    • addedOutput schema / properties / awards / items / properties / outlays_reported
      Added value: +{
      +  "description": "Whether the upstream published an outlay figure for this award. false means NOT REPORTED (most DoD contract awards are not linked to Treasury File C data), not that nothing was paid.",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / awards / items / properties / total_outlays / description
      Previous value: -"Total amount paid out"New value: +"Total amount paid out, or null when the upstream reports none. null means not reported, not zero paid — see outlays_reported."
    • changedOutput schema / properties / awards / items / required
      Previous value: -[
      -  "award_id",
      -  "recipient_name",
      -  "award_amount",
      -  "total_outlays",
      -  "start_date",
      -  "end_date",
      -  "awarding_agency",
      -  "awarding_sub_agency",
      -  "description",
      -  "naics_code",
      -  "contract_type"
      -]New value: +[
      +  "award_id",
      +  "recipient_name",
      +  "award_amount",
      +  "total_outlays",
      +  "start_date",
      +  "end_date",
      +  "awarding_agency",
      +  "awarding_sub_agency",
      +  "description",
      +  "naics_code",
      +  "contract_type",
      +  "outlays_reported"
      +]
    • addedOutput schema / properties / outlays_note
      Added value: +{
      +  "description": "Explains that a null total_outlays means not reported, and why DoD awards usually report none",
      +  "type": "string"
      +}
    • addedOutput schema / properties / outlays_unreported_rows
      Added value: +{
      +  "description": "How many rows in this response carry no outlay figure",
      +  "type": "number"
      +}
    • addedOutput schema / properties / page
      Added value: +{
      +  "description": "1-based page of results this response represents",
      +  "type": "number"
      +}
    • addedOutput schema / properties / page_metadata
      Added value: +{
      +  "description": "Where this response sits in the full result set",
      +  "properties": {
      +    "has_next": {
      +      "description": "Whether a further page exists",
      +      "type": "boolean"
      +    },
      +    "has_previous": {
      +      "description": "Whether an earlier page exists",
      +      "type": "boolean"
      +    },
      +    "page": {
      +      "description": "1-based page number",
      +      "type": "number"
      +    },
      +    "per_page": {
      +      "description": "Rows requested per page (max 100)",
      +      "type": "number"
      +    },
      +    "returned": {
      +      "description": "Rows actually in this response",
      +      "type": "number"
      +    },
      +    "total_pages": {
      +      "description": "Total pages at this per_page, or null when no total is published",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "total_results": {
      +      "description": "Total matching awards, or null when no total is published",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "page",
      +    "per_page",
      +    "returned",
      +    "has_next",
      +    "has_previous"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / period_note
      Added value: +{
      +  "description": "States that the date filter selects awards ACTIVE in the window and that award_amount is a lifetime obligation, not window spending",
      +  "type": "string"
      +}
    • addedOutput schema / properties / total_results_note
      Added value: +{
      +  "description": "Present when no verified total is available for the query shape; says total_results is the rows in this response",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "total_results",
      -  "limit",
      -  "awards"
      -]New value: +[
      +  "total_results",
      +  "limit",
      +  "awards",
      +  "page",
      +  "page_metadata",
      +  "period_note",
      +  "outlays_note",
      +  "outlays_unreported_rows"
      +]
  2. Changed1 schema field changed
    • changedInput schema / properties / agency / description
      Previous value: -"Awarding agency name (e.g., \"Department of Defense\")"New value: +"Awarding agency — full toptier name (\"Department of Defense\") or the common abbreviation (DOD, DHS, VA, HHS, DOE, NASA, GSA, USDA, EPA…), which is expanded for you."
  3. Changed1 schema field changed
    • changedInput schema / properties / set_aside / description
      Previous value: -"Set-aside type filter"New value: +"Small-business set-aside filter. Accepts a family name (\"HUBZone\", \"8(a)\", \"WOSB\", \"EDWOSB\", \"SDVOSB\", \"Veteran\", \"Small business\", \"Indian\"), a FAR code (\"HZC\", \"8AN\", \"SDVOSBC\"), or the literal USAspending description (\"HUBZONE SET-ASIDE\"). Matches both the set-aside and sole-source variants of a family."
  4. Changed3 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "end_date": "2024-12-31",
      -    "keywords": [
      -      "cybersecurity"
      -    ],
      -    "start_date": "2024-01-01"
      -  },
      -  {
      -    "agency": "Department of Defense",
      -    "end_date": "2024-12-31",
      -    "keywords": [
      -      "cloud",
      -      "infrastructure"
      -    ],
      -    "limit": 25,
      -    "naics": "541512",
      -    "start_date": "2023-01-01"
      -  },
      -  {
      -    "agency": "Department of Defense",
      -    "end_date": "2024-12-31",
      -    "limit": 10,
      -    "start_date": "2024-10-01"
      -  }
      -]New value: +[
      +  {
      +    "limit": 10,
      +    "recipient_name": "Lockheed Martin"
      +  },
      +  {
      +    "end_date": "2024-12-31",
      +    "keywords": [
      +      "cybersecurity"
      +    ],
      +    "start_date": "2024-01-01"
      +  },
      +  {
      +    "agency": "Department of Defense",
      +    "end_date": "2024-12-31",
      +    "keywords": [
      +      "cloud",
      +      "infrastructure"
      +    ],
      +    "limit": 25,
      +    "naics": "541512",
      +    "start_date": "2023-01-01"
      +  },
      +  {
      +    "agency": "Department of Defense",
      +    "end_date": "2024-12-31",
      +    "limit": 10,
      +    "start_date": "2024-10-01"
      +  }
      +]
    • addedInput schema / properties / recipient_name
      Added value: +{
      +  "description": "Contractor/recipient name (e.g., \"Lockheed Martin\"). Use for awards won by a company; do not put company names in keywords.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "start_date",
      -  "end_date"
      -]New value: +[]
  5. Changed2 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "end_date": "2024-12-31",
      -    "keywords": [
      -      "cybersecurity"
      -    ],
      -    "start_date": "2024-01-01"
      -  },
      -  {
      -    "agency": "Department of Defense",
      -    "end_date": "2024-12-31",
      -    "keywords": [
      -      "cloud",
      -      "infrastructure"
      -    ],
      -    "limit": 25,
      -    "naics": "541512",
      -    "start_date": "2023-01-01"
      -  }
      -]New value: +[
      +  {
      +    "end_date": "2024-12-31",
      +    "keywords": [
      +      "cybersecurity"
      +    ],
      +    "start_date": "2024-01-01"
      +  },
      +  {
      +    "agency": "Department of Defense",
      +    "end_date": "2024-12-31",
      +    "keywords": [
      +      "cloud",
      +      "infrastructure"
      +    ],
      +    "limit": 25,
      +    "naics": "541512",
      +    "start_date": "2023-01-01"
      +  },
      +  {
      +    "agency": "Department of Defense",
      +    "end_date": "2024-12-31",
      +    "limit": 10,
      +    "start_date": "2024-10-01"
      +  }
      +]
    • changedInput schema / required
      Previous value: -[
      -  "keywords",
      -  "start_date",
      -  "end_date"
      -]New value: +[
      +  "start_date",
      +  "end_date"
      +]
  6. Changed2 schema fields changed
    • changedInput schema / properties / keywords / description
      Previous value: -"Search keywords (e.g., [\"cybersecurity\", \"cloud\"])"New value: +"Search keywords (e.g., [\"cybersecurity\", \"cloud\"] or [\"goods\", \"services\"])"
    • addedInput schema / properties / state
      Added value: +{
      +  "description": "Place-of-performance US state, 2-letter code (e.g., \"MD\", \"TX\"). Filters to contracts performed in that state.",
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "awards": {
      +      "description": "List of matching contract awards",
      +      "items": {
      +        "properties": {
      +          "award_amount": {
      +            "description": "Total award amount in dollars",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "award_id": {
      +            "description": "Unique award identifier",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "awarding_agency": {
      +            "description": "Name of the awarding agency",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "awarding_sub_agency": {
      +            "description": "Sub-agency that awarded the contract",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "contract_type": {
      +            "description": "Type of contract award",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "description": {
      +            "description": "Award description",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "end_date": {
      +            "description": "Award end date",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "naics_code": {
      +            "description": "NAICS industry code",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "recipient_name": {
      +            "description": "Name of the contractor/recipient",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "start_date": {
      +            "description": "Award start date",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "total_outlays": {
      +            "description": "Total amount paid out",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "award_id",
      +          "recipient_name",
      +          "award_amount",
      +          "total_outlays",
      +          "start_date",
      +          "end_date",
      +          "awarding_agency",
      +          "awarding_sub_agency",
      +          "description",
      +          "naics_code",
      +          "contract_type"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "limit": {
      +      "description": "Number of results returned",
      +      "type": "number"
      +    },
      +    "total_results": {
      +      "description": "Total number of matching awards",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "total_results",
      +    "limit",
      +    "awards"
      +  ],
      +  "type": "object"
      +}
  8. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "end_date": "2024-12-31",
      +    "keywords": [
      +      "cybersecurity"
      +    ],
      +    "start_date": "2024-01-01"
      +  },
      +  {
      +    "agency": "Department of Defense",
      +    "end_date": "2024-12-31",
      +    "keywords": [
      +      "cloud",
      +      "infrastructure"
      +    ],
      +    "limit": 25,
      +    "naics": "541512",
      +    "start_date": "2023-01-01"
      +  }
      +]
  9. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantial non-obvious behavior: date windows select awards ACTIVE in the period rather than signed in it, award_amount is a lifetime obligation that must not be summed per-period, umbrella IDVs land in a separate `idvs` array with `idv_status`, and IDV vs child-order amounts are disjoint so `totals.combined_amount` is the correct total. These are exactly the traps an agent would otherwise fall into.

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?

Purpose is front-loaded and nearly every sentence carries a distinct, actionable caveat (paging limit, lifetime amounts, IDV split). The prose is a dense block without visual separation, which slightly hurts scanability, but there is little filler.

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 an 11-parameter, zero-required search tool with an output schema, the description covers the query semantics, paging limits, the IDV/child-order split, and the two highest-risk misinterpretations (lifetime amounts, active-window dates). An agent can call this correctly without further exploration.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema lacks — notably that date filters mean 'active in window' rather than 'signed in window', and the outlays_reported caveat for DoD awards. Much of the recipient_name matching detail it restates is already in the schema, keeping it from a 5.

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

Purpose5/5

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

The first sentence names a specific verb and resource (search federal procurement contracts/awards) and scopes it to goods and services, immediately distinguishing it from spending-aggregation siblings. It further differentiates itself by explaining that keywords searches award descriptions, not contractor identity, which no other statement covers.

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?

Explicit guidance on recipient_name ('contracts won by Lockheed Martin') vs keywords, on optional dates defaulting to 12 months for 'recent' questions, and on paging via `page`. It does not name a sibling alternative or state when a different usa_* tool would be better, so it falls short of a 5.

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.