e-rate-mcp
v2.1.0
Published
MCP server for USAC E-Rate data
Maintainers
Readme
E-Rate Tools MCP Server
MCP server providing 9 tools for querying USAC E-Rate datasets via Model Context Protocol.
Remote Server
Production endpoint: https://mbabb.fi.ncsu.edu/e-rate-mcp
Client Configuration
ChatGPT (Direct Connection)
ChatGPT connects directly to the remote /mcp endpoint via JSON-RPC 2.0 protocol.
Setup:
- Go to: Settings → Apps & Connectors → Advanced settings → Enable Developer Mode
- Go to: Settings → Connectors → Create
- Configure:
- Name: E-Rate Tools
- Description: USAC E-Rate data API with 9 tools for funding requests, line items, budgets, and entity data
- Connector URL:
https://mbabb.fi.ncsu.edu/e-rate-mcp/mcp
No local installation required.
Claude Desktop (Requires NPM Proxy)
Claude Desktop only supports stdio transport, so a local TypeScript proxy is required to bridge stdio to the remote HTTP server.
Installation:
npm install -g e-rate-mcpConfiguration:
Add to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"e-rate-tools": {
"command": "npx",
"args": ["-y", "e-rate-mcp"]
}
}
}The proxy connects to https://mbabb.fi.ncsu.edu/e-rate-mcp by default.
Tools
All tools support cursor-based pagination and return inline data (NO resource URIs).
Pattern: Returns 50 rows per page by default, use next_cursor to fetch additional pages.
- usac_download - Download datasets with pagination (page_size: 50, max: 100)
- usac_stream - Stream large datasets in chunks
- usac_dictionary - Get dataset schema and column information
- usac_get_frn_status - FRN status with auto-deduplication + pagination
- usac_get_line_items - Line items with auto-deduplication + pagination
- usac_get_basic_info - Basic application info with auto-deduplication + pagination
- usac_get_recipients - Recipients of service + pagination
- usac_get_cat2_budgets - Category 2 budgets (FY2021+) + pagination
- usac_get_entity_data - Supplemental entity data + pagination
Pagination Example:
// First page
{"view": "CONSULTANTS", "year": 2025, "page_size": 50}
// Returns:
{
"total_rows": 975,
"returned_rows": 50,
"next_cursor": "NTA=",
"has_more": true,
"data": [...]
}
// Next page
{"view": "CONSULTANTS", "year": 2025, "page_size": 50, "cursor": "NTA="}Datasets
- FRN_STATUS - Funding request status
- FRN_LINE_ITEMS - Service line items
- FRN_RECIPIENTS_OF_SERVICE - Entity-to-FRN mappings
- FRN_BASIC_INFORMATION - Form 471 metadata
- SUPPLEMENTAL_ENTITY_DATA - Organization profiles
- CONSULTANTS - Consultant engagements
- CAT2_BUDGETS - Category 2 budgets (FY2021+)
- RHC_COMMITMENTS_AND_DISBURSEMENTS - Rural Health Care
Development
Local Testing (Stdio)
cd mcp_server
export PYTHONPATH=/path/to/project/src
uv run python server.pyLocal Testing (HTTP)
cd mcp_server
export PYTHONPATH=/path/to/project/src
uv run python http_server.pyServer starts on http://localhost:8002
Endpoints:
POST /mcp- JSON-RPC 2.0 endpoint (ChatGPT)GET /resources- List resourcesGET /resources/{uri}- Read resourceGET /tools- List toolsPOST /tools/{name}- Call toolGET /prompts- List promptsPOST /prompts/{name}- Get promptGET /health- Health check
Deployment
Production deployment via Docker:
./deploy.shBuilds Docker image and deploys to production server.
Architecture
mcp_server/
├── server/ # Python MCP server
│ ├── main.py # Server orchestration
│ ├── http_wrapper.py # HTTP + JSON-RPC 2.0 wrapper
│ ├── registry.py # Tool specifications
│ ├── tools.py # Tool handlers
│ ├── resources.py # Resource handlers
│ ├── prompts.py # Prompt templates
│ ├── cache.py # Download cache
│ └── descriptions.py # Dataset metadata
├── src/
│ └── index.ts # NPM proxy (stdio → HTTP)
├── http_server.py # HTTP entry point
├── server.py # Stdio entry point
├── Dockerfile # Docker image
└── package.json # NPM package configNPM Package
The NPM package e-rate-mcp is a thin TypeScript proxy that:
- Accepts stdio requests from Claude Desktop
- Forwards to remote HTTP server at https://mbabb.fi.ncsu.edu/e-rate-mcp
- Returns responses via stdio
Source: src/index.ts (200 lines)
Why needed: Claude Desktop only supports stdio transport, not HTTP.
License
MIT - Part of e-rate-tools project for NC State Connectivity Initiative
