Skip to main content
Glama
haydentbs

USAspending MCP Server

by haydentbs
README.md
# USAspending MCP Server

Read-only [Model Context Protocol](https://modelcontextprotocol.io/) server for exploring federal spending through the [USAspending.gov API](https://api.usaspending.gov/docs/endpoints).

Use it from Claude Desktop, Codex, Cursor, VS Code, or any MCP-compatible AI tool to ask questions like:

- "Which agencies awarded the most climate-related obligations in FY2025?"
- "Find top recipients for semiconductor-related federal spending."
- "Show spending over time for affordable housing."
- "Get the details behind this USAspending award ID."
- "Search transactions for Department of Energy clean energy awards."

USAspending.gov does not require an API key for these endpoints. This server is intentionally read-only and uses local `stdio` transport.

## Why This Exists

USAspending.gov is powerful, but the API has many endpoints and detailed filter shapes. This MCP server gives AI agents a safer, typed tool layer for common federal-spending workflows:

- agency and recipient lookup
- award and transaction search
- spending aggregation by category, geography, and time
- award profile lookup
- recipient new-award momentum
- safe generic calls for documented `/api/v2/` endpoints

It is useful for public-sector market analysis, policy research, impact-investing screens, federal contractor diligence, grant monitoring, and thematic government-spending research.

## Tools

| Tool | What it does |
| --- | --- |
| `usaspending_list_toptier_agencies` | List federal toptier agencies and summary budgetary fields. |
| `usaspending_autocomplete_recipient` | Find recipient names, UEIs, and DUNS values. |
| `usaspending_autocomplete_agency` | Find awarding or funding agency offices. |
| `usaspending_search_awards` | Search awards/subawards with Advanced Search filters and selected fields. |
| `usaspending_spending_by_category` | Aggregate spending by agency, recipient, NAICS, PSC, federal account, state, and more. |
| `usaspending_spending_by_geography` | Aggregate by state, county, district, or country. |
| `usaspending_spending_over_time` | Aggregate by fiscal year, calendar year, quarter, or month. |
| `usaspending_new_awards_over_time` | Count new awards for a recipient by fiscal year, quarter, or month. |
| `usaspending_search_transactions` | Search individual transaction records. |
| `usaspending_count_transactions` | Count matching transactions by award category. |
| `usaspending_get_award` | Fetch detailed award profile data. |
| `usaspending_call_endpoint` | Safely call documented read-only `/api/v2/` endpoints not covered by a purpose-built tool. |

The generic endpoint tool blocks job/file-generating download paths, while allowing the read-only `/api/v2/download/count/` preflight endpoint.

## Requirements

- Node.js 20 or newer
- npm

No USAspending API key is required.

## Install From Source

```bash
git clone https://github.com/haydentbs/usaspending-mcp-server.git
cd usaspending-mcp-server
npm install
npm run build
```

Run a live API smoke test:

```bash
npm run smoke
```

Run the MCP regression suite:

```bash
npm run test:mcp
```

## Add It To An AI Tool

Build the project first, then point your MCP client at `dist/index.js`.

### Claude Desktop

Add this to your Claude Desktop MCP config:

```json
{
  "mcpServers": {
    "usaspending": {
      "command": "node",
      "args": ["/absolute/path/to/usaspending-mcp-server/dist/index.js"]
    }
  }
}
```

On macOS, Claude Desktop config is commonly located at:

```text
~/Library/Application Support/Claude/claude_desktop_config.json
```

Restart Claude Desktop after editing the config.

### Codex

Add this to `~/.codex/config.toml`:

```toml
[mcp_servers.usaspending]
command = "node"
args = ["/absolute/path/to/usaspending-mcp-server/dist/index.js"]
```

Restart or reload your Codex session so the new MCP namespace is discovered.

### Cursor, VS Code, And Other MCP Clients

Most MCP clients use the same server definition shape:

```json
{
  "mcpServers": {
    "usaspending": {
      "command": "node",
      "args": ["/absolute/path/to/usaspending-mcp-server/dist/index.js"]
    }
  }
}
```

If your tool supports per-project MCP config, place the same server definition there. If it supports global config, add it globally.

## Example Prompts

After connecting the MCP server, try:

```text
List the top FY2025 awarding agencies for clean energy spending.
```

```text
Compare FY2021-FY2025 federal spending over time for semiconductor-related awards.
```

```text
Find the top recipients for wastewater-related spending in FY2025 and show their NAICS concentration.
```

```text
Search FY2025 Department of Energy contract awards mentioning hydrogen and return award IDs, recipients, amounts, and descriptions.
```

## Example Filters

USAspending Advanced Search filters are passed through as JSON. Most analysis should include an explicit `time_period`.

Defense contract awards in FY2025:

```json
{
  "filters": {
    "time_period": [{ "start_date": "2024-10-01", "end_date": "2025-09-30" }],
    "agencies": [{ "type": "awarding", "tier": "toptier", "name": "Department of Defense" }],
    "award_type_codes": ["A", "B", "C", "D"]
  },
  "limit": 10,
  "page": 1
}
```

Spending by NAICS for a keyword:

```json
{
  "category": "naics",
  "filters": {
    "keywords": ["semiconductor"],
    "time_period": [{ "start_date": "2024-10-01", "end_date": "2025-09-30" }]
  }
}
```

Recipient new-award trend:

```json
{
  "group": "fiscal_year",
  "filters": {
    "recipient_id": "5ad7895c-192b-21cd-8baf-92c6dce0b593-C",
    "time_period": [{ "start_date": "2020-10-01", "end_date": "2025-09-30" }]
  }
}
```

## Notes And Limitations

- USAspending values are obligations/outlays from federal reporting, not company revenue.
- Keyword screens are directional. For production research, combine keywords with NAICS, PSC, agency, assistance listing, and award-type filters.
- Some USAspending endpoints enforce award-type group constraints. For example, award search should not mix contracts, grants, loans, direct payments, and IDVs in a single `award_type_codes` filter.
- Large federal-spending queries can be slow. The server uses a request timeout, configurable with `USASPENDING_TIMEOUT_MS`.

## Development

```bash
npm install
npm run build
npm run test:mcp
```

Run the server locally:

```bash
npm start
```

Run against TypeScript source during development:

```bash
npm run dev
```

## License

MIT

TDQS

A3.8/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct operation on USAspending data, from autocomplete to searching, counting, and aggregation. No two tools have overlapping purposes, ensuring clear selection by an agent.

Naming Consistency5/5

All tools follow a consistent 'usaspending_verb_noun' pattern with snake_case, making it predictable which action and resource a tool handles.

Tool Count5/5

With 12 tools covering core operations on federal spending data, the count is well-scoped. Each tool serves a clear purpose without unnecessary redundancy.

Completeness5/5

The tool set covers all major aspects of USAspending: autocomplete, search, count, aggregation, and listing, plus a generic endpoint caller for edge cases. There are no obvious gaps for common queries.

Maintenance

ActivityInactive
ResponsivenessNo issues