USA Spending MCP Server

USA Spending MCP Server

An MCP server for interacting with the USAspending.gov API, supporting local use with Claude Desktop and cloud deployment with login.gov authentication.

Category
Visit Server

README

USA Spending MCP Server

⚠️ DISCLAIMER: This is a proof of concept and is not intended for production use.

An MCP server for interacting with the USAspending.gov API, with optional login.gov authentication for cloud deployment.

Requirements

  • Python 3.11+
  • uv

Installation

Quick Install

uv tool install git+https://github.com/GSA-TTS/usa-spending-mcp-server

Development Setup

git clone https://github.com/GSA-TTS/usa-spending-mcp-server
cd usa-spending-mcp-server
uv sync --dev

Running Modes

The server supports two modes:

Mode Command Use Case
stdio usa-spending-mcp-server Local use with Claude Desktop
HTTP usa-spending-mcp-server-http Cloud deployment with login.gov auth

Local Setup (Claude Desktop)

  1. Get the installed tool path:

    which usa-spending-mcp-server
    
  2. Add to your Claude MCP config (~/.claude/claude_desktop_config.json):

    {
      "mcpServers": {
        "usa-spending": {
          "command": "/path/to/usa-spending-mcp-server"
        }
      }
    }
    

HTTP Server with Login.gov Authentication

The HTTP server uses login.gov OIDC with PKCE for authentication, suitable for cloud.gov deployment.

Environment Variables

Variable Required Description
REQUIRE_AUTH No Set to "false" to disable auth (default: "true")
BASE_URL If auth enabled Public URL of the server (e.g., https://usa-spending-mcp.app.cloud.gov)
LOGINGOV_CLIENT_ID If auth enabled Your login.gov application client ID
JWT_SIGNING_KEY If auth enabled Secret key for signing JWTs (generate with python -c "import secrets; print(secrets.token_hex(32))")
LOGINGOV_CONFIG_URL No OIDC discovery URL (defaults to login.gov sandbox)
PORT No Server port (default: 8080)

Login.gov Setup

  1. Register at partners.login.gov
  2. Create a new OIDC application:
    • Protocol: OpenID Connect with PKCE (public client)
    • Redirect URI: {BASE_URL}/auth/callback
  3. Note your client ID for LOGINGOV_CLIENT_ID

Running Locally

Without authentication (development):

uv run task dev

With authentication:

export BASE_URL=http://localhost:8080
export LOGINGOV_CLIENT_ID=your-client-id
export JWT_SIGNING_KEY=$(python -c "import secrets; print(secrets.token_hex(32))")
uv run task dev-auth

Cloud.gov Deployment

  1. Set environment variables:

    cf set-env usa-spending-mcp-server BASE_URL https://usa-spending-mcp.app.cloud.gov
    cf set-env usa-spending-mcp-server LOGINGOV_CLIENT_ID your-client-id
    cf set-env usa-spending-mcp-server JWT_SIGNING_KEY your-signing-key
    
  2. Deploy:

    cf push
    

Development

Available Tasks

uv run task dev          # Run HTTP server without auth
uv run task dev-auth     # Run HTTP server with auth
uv run task lint         # Check code with ruff
uv run task lint-fix     # Fix linting issues
uv run task format       # Format code with ruff
uv run task test         # Run tests
uv run task test-cov     # Run tests with coverage
uv run task ci           # Run all CI checks

Code Quality

This project uses ruff for linting and formatting.

LLM-Based Evals (Optional)

For local testing of tool behavior using mcp-evals:

cd evals
npm install
ANTHROPIC_API_KEY=your-key npm run eval

See evals/README.md for details.

Project Structure

src/
  usa_spending_mcp_server/
    server.py        # stdio MCP server (Claude Desktop)
    server_http.py   # HTTP server with auth (cloud.gov)
    auth.py          # login.gov OIDC authentication
tests/               # Python unit tests
evals/               # LLM-based evals (optional)
manifest.yml         # cloud.gov deployment config
pyproject.toml

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured