Skip to main content
Glama

Search past awards

search_awards
Read-onlyIdempotent

Use this when the user asks who won government contracts or grants: past awards by NAICS, agency, state, awardee name or UEI, with amounts and dates.

Filters: type (contract_award, grant_award or any), naics (up to 10 codes), agency (a name; the note says which agency it matched), state, awardee (part of a name), uei, keyword (matched in the title; a grant award's title is its recipient's name), awarded_within_days (1 to 1095, default 365), limit (1 to 50, default 20). If has_more is true, call again with cursor=next_cursor and the same filters. Example: naics="541512", agency="Department of Veterans Affairs". Pass several NAICS codes in one call.

Award records may be incomplete, so say so. Head a grant award with its awardee name and CFDA number, not its title. Pass an awardee's uei to get_company for its full history.

Print each award's url and source_url as markdown links.

Do not use for open opportunities to bid on (search_contracts, search_grants) or for one firm's history when its UEI is known (get_company).

Input Schema

NameRequiredDescriptionDefault
ueiNoThe awardee's 12-character UEI.
typeNocontract_award (federal contracts), grant_award, or any (both).any
limitNoNumber of results to return, 1 to 50.
naicsNoUp to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A record matches on its own codes (matched_naics says which). Unknown codes are ignored.
stateNoTwo-letter US state code of the place of performance.
agencyNoAgency name, e.g. 'Department of Veterans Affairs'; matched to the closest MatchAwards agency, which the result note names.
cursorNonext_cursor from the previous response. Pass it with the same filters to get the next page.
awardeeNoPart of the awardee's name, 2 to 100 characters.
keywordNo2 to 100 characters matched against the title only.
awarded_within_daysNoOnly awards from the last N days, 1 to 1095 (default 365).

Output Schema

NameRequiredDescriptionDefault
noteNo
as_ofNoWhen the API generated the results (ISO time).
resultsYes
warningNoSet when paging stopped early; the results so far are still valid.
has_moreYestrue: call again with cursor=next_cursor and the same filters.
next_cursorNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description correctly spends its words on what annotations cannot express: pagination behavior ('If has_more is true, call again with cursor=next_cursor and the same filters'), a data-quality caveat ('Award records may be incomplete, so say so'), and the agency-name fuzzy-match note. That is substantive behavioral context beyond the structured fields.

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?

Front-loaded purpose sentence, then a tight filter inventory with defaults, then pagination, then caveats and routing exclusions. It is long, but every block carries distinct information and the trailing markdown-link instruction is a concrete output requirement rather than 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?

An output schema exists, so return values rightly go unexplained, yet the description still covers the operational essentials an agent needs: has_more/next_cursor continuation, ambiguous-agency handling, incomplete-record disclosure, and the sibling boundary. For a 10-parameter open search with 0 required parameters, that is complete.

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 does not: a grant award's title is its recipient's name (which changes how keyword behaves), the matched_naics/matched-agency result notes, and the guidance to batch several NAICS codes in one call. It re-enumerates the filters somewhat redundantly, keeping it at 4 rather than 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?

'past awards by NAICS, agency, state, awardee name or UEI, with amounts and dates' is a specific verb+resource+filter scope, and the description explicitly contrasts itself with search_contracts, search_grants and get_company, so it is distinguishable from siblings without opening a schema.

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 states the triggering condition ('when the user asks who won government contracts or grants') and names the exclusions with the alternatives to use instead ('Do not use for open opportunities to bid on (search_contracts, search_grants) or for one firm's history when its UEI is known (get_company)'). Nothing is left to inference.

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.