usaspending-mcp-server
Server Details
Access US federal award, recipient, agency, and spending analytics data from USAspending.gov.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/usaspending-mcp-server
- GitHub Stars
- 2
- Server Listing
- usaspending-mcp-server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.4/5 across 18 of 18 tools scored. Lowest: 3.9/5.
Each tool targets a distinct entity or operation: agency, award, subaward, transaction, federal account, recipient, and various spending breakdowns. Even similar-sounding tools like get_award_federal_accounts vs get_federal_account are clearly separated by their core purpose (award funding sources vs account budget details).
Almost all tools follow the usaspending_<verb>_<object> pattern (e.g., get_award, search_recipients). The spending_* series breaks the verb-noun convention but is internally consistent. Minor deviation lowers the score slightly.
At 18 tools, this is on the higher end of reasonable but each tool maps to a distinct USAspending API endpoint and covers a different aspect of federal spending. The count is justified by the breadth of the domain, though it feels slightly heavy.
The surface covers award search/detail, agency navigation, federal accounts, recipients, subawards, transactions, IDVs, and multiple spending aggregations (category, geography, time, disaster). No obvious dead ends: all ID-producing tools have corresponding lookup tools, and common workflows like award→federal account→breakdown are fully supported.
Available Tools
18 toolsusaspending_autocomplete_filtersAutocomplete Codes and NamesARead-onlyIdempotentInspect
Look up valid code values for filter fields by searching free-text descriptions. Use the type parameter to select the lookup table: naics (NAICS industry codes), psc (product/service codes), cfda (CFDA/Assistance Listing program numbers), awarding_agency (agency names and IDs), or recipient (recipient names with UEI/DUNS). Call this before filtering awards when you know a description but not the exact code. Returns matching codes and names for use in other tool filters.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Lookup table to search: naics (industry codes), psc (product/service codes), cfda (assistance programs), awarding_agency (agency names), recipient (recipient names) | |
| limit | No | Maximum number of results to return (1–500), enforced client-side. The recipient lookup unions three upstream match buckets (name, UEI, DUNS) and can return up to 3x this value, so its results are capped to this limit before returning — the cap keeps them in bucket order, so name matches fill the page first and identifier matches appear only in whatever room is left. To resolve a specific UEI or DUNS, pass the identifier itself as search_text. naics/psc/cfda/awarding_agency honor this limit exactly. | |
| search_text | Yes | Free-text search string — use a description, keyword, or partial code to find matches |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit that was applied. |
| type | Yes | Lookup table searched |
| query | Yes | Search text sent to the autocomplete API |
| shown | No | Number of results returned. |
| total | Yes | Number of results returned |
| results | Yes | Matching codes and names |
| truncated | No | True when results were capped at the limit. |
| lookup_type | Yes | Lookup table that was searched |
| search_text | Yes | Search text used |
| result_count | Yes | Number of matching results returned |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safe read-only nature is established. The description adds that the type parameter selects the lookup table and that results are filtered codes/names usable in other filters. It does not contradict annotations and provides useful context about the tool's role, though it omits deeper behavioral quirks (e.g., the recipient limit behavior) which are documented in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences. The first sentence states the action and object; the second sentence lists the type options and the tool's usage context. There is zero filler, and it is front-loaded with the primary verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose (look up valid codes), the input type options, when to use it (before filtering), and what it returns (codes and names). An output schema is present, so return structure is documented elsewhere. The only minor gap is not mentioning the recipient-specific limit cap, but that is thoroughly documented in the limit parameter schema, so the description is complete for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a detailed description: type lists all enum values with explanations, search_text is defined as free-text, and limit includes a thorough explanation of its default, range, and special recipient behavior. The description merely repeats the type enum without adding new semantics, so it does not significantly exceed what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Look up valid code values for filter fields by searching free-text descriptions.' It enumerates the five distinct lookup tables (naics, psc, cfda, awarding_agency, recipient), making the tool's function concrete. This clearly distinguishes it from sibling tools like search_awards or get_agency, which focus on retrieving award data rather than suggesting filter codes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs when to use the tool: 'Call this before filtering awards when you know a description but not the exact code.' It also explains the output's purpose: 'Returns matching codes and names for use in other tool filters.' While it doesn't explicitly name alternative tools or say when not to use it, the contextual guidance is clear and sufficient for a lookup utility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_disaster_spendingDisaster and Emergency SpendingARead-onlyIdempotentInspect
Fetch disaster and emergency supplemental spending (COVID-19, hurricanes, infrastructure law, etc.) broken down by agency, CFDA assistance program, recipient, or geography. Use the dimension parameter to select the breakdown axis: overview (top-level totals), agency, cfda, recipient, or geography. Filter by DEF codes (Disaster/Emergency Funding codes) to isolate a specific emergency appropriation. DEF codes appear in usaspending_get_award account_obligations_by_defc and usaspending_get_agency def_codes fields.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| limit | No | Maximum results per page (1–100). Applies to the agency, cfda, and recipient dimensions; ignored for overview and geography, which are not paginated. | |
| filters | No | Filters — def_codes is required for all non-overview dimensions (agency, cfda, recipient, geography) | |
| dimension | Yes | Breakdown axis: overview (top-level totals and DEF code funding), agency (by awarding agency), cfda (by assistance program), recipient (by recipient), geography (by state/county) | |
| spending_type | No | Data type for the agency and recipient dimensions: award (award-level obligations and outlays) or total (includes direct non-award spending). Ignored for cfda and overview; the geography dimension is not user-controllable and always reports obligation-based amounts. | award |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The result-set ceiling the upstream applied. |
| shown | No | Number of results returned on this page. |
| notice | No | Caveat explaining a capped total and how to bring the set under the cap. |
| results | Yes | Breakdown results (empty for overview dimension) |
| overview | No | Top-level overview totals (dimension=overview only) |
| dimension | Yes | Breakdown dimension returned |
| truncated | No | True when the upstream capped the reachable result set rather than counting it. |
| totalCount | No | Total items for paginated dimensions (when available) |
| current_page | No | Current page (non-overview dimensions) |
| has_next_page | No | Whether there are more pages |
| page_metadata | No | Pagination metadata (non-overview dimensions) |
| spending_type | Yes | Data type returned — award/total for agency, cfda, and recipient; obligation for geography; spending for overview |
| applied_dimension | Yes | Breakdown dimension applied |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and open-world behavior, so the description need not repeat those. It adds meaningful behavioral details: breakdown axes, DEF code filtering, and cross-references to other tools' fields. The HTTP 422 error for missing DEF codes is disclosed in the schema, not the description, but this is acceptable since the schema is part of the tool definition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each earning its place: purpose, dimension explanation, DEF code filtering, and cross-reference to other tools. It is front-loaded with the core action and includes no filler, making it easy for an agent to quickly grasp.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, nested objects, output schema), the description covers the essential usage points: what it fetches, dimensions, and DEF code sourcing. It does not mention non-disaster alternatives, but the schema and output schema cover the remaining invocation details, making it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the dimension parameter's allowed values and the role of DEF codes in filtering, reinforcing the schema's descriptions and helping agents pick correct parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches disaster/emergency supplemental spending broken down by multiple dimensions, and explicitly mentions COVID-19, hurricanes, and infrastructure law. It distinguishes itself from sibling tools by focusing on DEF codes and disaster-specific spending, avoiding confusion with general spending tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (for disaster/emergency spending) and explains the importance of the dimension parameter and DEF codes. It does not explicitly name alternative tools or state exclusions, but the context strongly implies usage scenarios, and it references where DEF codes can be found in other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_get_agencyGet Agency OverviewARead-onlyIdempotentInspect
Fetch an agency's fiscal-year overview including mission, budgetary resources, obligation and outlay totals (for the most recent fiscal year), sub-agency count, and DEF codes for disaster/emergency funding. Also returns a paginated sub-agency breakdown with obligation and transaction counts. Accepts either a 3-digit toptier_code (e.g., 097 for DoD, 012 for Agriculture) or an agency_slug (e.g., department-of-defense) — both appear in usaspending_list_agencies results and award search results.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Sub-agency breakdown page (1-based, 10 per page). Use with sub_agency_page_metadata.has_next to page through the full list. | |
| agency_slug | No | URL-friendly agency slug (e.g., department-of-defense) — from usaspending_list_agencies or award search results. Use either toptier_code or agency_slug, not both. | |
| toptier_code | No | 3-digit toptier agency code (e.g., 097, 012) — from usaspending_list_agencies. Use either toptier_code or agency_slug, not both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | Agency full name |
| notice | No | Guidance when the sub-agency breakdown is truncated — how to page for the rest. Absent when the last page is shown. |
| mission | No | Agency mission statement |
| website | No | Agency website URL |
| agency_id | No | Internal agency ID |
| def_codes | No | Disaster/Emergency Funding (DEF) codes applicable to this agency |
| fiscal_year | No | Fiscal year the budgetary totals below reflect (most recent available) |
| abbreviation | No | Agency abbreviation |
| sub_agencies | No | Sub-agency breakdown within this toptier agency (one page) |
| toptier_code | No | 3-digit toptier agency code |
| outlay_amount | No | Total outlays in USD for the fiscal year |
| sub_agency_page | Yes | Current sub-agency page returned |
| obligated_amount | No | Total amount obligated in USD for the fiscal year |
| sub_agency_total | No | Total sub-agencies across all pages (when available) |
| subtier_agency_count | No | Number of sub-agencies within this toptier agency |
| has_more_sub_agencies | Yes | Whether more sub-agency pages are available |
| sub_agency_page_metadata | No | Pagination metadata for the sub-agency breakdown |
| budgetary_resources_amount | No | Total budgetary resources in USD for the fiscal year |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds value by disclosing that data is for 'the most recent fiscal year', that the sub-agency breakdown is paginated, and that identifiers appear in usaspending_list_agencies results. No contradictions with annotations are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and follows with identifier guidance. No fluff or repetition—every sentence earns its place, and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description doesn't need to explain returns. It covers the main usage aspects: what data is returned, how identifiers are obtained, and pagination. It could mention error cases or fallback behavior if no identifier is provided, but for a read-only, idempotent tool, this is nearly complete. A 4 is appropriate due to the slight omission of what happens when neither identifier is supplied (0 required params).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with detailed descriptions for all 3 parameters, so the baseline is 3. The description adds extra meaning with concrete examples (097, 012, department-of-defense) and reinforces the mutual exclusivity of toptier_code and agency_slug. This exceeds the schema alone, thus a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: 'Fetch an agency's fiscal-year overview' with specific elements (mission, budgetary resources, obligations, outlays, sub-agency count, DEF codes), and distinguishes it from siblings like usaspending_list_agencies by focusing on a single agency's details. The verb 'Fetch' and resource 'agency overview' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives usage context by explaining the two accepted identifiers (toptier_code and agency_slug) and points to usaspending_list_agencies as the source for these identifiers. It also clarifies the paginated nature of the sub-agency breakdown, implying when to use page parameter. However, it doesn't explicitly contrast with alternative tools for similar lookups, so it stops 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.
usaspending_get_awardGet Award DetailsARead-onlyIdempotentInspect
Fetch full details of a federal award by its generated unique award ID. Returns contract or assistance award data including recipient info, agency hierarchy, period of performance, place of performance, funding account linkages (account_obligations_by_defc), parent IDV information, and subaward count. Use generated_internal_id values from usaspending_search_awards as input. Recipient hashes can be passed to usaspending_get_recipient; NAICS codes can be used in usaspending_search_awards filters. For IDV-category awards (category="idv"), use usaspending_get_idv_awards to list the child contracts and task/delivery orders placed under them.
| Name | Required | Description | Default |
|---|---|---|---|
| award_id | Yes | Generated unique award ID (e.g., CONT_AWD_FA862118F6251_9700_FA862115D6276_9700) — use generated_internal_id from usaspending_search_awards |
Output Schema
| Name | Required | Description |
|---|---|---|
| cfda | No | CFDA program (grants/assistance) |
| fain | No | Federal Award Identification Number (for assistance) |
| piid | No | Procurement Instrument Identifier (for contracts) |
| type | No | Award type code |
| naics | No | NAICS code (contracts) |
| category | No | Award category (contract, grant, direct_payment, loan, idv, other) |
| recipient | No | Recipient details |
| date_signed | No | Date award was signed (YYYY-MM-DD) |
| description | No | Award description |
| parent_award | No | Parent IDV information (contracts only) |
| total_outlays | No | Total outlay amount in USD |
| funding_agency | No | Funding agency hierarchy |
| subaward_count | No | Number of subawards; use with usaspending_get_award_subawards |
| awarding_agency | No | Awarding agency hierarchy |
| total_obligation | No | Total obligation amount in USD |
| type_description | No | Human-readable award type |
| place_of_performance | No | Place of performance |
| period_of_performance | No | Period of performance dates |
| product_or_service_code | No | Product or service code (contracts) |
| generated_unique_award_id | No | Generated unique award ID |
| base_and_all_options_value | No | Base and all options value in USD (contracts) |
| account_obligations_by_defc | No | Funding breakdown by Disaster/Emergency Funding (DEF) code — links to disaster appropriations |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, lowering the burden. The description adds meaningful context by listing the specific data fields returned (funding account linkages, subaward count, parent IDV info) and noting the input is a generated ID. It does not detail error behavior or rate limits, but for a read-only fetch, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with each sentence contributing value: purpose, returned fields, input source, and sibling-tool differentiations. No redundant or unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need not be described. The description covers the main use case, input source, and the key exclusion (IDV category), while cross-referencing relevant siblings. It is complete for a tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and already explains the award_id parameter with an example and source instruction. The description repeats the same guidance without adding new semantic details, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Fetch full details of a federal award by its generated unique award ID.' It clearly distinguishes from siblings by enumerating the returned content (recipient info, agency hierarchy, period of performance, etc.) and explicitly excluding IDV awards, which are handled by a different tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage instructions: use generated_internal_id from usaspending_search_awards as input, and for IDV-category awards use usaspending_get_idv_awards instead. It also mentions pointer to usaspending_get_recipient for recipient hashes, offering clear when-to-use context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_get_award_federal_accountsGet Award Federal AccountsARead-onlyIdempotentInspect
List the Treasury federal accounts that funded an award, with the amount obligated from each and the funding agency behind it. This is the award → appropriation link: each row returns federal_account (AGENCY-MAIN format, e.g. 080-0120) to chain into usaspending_get_federal_account for the account budget detail. The award_id must be a generated_unique_award_id — from usaspending_search_awards (generated_internal_id field) or usaspending_get_award. Distinct from usaspending_get_award account_obligations_by_defc, which breaks funding down by Disaster/Emergency Funding code rather than by account. An award_id that does not exist returns an empty list rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| limit | No | Maximum results per page (1–100) | |
| award_id | Yes | Award generated_unique_award_id (e.g., CONT_AWD_GSFC0198106DNAS526555_8000_-NONE-_-NONE-) — use generated_internal_id from usaspending_search_awards or generated_unique_award_id from usaspending_get_award |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when results are empty — the award_id may not exist or may have no account linkage. Absent when results are present. |
| results | Yes | Federal accounts funding this award |
| award_id | Yes | Award ID queried |
| totalCount | No | Total number of funding accounts across all pages (when available) |
| current_page | Yes | Current page returned |
| has_next_page | Yes | Whether there are more pages of funding accounts |
| page_metadata | Yes | Pagination metadata |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly, idempotent, and closed world, which already establish safety. The description adds behavioral context: the output format (AGENCY-MAIN with example), the linkage intent, and the empty-list behavior for invalid award IDs. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences that front-load the core purpose, then add chaining guidance, a sibling distinction, and an important edge case. Every sentence adds value without redundant fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's role as a linking step, the description fully covers how to obtain the required award_id, what the output represents, how to use the output downstream, and how it differs from a similar tool. Combined with rich schema and annotations, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all three parameters. The description repeats the award_id source guidance found in the schema and adds an example, but does not significantly enhance meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and identifies the resource as 'Treasury federal accounts that funded an award', with amount and funding agency. It clearly distinguishes from sibling usaspending_get_award account_obligations_by_defc by noting the different breakdown (by account vs. by DEFC).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: the award_id must be a generated_unique_award_id from specific sources (usaspending_search_awards or usaspending_get_award), and the result is meant to chain into usaspending_get_federal_account. It also names an alternative tool and describes the edge case of a non-existent award returning an empty list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_get_award_subawardsGet Award SubawardsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| sort | No | Sort field for subawards | action_date |
| limit | No | Maximum subawards per page (1–100) | |
| order | No | Sort direction | desc |
| award_id | Yes | Generated unique award ID (generated_internal_id from usaspending_search_awards) |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no subawards were returned — suggests checking subaward_count from usaspending_get_award first. Absent when results are present. |
| results | Yes | List of subawards under this prime award |
| award_id | Yes | Prime award ID queried |
| totalCount | No | Total subaward count across all pages (when available) |
| current_page | Yes | Current page returned |
| has_next_page | Yes | Whether there are more pages of subawards |
| page_metadata | Yes | Pagination metadata |
| prime_award_id | Yes | Prime award ID whose subawards were listed |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable context: it explains the subaward layer, lists the output fields, and mentions the prerequisite check. This goes beyond what annotations provide and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the action and resource, and contains no fluff. Every sentence adds information: the purpose, the data revealed, and a usage prerequisite.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, a known output schema, and annotations indicating read-only/idempotent behavior, the description is sufficient. It covers the purpose, the output summary, and a critical usage precondition, making it complete for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description only indirectly references award_id via 'under a prime federal award' and does not add extra parameter-level meaning. Baseline 3 is appropriate given the strong schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and resource 'subaward contracts or grants under a prime federal award', clearly distinguishing from sibling tools by explaining that it reveals the sub-contractor/grantee layer. It avoids ambiguity with tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to check subaward_count on usaspending_get_award first to confirm subawards exist before calling. This provides a clear precondition and an implied when-not: do not call if subaward_count is zero. It effectively tells the agent when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_get_award_transactionsGet Award TransactionsARead-onlyIdempotentInspect
List individual transactions (contract modifications, grant amendments) on a federal award. Each transaction represents a change event — obligation modifications, performance period extensions, scope changes, etc. Use this to trace the spending history and obligation changes over the life of an award. Award IDs come from usaspending_search_awards (generated_internal_id field).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| sort | No | Sort field for transactions | action_date |
| limit | No | Maximum transactions per page (1–100) | |
| order | No | Sort direction | desc |
| award_id | Yes | Generated unique award ID (generated_internal_id from usaspending_search_awards) |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no transactions were returned — helps confirm the award_id is a valid generated_internal_id. Absent when results are present. |
| results | Yes | List of transactions for this award |
| award_id | Yes | Award ID queried |
| totalCount | No | Total transaction count across all pages (when available) |
| current_page | Yes | Current page returned |
| has_next_page | Yes | Whether there are more pages of transactions |
| page_metadata | Yes | Pagination metadata |
| queried_award_id | Yes | Award ID whose transactions were listed |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds meaningful behavioral context: each transaction represents a change event (obligation modifications, performance period extensions, scope changes). This goes beyond the structured annotations to explain the nature of the data. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences: what the tool lists, what a transaction means, and when to use it—plus the one key provenance tip. Every sentence earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a rich output schema, idempotent/read-only annotations, and only one required parameter, the description fully covers the essential decision points: what the tool does, what the data represents, when to use it, and how to obtain the required award_id. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra value by clarifying that the award_id parameter is populated from the generated_internal_id field of usaspending_search_awards, which is not in the schema description. The remaining parameters are adequately described in the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('List') and a precise resource ('individual transactions on a federal award'), immediately distinguishing it from siblings like get_award and get_award_subawards. It further clarifies the scope by naming contract modifications and grant amendments as examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states clearly when to use the tool: to trace spending history and obligation changes over the life of an award. It also provides essential upstream guidance by telling the user that award IDs come from usaspending_search_awards (generated_internal_id). It does not explicitly mention when not to use it, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_get_federal_accountGet Federal AccountARead-onlyIdempotentInspect
Fetch a federal account's budget data: total obligations, gross outlays, and budgetary resources, plus the per-Treasury-Account-Symbol (TAS) component breakdown in children. Federal accounts connect appropriations law to actual agency spending. Account codes come from usaspending_search_federal_accounts (its account_number output field) or usaspending_get_award_federal_accounts (its federal_account field), and are formatted as AGENCY-MAIN (e.g., 097-0100 for DoD Operation and Maintenance). For obligations broken down by program activity or object class, use usaspending_get_federal_account_breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| account_code | Yes | Federal account code in AGENCY-MAIN format (e.g., 097-0100). Returned as account_number by usaspending_search_federal_accounts and as federal_account by usaspending_get_award_federal_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| children | No | Treasury Account Symbol (TAS) components that make up this federal account, each with its own obligated, outlay, and budgetary-resource amounts. Omitted when the upstream returns none. |
| bureau_name | No | Bureau name within the agency |
| fiscal_year | No | Fiscal year of the financial data |
| account_title | No | Full account title |
| agency_identifier | No | Agency identifier code |
| main_account_code | No | Main account code |
| parent_agency_name | No | Managing parent agency name |
| federal_account_code | No | Federal account code |
| total_obligated_amount | No | Total obligated amount in USD |
| total_budgetary_resources | No | Total budgetary resources in USD |
| total_gross_outlay_amount | No | Total gross outlay amount in USD |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful behavioral detail about the response structure, including the per-TAS children breakdown and the connection between federal accounts and appropriations law. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: first states the purpose with key data items, second provides domain context, third covers sourcing and alternative. It is front-loaded and every sentence earns its place with no redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter, read-only, with an output schema), the description sufficiently covers what the tool does, where the parameter comes from, and which sibling tool to use for other breakdowns. No critical gaps remain for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has a 100%-coverage description for account_code, including format, example, and where to find it. The description repeats most of this and adds only a minor example ('DoD Operation and Maintenance'), so it does not significantly expand parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Fetch' and clearly identifies the resource as 'a federal account's budget data' with enumerated components (obligations, outlays, budgetary resources). It also distinguishes from sibling tools by explicitly mentioning the breakdown tool for alternate needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to use this tool versus the alternative: 'For obligations broken down by program activity or object class, use usaspending_get_federal_account_breakdown.' It also tells the agent where account codes come from (search and award federal accounts tools), which is actionable sourcing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_get_federal_account_breakdownGet Federal Account BreakdownARead-onlyIdempotentInspect
Fetch a federal account's obligations broken down by program activity (what the money funds) or object class (what it buys — personnel, supplies, contracts). Use the dimension parameter to select the axis. Account codes are AGENCY-MAIN format and come from usaspending_search_federal_accounts (its account_number output field), usaspending_get_award_federal_accounts (its federal_account field), or usaspending_get_federal_account. Paginated with an honest total count. For the account's own metadata and top-level totals, use usaspending_get_federal_account.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| limit | No | Maximum results per page (1–100) | |
| dimension | Yes | Breakdown axis: program_activity (obligations by the program the funds support) or object_class (obligations by the category of goods/services purchased) | |
| account_code | Yes | Federal account code in AGENCY-MAIN format (e.g., 097-0100). Returned as account_number by usaspending_search_federal_accounts and as federal_account by usaspending_get_award_federal_accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Recovery hint when results are empty — the account code may not exist or may have no obligations on this axis. Absent when results are present. |
| results | Yes | Breakdown rows for the requested dimension |
| dimension | Yes | Breakdown dimension returned |
| totalCount | No | Total number of breakdown rows across all pages (when available) |
| account_code | Yes | Federal account code queried |
| current_page | Yes | Current page returned |
| has_next_page | Yes | Whether there are more pages of breakdown rows |
| page_metadata | Yes | Pagination metadata |
| applied_dimension | Yes | Breakdown dimension applied |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, covering the safety profile. The description adds useful behavioral context: pagination with an 'honest total count' and the two distinct breakdown axes, which go beyond the annotations. It does not describe edge cases or rate limits, but the annotations and output schema reduce the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact—two sentences—yet dense with information: core action, dimension semantics, account code sources, pagination behavior, and an explicit pointer to an alternative tool. Every clause earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Considering the tool's 4 parameters, 1 enum, output schema, and sibling context, the description covers purpose, usage alternatives, parameter semantics, and behavioral notes (pagination). It also tells users where to find account codes, which is critical for correct invocation. There is no obvious gap given the output schema already documents return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the baseline is 3. The description adds value by elaborating on the dimension parameter ('program activity (what the money funds) vs object class (what it buys — personnel, supplies, contracts)') and clarifying the account_code format (AGENCY-MAIN) and its provenance from specific sibling tools. This enriches the schema descriptions meaningfully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Fetch') and a precise resource ('a federal account's obligations broken down by program activity or object class'), immediately clarifying what the tool does. It also distinguishes itself from the sibling tool usaspending_get_federal_account by explicitly stating that the sibling is for metadata and top-level totals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage guidance: use this tool for breakdowns by program activity or object class, and explicitly directs users to usaspending_get_federal_account for metadata/totals. It also tells users where to obtain account codes from three sibling tools, explaining the exact output fields to use, which is practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_get_idv_awardsGet IDV Child AwardsARead-onlyIdempotentInspect
List child contracts and task/delivery orders placed under an IDV (Indefinite Delivery Vehicle) award. Each row includes the generated_unique_award_id to chain into usaspending_get_award for full detail. The award_id must be the generated_unique_award_id of the parent IDV — obtainable from usaspending_search_awards (generated_internal_id field) or from usaspending_get_award. IDV category awards returned by usaspending_get_award have child orders accessible via this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| sort | No | Field to sort child awards by (e.g., obligated_amount, period_of_performance_start_date) | obligated_amount |
| type | No | Type of child awards to list: child_awards = task/delivery orders, child_idvs = sub-IDVs, grandchild_awards = orders under sub-IDVs | child_awards |
| limit | No | Maximum results per page (1–100) | |
| order | No | Sort direction | desc |
| award_id | Yes | Parent IDV generated_unique_award_id (e.g., CONT_IDV_NNK14MA74C_8000) — use generated_internal_id from usaspending_search_awards or generated_unique_award_id from usaspending_get_award |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The per-page limit that was applied. |
| shown | No | Number of child awards returned on this page. |
| notice | No | Recovery hint when results are empty — the award may have no children of the requested type. Absent when results are present. |
| results | Yes | Child awards placed under this IDV |
| award_id | Yes | Parent IDV award ID queried |
| truncated | No | True when this page was full and more child awards may remain beyond it. |
| current_page | Yes | Current page returned |
| has_next_page | Yes | Whether more pages of child awards may remain — set on a full page even when the upstream flag reports none. |
| page_metadata | Yes | Pagination metadata (no total count available from this endpoint) |
| parent_award_id | Yes | Parent IDV award ID whose children were listed |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds valuable behavioral context: each row includes generated_unique_award_id for chaining, the award_id must be the parent IDV's generated ID, and the source qualification from get_award. No contradictions with annotations, and the added info helps the agent understand the tool's role.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly-packed sentences each carry distinct information: what the tool lists, how to chain, and how to obtain the required ID. No redundancy or filler; front-loaded with the action and object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and strong annotations, the description covers the essential operational context: it defines the input requirement, relates to the parent award tool, and clarifies child type distinctions. No missing behavioral aspects that would prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, but description enriches award_id with concrete format examples and provenance instructions (generated_internal_id vs generated_unique_award_id). It also clarifies the meaning of the type enum values. This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies the tool as listing child contracts and task/delivery orders under an IDV award, with a specific verb and resource. It distinguishes itself from sibling tools like get_award (parent detail) and search_awards (broad search) by focusing on the child-award relationship. The mention of chaining via generated_unique_award_id clarifies its complementary role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context: use when the parent award is an IDV, and explains how to obtain the required award ID from usaspending_search_awards or usaspending_get_award. It does not explicitly state when not to use it (e.g., for subawards or transactions), so it falls short of full alternative differentiation, but the guidance is sufficient for agent selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_get_recipientGet Recipient ProfileARead-onlyIdempotentInspect
Fetch a recipient's full profile including address, business type codes, parent organization, alternate names, and total transaction and loan amounts. Recipient IDs are UUID hashes with a level suffix (-P parent, -C child, -R standalone) from usaspending_search_recipients or usaspending_get_award. Optionally scope the totals to a specific fiscal year and award type. UEI and DUNS values can be used to cross-reference with SAM.gov and SEC EDGAR.
| Name | Required | Description | Default |
|---|---|---|---|
| award_type | No | Award type category to scope award totals | |
| fiscal_year | No | Fiscal year to scope award totals (e.g., 2024) | |
| recipient_id | Yes | Recipient hash ID (UUID with level suffix, e.g., b97d19b0-833c-8d8f-3a2c-157d04ea55ef-P) — from usaspending_search_recipients or usaspending_get_award |
Output Schema
| Name | Required | Description |
|---|---|---|
| uei | No | Unique Entity Identifier (SAM.gov) |
| duns | No | DUNS number (legacy) |
| name | No | Recipient legal business name |
| location | No | Recipient address |
| parent_uei | No | Parent organization UEI |
| parent_name | No | Parent organization name |
| recipient_id | No | Recipient hash ID |
| business_types | No | Business type codes |
| alternate_names | No | Alternate business names |
| recipient_level | No | Hierarchy level: P = parent, C = child, R = standalone |
| total_transactions | No | Total number of award transactions |
| total_transaction_amount | No | Total transaction (award) amount in USD; scoped by fiscal_year/award_type when provided |
| total_face_value_loan_amount | No | Total face value of loans in USD |
| total_face_value_loan_transactions | No | Number of face-value loan transactions |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description carries a lower burden. It adds valuable context beyond annotations by explaining the UUID level suffixes (-P, -C, -R), the ability to cross-reference UEI/DUNS with external sites (SAM.gov, SEC EDGAR), and the optional scoping behavior for totals. This enriches the agent's understanding of the tool's behavior without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, followed by ID format guidance and optional scoping/cross-referencing details. Every sentence earns its place, with no redundant or extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 need not detail return values. It covers the key workflow: obtaining the recipient ID from specific sources, what the profile includes, and optional parameter usage. For a single-recipient lookup tool with 3 parameters (1 required), this is complete and self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds semantic meaning by explaining the recipient_id format (UUID hash with level suffix) and its source, and by clarifying that fiscal_year and award_type are optional parameters that scope the totals. This goes beyond the schema's individual descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Fetch' and clearly specifies the resource as a 'recipient's full profile' with a concrete list of included fields (address, business type codes, parent organization, alternate names, total transaction and loan amounts). This distinctly differentiates it from sibling tools like usaspending_search_recipients (which finds recipients) and usaspending_get_award (which is award-focused), making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear contextual guidance by stating that recipient IDs originate from usaspending_search_recipients or usaspending_get_award, and that fiscal year and award type can optionally scope the totals. However, it does not explicitly state when not to use this tool or name alternative tools for related scenarios, 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.
usaspending_list_agenciesList Federal AgenciesARead-onlyIdempotentInspect
List all top-tier federal agencies with toptier codes, agency slugs, budget authority amounts, and obligation totals for the current fiscal year. Use this as the entry point for agency navigation — toptier codes and agency slugs are required inputs for usaspending_get_agency and agency-based filters on spending analysis tools.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort field: agency_name (alphabetical), budget_authority_amount, obligated_amount, or outlay_amount | agency_name |
| order | No | Sort direction: asc or desc | asc |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Total number of agencies returned |
| results | Yes | List of top-tier federal agencies with budget and obligation data |
| agency_count | Yes | Total number of top-tier federal agencies returned |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is clear. The description adds behavioral context by specifying the current fiscal year and the nature of the returned data (top-tier agencies with codes, slugs, amounts). This is useful beyond the annotations, though it does not detail pagination or whether all agencies are always included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The first communicates scope and output fields; the second provides strategic usage guidance and links to the dependent tool. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with rich annotations and an output schema, the description fully covers the tool's role in the workflow. It explains what the tool returns, when to use it, and how it connects to other tools, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both 'sort' and 'order' parameters have explicit enums and descriptive text. The description does not add any parameter-level information, but since the schema fully documents them, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'all top-tier federal agencies' with specific fields (toptier codes, agency slugs, budget authority, obligations). It explicitly positions this as the 'entry point for agency navigation,' distinguishing it from sibling tools like usaspending_get_agency and search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says to 'Use this as the entry point for agency navigation' and explains that toptier codes and agency slugs are required for usaspending_get_agency and agency-based filters. This gives explicit when-to-use guidance and points to alternatives, demonstrating strong usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_search_awardsSearch Federal AwardsARead-onlyIdempotentInspect
Search federal awards by keyword, recipient, agency, award type, NAICS code, location, or date range. Returns ranked award summaries including recipient names, amounts, awarding agencies, and generated award IDs for use with usaspending_get_award. Award types: A/B/C/D = contracts, 02/03/04/05 = grants, 06/10 = direct payments, 07/08 = loans, IDV_A/IDV_B/IDV_C/IDV_D/IDV_E = IDVs. Dates must be ISO 8601 (YYYY-MM-DD). Earliest data: 2007-10-01 via search API. DoD contracts have a 90-day publication lag.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). Page-number pagination caps at a 50,000-result offset (page × limit), but the keyset cursor below is only returned while the offset stays under 10,000 — capture the cursor pair before paging past that, or the only way forward is page numbers. | |
| sort | No | Sort field for results | Award Amount |
| limit | No | Maximum results per page (1–100) | |
| order | No | Sort direction | desc |
| filters | No | Optional analytics-style filter object mirroring the shape the spending analytics tools accept, for reusing one filter set across tools. When both this object and the equivalent top-level flat filters are given, this object wins per-field. recipient_id is intentionally not accepted — this endpoint silently ignores it; filter by recipient via recipient_name. | |
| keyword | No | Full-text search across award descriptions, recipient names, and place names | |
| agency_name | No | Filter to a specific awarding agency by name (e.g., "Department of Defense"). Use usaspending_autocomplete_filters type=awarding_agency to find exact names. | |
| naics_codes | No | Filter by NAICS industry codes (e.g., ["541512"]). Use usaspending_autocomplete_filters type=naics to look up codes. | |
| time_period | No | Filter awards by date range (action date) | |
| recipient_name | No | Filter by recipient name (partial match); maps to this endpoint's recipient_search_text. This endpoint has no recipient_id filter — use usaspending_search_recipients to look up a recipient by name. | |
| location_filter | No | Filter by place of performance location. Uses FIPS codes and 2-letter state abbreviations, not place names — use a geocoding server to resolve names to codes first. | |
| award_type_codes | No | Filter by award type codes. All codes must belong to a single group: A/B/C/D (contracts), 02/03/04/05 (grants), 06/10 (direct payments), 07/08 (loans), IDV_A–IDV_E (IDVs). Defaults to contracts. Mixing groups across categories causes a 422 error. | |
| last_record_unique_id | No | Keyset-pagination cursor: the last_record_unique_id from a prior response page_metadata. Provide together with last_record_sort_value. | |
| last_record_sort_value | No | Keyset-pagination cursor: the last_record_sort_value from a prior response page_metadata. Provide together with last_record_unique_id to fetch the next page past the 50,000-result page-number cap. The upstream stops emitting the pair once page × limit reaches 10,000, so take it from a page below that offset. When both cursor fields are supplied, page is ignored. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | Per-page cap (limit) applied to this page. |
| page | Yes | Current page number returned |
| shown | No | Number of awards returned on this page. |
| notice | No | Recovery hint when results are empty — echoes applied filters and suggests how to broaden. Absent when results are present. |
| results | Yes | Matching award summaries |
| has_next | Yes | Whether more results may remain — set on a full page even when the upstream flag reports none. |
| truncated | No | True when this page was capped at `limit` and more results may remain (continue via page or the cursor). |
| page_metadata | Yes | Pagination metadata. This endpoint does not return a total match count; use has_next and the cursor pair to page. |
| applied_keyword | No | Keyword filter applied to this search |
| upstream_messages | No | Notices the USAspending API returned with this response — e.g. a supplied filter it ignored because this endpoint does not support it. Every successful response also carries a standing advisory that search covers 2007-10-01 onward; that advisory is boilerplate, not a verdict on the dates requested. Present whenever the API returns any messages. |
| applied_agency_name | No | Awarding agency name filter applied |
| applied_naics_codes | No | NAICS codes filter applied (comma-separated) |
| applied_time_period_end | No | End date filter applied (YYYY-MM-DD) |
| applied_time_period_start | No | Start date filter applied (YYYY-MM-DD) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, lowering the burden on the description. The description adds useful behavioral context not fully captured elsewhere: the 90-day publication lag for DoD contracts, the earliest available data date (2007-10-01), and the requirement for ISO 8601 dates. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences long, front-loads the core purpose, then provides the award-type mapping, followed by date and data-lag caveats. Every sentence contributes new, relevant information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 14 parameters and nested objects, the description covers the essential context: what it searches, what it returns, how it connects to get_award, award type groupings, date format requirements, and data lag. The detailed schema and output schema handle pagination and parameter-specific semantics. Slightly more could be said about using the filters object vs flat parameters, but that is covered in the schema, so the description is appropriately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself provides detailed parameter explanations including pagination caps, recipient_id ignoring behavior, and per-field descriptions. The description adds a high-level summation of filter categories and an award-type legend, but the legend is already present in the schema's award_type_codes property. Therefore, it does not meaningfully add beyond the schema, so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Search federal awards') and enumerates the supported search dimensions (keyword, recipient, agency, award type, NAICS code, location, date range). It distinguishes itself from sibling search tools by focusing on federal awards and explicitly mentions producing award IDs for use with usaspending_get_award, making its role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for how the tool fits into a workflow: search for awards, then use the generated IDs with usaspending_get_award. It does not explicitly state when-not-to-use or name alternatives, but the reference to a sibling tool and the focused scope give sufficient usage guidance. Lacks explicit exclusions, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_search_federal_accountsSearch Federal AccountsARead-onlyIdempotentInspect
List and keyword-search federal accounts by agency identifier or title keyword. Returns account numbers, names, managing agencies, and budgetary resources. Use account_number from results as input to usaspending_get_federal_account for full budget detail. Use usaspending_list_agencies to look up agency_identifier codes (3-digit strings, e.g. "097" for DoD).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| limit | No | Maximum results per page (1–100) | |
| keyword | No | Filter accounts by name or title keyword (e.g., "defense", "transportation") | |
| sort_field | No | Field to sort results by | budgetary_resources |
| sort_direction | No | Sort direction | desc |
| agency_identifier | No | 3-digit agency identifier code (e.g., "097" for Department of Defense). Use usaspending_list_agencies to look up codes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Current page number returned |
| notice | No | Recovery hint when results are empty — echoes applied filters and suggests how to broaden. Absent when results are present. |
| results | Yes | Matching federal accounts |
| has_next | Yes | Whether there are more pages of results |
| totalCount | No | Total number of matching accounts across all pages (when available) |
| page_metadata | Yes | Pagination metadata |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety. Description adds behavioral context by specifying returned fields (account numbers, names, managing agencies, budgetary resources) and cross-tool relationships, though it doesn't mention pagination specifics which are in schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all information-dense: first defines the operation and return values, second links to the detail tool, third explains agency code lookup. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, output schema presence, and annotations covering safety, the description is sufficient for the tool. It explains the core use, return fields, and related usage, making it complete for a search/list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter documented. The description reinforces the agency_identifier guidance (3-digit codes, list_agencies) already present in the schema, adding no novel parameter semantics beyond what the schema provides, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'List and keyword-search federal accounts by agency identifier or title keyword' with a specific verb and resource, distinguishing it from sibling tools like usaspending_get_federal_account by indicating it returns a list of accounts with identifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly guides users to use usaspending_get_federal_account for full budget detail using account_number from results, and usaspending_list_agencies for agency_identifier codes, providing clear alternatives and workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_search_recipientsSearch Award RecipientsARead-onlyIdempotentInspect
Search for organizations or individuals receiving federal funds by name, UEI (Unique Entity Identifier), or DUNS. Returns recipient hash IDs, UEI/DUNS identifiers, total award amounts, and hierarchy level. Results are paginated — use page to retrieve matches beyond the first page; page_metadata.total reports the full match count. Recipient hash IDs from this tool can be passed to usaspending_get_recipient for full profiles. Recipient level: P = parent organization, C = child entity, R = standalone.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) — request the next page to retrieve matches beyond the first | |
| limit | No | Maximum results per page (1–100) | |
| keyword | Yes | Name, UEI, DUNS, or keyword to search for — partial matches are supported | |
| award_type | No | Filter by award type category to scope the total amounts returned |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Current page number returned |
| notice | No | Recovery hint — how to continue to the next page when more results exist, or how to broaden the search when empty. Absent when the full match set fits on this page. |
| results | Yes | Matching recipients |
| has_next | Yes | Whether there are more pages of results |
| totalCount | No | Total matching recipients across all pages |
| page_metadata | Yes | Pagination metadata — page through with the page input to reach later matches |
| recipient_count | Yes | Number of matching recipients returned on this page |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it explains pagination behavior, page_metadata.total, and recipient level semantics (P/C/R). It also clarifies that results include hash IDs that can be chained into another tool, adding meaningful operational context not inferred from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each serving a distinct purpose: defining the search scope, listing return fields, explaining pagination, and connecting to the recipient profile tool. It is front-loaded with the primary use case and has no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and rich annotations, the description fully covers tool behavior: search criteria, return fields, pagination mechanics, result chaining, and hierarchy level definitions. It gives an agent everything needed to decide when to call this tool and how to interpret the first page of results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage of all parameters including descriptions for keyword, page, limit, and award_type. The description adds limited additional parameter nuance—mostly clarifying keyword accepts identifiers and partial matches, which is already in the schema. Baseline 3 is appropriate since the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for organizations or individuals receiving federal funds by name, UEI, or DUNS. It distinguishes itself from sibling tools like usaspending_get_recipient by specifying the search and pagination aspects, and mentions the returned fields (hash IDs, total award amounts, hierarchy).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool (searching by identifier/name, paginating results) and explicitly points to usaspending_get_recipient as the follow-up for full profiles. However, it does not explicitly state when not to use this tool vs alternatives, such as usaspending_search_awards for award-focused searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_spending_by_categorySpending by CategoryARead-onlyIdempotentInspect
Aggregate federal spending grouped by a specific dimension: NAICS industry code, PSC product/service code, awarding agency, funding agency, CFDA assistance program, or recipient. Returns top items with obligation amounts — useful for trend and breakdown analysis. Chain NAICS codes into usaspending_search_awards filters or usaspending_autocomplete_filters lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| limit | No | Maximum items to return (1–100) | |
| filters | No | Optional filters to scope the aggregation | |
| category | Yes | Breakdown dimension: naics (industry), psc (product/service code), awarding_agency, awarding_subagency, funding_agency, funding_subagency, cfda (assistance programs), recipient_duns, or recipient_parent_duns |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Current page returned |
| notice | No | Recovery hint when results are empty — suggests how to broaden filters. Absent when results are present. |
| results | Yes | Top items in this category by obligation amount |
| category | Yes | Breakdown dimension used |
| has_next | Yes | Whether there are more pages |
| totalCount | No | Total number of items in this category (when available) |
| page_metadata | Yes | Pagination metadata |
| applied_keywords | No | Keyword filters applied (comma-separated) |
| applied_agency_name | No | Awarding agency name filter applied |
| applied_naics_codes | No | NAICS code filters applied (comma-separated) |
| applied_time_period_end | No | End date filter applied (YYYY-MM-DD) |
| applied_time_period_start | No | Start date filter applied (YYYY-MM-DD) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent, so the safety profile is covered. The description adds the behavioral detail that it returns only top items with obligation amounts and lists the supported breakdown dimensions. No contradictions or misleading statements exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: the first states the core function and dimensions, the second clarifies the output nature, and the third gives cross-tool chaining advice. No filler, no redundancy, and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has full parameter documentation, an output schema, and annotations covering safety. The description adds the necessary selection context and downstream chaining guidance, making it complete for an agent to decide when and how to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with every parameter (category, filters, page, limit) already documented and a rich enum for category. The description does not need to add parameter-level detail, and it stays at the baseline by not duplicating schema information or providing extra meaning beyond the categories already enumerated in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Aggregate' and names the resource ('federal spending') plus the grouping dimensions (NAICS, PSC, agency, CFDA, recipient). It also notes a concrete output ('top items with obligation amounts'), clearly distinguishing it from geographic or time-based siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states a use case ('trend and breakdown analysis') and gives chaining guidance to search_awards and autocomplete_filters. However, it does not explicitly name alternative tools spending_by_geography or spending_over_time as the better choices for location or time-series analysis, so exclusions are left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usaspending_spending_by_geographySpending by GeographyARead-onlyIdempotentInspect
Aggregate federal spending by state, county, or congressional district. Useful for per-capita analysis, regional comparisons, and mapping federal investment patterns. Geographic filters accept FIPS codes and 2-letter state abbreviations — NOT place names. Resolve place names to FIPS codes using a geocoding server (Census or OpenStreetMap) before applying location filters. Chain per-capita results with Census population data for meaningful comparisons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum geographic areas to return, ranked by aggregated_amount descending (1–500). The upstream endpoint is not paginated — it returns every matching area in one response — so this caps client-side. A nationwide county query matches over 3,000 areas. | |
| scope | Yes | Which location to aggregate by: place_of_performance (where work is done) or recipient_location (where the recipient is based) | |
| filters | No | Optional filters to scope the spending aggregation | |
| geo_layer | Yes | Geographic granularity: state (50 states), county (county-level), or district (congressional district) | |
| subawards | No | Include subaward data instead of prime award data |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit that was applied. |
| scope | Yes | Location scope used for aggregation |
| shown | No | Number of geographic areas returned. |
| total | Yes | Number of geographic areas returned |
| notice | No | Recovery hint when results are empty — suggests how to broaden filters. Absent when results are present. |
| results | Yes | Spending totals by geographic area |
| geo_layer | Yes | Geographic granularity used |
| truncated | No | True when the area list was capped at limit. |
| area_count | Yes | Number of geographic areas returned |
| applied_scope | Yes | Location scope applied: place_of_performance or recipient_location |
| applied_keywords | No | Keyword filters applied (comma-separated) |
| applied_geo_layer | Yes | Geographic granularity applied: state, county, or district |
| truncationCeiling | No | Obligation amount of the lowest-ranked area shown — an upper bound on omitted ones. |
| applied_agency_name | No | Awarding agency name filter applied |
| applied_naics_codes | No | NAICS code filters applied (comma-separated) |
| total_areas_available | Yes | Number of geographic areas the filters matched, before limit was applied |
| applied_time_period_end | No | End date filter applied (YYYY-MM-DD) |
| applied_time_period_start | No | Start date filter applied (YYYY-MM-DD) |
| applied_award_type_default | No | Disclosure that no filters were supplied, so award_type_codes defaulted to the complete set. Absent when the caller supplied at least one filter. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnly, openWorld, and idempotent hints, but the description adds valuable behavioral context: the upstream endpoint is not paginated (returns all matches in one response), the limit parameter caps client-side, and nationwide county queries exceed 3,000 areas. It also discloses the FIPS/abbreviation constraint, which is not apparent from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence states the core function, the second covers use cases, and the third gives an essential usage constraint. Every sentence adds unique value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and 100% parameter schema coverage, the description doesn't need to explain return values. It covers the main usage context (what the tool aggregates, granularity options), the critical input format caveat (FIPS vs place names), and a guidance about per-capita analysis with Census data. This is sufficient for an AI agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 critical semantics beyond the schema: geographic filters accept FIPS codes and 2-letter state abbreviations, not place names. It also explains the limit parameter's behavior in the context of an unpaginated upstream, which is not in the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Aggregate federal spending by state, county, or congressional district.' This clearly distinguishes it from sibling tools like spending_by_category (categories) and spending_over_time (time series), and the use cases (per-capita analysis, regional comparisons, mapping) reinforce the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use it ('Useful for per-capita analysis, regional comparisons, and mapping federal investment patterns') and provides a key prerequisite ('Resolve place names to FIPS codes... before applying location filters'). However, it does not explicitly mention when *not* to use it or name alternative sibling tools, so it falls slightly 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.
usaspending_spending_over_timeSpending Over TimeARead-onlyIdempotentInspect
Fetch aggregated federal obligation amounts grouped by fiscal year, fiscal quarter, or fiscal month. All grouping is relative to the US government fiscal year (Oct–Sep), so fiscal month 1 is October, not January. Filter by award type, agency, recipient, keyword, or NAICS code to trace spending trends in a specific area. Returns per-period totals and optional breakdowns by award category (contracts, grants, direct payments, IDVs, loans, other).
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Time grouping: fiscal_year (annual US govt FY: Oct–Sep), quarter (fiscal quarter), or month (fiscal month — an ordinal within the fiscal year, where 1 = October) | |
| filters | No | Filters to scope the time-series aggregation. Defaults to contract awards when omitted. | |
| subawards | No | Aggregate subaward data instead of prime award data |
Output Schema
| Name | Required | Description |
|---|---|---|
| group | Yes | Time grouping used |
| notice | No | Recovery hint when no periods are returned — suggests broadening filters. Absent when results are present. |
| results | Yes | Time-series of obligation totals |
| time_group | Yes | Time grouping applied: fiscal_year, quarter, or month |
| period_count | Yes | Number of time periods returned |
| total_periods | Yes | Number of time periods returned |
| applied_keywords | No | Keyword filters applied (comma-separated) |
| applied_agency_name | No | Awarding agency name filter applied |
| applied_naics_codes | No | NAICS code filters applied (comma-separated) |
| applied_time_period_end | No | End date filter applied (YYYY-MM-DD) |
| applied_time_period_start | No | Start date filter applied (YYYY-MM-DD) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds useful behavioral context about the US government fiscal year convention (Oct–Sep, month 1 = October) and indicates return content (per-period totals). However, the claim of 'optional breakdowns by award category' is not supported by any exposed parameter in the input schema, making part of the behavioral disclosure unsubstantiated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with the main action front-loaded; the fiscal-year clarification is valuable. The final sentence is compact but contains the unsupported 'optional breakdowns' claim, so it is not fully clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only time-series tool with robust annotations, a 100% documented schema, and an output schema, the description covers the core grouping semantics and intended use. It could be fuller by explicitly contrasting with spending_by_category or spending_by_geography, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description repeats the fiscal-month convention and maps high-level filter categories to the filters object, but adds no parameter syntax or format details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Fetch' with resource 'aggregated federal obligation amounts grouped by fiscal year/quarter/month'. This clearly distinguishes the tool from sibling category/geography spending tools by emphasizing time-series grouping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames usage 'to trace spending trends in a specific area' and lists filter dimensions (award type, agency, recipient, keyword, NAICS). It does not explicitly name alternatives or when-not conditions, but the intended context is clear from the description and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- Alicense-qualityDmaintenanceEnables research of federal contract awards and competitive landscape analysis using the USASpending.gov API. Supports searching for contracts, analyzing recipients, tracking spending trends, and identifying market opportunities in government contracting.1MIT
- Alicense-qualityDmaintenanceInteract with USASPENDING.gov to track government spending over time, search by agency, explore spending to communities, and more.2MIT
- Alicense-qualityDmaintenanceEnables research of federal contract awards, market opportunities, and competitive landscapes using the USASpending.gov API. It provides specialized tools for AI agents to analyze government spending trends, identify incumbents, and search contractor details.MIT
- Alicense-qualityCmaintenanceEnables querying and analyzing US federal grant single-audit filings, including audits, findings, and federal awards, using data from the Federal Audit Clearinghouse.13MIT
Your Connectors
Sign in to create a connector for this server.