MCP server for NONMEM pharmacometric modeling workflows.
nonmem-mcp-server
MCP (Model Context Protocol) server for NONMEM pharmacometric modeling workflows. Gives Claude (and any MCP-compatible client) structured access to NONMEM models, results, and simulation tools.
Supports Windows, macOS, and Linux.
Features
Parsing & Analysis (no NONMEM needed)
read_ext_file— Parse .ext files for parameter estimates, SEs, OFV, condition numberread_lst_file— Extract termination status, shrinkage, covariance step resultsparse_control_stream— Structural parsing of .ctl/.mod files (THETAs, OMEGAs, $EST options)read_nm_dataset— Dataset summary: subjects, observations, missing valuesread_nm_tables— Parse SDTAB/PATAB with statistics for CWRES, ETAs, PREDcompare_models— Multi-run OFV comparison with delta-OFV and AICsummarize_run— Combined .ctl + .ext + .lst summarylist_runs— Scan project directories for NONMEM runs
Execution & Diagnostics
submit_run— Start NONMEM runs (async, fire-and-poll pattern)check_run_status— Monitor iteration progress via .ext fileget_run_results— Retrieve parsed results when completecancel_run— Kill running NONMEM jobsrun_diagnostics— Automated checks: boundary, condition number, shrinkage, RSEexecute_psn_vpc— Run VPC via PsN (predcorr, stratify, lloq options)execute_psn_bootstrap— Run bootstrap via PsN (BCa, stratify)check_psn_status— Monitor PsN job progressparse_psn_results— Parse existing PsN output directories (no installation needed)check_nonmem_setup— Detect NONMEM, PsN, R installation status
Simulation (no NONMEM needed)
translate_to_mrgsolve— Convert NONMEM .ctl/.mod to mrgsolve model codesimulate_mrgsolve— Run PK simulations via mrgsolve (R)generate_vpc_data— Generate VPC data using mrgsolve + vpc R packagecheck_r_setup— Check R and package availability
Prompts
review_model— Model review checklistinterpret_results— Pharmacological interpretationtroubleshoot_run— Diagnose run failuressuggest_next_model— Suggest next modeling stepswrite_methods_section— Draft publication Methods text
Requirements
- Python 3.12+
- uv (recommended) or pip
Optional
- NONMEM 7.3–7.6 — Required for
submit_run(commercial license) - PsN — Required for
execute_psn_vpc,execute_psn_bootstrap - R with
mrgsolve,vpc,dplyr,ggplot2— Required for simulation and GOF tools
Installation
Using uv (recommended)
git clone https://github.com/sueinchoi/nonmem-mcp-server.git
cd nonmem-mcp-server
uv sync
Using pip
pip install git+https://github.com/sueinchoi/nonmem-mcp-server.git
Or for development:
git clone https://github.com/sueinchoi/nonmem-mcp-server.git
cd nonmem-mcp-server
pip install -e .
NONMEM Path Configuration
The server auto-detects NONMEM from common install locations. If auto-detection fails, set one of these environment variables:
| Variable | Description | Example |
|---|---|---|
NONMEM_NMFE_PATH |
Full path to nmfe executable | /opt/nm760/run/nmfe76 |
NONMEM_INSTALL_PATH |
NONMEM installation root | /opt/nm760 |
Auto-detected paths
macOS / Linux:
/opt/nm760/run/nmfe76,/opt/NONMEM/nm75/run/nmfe75, etc./usr/local/NONMEM/nm76/run/nmfe76~/NONMEM/nm76/run/nmfe76
Windows:
C:\nm760\run\nmfe76.bat,C:\NONMEM\nm76\run\nmfe76.batC:\Program Files\NONMEM\nm76\run\nmfe76.batD:\NONMEM\nm76\run\nmfe76.bat
Usage with Claude Code
Basic (no NONMEM)
claude mcp add nonmem -- nonmem-mcp
With uv (from source)
claude mcp add -s user nonmem -- \
uv run --directory /path/to/nonmem-mcp-server python -m nonmem_mcp
With NONMEM path
# macOS / Linux
claude mcp add -s user \
-e NONMEM_NMFE_PATH=/opt/nm760/run/nmfe76 \
nonmem -- \
uv run --directory /path/to/nonmem-mcp-server python -m nonmem_mcp
# Windows (PowerShell)
claude mcp add -s user `
-e NONMEM_NMFE_PATH=C:\nm760\run\nmfe76.bat `
nonmem -- `
uv run --directory C:\path\to\nonmem-mcp-server python -m nonmem_mcp
Verify
claude mcp list
# nonmem: ... - ✓ Connected
Usage with Claude Desktop
Add to claude_desktop_config.json:
macOS / Linux
{
"mcpServers": {
"nonmem": {
"command": "uv",
"args": ["run", "--directory", "/path/to/nonmem-mcp-server", "python", "-m", "nonmem_mcp"],
"env": {
"NONMEM_NMFE_PATH": "/opt/nm760/run/nmfe76"
}
}
}
}
Windows
{
"mcpServers": {
"nonmem": {
"command": "uv",
"args": ["run", "--directory", "C:\\path\\to\\nonmem-mcp-server", "python", "-m", "nonmem_mcp"],
"env": {
"NONMEM_NMFE_PATH": "C:\\nm76
Tools (6)
read_ext_fileParse .ext files for parameter estimates, SEs, OFV, condition numberread_lst_fileExtract termination status, shrinkage, covariance step resultsparse_control_streamStructural parsing of .ctl/.mod filessubmit_runStart NONMEM runstranslate_to_mrgsolveConvert NONMEM .ctl/.mod to mrgsolve model coderun_diagnosticsAutomated checks for boundary, condition number, shrinkage, and RSEEnvironment Variables
NONMEM_NMFE_PATHFull path to nmfe executableNONMEM_INSTALL_PATHNONMEM installation rootConfiguration
{"mcpServers": {"nonmem": {"command": "uv", "args": ["run", "--directory", "/path/to/nonmem-mcp-server", "python", "-m", "nonmem_mcp"], "env": {"NONMEM_NMFE_PATH": "/opt/nm760/run/nmfe76"}}}}