MCP server for NONMEM pharmacometric modeling workflows
Server has 20 well-named tools with complete input schemas and descriptions. Naming follows verb_noun convention (read_*, parse_*, submit_*, execute_*). Descriptions are present and contextual (avg ~120 chars), meeting the 10-1024 char baseline. However, output schemas are NOT documented, critical gap for LLM planning. Parameter descriptions are minimal (often just 'Path to X file'). No error handling guidance, no recovery hints, no actionable error messages. Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications. No pagination support on list_runs. Composition is sound, tools are single-purpose and chainable (e.g., submit_run → check_run_status → get_run_results). Security: no secrets in params (good), but no permission gates or audit trail declarations.
Cancel a running NONMEM job.
Check the status and progress of a submitted NONMEM run by job ID.
Compare multiple NONMEM runs by OFV, delta-OFV, parameter counts, and AIC. Accepts a list of run directories or .ext file paths.
Run bootstrap using PsN (async). Returns job ID for polling. Requires PsN + NONMEM.
Run VPC using PsN (async). Returns job ID for polling. Requires PsN + NONMEM.
Generate VPC data from mrgsolve simulations and observed data.
Get full parsed results of a completed NONMEM run by job ID.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does summarize_run return? Does it include OFV, parameters, warnings?). This forces agents to guess or make extra discovery calls.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are classified as READ_ONLY, WRITE, or REVERSIBLE in metadata, but these hints are not exposed in the tool schema. Agents cannot distinguish safe vs. risky operations without explicit annotations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Scan a project directory for NONMEM run files and list their status (completed/failed/running).
Parse a NONMEM control stream (.ctl/.mod) into structured components: $THETA, $OMEGA, $SIGMA, $EST options, input columns, data file, and ADVAN/TRANS.
Parse PsN output (VPC, bootstrap, etc.) and extract key results.
Run PsN sumo to generate a summary report of a NONMEM run.
Parse a NONMEM .ext file to extract parameter estimates, standard errors, OFV, eigenvalues, and condition number.
Parse a NONMEM .lst file for termination status, minimization success, shrinkage, condition number, and warnings.
Read and summarize a NONMEM dataset: subject count, observation count, dose records, missing values, and column overview.
Parse NONMEM table output files (SDTAB, PATAB, etc.) and compute summary statistics for key columns (CWRES, PRED, IPRED, ETAs).
Run comprehensive post-run diagnostics: boundary checks, condition number, shrinkage, precision (RSE), convergence warnings. No NONMEM needed.
Run mrgsolve simulations using translated NONMEM model and dataset.
Submit a NONMEM run (async). Returns a job ID for polling. Requires NONMEM installation.
Generate a comprehensive summary of a NONMEM run by combining control stream, .ext, and .lst results.
Translate a NONMEM control stream to mrgsolve R code for simulation and VPC.
Parameter descriptions are minimal and generic ('Path to the .ext file', 'Path to the dataset file'). No guidance on format, constraints, or dependencies. E.g., read_nm_dataset accepts optional input_columns but does not explain when to provide them or what happens if omitted.
No error handling guidance. Tools like submit_run and execute_psn_vpc are async and return job IDs, but there is no documentation of failure modes (e.g., NONMEM not installed, invalid control stream, PsN not found). Agents have no recovery path.
list_runs lacks pagination. No limit, offset, or cursor parameters. Scanning a large project directory could return hundreds of runs, exhausting context. Should cap results at 50 and offer pagination.