usaspending-mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@usaspending-mcp-serversearch for federal awards related to cybersecurity"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Public Hosted Server: https://usaspending.caseyjhand.com/mcp
Tools
18 tools covering the full USAspending.gov API surface — award discovery and detail, recipient and agency profiles, spending analytics (by geography, category, and time), disaster/emergency spending, and federal account data:
Tool | Description |
| Search federal awards by keyword, recipient, agency, award type, NAICS code, location, or date range. Returns ranked award summaries with recipient names, amounts, agencies, and award IDs for chaining. |
| Fetch full details of a federal award by its generated ID. Returns contract or assistance data, parent IDV info, subaward count, and funding account linkages. |
| List child contracts and task/delivery orders placed under an IDV award. Each row includes a |
| List individual transactions (modifications, amendments) on an award. Reveals spending history and obligation changes over time. |
| List subaward contracts or grants under a prime award. Reveals the sub-contractor or sub-grantee layer — who actually does the work. |
| List the Treasury federal accounts that funded an award, with the amount obligated from each. Returns |
| Search for organizations receiving federal funds by name, UEI, or DUNS. Returns recipient hash IDs, UEI/DUNS, total award amounts, and hierarchy level. Paginated — page through with |
| Fetch a recipient's profile: address, business types, parent organization, alternate names, and total award amounts by type. |
| Fetch an agency's fiscal year overview: mission, budget authority, obligation totals, sub-agency count, and DEF codes. Accepts a 3-digit |
| Aggregate federal spending by state, county, or congressional district. Returns per-capita figures when combined with population data. |
| Aggregate spending grouped by NAICS code, PSC code, awarding agency, funding agency, CFDA program, or recipient. Returns top items with amounts for trend and breakdown analysis. |
| Fetch aggregated spending by fiscal year, fiscal quarter, or fiscal month. Filter by award type, agency, recipient, or keyword to trace trends in a specific area. |
| Fetch disaster and emergency supplemental spending (COVID-19, hurricanes, etc.) broken down by agency, CFDA program, recipient, or geography. Filter by DEF codes to isolate a specific appropriation. |
| Fetch a federal account's budget data: total obligations, outlays, budgetary resources, and the per-Treasury-Account-Symbol component breakdown. Account codes come from |
| Break a federal account's obligations down by program activity (what the money funds) or object class (what it buys). Paginated with a total count. |
| List and keyword-search federal accounts by agency identifier or title keyword. Returns account numbers for chaining into |
| List all top-tier federal agencies with toptier codes, budget authority amounts, and obligation totals. Entry point for agency navigation. |
| Look up valid code values for filter fields: NAICS, PSC, CFDA, recipient names, or agency names. Use before filtering to discover the right code from a description. |
usaspending_search_awards
Search for federal awards across contracts, grants, loans, direct payments, and IDVs.
Full-text keyword search across award descriptions, recipient names, and locations
Filter by award type codes (
A/B/C/D= contracts,02/03/04/05= grants,06/10= direct payments,07/08= loans,IDV_*= IDVs)Filter by awarding or funding agency (toptier or subtier), recipient name, NAICS code, and place of performance
Date range filtering — earliest 2007-10-01 via search API
Pagination via
limit(max 100) andpage;page_metadata.has_nextsignals more results and istrueon any full page — the endpoint stops advertising continuation oncepage×limitreaches 10,000, so page fullness is the honest signal past that point. Page-number paging caps at a 50,000-result offset — beyond it, continue with keyset pagination using thelast_record_sort_value+last_record_unique_idcursor, which is only returned below the 10,000-result offset and has to be captured before crossing itReturns
generated_internal_idfor chaining tousaspending_get_awardandagency_slugfor chaining tousaspending_get_agency
usaspending_get_award
Fetch complete details for a single federal award by its generated ID.
Returns type, description, total obligation, date signed, and subaward count
Exposes
recipient.recipient_hashfor chaining tousaspending_get_recipientExposes
parent_award.generated_unique_award_idfor traversing IDV parent chainsIncludes NAICS code and product/service code from the latest transaction
Returns
account_obligations_by_defclinking the award to specific disaster/emergency appropriationsAward IDs use the
generated_unique_award_idformat (e.g.,CONT_AWD_FA862118F6251_9700_...)
usaspending_get_idv_awards
List child contracts and orders placed under an IDV (Indefinite Delivery Vehicle) award.
award_idmust be thegenerated_unique_award_idof the parent IDV — fromusaspending_search_awards(generated_internal_idfield) or fromusaspending_get_awardtypeselects what to list:child_awards(task/delivery orders),child_idvs(sub-IDVs), orgrandchild_awardsEach row returns
generated_unique_award_idfor chaining intousaspending_get_awardfor full detailPagination via
limitandpage; note: nototalcount is available from this endpointAn invalid
award_idor an IDV with no children of the requested type returns an empty result set
usaspending_get_award_transactions
List obligation history and modifications for an award.
Each row is one transaction:
action_date,federal_action_obligation,modification_number, and descriptionPagination via
limitandpage; configurable sort and order. Nototalcount is available from this endpoint
usaspending_get_award_subawards
List subawards under a prime contract or grant.
Each row covers: subaward number, description, action date, amount, and recipient name
Reveals the supply chain below the prime — who actually performs the work
Pagination via
limitandpage; configurable sort and order. Nototalcount is available from this endpoint
usaspending_get_award_federal_accounts
List the Treasury federal accounts that funded an award — the award → appropriation link.
award_idmust be agenerated_unique_award_id— fromusaspending_search_awards(generated_internal_idfield) orusaspending_get_awardEach row returns
federal_account(AGENCY-MAIN format, e.g.080-0120) for chaining intousaspending_get_federal_account, plus the amount obligated from that account and the funding agency behind itDistinct from
usaspending_get_awardaccount_obligations_by_defc, which breaks funding down by Disaster/Emergency Funding code rather than by accountPagination via
limit(max 100) andpage;countinpage_metadatais the total across pagesAn
award_idthat does not exist returns an empty list rather than an error — the upstream reports no not-found signal for this endpoint
usaspending_search_recipients
Search for organizations receiving federal funds by name, UEI, or DUNS.
Returns recipient IDs (UUID hashes with level suffix:
-Pparent,-Cchild,-Rroot), UEI, DUNS, name, recipient level, and total award amountresults[].idchains tousaspending_get_recipient;ueianddunschain to SAM.gov or SEC EDGARPaginated via
limit(max 100) andpage;page_metadatareportstotal,page, andhas_next— page through to reach matches beyond the first page
usaspending_get_recipient
Fetch a recipient's full profile.
Returns address, business type classifications, parent organization, alternate names
Optionally scope to a specific fiscal year and award type
Requires the UUID-based recipient ID from
usaspending_search_recipients
usaspending_get_agency
Fetch an agency's current fiscal year overview.
Returns mission, budget authority amount, obligation amount, sub-agency count, and DEF codes
Accepts either a 3-digit
toptier_code(e.g.,097for DoD) or anagency_slug(e.g.,department-of-defense) — slugs appear in award search results, eliminating an intermediate lookupIncludes sub-agency breakdown with transaction counts
usaspending_spending_by_geography
Aggregate federal spending by geographic unit.
scope:place_of_performanceorrecipient_locationgeo_layer:state,county, ordistrictReturns
shape_code,display_name,aggregated_amount, andper_capita(whenpopulationis available)limitaccepts 1–500 (default 50). The upstream endpoint is not paginated — a nationwide county query matches over 3,000 areas — so areas are ranked byaggregated_amountdescending and capped client-side;total_areas_availablereports the full match countOmitting
filtersentirely aggregates every award type (contracts, IDVs, grants, direct payments, loans, insurance, and unspecified); the substitution is disclosed on the responseGeographic filters require FIPS codes or 2-letter state abbreviations — use a geocoding server (e.g., Census or OpenStreetMap) to resolve place names first
usaspending_spending_by_category
Aggregate spending broken down by a single dimension.
categoryenum maps to the right sub-route:naics,psc,awarding_agency,funding_agency,cfda, orrecipientReturns top items with amounts and codes for trend analysis
Accepts the standard award filter object for scoping to a specific agency, time period, or keyword
Pagination via
limitandpage; nototalcount is available from this endpoint
usaspending_spending_over_time
Fetch aggregated spending grouped by time period.
group:fiscal_year,quarter, ormonthFilter by award type, agency, recipient, or keyword to trace trends in a specific area
subawards: trueshifts aggregation to the subaward layer
usaspending_disaster_spending
Fetch disaster and emergency supplemental spending consolidated from nine+ API endpoints.
dimensionenum selects the breakdown axis:overview,agency,cfda,recipient, orgeographyspending_typeselects between award-level obligations and outlays (award) and total spending including direct non-award amounts (total, agency and recipient dimensions only)Filter by
def_codesto isolate a specific emergency appropriation (e.g., COVID-19 =L,M,N,O,P,U)Returns obligation, outlay, and award count per row
usaspending_get_federal_account
Fetch budget data for a federal account identified by its account code.
Returns account title, federal account code, agency identifier, parent agency, and bureau
Includes the fiscal year snapshot: total obligations, gross outlays, and budgetary resources
childrenbreaks the account into its Treasury Account Symbol (TAS) components, each with its own obligated, outlay, and budgetary-resource amounts — one entry per availability period, bounded and returned in fullAccount codes come from
account_numberinusaspending_search_federal_accountsresults, orfederal_accountinusaspending_get_award_federal_accountsresultsFor obligations broken down by program activity or object class, use
usaspending_get_federal_account_breakdown
usaspending_get_federal_account_breakdown
Break a federal account's obligations down by program activity or object class.
dimensionenum selects the axis:program_activity(what the money funds) orobject_class(what it buys — personnel, supplies, contracts)Each row returns the code, name, and obligated amount;
program_activityrows also carrytype—PAC/PAN(legacy program activity code/name) orPARK(Program Activity Reporting Key), both of which can appear for the same accountPagination via
limit(max 100) andpage;totalinpage_metadatais the true row count across pagesAn account code that does not exist returns an empty list rather than an error — unlike
usaspending_get_federal_account, these routes report no not-found signal
usaspending_search_federal_accounts
List and keyword-search federal accounts by agency or title keyword.
keywordfilters by account name/title (e.g.,"defense","transportation")agency_identifierfilters to a specific agency by 3-digit code (e.g.,"097"for DoD) — useusaspending_list_agenciesto look up codessort_fieldenum:account_name,account_number,budgetary_resources(default),managing_agencyReturns
account_number(format"097-8097") for chaining intousaspending_get_federal_accountfor full budget detailPagination via
limitandpage;countinpage_metadatais the total matches
usaspending_list_agencies
List all top-tier federal agencies.
Returns agency name, abbreviation,
toptier_code,agency_slug, obligated amount, and budget authority amount for the current fiscal yearEntry point for agency navigation —
toptier_codeis required byusaspending_get_agencyand agency filtersConfigurable sort and order
usaspending_autocomplete_filters
Discover valid code values for award filter fields.
typeenum selects the lookup:naics,psc,cfda,awarding_agency, orrecipientReturns matching codes and names — use before filtering to find the right code when you only know a description (e.g., "software" → NAICS codes);
recipientmatches also carryuei/dunsThe
naicslookup matches official NAICS title text, not colloquial industry language — "software" and "aircraft" resolve, "cybersecurity" and "aircraft maintenance" return nothing. Fall back to the broader industry term the NAICS title would useConsolidates five autocomplete endpoints into one tool
limitaccepts 1–500 and is enforced client-side — therecipientlookup unions three upstream match buckets (name, UEI, DUNS) and can return up to 3x the requested count, so its results are capped before returning; the other four honorlimitexactly
Related MCP server: USASpending MCP Server
Features
Built on @cyanheads/mcp-ts-core:
Declarative tool definitions — single file per tool, framework handles registration and validation
Unified error handling — handlers throw, framework catches, classifies, and formats
Pluggable auth:
none,jwt,oauthSwappable storage backends:
in-memory,filesystem,Supabase,Cloudflare KV/R2/D1Structured logging with optional OpenTelemetry tracing
STDIO and Streamable HTTP transports
USAspending-specific:
Full USAspending.gov API v2 coverage — award search, award detail, recipient and agency profiles, spending analytics, disaster spending, and federal accounts
No authentication required — all data is public domain under the DATA Act
usaspending_spending_by_categoryconsolidates 14 category sub-routes behind a singlecategoryenum;usaspending_disaster_spendingconsolidates 9+ disaster endpoints behinddimension+spending_typeenumsusaspending_get_agencyaccepts bothtoptier_codeandagency_slug, eliminating the intermediate agency-list lookup that award search results would otherwise requireusaspending_autocomplete_filtersserves as the code-discovery step before filtering — maps human-readable terms to NAICS, PSC, CFDA, and agency codes
Agent-friendly output:
Chaining fields on every response —
generated_internal_id,agency_slug,recipient_hash, andaccount_codefields are surfaced explicitly so agents can follow the money without parsing identifiers out of display stringsPagination metadata on list responses —
page_metadata.has_nextandpage_metadata.pagelet agents iterate large result sets without guessing.page_metadata.totalis carried wherever the upstream endpoint publishes one;usaspending_get_award_transactions,usaspending_get_award_subawards, andusaspending_spending_by_categorysit on endpoints that publish none, sohas_nextis the only continuation signal thereStructured geographic outputs —
shape_code,display_name,aggregated_amount, andper_capitaare typed consistently across state, county, and district views for composable analysis
Getting started
Public Hosted Instance
A public instance is available at https://usaspending.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": {
"usaspending-mcp-server": {
"type": "streamable-http",
"url": "https://usaspending.caseyjhand.com/mcp"
}
}
}Self-Hosted / Local
Add the following to your MCP client configuration file. No API key is required — USAspending.gov data is public domain.
{
"mcpServers": {
"usaspending-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/usaspending-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}Or with npx (no Bun required):
{
"mcpServers": {
"usaspending-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/usaspending-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}Or with Docker:
{
"mcpServers": {
"usaspending-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/usaspending-mcp-server:latest"
]
}
}
}For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcpPrerequisites
Bun v1.3.0 or higher (or Node.js v24+).
No API key required — USAspending.gov is a public data platform with no authentication requirement.
Installation
Clone the repository:
git clone https://github.com/cyanheads/usaspending-mcp-server.gitNavigate into the directory:
cd usaspending-mcp-serverInstall dependencies:
bun installConfigure environment (optional):
cp .env.example .env
# edit .env if you need to override defaultsConfiguration
All configuration is validated at startup via Zod schemas in src/config/server-config.ts. No environment variables are required — the defaults work out of the box.
Variable | Description | Default |
| Base URL for the USAspending.gov API. |
|
| HTTP timeout in milliseconds, applied per attempt. |
|
| Wall-clock budget covering every retry attempt of one request, so a slow endpoint cannot re-pay the per-attempt timeout on each retry. Accepts 1000–300000. |
|
| Transport: |
|
| Port for the HTTP server. |
|
| HTTP endpoint path. |
|
| Public origin override for TLS-terminating reverse-proxy deployments. | — |
| Auth mode: |
|
| Log level ( |
|
| Directory for log files (Node.js only). |
|
| Storage backend: |
|
| Enable OpenTelemetry instrumentation. |
|
See .env.example for the full list of optional overrides.
Running the server
Local development
Build and run:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:httpRun checks and tests:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t usaspending-mcp-server .
docker run --rm -p 3010:3010 usaspending-mcp-serverThe Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/usaspending-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
Project structure
Directory | Purpose |
|
|
| Server-specific environment variable parsing and validation with Zod. |
| Tool definitions ( |
| USAspending API client and service layer. |
| Unit and integration tests mirroring |
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
Handlers throw, framework catches — no
try/catchin tool logicUse
ctx.logfor request-scoped logging,ctx.statefor tenant-scoped storageRegister new tools via the barrels in
src/mcp-server/tools/definitions/index.tsWrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields
Contributing
Issues and pull requests are welcome. Run checks and tests before submitting:
bun run devcheck
bun run testLicense
Apache-2.0 — see LICENSE for details.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cyanheads/usaspending-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server