Query MIMIC-IV medical data using natural language through MCP clients
Transform medical data analysis with AI! Ask questions about MIMIC-IV data in plain English and get instant insights. Choose between local demo data (free) or full cloud dataset (BigQuery).
- Natural Language Queries: Ask questions about MIMIC-IV data in plain English
- Local SQLite: Fast queries on demo database (free, no setup)
- BigQuery Support: Access full MIMIC-IV dataset on Google Cloud
- Enterprise Security: OAuth2 authentication with JWT tokens and rate limiting
- SQL Injection Protection: Read-only queries with comprehensive validation
πΊ Prefer video tutorials? Check out step-by-step video guides covering setup, PhysioNet configuration, and more.
We use uvx to run the MCP server. Install uv from the official installer, then verify with uv --version.
macOS and Linux:
curl -LsSf https://astral.sh/uv/install.sh | shWindows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Verify installation:
uv --versionSkip this if using SQLite demo database.
-
Install Google Cloud SDK:
- macOS:
brew install google-cloud-sdk - Windows/Linux: https://cloud.google.com/sdk/docs/install
- macOS:
-
Authenticate:
gcloud auth application-default login
Opens your browser - choose the Google account with BigQuery access to MIMIC-IV.
Paste one of the following into your MCP client config, then restart your client.
Supported clients: Claude Desktop, Cursor, Goose, and more.
|
SQLite (Demo Database) Free, local, no setup required. {
"mcpServers": {
"m3": {
"command": "uvx",
"args": ["m3-mcp"],
"env": {
"M3_BACKEND": "sqlite"
}
}
}
}Demo database (136MB, 100 patients, 275 admissions) downloads automatically on first query. |
BigQuery (Full Dataset) Requires GCP credentials and PhysioNet access. {
"mcpServers": {
"m3": {
"command": "uvx",
"args": ["m3-mcp"],
"env": {
"M3_BACKEND": "bigquery",
"M3_PROJECT_ID": "your-project-id"
}
}
}
}Replace |
That's it! Restart your MCP client and ask:
- "What tools do you have for MIMIC-IV data?"
- "Show me patient demographics from the ICU"
- "What is the race distribution in admissions?"
| Feature | SQLite (Demo) | BigQuery (Full) |
|---|---|---|
| Cost | Free | BigQuery usage fees |
| Setup | Zero config | GCP credentials required |
| Data Size | 100 patients, 275 admissions | 365k patients, 546k admissions |
| Speed | Fast (local) | Network latency |
| Use Case | Learning, development | Research, production |
Already have Docker or prefer pip? Here are other ways to run m3:
|
SQLite: git clone https://github.com/rafiattrach/m3.git && cd m3
docker build -t m3:lite --target lite .
docker run -d --name m3-server m3:lite tail -f /dev/null |
BigQuery: git clone https://github.com/rafiattrach/m3.git && cd m3
docker build -t m3:bigquery --target bigquery .
docker run -d --name m3-server \
-e M3_BACKEND=bigquery \
-e M3_PROJECT_ID=your-project-id \
-v $HOME/.config/gcloud:/root/.config/gcloud:ro \
m3:bigquery tail -f /dev/null |
MCP config (same for both):
{
"mcpServers": {
"m3": {
"command": "docker",
"args": ["exec", "-i", "m3-server", "python", "-m", "m3.mcp_server"]
}
}
}Stop: docker stop m3-server && docker rm m3-server
pip install m3-mcpπ‘ CLI commands: Run
m3 --helpto see all available options.
Useful CLI commands:
m3 init mimic-iv-demo- Download demo databasem3 config- Generate MCP configuration interactivelym3 config claude --backend bigquery --project-id YOUR_PROJECT_ID- Quick BigQuery setup
Example MCP config:
{
"mcpServers": {
"m3": {
"command": "m3-mcp-server",
"env": {
"M3_BACKEND": "sqlite"
}
}
}
}For contributors:
git clone https://github.com/rafiattrach/m3.git && cd m3
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pre-commit installMCP config:
{
"mcpServers": {
"m3": {
"command": "/path/to/m3/.venv/bin/python",
"args": ["-m", "m3.mcp_server"],
"cwd": "/path/to/m3",
"env": {
"M3_BACKEND": "sqlite"
}
}
}
}Need to configure other MCP clients or customize settings? Use these commands:
m3 configGenerates configuration for any MCP client with step-by-step guidance.
# Quick universal config with defaults
m3 config --quick
# Universal config with custom database
m3 config --quick --backend sqlite --db-path /path/to/database.db
# Save config to file for other MCP clients
m3 config --output my_config.jsonFor production deployments requiring secure access to medical data:
# Enable OAuth2 with Claude Desktop
m3 config claude --enable-oauth2 \
--oauth2-issuer https://your-auth-provider.com \
--oauth2-audience m3-api \
--oauth2-scopes "read:mimic-data"
# Or configure interactively
m3 config # Choose OAuth2 option during setupSupported OAuth2 Providers:
- Auth0, Google Identity Platform, Microsoft Azure AD, Keycloak
- Any OAuth2/OpenID Connect compliant provider
Key Benefits:
- π JWT Token Validation: Industry-standard security
- π― Scope-based Access: Fine-grained permissions
- π‘οΈ Rate Limiting: Abuse protection
- π Audit Logging: Security monitoring
π Complete OAuth2 Setup Guide: See
docs/OAUTH2_AUTHENTICATION.mdfor detailed configuration, troubleshooting, and production deployment guidelines.
When your MCP client processes questions, it uses these tools automatically:
- get_database_schema: List all available tables
- get_table_info: Get column info and sample data for a table
- execute_mimic_query: Execute SQL SELECT queries
- get_icu_stays: ICU stay information and length of stay data
- get_lab_results: Laboratory test results
- get_race_distribution: Patient race distribution
Try asking your MCP client these questions:
Demographics & Statistics:
Prompt:What is the race distribution in MIMIC-IV admissions?Prompt:Show me patient demographics for ICU staysPrompt:How many total admissions are in the database?
Clinical Data:
Prompt:Find lab results for patient XPrompt:What lab tests are most commonly ordered?Prompt:Show me recent ICU admissions
Data Exploration:
Prompt:What tables are available in the database?Prompt:What tools do you have for MIMIC-IV data?
SQLite "Database not found" errors:
# Re-download demo database
m3 init mimic-iv-demoMCP client server not starting:
- Check your MCP client logs (for Claude Desktop: Help β View Logs)
- Verify configuration file location and format
- Restart your MCP client completely
"Missing OAuth2 access token" errors:
# Set your access token
export M3_OAUTH2_TOKEN="Bearer your-access-token-here""OAuth2 authentication failed" errors:
- Verify your token hasn't expired
- Check that required scopes are included in your token
- Ensure your OAuth2 provider configuration is correct
Rate limit exceeded:
- Wait for the rate limit window to reset
- Contact your administrator to adjust limits if needed
π§ OAuth2 Troubleshooting: See
OAUTH2_AUTHENTICATION.mdfor detailed OAuth2 troubleshooting and configuration guides.
"Access Denied" errors:
- Ensure you have MIMIC-IV access on PhysioNet
- Verify your Google Cloud project has BigQuery API enabled
- Check that you're authenticated:
gcloud auth list
"Dataset not found" errors:
- Confirm your project ID is correct
- Ensure you have access to
physionet-dataproject
Authentication issues:
# Re-authenticate
gcloud auth application-default login
# Check current authentication
gcloud auth listSee "Local Development" section above for setup instructions.
pytest # All tests (includes OAuth2 and BigQuery mocks)
pytest tests/test_mcp_server.py -v # MCP server tests
pytest tests/test_oauth2_auth.py -v # OAuth2 authentication tests# Set environment variables
export M3_BACKEND=bigquery
export M3_PROJECT_ID=your-project-id
export GOOGLE_CLOUD_PROJECT=your-project-id
# Optional: Test with OAuth2 authentication
export M3_OAUTH2_ENABLED=true
export M3_OAUTH2_ISSUER_URL=https://your-provider.com
export M3_OAUTH2_AUDIENCE=m3-api
export M3_OAUTH2_TOKEN="Bearer your-test-token"
# Test MCP server
m3-mcp-server- Local Full Dataset: Complete MIMIC-IV locally (no cloud costs)
- Advanced Tools: More specialized medical data functions
- Visualization: Built-in plotting and charting tools
- Enhanced Security: Role-based access control, audit logging
- Multi-tenant Support: Organization-level data isolation
We welcome contributions! Please:
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Submit a pull request
If you use M3 in your research, please cite:
@article{attrach2025conversational,
title={Conversational LLMs Simplify Secure Clinical Data Access, Understanding, and Analysis},
author={Attrach, Rafi Al and Moreira, Pedro and Fani, Rajna and Umeton, Renato and Celi, Leo Anthony},
journal={arXiv preprint arXiv:2507.01053},
year={2025}
}You can also use the "Cite this repository" button at the top of the GitHub page for other formats.
M3 has been forked and adapted by the community:
- MCPStack-MIMIC - Integrates M3 with other MCP servers (Jupyter, sklearn, etc.)
Built with β€οΈ for the medical AI community
Need help? Open an issue on GitHub or check our troubleshooting guide above.
