Skip to main content
Glama

spending_by_subaward_grouped

Read-only

Find matching prime awards and their cumulative FFATA report totals.

Filters select prime records, but subaward_count and subaward_obligation
cover all reported subawards under each prime, not just subaward actions
within time_period_start/end. This ranking is not a fiscal-period
subaward ranking. For dated reports, pass a returned
award_generated_internal_id to search_subawards(award_id=...), read every
page, and retain action_date values inside the desired period.

sort accepts: award_id, subaward_count, award_generated_internal_id,
subaward_obligation. (These differ from search_subawards, which sorts by
amount/action_date/etc.) Anything else returns HTTP 400 from the API.

page_metadata.hasNext is worked out here: the endpoint itself always
says false, even with more pages. Rows include primes with no
subawards (subaward_count 0). subaward_obligation sums FFATA reports,
which can repeat cumulative amounts, so a subaward_to_award_ratio
above 1 is a reporting artefact, not more subcontracting than the prime.

program_numbers filters assistance awards by assistance listing (CFDA)
number, e.g. ['93.778'] for Medicaid; use it with award_type='grants',
'loans', 'direct_payments', or 'other'. autocomplete_cfda() finds numbers
by program name.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "spending_by_subaward_grouped"
  }
}

Input Schema

NameRequiredDescriptionDefault
pageNo
sortNo
limitNo
orderNodesc
def_codesNo
psc_codesNo
naics_codesNo
funding_agencyNo
awarding_agencyNo
program_numbersNo
time_period_endNo
award_type_codesNo
time_period_startNo
set_aside_type_codesNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare a safe read, but the description goes far beyond them: it discloses that time_period filters apply only to prime selection while subaward_count/subaward_obligation cover all reported subawards, that invalid sort values yield HTTP 400, that the API's own page_metadata.hasNext always reports false and is corrected here, that zero-subaward primes are included, and that subaward_to_award_ratio > 1 is a cumulative-reporting artefact. These are non-obvious behaviours an agent could not infer from 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the tool's purpose and then the most dangerous caveat (filter scope vs. subaward totals), and nearly every sentence carries operational information. The density is high, though: several caveats are packed into an undifferentiated paragraph with no grouping or bullets, making it easy to miss the sort-values sentence or the pagination note on a first read.

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

Completeness4/5

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

An output schema exists, so return shape needn't be explained, yet the description still usefully clarifies the meaning of subaward_count, subaward_obligation, subaward_to_award_ratio and the corrected page_metadata.hasNext. For a 14-parameter, zero-description schema the filter coverage is thin, but the pitfalls that would actually cause wrong answers or API errors are all addressed.

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

Parameters3/5

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

Schema description coverage is 0% across 14 parameters, so the description must compensate, and it only partially does: it enumerates valid sort keys and the error on invalid ones, explains program_numbers as CFDA/assistance-listing codes with suggested award_type pairings, and warns about time_period_start/end semantics. The remaining filter parameters (def_codes, psc_codes, naics_codes, funding_agency, awarding_agency, set_aside_type_codes, page, limit, order) get no treatment, and the description references award_type='grants' where the schema field is award_type_codes, which is a small mismatch.

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

Purpose4/5

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

The opening sentence states a specific verb and resource (find prime awards with cumulative FFATA subaward totals), and the later sort/filter caveats make clear this is a prime-level grouping tool, not a subaward-action search. It distinguishes itself from search_subawards explicitly. The purpose is slightly obscured by jargon ('cumulative FFATA report totals') and the fact that 'grouped by prime' is implied rather than stated, but an agent can still tell what it returns.

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

Usage Guidelines4/5

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

It gives an explicit routing rule: for dated reports, take a returned award_generated_internal_id to search_subawards(award_id=...) and page through, because this tool's time filters don't scope subaward counts. It also points to autocomplete_cfda() for resolving program_numbers. What's missing is a positive 'use this tool when you want X' sentence covering the primary ranking use case, so it stops just short of full when/when-not/alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.