# USASpending.gov (remote · usaspending.1102tools.com)

USAspending.gov contracts, grants, loans, subawards, recipients, agencies, and federal accounts.

- Trust score: 68/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `usaspending.1102tools.com`: 68/100 (this document), [markdown](https://verifymcp.io/servers/com-1102tools-usaspending-gov-mcp/usaspending.md), [page](https://verifymcp.io/servers/com-1102tools-usaspending-gov-mcp/usaspending)
- pypi · `usaspending-gov-mcp`: 75/100, [markdown](https://verifymcp.io/servers/com-1102tools-usaspending-gov-mcp/usaspending-gov-mcp.md), [page](https://verifymcp.io/servers/com-1102tools-usaspending-gov-mcp/usaspending-gov-mcp)

## Channel facts

- Endpoint: `https://usaspending.1102tools.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.29`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Nothing on it is marked destructive, but we can't show that an anonymous caller can only read: full credit needs the server to list at least one tool and every tool to be verifiably read-only. We use a best-effort check of tool names and descriptions to tell read-only tools from tools that change things, so some genuinely read-only tools may not get full credit. Names that start with a read verb (get, list, read, search and similar) and accurate readOnlyHint annotations help. Meet that to earn full credit, or require authorisation.
  - HTTPS enforcement could not be verified: the plaintext port answered with HTTP 405, which proves neither a plaintext path nor enforcement.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 58/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 9933 tokens (~180/item across 55 items; 55 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 50/100
  - Stability observed for 15 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 55 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 55 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the USASpending.gov MCP server?

USASpending.gov is a hosted endpoint at https://usaspending.1102tools.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-1102tools-usaspending-gov-mcp 'https://usaspending.1102tools.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-1102tools-usaspending-gov-mcp": {
      "url": "https://usaspending.1102tools.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-1102tools-usaspending-gov-mcp": {
      "type": "http",
      "url": "https://usaspending.1102tools.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-1102tools-usaspending-gov-mcp]
url = "https://usaspending.1102tools.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-1102tools-usaspending-gov-mcp": {
      "type": "remote",
      "url": "https://usaspending.1102tools.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-1102tools-usaspending-gov-mcp --url 'https://usaspending.1102tools.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-1102tools-usaspending-gov-mcp:
    url: "https://usaspending.1102tools.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-1102tools-usaspending-gov-mcp": {
      "Transport": "http",
      "Url": "https://usaspending.1102tools.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-1102tools-usaspending-gov-mcp -t streamable-http -u 'https://usaspending.1102tools.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-1102tools-usaspending-gov-mcp": {
      "type": "http",
      "url": "https://usaspending.1102tools.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 67, 0)

- [functional] Server version: 1.0.28 → 1.0.29

### 2026-11-01 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-30 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 64, 0)

- [functional] Server version: 1.0.27 → 1.0.28

### 2026-10-26 (score 64, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 63, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (55)

### `search_awards` (~1208 tokens)

Search federal awards (contracts, IDVs, grants, loans, etc.) on USASpending.gov.

    This is the primary workhorse for finding awards. Returns matching awards
    with standard fields (Award ID, Recipient, Description, Amount, Agencies,
    NAICS, PSC, dates). Use get_award_detail() with the generated_internal_id
    from results to get full award details.

    Important rules:
    - award_type groups cannot be mixed; pick one category per call
    - time_period_start/end use YYYY-MM-DD format
    - award_amount_min/max are in USD
    - place_of_performance_state is a 2-letter USPS code (e.g. 'MD', 'VA')
    - For loans, use award_type='loans' and sort='Loan Value'
    - def_codes filters to Disaster Emergency Fund codes (COVID-19, IIJA,
      IRA supplementals); see get_def_codes_reference() for the list

    Filtering to specific contracting commands (NAVSEA, AFRL, etc.):
    USASpending's subtier level is at the service branch (Department of the
    Navy, Army, Air Force), not the contracting command. To filter to a
    specific command, use keywords with the PIID office prefix instead:
    - NAVSEA contracts:  keywords=['N00024']
    - Army Contracting:  keywords=['W91CRB']
    - AFRL:              keywords=['FA8650']
    - NAVAIR:            keywords=['N00019']
    This performs a substring match on the PIID field and is more reliable
    than the award_ids filter for partial matches.

    Common filter value references:
    - set_aside_type_codes: SBA, SBP, 8A, 8AN, HZC, HZS, SDVOSBS, SDVOSBC,
      WOSB, WOSBSS, EDWOSB, EDWOSBSS, VSA
    - extent_competed_type_codes: A (Full & Open), B, C, D, E, F, G, CDO, NDO
    - contract_pricing_type_codes: J (FFP), Y (T&M), Z (LH), U (CPFF),
      V (CPIF), R (CPAF), L (FP Incentive), M (FP Award Fee)

    IMPORTANT: awarding_agency/funding_agency must be the FULL TOPTIER NAME,
    not a slug. Use 'Department of Defense', NOT 'department-of-defense'.
    Slugs silently return zero results, and so does any name that is…

Input parameters:

- `award_amount_max`
- `award_amount_min`
- `award_ids`
- `award_type` (string)
- `awarding_agency`
- `awarding_subagency`
- `contract_pricing_type_codes`
- `date_type`
- `def_codes`
- `extent_competed_type_codes`
- `funding_agency`
- `keywords`
- `limit` (integer)
- `naics_codes`
- `order` (string)
- `page` (integer)
- `place_of_performance_state`
- `program_numbers`
- `psc_codes`
- `recipient_name`
- `set_aside_type_codes`
- `sort`
- `time_period_end`
- `time_period_start`

### `get_award_count` (~532 tokens)

Count awards matching filters, broken down by award category.

    Returns counts grouped by: contracts, idvs, grants, loans, direct_payments, other.
    Use this for dimensional analysis: how many FFP vs T&M awards, how many
    competed vs sole-source, how many small business set-asides, etc.

    Unlike search_awards, this returns total counts across ALL award categories
    in a single call (not just the one specified in award_type). The award_type
    parameter is ignored here; filters apply to the count query directly.

    def_codes filters to Disaster Emergency Fund codes; see
    get_def_codes_reference().

    At least one filter is required (the API rejects empty filter sets with HTTP 400).
    Typical usage: pass time_period_start + time_period_end, or a keywords/agency filter.

    date_type controls the award date window. Omitted (the default),
    the latest action must be on/after the window start and the first signing
    on/before its end. This interval overlap does NOT prove an action occurred
    inside the window. For actual dated actions use spending_by_transaction,
    read every page, and deduplicate award identifiers for distinct awards;
    get_transactions provides a discovered award's complete action history.
    'action_date' bounds the latest action, not any action; 'date_signed'
    bounds first signing; 'last_modified_date' bounds the latest update.
    'new_awards_only' keeps awards first signed in the window.
    date_type needs time_period_start and/or time_period_end.

    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.

Input parameters:

- `award_amount_max`
- `award_amount_min`
- `award_type` (string)
- `awarding_agency`
- `awarding_subagency`
- `contract_pricing_type_codes`
- `date_type`
- `def_codes`
- `extent_competed_type_codes`
- `funding_agency`
- `keywords`
- `naics_codes`
- `place_of_performance_state`
- `program_numbers`
- `psc_codes`
- `recipient_name`
- `set_aside_type_codes`
- `time_period_end`
- `time_period_start`

### `spending_over_time` (~601 tokens)

Aggregate spending amounts over time, grouped by fiscal year, quarter, or month.

    Use this to visualize spending trends, identify fiscal-year-end spikes,
    or compare spending patterns across years.

    Note: The API returns fiscal_year as a STRING. Cast to int for numeric
    comparisons. quarter and month are FISCAL periods (month 1 = October,
    quarter 1 = October-December). Buckets are clipped to the window, so a
    calendar-2025 window returns a partial fiscal_year '2025' (January-
    September only) and a partial '2026' (October-December); neither is
    that whole fiscal year.

    DoD contract actions are published 90 days late, so when the window
    reaches into the last 90 days and DoD is in scope the answer carries a
    data_note: those months are understated, so don't read them as a drop.

    awarding_agency must be a TOPTIER agency name ('Department of Defense').
    Military departments are subtiers: pass
    awarding_subagency='Department of the Navy'. A non-toptier name in
    awarding_agency (or a subagency that does not belong to the given
    toptier) silently returns all-zero aggregates.

    At least one filter is required (the API rejects empty filter sets with HTTP 400).
    Typical usage: pass time_period_start + time_period_end.

    date_type controls the transaction date window. Omitted (the default)
    or 'action_date', it selects transaction actions inside the window.
    'date_signed' selects the associated award's first signing date;
    'last_modified_date' selects transaction update dates. 'new_awards_only'
    retains in-window actions associated with awards first signed in the
    window. These are transaction obligation totals, not new-award counts:
    use new_awards_over_time for counts. Award search/count tools use a
    different default interval-overlap rule.
    date_type needs time_period_start and/or time_period_end.

    program_numbers filters assistance awards by assistance listing (CFDA)
    number, e.g…

Input parameters:

- `award_type`
- `awarding_agency`
- `awarding_subagency`
- `contract_pricing_type_codes`
- `date_type`
- `def_codes`
- `extent_competed_type_codes`
- `funding_agency`
- `group` (string)
- `keywords`
- `naics_codes`
- `program_numbers`
- `psc_codes`
- `recipient_name`
- `time_period_end`
- `time_period_start`

### `spending_by_category` (~535 tokens)

Aggregate spending by a dimension (top vendors, top agencies, top NAICS, etc.).

    The 'category' parameter controls the grouping dimension. Common uses:
    - category='recipient': top vendors for a filter set (vendor landscape analysis)
    - category='awarding_subagency': which contracting offices within an agency
    - category='naics': which work categories got the most spending
    - category='psc': which product/service codes got the most spending
    - category='state_territory': geographic distribution
    - category='cfda': grant assistance listings

    Note: recipient category returns vendor names in ALL CAPS and may contain
    duplicates (subsidiaries, rebrands, re-registrations). For precise market
    share, apply name normalization to the returned 'name' field.

    At least one filter is required. An unfiltered call would silently
    aggregate the entire USASpending database (all years, all agencies),
    which is never what a caller wants.

    date_type controls the transaction date window. Omitted (the default)
    or 'action_date', it selects transaction actions inside the window.
    'date_signed' selects the associated award's first signing date;
    'last_modified_date' selects transaction update dates. 'new_awards_only'
    retains in-window actions associated with awards first signed in the
    window. These are transaction obligation totals, not new-award counts:
    use new_awards_over_time for counts. Award search/count tools use a
    different default interval-overlap rule.
    date_type needs time_period_start and/or time_period_end.

    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.

Input parameters:

- `award_type`
- `awarding_agency`
- `awarding_subagency`
- `category` (string, required)
- `contract_pricing_type_codes`
- `date_type`
- `def_codes`
- `extent_competed_type_codes`
- `funding_agency`
- `keywords`
- `limit` (integer)
- `naics_codes`
- `page` (integer)
- `program_numbers`
- `psc_codes`
- `recipient_name`
- `set_aside_type_codes`
- `time_period_end`
- `time_period_start`

### `get_award_detail` (~231 tokens)

Fetch full details for a single award by its generated_internal_id.

    Use the generated_internal_id value returned by search_awards to fetch
    the complete award record. Returns: PIID, full description, total
    obligation, recipient details, parent award info, latest transaction
    contract data (competition, set-aside, pricing type), period of
    performance, place of performance, NAICS hierarchy, PSC hierarchy,
    base and all options value, and sub-award totals. Award-level outlays and
    total_account_obligation are partial or lagged File C measures, not a
    reliable amount paid; compare with total_obligation for coverage.

    Accepts either a generated award id (CONT_AWD_*, CONT_IDV_*, ASST_NON_*,
    ASST_AGG_*) or the numeric internal database id from a prior response.

    Example generated_award_id format: CONT_AWD_N0002424C0085_9700_N0002421D0001_9700

Input parameters:

- `generated_award_id` (string, required)

### `get_transactions` (~136 tokens)

Fetch the full transaction (modification) history for an award.

    Every modification, option exercise, and de-obligation is a transaction.
    Modification number '0' is the original base award. Use to understand
    the full lifecycle of a contract including its descriptive text at each
    point in time.

    Returns per transaction: id, type, action_date, action_type,
    modification_number, description, federal_action_obligation.

Input parameters:

- `generated_award_id` (string, required)
- `limit` (integer)
- `order` (string)
- `page` (integer)
- `sort` (string)

### `get_award_funding` (~135 tokens)

Fetch File C funding data for an award: federal account, object class, program activity.

    Shows which Treasury accounts, object classes, and program activities
    funded an award. File C can be partial or lagged; these rows do not
    establish the full award obligation or amount paid to the contractor.

    Sort fields: reporting_fiscal_date, account_title,
    transaction_obligated_amount, object_class.

Input parameters:

- `generated_award_id` (string, required)
- `limit` (integer)
- `order` (string)
- `page` (integer)
- `sort` (string)

### `get_idv_children` (~274 tokens)

Fetch child awards (task/delivery orders) under an IDV.

    For a Multiple Award IDV, child_awards returns the task orders or delivery
    orders placed against it. For a parent IDV, child_idvs returns the
    downstream IDV structure. grandchild_awards walks the hierarchy.

    Field name differences from search_awards: children use 'piid' (not
    'Award ID'), 'obligated_amount' (not 'Award Amount'), and
    'generated_unique_award_id' (not 'generated_internal_id').

    An active vehicle can legitimately return zero children here:
    USASpending's award cross-linking has gaps. Treat an empty result as a
    reporting gap, not proof that no orders exist. Try get_idv_activity()
    on the same id. A search_awards call with keywords=['<IDV PIID>'] only
    finds orders whose description happens to cite the IDV, so it misses
    orders (often the largest) and is no proof of completeness.

Input parameters:

- `child_type` (string)
- `generated_idv_id` (string, required)
- `limit` (integer)
- `order` (string)
- `page` (integer)
- `sort` (string)

### `lookup_piid` (~383 tokens)

Look up awards by their exact PIID, across contracts AND IDVs.

    Looks for awards whose own PIID is exactly this value (the award_ids
    filter), in both contracts and IDVs, and says how many share it.
    match='exact' rows are the awards themselves: an IDV PIID returns the
    IDV (award_type='idv'; its Award Amount is what was obligated on the IDV
    record itself, usually 0, so use get_idv_amounts() for the order total).
    PIIDs are not unique: task and delivery order numbers like '0001' repeat
    under different parent IDVs, so check 'ambiguous' and tell matches apart
    by parent_idv_piid and Awarding Agency.

    Only when nothing has that exact PIID does it fall back to keyword
    search, and those rows come back as match='fuzzy': keyword search
    matches the award's own PIID and its description text, NOT its parent
    IDV, so a vehicle PIID or prefix returns only orders whose description
    happens to cite it. For the orders under a vehicle use get_idv_activity()
    or get_idv_children() with the IDV's generated_internal_id; for a
    contracting-office prefix (N00024, W91CRB, FA8650) use search_awards
    keywords with a time window.

    limit applies to contracts and to IDVs separately. Use
    get_award_detail() with a returned generated_internal_id for the full
    record. Handy for enriching PRISM, Contract Court, or FPDS exports where
    you have a PIID but don't know whether it's a contract or IDV.

Input parameters:

- `limit` (integer)
- `piid` (string, required)

### `autocomplete_psc` (~182 tokens)

Autocomplete lookup for Product/Service Codes (PSC).

    Use exact four-character codes ('R499', 'D302') or description keywords
    ('professional', 'application'). Returns matching PSC entries with
    code and description. Two-character families such as 'D3' can return
    no autocomplete matches even when their descendant codes exist.
    For partial PSC families or prefix expansion, use get_psc_filter_tree()
    instead: path='Service/D/D3/' lists the D3 descendants; start with
    path='Service/A/' to discover and drill into an AJ family.

    Minimum 2 characters required. Single-character queries return first-N
    alphabetical results from the upstream API (useless for matching) and
    empty strings return HTTP 400.

Input parameters:

- `limit` (integer)
- `search_text` (string, required)

### `autocomplete_naics` (~161 tokens)

Autocomplete lookup for NAICS codes.

    Accepts partial codes ('541') or keywords ('software'). Returns matching
    NAICS entries with code and description.

    Minimum 2 characters required. Short queries silently match substrings
    inside parenthetical notes (e.g. 'x' matches 'except') and produce
    nonsense results, so we require 2+ chars.

    exclude_retired defaults to True. The upstream NAICS taxonomy still
    returns codes retired in 2012/2017/2022; these are almost never what
    callers want. Set exclude_retired=False to include them.

Input parameters:

- `exclude_retired` (boolean)
- `limit` (integer)
- `search_text` (string, required)

### `list_toptier_agencies` (~61 tokens)

List all top-tier federal agencies tracked by USASpending.

    Returns agency codes, names, abbreviations, and current-year budgetary
    resources. Use the returned 'toptier_code' values with get_agency_overview().

### `get_agency_overview` (~200 tokens)

Get descriptive information for an agency: name, mission, website,
    data notes and DEF codes. It has no dollar figures; for spending use
    get_agency_obligations_by_award_category() (split by award type) or
    get_agency_budgetary_resources() (obligations and outlays by year).

    toptier_code is the 3- or 4-digit agency code (e.g. '097' for DoD,
    '075' for HHS, '080' for NASA). Shorter inputs like '97' are left-padded
    to '097' automatically. Get valid codes via list_toptier_agencies().

    fiscal_year defaults to the last completed fiscal year, not the current
    one (USAspending's own default). The answer always carries fiscal_year.

Input parameters:

- `fiscal_year`
- `toptier_code` (string, required)

### `get_agency_awards` (~191 tokens)

Get one obligation total and transaction count for an agency's awards
    in a fiscal year.

    The total covers ALL award types together (contracts, IDVs, grants,
    loans, direct payments, other), so for most civilian agencies it is far
    larger than contract spending (VA FY2026: $313B here vs $84B contracts).
    For the split by award type use get_agency_obligations_by_award_category().
    toptier_code is auto-padded to 3 digits if a shorter numeric value is
    supplied.

    fiscal_year defaults to the last completed fiscal year, not the current
    one (USAspending's own default, which right after October 1 holds only a
    few days of data). The answer always carries fiscal_year.

Input parameters:

- `fiscal_year`
- `toptier_code` (string, required)

### `get_naics_details` (~50 tokens)

Get details for a NAICS code (2-6 digits).

    Returns the NAICS description, parent categories, and child subcategories
    if applicable.

Input parameters:

- `code` (string, required)

### `get_psc_filter_tree` (~70 tokens)

Get the PSC hierarchy tree.

    Pass an empty path for the top-level. Drill down with paths like
    'Service/R/' to get the service professional services tree, or
    'Product/5' for product codes starting with 5.

Input parameters:

- `path` (string)

### `get_state_profile` (~233 tokens)

Get the federal award totals for recipients located in a US state.

    Examples: '06' = California, '48' = Texas, '24' = Maryland, '51' = Virginia.
    Returns one summary: state name and code, total_prime_amount and
    total_prime_awards (all award types together), loan face value,
    award_amount_per_capita, total_outlays, and population / median household
    income (older Census vintages: see pop_year and mhi_year). It has no
    breakdown by agency, recipient or district; for those use
    spending_by_geography() or spending_by_category() with a time window.

    year: a fiscal year like 2026, 'all' (every year on file) or 'latest'
    (USAspending's own default: the current fiscal year to date, which right
    after October 1 holds only a few days of data). Defaults to the last
    completed fiscal year. The answer always carries fiscal_year.

Input parameters:

- `state_fips` (string, required)
- `year`

### `search_subawards` (~166 tokens)

Search FFATA subaward reports on USASpending.

    Returns the FFATA subaward records (subcontracts under prime contracts and
    subawards under prime grants). Complementary to the SAM.gov FFATA endpoints
    but expressed at the USASpending data model.

    award_id: optional generated_internal_id (CONT_AWD_..., ASST_NON_..., etc.)
    to scope subawards to a single prime award. If omitted, returns subawards
    across all primes for the page.

    Pagination uses page (1-indexed) and limit (1-100).

Input parameters:

- `award_id`
- `limit` (integer)
- `order` (string)
- `page` (integer)
- `sort` (string)

### `spending_by_subaward_grouped` (~410 tokens)

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.

Input parameters:

- `award_type_codes`
- `awarding_agency`
- `def_codes`
- `funding_agency`
- `limit` (integer)
- `naics_codes`
- `order` (string)
- `page` (integer)
- `program_numbers`
- `psc_codes`
- `set_aside_type_codes`
- `sort`
- `time_period_end`
- `time_period_start`

### `search_recipients` (~167 tokens)

Search USASpending recipients (vendors and grantees) by keyword.

    Returns paginated recipients with their UEI, DUNS, name, and a recipient
    'id' hash for get_recipient_profile() and new_awards_over_time().
    For get_recipient_children(), use the UEI (or legacy DUNS) from the
    parent (-P) row, not a recipient hash.

    keyword can match recipient name, UEI, or DUNS. If omitted, returns the
    top recipients ranked by `sort`.

Input parameters:

- `award_type` (string)
- `keyword`
- `limit` (integer)
- `order` (string)
- `page` (integer)
- `sort` (string)

### `get_recipient_profile` (~172 tokens)

Get full profile for a recipient by their USASpending hash.

    Returns recipient details: name, UEI, DUNS, business categories, location,
    parent (if any), and lifetime award totals. The hash is the 'id' field
    returned by search_recipients(). (autocomplete_recipient does NOT return
    hashes; it is a name lookup only.)

    year: optional 'all' or a fiscal year like 2026 (int or str both
    accepted). Default is 'latest' (trailing 12 months). Parent (-P) totals
    include their children. Profiles use a separate recipient rollup and can
    differ from transaction searches by recipient_name and award-type scope.

Input parameters:

- `recipient_hash` (string, required)
- `year`

### `get_recipient_children` (~235 tokens)

Get the child recipients (subsidiaries) of a parent recipient.

    Pass the parent recipient's 12-character UEI (or legacy 9-digit DUNS).
    Do NOT pass a recipient hash: the /recipient/children/ endpoint is the
    one recipient endpoint keyed by UEI/DUNS, and it rejects hashes with
    HTTP 400. Get the UEI from search_recipients() results (the 'uei' field
    of the -P row) or from get_recipient_profile().

    Returns the child recipients, each with its own -C suffixed recipient_id
    hash usable with get_recipient_profile(). Useful for mapping corporate
    structures (e.g. Lockheed Martin parent -> all its subsidiaries).

    year: optional 'all', 'latest', or a fiscal year like 2026.

    The upstream endpoint returns a JSON array; it is wrapped here as
    {"results": [...], "total": N} to keep the dict-only response invariant.

Input parameters:

- `uei_or_duns` (string, required)
- `year`

### `autocomplete_recipient` (~131 tokens)

Find recipient names by partial name or UEI/DUNS.

    This is a recipient-name lookup; it does not supply the recipient hash
    for get_recipient_profile() or new_awards_over_time(), and its UEI/DUNS
    fields may be null. Pass a returned name to search_recipients(): use
    its 'id' hash for profiles/trends, and the UEI (or legacy DUNS) from
    the parent (-P) row for get_recipient_children().

Input parameters:

- `limit` (integer)
- `search_text` (string, required)

### `list_states` (~91 tokens)

List all states with their FIPS codes and award totals.

    Returns the full list of US states/territories with FIPS codes you can
    pass to get_state_profile().

    The /recipient/state/ endpoint returns a JSON array (not an object). We
    wrap it in {"results": [...]} to keep the tool return type consistent
    with every other endpoint in this MCP.

### `get_agency_budgetary_resources` (~88 tokens)

Get an agency's budgetary resources by fiscal year.

    Returns agency budgetary resources, obligations and outlays for each
    fiscal year on file, plus government-wide budgetary resources and the
    agency's obligations by reported fiscal period. This endpoint does not
    provide a discretionary-versus-mandatory breakdown.

Input parameters:

- `toptier_code` (string, required)

### `get_agency_sub_agencies` (~216 tokens)

List the subordinate (subtier) organizations of a toptier agency.

    Returns each sub-agency with its obligations, transaction count, and
    new-award count for the given fiscal year. Useful for finding the
    canonical subtier name to pass into search_awards() awarding_subagency.

    sort accepts name, total_obligations, transaction_count, or
    new_award_count (this endpoint has no outlay column; a former
    'total_outlays' option was rejected by the API with HTTP 400).

    fiscal_year defaults to the last completed fiscal year, not the current
    one (USAspending's own default, which right after October 1 holds only a
    few days of data). The answer always carries fiscal_year.

Input parameters:

- `fiscal_year`
- `limit` (integer)
- `order` (string)
- `page` (integer)
- `sort` (string)
- `toptier_code` (string, required)

### `get_agency_federal_accounts` (~155 tokens)

List the Treasury Account Symbols (federal accounts) used by an agency.

    Returns each federal account with its obligated amount and gross outlay
    for the given fiscal year. Useful for understanding how an agency's
    money flows through Treasury.

    fiscal_year defaults to the last completed fiscal year, not the current
    one (USAspending's own default, which right after October 1 holds only a
    few days of data). The answer always carries fiscal_year.

Input parameters:

- `fiscal_year`
- `limit` (integer)
- `order` (string)
- `page` (integer)
- `sort` (string)
- `toptier_code` (string, required)

### `get_agency_object_classes` (~154 tokens)

List the object class breakdown (what an agency spends money on).

    Object classes are OMB categories: Personnel Compensation, Travel,
    Contractual Services, Equipment, Grants, etc. Useful for understanding
    what types of expenditures an agency makes.

    fiscal_year defaults to the last completed fiscal year, not the current
    one (USAspending's own default, which right after October 1 holds only a
    few days of data). The answer always carries fiscal_year.

Input parameters:

- `fiscal_year`
- `limit` (integer)
- `order` (string)
- `page` (integer)
- `sort` (string)
- `toptier_code` (string, required)

### `get_agency_program_activities` (~156 tokens)

List the program activities (specific programs) within an agency.

    Program activities are the specific named programs that obligate funds
    (e.g., 'Cybersecurity and Infrastructure Security Agency'). Useful for
    pinpointing which program funds a specific activity.

    fiscal_year defaults to the last completed fiscal year, not the current
    one (USAspending's own default, which right after October 1 holds only a
    few days of data). The answer always carries fiscal_year.

Input parameters:

- `fiscal_year`
- `limit` (integer)
- `order` (string)
- `page` (integer)
- `sort` (string)
- `toptier_code` (string, required)

### `get_agency_obligations_by_award_category` (~182 tokens)

Get an agency's obligation breakdown by award category.

    Returns total obligated dollars split by category: contracts, IDVs, grants,
    loans, direct payments, other. Quick way to see what mix of award types
    an agency uses (heavy contractor agency vs grant-issuing agency vs mixed).
    For DoD ('097') a fiscal year whose last 90 days are not yet published
    (DoD's 90-day delay) carries a data_note saying the total is understated.

    fiscal_year defaults to the last completed fiscal year, not the current
    one (USAspending's own default, which right after October 1 holds only a
    few days of data). The answer always carries fiscal_year.

Input parameters:

- `fiscal_year`
- `toptier_code` (string, required)

### `get_award_funding_rollup` (~72 tokens)

Get a rollup of an award's funding totals.

    Returns total transaction obligated amount, awarding agency count,
    funding agency count, and federal account count for a single award.
    Useful for a one-line summary of an award's funding picture.

Input parameters:

- `award_id` (string, required)

### `get_award_subaward_count` (~39 tokens)

Count of subawards (FFATA subcontracts/subawards) reported on an award.

Input parameters:

- `award_id` (string, required)

### `get_award_federal_account_count` (~34 tokens)

Count of distinct federal accounts (TAS) funding an award.

Input parameters:

- `award_id` (string, required)

### `get_award_transaction_count` (~30 tokens)

Count of transactions (modifications) on an award.

Input parameters:

- `award_id` (string, required)

### `awards_last_updated` (~46 tokens)

Get the timestamp of the last USASpending award data refresh.

    Use this to determine data freshness when comparing to other sources
    (SAM.gov Contract Awards API for example).

### `spending_by_transaction` (~314 tokens)

Search at the transaction (modification) level.

    Unlike search_awards which returns one row per award, this returns one
    row per transaction (initial action plus every modification). Useful for
    tracking obligation events over time, ceiling adjustments, deobligations,
    and admin mods.

    recipient_uei is matched through the API's recipient text search (which
    covers name, UEI, and DUNS), so pass the plain 12-character UEI.

    Returns standard transaction fields: Action Date, Mod, Award ID,
    Action Type, Awarding Agency, Recipient Name.

    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.

Input parameters:

- `award_amount_max`
- `award_amount_min`
- `award_type` (string)
- `awarding_agency`
- `funding_agency`
- `keywords`
- `limit` (integer)
- `naics_codes`
- `order` (string)
- `page` (integer)
- `program_numbers`
- `psc_codes`
- `recipient_uei`
- `set_aside_type_codes`
- `sort` (string)
- `time_period_end`
- `time_period_start`

### `spending_by_geography` (~229 tokens)

Geographic breakdown of spending.

    scope: 'recipient_location' (where the recipient is) or 'place_of_performance'
    (where the work happens).
    geo_layer: 'state', 'county', or 'district'.

    At least one filter is required. The API returns HTTP 500 on an empty
    filter set, so the requirement is enforced here with a clear error.

    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.

Input parameters:

- `award_type` (string)
- `awarding_agency`
- `def_codes`
- `funding_agency`
- `geo_layer` (string)
- `naics_codes`
- `program_numbers`
- `psc_codes`
- `scope` (string)
- `time_period_end`
- `time_period_start`

### `new_awards_over_time` (~159 tokens)

Pipeline trend of new awards to a recipient over time.

    REQUIRES recipient_id (the recipient hash with -P suffix for parent-level
    rollup, or -R for a single recipient). Returns counts of new awards
    grouped by month, quarter, or fiscal year.

    The endpoint rejects calls without recipient_id with HTTP 422, and it
    also requires a time_period. When you omit the dates, a default range
    covering all searchable data (2007-10-01 through 2099-09-30) is sent
    automatically.

Input parameters:

- `group` (string)
- `recipient_id` (string, required)
- `time_period_end`
- `time_period_start`

### `get_idv_amounts` (~81 tokens)

Top-line amounts for an Indefinite Delivery Vehicle (IDV).

    Returns child IDV count, child award count, child award total obligation,
    and base/option values rolled up across all task/delivery orders under
    the IDV. Pass a CONT_IDV_* generated_internal_id.

Input parameters:

- `award_id` (string, required)

### `get_idv_funding` (~143 tokens)

List File C funding records associated with an IDV.

    Rows can identify the IDV itself as well as associated awards; they are
    not a complete list of child orders. File C coverage can be partial or
    lagged and does not establish the full child-order obligation or amount
    paid. Use get_idv_amounts() for reported child-order obligation totals
    and get_idv_activity() or get_idv_children() for child-order records.

Input parameters:

- `award_id` (string, required)
- `limit` (integer)
- `order` (string)
- `page` (integer)
- `sort` (string)

### `get_idv_funding_rollup` (~37 tokens)

Funding rollup totals for an IDV (single dict, not paginated).

Input parameters:

- `award_id` (string, required)

### `get_idv_activity` (~160 tokens)

List child task/delivery orders awarded under an IDV.

    Results are ALWAYS sorted by obligated amount, descending; the endpoint
    accepts no sort or order parameters. (Earlier releases exposed sort/order
    here, but the API silently ignored them: the advertised default of
    period_of_performance_start_date was never the actual ordering. Round 10
    audit finding.) For date-ordered children use get_idv_children(), whose
    endpoint does honor sort/order.

    hide_edge_cases=True filters out child awards missing obligated/awarded
    amounts or end dates.

Input parameters:

- `award_id` (string, required)
- `hide_edge_cases` (boolean)
- `limit` (integer)
- `page` (integer)

### `autocomplete_awarding_agency` (~80 tokens)

Find awarding agency names by partial match.

    USASpending search filters require the EXACT awarding agency name
    (slugs return zero). Use this to resolve a partial name to the canonical
    one before passing to search_awards() awarding_agency parameter.

Input parameters:

- `limit` (integer)
- `search_text` (string, required)

### `autocomplete_funding_agency` (~40 tokens)

Find funding agency names by partial match (companion to awarding agency).

Input parameters:

- `limit` (integer)
- `search_text` (string, required)

### `autocomplete_cfda` (~53 tokens)

Find CFDA (Catalog of Federal Domestic Assistance) program numbers
    by partial title or program number. CFDA codes are used in grants.

Input parameters:

- `limit` (integer)
- `search_text` (string, required)

### `autocomplete_glossary` (~39 tokens)

Find glossary terms (acquisition + spending vocabulary) by partial match.

Input parameters:

- `limit` (integer)
- `search_text` (string, required)

### `get_award_types_reference` (~76 tokens)

Return the full mapping of award type codes to descriptions.

    Returns the canonical reference: contracts (A=BPA Call, B=Purchase Order,
    C=Delivery Order, D=Definitive Contract), IDVs, grants, loans, etc.
    Authoritative source if you're unsure what a code letter means.

### `get_def_codes_reference` (~54 tokens)

Return all Disaster Emergency Fund (DEFC) codes with public laws.

    DEFCs are used to filter awards funded by specific supplemental
    appropriations (COVID-19, IIJA, IRA, etc.).

### `get_glossary` (~37 tokens)

Get the full USASpending glossary of acquisition + spending terms.

Input parameters:

- `limit` (integer)
- `page` (integer)

### `get_submission_periods` (~73 tokens)

List the reporting calendar and submission/certification deadlines.

    Returns available fiscal reporting periods and their scheduled start,
    due, certification and reveal dates. These are global calendar periods,
    not records of when individual agencies actually submitted or certified
    data. A listed period does not establish complete agency data coverage.

### `list_federal_accounts` (~132 tokens)

List Treasury federal accounts (TAS) with budgetary resources.

    keyword filters by account name or AID. fiscal_year controls the reported
    budgetary-resource values, not which account rows are included. When
    omitted, the source uses its latest available fiscal year, which may
    differ from the current fiscal year; check the returned fy value.
    sort is a dict like {'field':'budgetary_resources','direction':'desc'}.

Input parameters:

- `fiscal_year`
- `keyword`
- `limit` (integer)
- `page` (integer)
- `sort`

### `get_federal_account_detail` (~31 tokens)

Get an individual federal account's metadata + budgetary resources.

Input parameters:

- `account_code` (string, required)

### `get_federal_account_object_classes` (~180 tokens)

Get the object class breakdown of obligations for a federal account.

    IMPORTANT: the returned obligations are CUMULATIVE across all reported
    fiscal years (FY2017 onward, the DATA Act window), not a single year.
    They are NOT comparable to get_federal_account_fy_snapshot(), which is
    single-year (verified live: account 021-0725 summed to $3.38B here vs
    $0.42B obligated in its FY2024 snapshot). The upstream endpoint has no
    year control: a fiscal_year body parameter is accepted but ignored, so
    none is exposed here.

    Note: this endpoint requires POST (not GET like the other federal account
    sub-endpoints). Live audit caught this; the body is empty.

Input parameters:

- `account_code` (string, required)

### `get_federal_account_program_activities` (~177 tokens)

List program activity codes and names associated with a federal account.

    The source lists distinct programs across all reported fiscal years; it
    has no fiscal-year filter and includes no dollar amounts. fiscal_year is
    retained for compatibility, but does not filter this list. The response
    explicitly discloses any requested year that was not applied.

    Retrieves source pages internally, up to 2,000 records, and reports whether
    the list is complete. For single-year account resources and obligations,
    use get_federal_account_fy_snapshot with the numeric account_id returned
    by list_federal_accounts. get_agency_program_activities provides fiscal-year
    program amounts for an agency, not for this individual federal account.

Input parameters:

- `account_code` (string, required)
- `fiscal_year`

### `get_federal_account_fy_snapshot` (~111 tokens)

Get a single-fiscal-year snapshot of a federal account's resources.

    Important: this endpoint takes the numeric `account_id` (e.g. 4595), NOT
    the alphanumeric `account_number` (e.g. "027-5183") used by the other
    federal-account endpoints. The list_federal_accounts response includes
    both fields per record. Pass the integer account_id here.

Input parameters:

- `account_id` (required)
- `fiscal_year`

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-1102tools-usaspending-gov-mcp/usaspending#diagnostics

## Score history

- 2026-11-05: 68
- 2026-11-04: 68
- 2026-11-03: 67
- 2026-11-02: 67
- 2026-11-01: 67
- 2026-10-31: 66
- 2026-10-30: 66
- 2026-10-29: 65
- 2026-10-28: 65
- 2026-10-27: 64
- 2026-10-26: 64
- 2026-10-25: 63
- 2026-10-24: 63
- 2026-10-23: 62
- 2026-10-22: 62
- 2026-10-21: 61

## Common questions

### What is the USASpending.gov MCP server?

USASpending.gov is an MCP server listed in the public MCP registry as com.1102tools/usaspending-gov-mcp. USAspending.gov contracts, grants, loans, subawards, recipients, agencies, and federal accounts. This page covers its hosted endpoint (https://usaspending.1102tools.com/mcp).

### Is the USASpending.gov MCP server safe to use?

USASpending.gov scores 68 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the USASpending.gov MCP server expose?

USASpending.gov exposes 55 tools: search_awards, get_award_count, spending_over_time, spending_by_category, get_award_detail, and 50 more. Their descriptions and schemas cost roughly 9,933 tokens of context every time the server is loaded.

### Does the USASpending.gov MCP server require authentication?

No. We connected to USASpending.gov without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the USASpending.gov MCP server still maintained?

USASpending.gov is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the USASpending.gov MCP server?

VerifyMCP ran 12 checks on USASpending.gov, covering TLS certificate, Authorization, HSTS header, DNSSEC and 8 more. One item could not be completed, a gap on our side rather than a finding about USASpending.gov: HTTPS. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://usaspending.1102tools.com/mcp
- Repository: https://github.com/1102tools-dev/federal-contracting-mcps
- Website: https://1102tools.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-1102tools-usaspending-gov-mcp/usaspending.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-1102tools-usaspending-gov-mcp/usaspending/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/com-1102tools-usaspending-gov-mcp/usaspending.json
- HTML version of this page: https://verifymcp.io/servers/com-1102tools-usaspending-gov-mcp/usaspending
