How it works

From a target name to a reproducible dossier.

SciAgentKit runs the structure-based drug-discovery pipeline as a chain of deterministic tools your AI agent calls in order. Every stage writes its own outputs and a signed reproducibility manifest — nothing is estimated by a language model.

MCP-native AutoDock Vina · GNINA · smina OpenMM · OpenFF MDAnalysis · ProLIF RDKit

The pipeline, stage by stage

Ask your agent “dock these ligands to EGFR” and it backfills every prerequisite in order. Each stage is a single MCP tool with typed inputs and file outputs saved under runs/.

1

Target & structure selection protein_select

Resolves the target to a UniProt entry, lists PDB structures, aligns sequences, and ranks candidates by resolution, coverage, and mutation match — it does not invent rankings.

Output: ranked_structures.csv · target_sequence.fasta · uniprot_target.csv

2

Fetch coordinates fetch_pdb

Downloads the selected structure's coordinate file from RCSB (falls back to mmCIF for large assemblies) so the receptor is real atoms, not a placeholder.

Output: <PDBID>.pdb

3

Ligand preparation prepare_ligands

Cleans and protonates molecules at the requested pH and generates 3D conformers with RDKit (Open Babel fallback), ready for docking or parameterization.

Output: ligands_3d.sdf · cleaned_ligands.csv

4

ADME / toxicity profiling analyze_library · adme_tox

Deterministic drug-likeness and liability screen: ESOL solubility, Lipinski/Veber/Ghose/Egan rules, GI/BBB heuristics, and PAINS/Brenk structural alerts.

Output: adme_tox.csv · library_profile.csv

5

Pocket definition detect_pocket

Defines the docking box from a co-crystallized ligand, a residue list, or a pocket detector (fpocket / P2Rank), with an automatic fallback.

Output: pocket.json (center + box size)

6

Receptor preparation prepare_receptor_docking

Removes the pocket ligand (preserving waters by default), repairs hydrogens and atoms, and prepares the receptor for PDBQT conversion.

Output: docking_receptor_prepared.pdb

7

Docking run_docking

Runs AutoDock Vina, GNINA, or smina inside the defined pocket and ranks poses by binding affinity parsed straight from the engine's log.

Output: docked poses (.pdbqt) · docking_scores.csv

8

Molecular dynamics setup ligand_md_plan · md_plan

Builds a complete OpenMM / OpenFF job: solvation, ion neutralization, minimization, NVT and NPT equilibration, and a production run with reporters — as runnable scripts.

Output: system.xml · integrator.xml · run.py · md_config.json

9

Trajectory analysis analyze_trajectory

Computes backbone RMSD and per-residue RMSF with MDAnalysis and, optionally, a ligand–protein interaction fingerprint with ProLIF — from your actual trajectory files.

Output: rmsd.csv · rmsf.csv · interactions.csv · figures

10

Target-aware hit selection select_top_hits

Combines docking score, MD stability, and ADME/tox desirability into one composite ranking — penalizing toxicity liabilities and up-weighting BBB permeability for CNS targets.

Output: top_hits.csv

11

Wet-lab validation plan wet_lab_plan

Proposes a staged experimental template tailored to the target class: biochemical assay → cell-based activity → BBB (for CNS) → ADME/DMPK → safety. Advisory, not results.

Output: wet_lab_plan.md

12

Report & manifest write_report

Assembles everything into a professional Markdown / PDF / DOCX report and preserves a signed reproducibility manifest for the whole run.

Output: report.md · report.pdf · run_manifest.json

Docking output

Poses are ranked by binding affinity taken directly from the docking engine — SciAgentKit parses the log, it never guesses a score.

What run_docking does

  • Auto-selects Vina, GNINA, or smina (whichever is installed)
  • Writes a per-ligand config from pocket.json (center + box)
  • Runs each ligand, captures the full engine log
  • Parses every pose: affinity and RMSD lower/upper bounds
  • Ranks ligands and exports the top fraction

Per-pose columns

poseaffinity (kcal/mol)rmsd l.b.rmsd u.b.
10.0000.000
2
3

Exact schema of docking_scores.csv. Values are filled in from the engine's own output at run time.

OpenMM molecular dynamics & trajectory analysis

The MD stage produces a runnable, fully-specified OpenMM job; after you run it, the analysis stage turns the trajectory into quantitative stability and interaction metrics.

MD job ligand_md_plan

  • OpenFF small-molecule parameterization for the ligand
  • Explicit-solvent box with salt neutralization (default 0.15 M)
  • Energy minimization → NVT → NPT equilibration → production
  • State & trajectory reporters at a set interval
  • Emitted as run.py + serialized system.xml — no black box

Analysis analyze_trajectory

  • RMSD — backbone deviation over time (equilibration & drift)
  • RMSF — per-residue flexibility across the trajectory
  • ProLIF — ligand–protein interaction fingerprint by residue
artifactfrom
rmsd.csv / rmsd.pngMDAnalysis
rmsf.csv / rmsf.pngMDAnalysis
interaction_heatmap.pngProLIF

Every metric is computed from your trajectory files by the named library.

The report you get

One command assembles a structured dossier — Markdown, PDF, or DOCX — with a fixed, reviewable section layout. Here is the table of contents write_report produces.

report.pdf
SciAgentKit screening report
Generated by write_report · includes run_manifest.json
1 Executive summary
2 Target and structure selection
3 Ligand preparation
4 Pocket and receptor preparation
5 Docking results + prioritized hits
6 Molecular dynamics setup
7 Trajectory analysis
8 Recommended wet-lab validation
9 Figures
10 Methods and reproducibility
11 Interpretation and limitations

Reproducibility manifest

Every stage writes a run_manifest.json that pins the exact command, parameters, environment, package versions, git commit, and a SHA-256 of every input and output — so a result can be audited and reproduced byte-for-byte.

run_manifest.jsonschema: sciagentkit.manifest.v1
{
  "schema_version": "sciagentkit.manifest.v1",
  "workflow_name": "docking_screen",
  "created_at_utc": "2026-07-11T09:24:18.402Z",
  "command": "sciagent run-docking receptor.pdbqt ligands/ pocket.json",
  "parameters": { "engine": "vina", "exhaustiveness": 8, "num_modes": 9 },
  "python_version": "3.12.4",
  "platform": "Linux-6.1-x86_64",
  "git_commit": "8ee75b8…",
  "packages": {
    "sciagentkit": "1.0.3", "rdkit": "2024.03.5",
    "pandas": "2.2.2", "numpy": "1.26.4"
  },
  "input_files": [
    { "path": "receptor.pdbqt", "sha256": "3f9a…c1" },
    { "path": "pocket.json",   "sha256": "b7e2…8d" }
  ],
  "output_files": [
    { "path": "docking_scores.csv", "sha256": "a10f…44" }
  ],
  "note": "Molecular values were computed by deterministic tools, not inferred by an LLM."
}

Field layout is exact; hashes, timestamps, and versions shown are illustrative placeholders — a real run fills them from your environment.

Run the whole thing from your agent.

Wire SciAgentKit into Claude, Cursor, Gemini, or Codex and start with a free 3-day trial.