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., "@NPI MCP Serverfind the NPI for Dr. Jane Smith in Chicago"
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.
NPI MCP Server
An offline-capable MCP (Model Context Protocol) server for the CMS NPPES NPI Registry, written in Python, deployable on Azure App Service as a Docker container.
Features
β Works offline β uses a local SQLite database
π Auto-updates every 7 days from CMS NPPES (background scheduler)
π³ Docker-ready with multi-stage build
βοΈ Azure App Service deployment with persistent storage
π Full-text search with wildcard support
βοΈ Luhn validation for NPI check digits
π ~8M+ provider records from the full NPPES dataset
MCP Tools
Tool | Description |
| Search by name, specialty, city, state, ZIP |
| Look up a specific NPI number |
| Validate NPI format + Luhn check digit (offline) |
| Check DB record count, last/next update time |
| Manually trigger a data refresh |
Quick Start (Local)
1. Build and run with Docker Compose
git clone <this-repo>
cd npi-mcp-server
# Build and start
docker compose up -d
# Trigger initial data load (one-time, ~30-60 min)
curl -X POST "http://localhost:8000/update?force=true"
# Monitor progress
docker compose logs -f2. Check health
curl http://localhost:8000/health3. Connect MCP client
Point your MCP client to: http://localhost:8000/sse
Azure Deployment
Prerequisites
Azure CLI installed:
brew install azure-clior see docsDocker installed
Azure subscription
Deploy
# Log in to Azure
az login
# Edit variables at top of script
nano deploy-azure.sh
# Run deployment (takes ~5 minutes)
chmod +x deploy-azure.sh
./deploy-azure.shAfter deployment
Trigger the initial NPI data load (one-time, requires internet):
curl -X POST "https://your-app.azurewebsites.net/update?force=true"The full NPPES file is ~900MB compressed / ~8GB uncompressed. Loading takes 30-60 minutes. After that, weekly incremental updates run automatically.
Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Azure App Service β
β β
β ββββββββββββββββ ββββββββββββββββββββββββββββ β
β β FastAPI/SSE βββββΆβ MCP Server (mcp SDK) β β
β β HTTP layer β β - npi_search β β
β ββββββββββββββββ β - npi_lookup β β
β β - npi_validate β β
β ββββββββββββββββ β - db_status/update β β
β β Background β ββββββββββββββββββββββββββββ β
β β Scheduler β β β
β β (every 7d) β βΌ β
β ββββββββββββββββ ββββββββββββββββββββββββββββ β
β β SQLite Database β β
β β /data/npi.db β β
β β (~5-10 GB) β β
β ββββββββββββββββββββββββββββ β
β β β
β ββββββββββββββββββββββββββββ β
β β Azure File Share β β
β β (persistent volume) β β
β ββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β (weekly, when internet available)
βΌ
βββββββββββββββββββββββ
β CMS NPPES β
β download.cms.gov β
βββββββββββββββββββββββEnvironment Variables
Variable | Default | Description |
|
| SQLite database path |
|
| Days between auto-updates |
|
| Download timeout in seconds |
|
| HTTP server port |
API Endpoints
Endpoint | Method | Description |
| GET | Server info |
| GET | Health check (used by Azure) |
| GET | DB status (record count, last update) |
| POST | Trigger manual update ( |
| GET | MCP SSE connection endpoint |
| POST | MCP messages endpoint |
Storage Requirements
Component | Size |
NPPES ZIP download | ~900 MB |
SQLite database | ~5-10 GB |
Recommended Azure File Share | 50 GB |
Use Azure App Service B2 or higher (2 vCPU, 3.5 GB RAM minimum).
Connecting MCP Clients
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"npi-registry": {
"url": "https://your-app.azurewebsites.net/sse",
"transport": "sse"
}
}
}Local stdio mode (for dev/testing)
python main.pyData Source
Data comes from CMS NPPES, the official National Plan and Provider Enumeration System. Updated monthly (full) and weekly (incremental) by CMS.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.