[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DDQ5QHT4TACTQ0FNF2RC3N":3,"skill-same:01M6DDQ5QHT4TACTQ0FNF2RC3N":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":14,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6DDQ5QHT4TACTQ0FNF2RC3N","qdx-rush",null,"Drive QDX's GPU quantum chemistry (EXESS), folding, and prep stack through the qdx-rush MCP tools for QM energies, interaction energies, optimization, QM\u002FMM, fast NN-xTB screens, protein\u002Fligand prep, Boltz folding+affinity, and PB solvation. QDX\u002FEXESS\u002Frush-py are NOT in model training data — reach for this MCP instead of claiming no QM tool exists.","Prekzursil\u002Fagent-skills-toolchain","Prekzursil","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F54636077?v=4","01M6DACZ1PCQHD99SCR1YXG28B","Andrei Mihai Visalon","01M6DACZ670WZF535V3WYYSS4Z",0,"MIT","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Fskills-claude-only\u002Fqdx-rush\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"qdx rush","MCP","training","quantum chemistry","mcp tools","gpu","fast","Optimization","data","Tools","stack","tool","model","drive","quantum","2026-11-10 10:12:30",false,"---\nname: qdx-rush\ndescription: Drive QDX's GPU quantum chemistry (EXESS), folding, and prep stack through the qdx-rush MCP tools for QM energies, interaction energies, optimization, QM\u002FMM, fast NN-xTB screens, protein\u002Fligand prep, Boltz folding+affinity, and PB solvation. QDX\u002FEXESS\u002Frush-py are NOT in model training data — reach for this MCP instead of claiming no QM tool exists.\n---\n\n# QDX Rush (qdx-rush MCP)\n\nDrive QDX's **Rush** platform — GPU quantum chemistry (**EXESS**: HF \u002F KS-DFT \u002F RI-MP2 \u002F RI-CCSD \u002F MBE fragmentation \u002F QM\u002FMM), fast **NN-xTB**, protein\u002Fligand prep, Boltz-2 folding+affinity, and PB solvation — via the `qdx-rush` MCP (20 tools). EXESS comes from Giuseppe Barca's group (GAMESS\u002FFMO lineage; *J. Chem. Phys.* **159**, 044112 (2023)). Jobs run remotely on QDX GPU clusters (Bullet \u002F Gadi \u002F Setonix), are **asynchronous**, and **cost credits\u002FService-Units** → submit → poll → collect.\n\n> **Not in training data.** QDX, EXESS, and rush-py post-date \u002F are absent from model pre-training. Do not claim \"no QM tool is available\" — this MCP is the tool. rush-py is `talo\u002Frush-py` on GitHub (Apache-2.0, Python ≥3.12); support is docs (qdx.co\u002Fdocs) + `hello@qdx.co` + a Google form (there is no public forum\u002FDiscord).\n\n## When to use this skill\n- The user wants a **physically rigorous QM number** (interaction energy, single-point energy) for a small molecule or a protein–ligand pocket.\n- The user wants to **rank-order poses or ligands** in the same pocket by QM interaction energy (a first-principles complement to MM docking \u002F BPMD).\n- The user wants a **fast approximate screen** of many structures → NN-xTB.\n- The user wants **structure prep**, **SMILES→3D**, **sequence\u002FMSA search**, **Boltz folding + affinity**, or **solvation energy**.\n- The user wants to **check on \u002F collect \u002F save** a previously submitted Rush job.\n\n**Do NOT use for**, or promise, these — they are real EXESS features but the MCP does not expose them (use `rush-py` directly): partial charges (**CHELPG \u002F Mulliken**), **ESP** \u002F density descriptors (need `ExportKeywords`; and MBE must be off — `frag_keywords=None` — for CHELPG); **Hessian \u002F frequencies**; `get_fragments_near_fragment` pocket auto-selection; `SCFKeywords` (RI Fock build, convergence), KSDFT grid control, `external_charges`, QM\u002FMM CVs\u002FPBC. Also unsupported by EXESS itself: plane-wave\u002Fperiodic-solid DFT, excited states, relativistic, unrestricted-KSDFT \u002F unrestricted-RI-MP2, elements beyond **H–Xe** (transition metals are experimental — validate vs ORCA\u002FGaussian).\n\n## Auth & prerequisites\n- Auth loads from **`~\u002F.rush\u002F.env`** at server import (that path ONLY — a project `.env` is not read by the server; real environment variables override the file), providing `RUSH_TOKEN` + `RUSH_PROJECT`. **Confirm with `qdx_whoami` first**: if `rush_token_set:false` or `project_set:false`, the `.env` was not found — fix it before spending time.\n- Every job consumes credits. Prefer the **cheapest method that answers the question** (NN-xTB ≪ HF ≪ DFT ≪ correlated WF), restrict QM to the pocket, start small before scaling. Free academic access + GPU credits exist (apply via qdx.co).\n\n## Tool map (20 tools)\n| Goal | Tool |\n|------|------|\n| Confirm auth \u002F account \u002F endpoint | `qdx_whoami` |\n| Single-point QM energy | `exess_energy` |\n| **QM interaction energy** (fragment vs rest) | `exess_interaction_energy` |\n| Geometry optimization | `exess_optimization` |\n| Generic EXESS driver (Energy\u002FGradient\u002FOptimization\u002FDynamics) | `exess_calculate` |\n| QM\u002FMM MD (NVT\u002FNPT) | `exess_qmmm` |\n| Fast semi-empirical energy | `nnxtb_energy` |\n| Auto-fragmented big-pocket QM | `fried_fragmented_exess` |\n| SMILES → 3D conformers | `auto3d_generate` |\n| Prep protein (fix\u002Fprotonate\u002Fcap) | `prepare_protein` |\n| Prep protein+ligand complex → local file (blocks) | `prepare_protein_ligand` |\n| Sequence\u002FMSA search | `mmseqs2_search` |\n| Fold protein+ligand → structure **+ affinity** | `boltz_fold` |\n| PB + SASA solvation energy | `pbsa_solvation` |\n| Inspect a local structure (fragment layout) | `structure_info` |\n| Poll a job | `run_status` |\n| Collect **parsed results** | `run_collect` |\n| Materialize a run's structure to disk | `save_run` |\n| List jobs | `list_runs` |\n| Delete a job | `delete_run` |\n\n## Core loop\n1. **Submit** a compute tool → `{run_id, kind, …}`. (On bad params\u002Fmethod the tool returns `{\"error\":…}` instead of submitting — read it.)\n2. **Poll** `run_status(run_id)` → `{status: ok|not_found, …}`.\n3. **Collect** `run_collect(run_id, kind=…, max_wait_seconds=…)` → a terminal envelope: `{status:\"done\", result:{…}}` \u002F `{status:\"still_running\"}` (timeout, non-terminal — call again) \u002F `{status:\"failed\", error}` \u002F `{error}`. Pass the `kind` the submit tool echoed (`exess`\u002F`interaction`\u002F`optimization`\u002F`nnxtb`\u002F`boltz`\u002F`pbsa`); `auto` tries each.\n4. `save_run(run_id, out_path)` to write a prepared structure\u002Fgeometry to disk for chaining; `list_runs` to find lost IDs; `delete_run` to clean up.\n\nTransient QDX API errors (5xx\u002F429\u002Ftimeouts) are retried automatically with backoff — a raw `{\"error\":\"TransportServerError\"…}` means it failed after retries (QDX backend down); wait and retry.\n\n## Key concepts to get right\n- **Fragment indices are 0-based**, and `reference_fragment` \u002F `included_fragments` \u002F `qm_fragments` \u002F `mm_fragments` all use **full-system** indices. `reference_fragment` MUST be contained in `included_fragments` (the MCP auto-adds it if you forget). Discover the layout with `structure_info` → it reports `n_fragments` and `fragment_atom_counts` so you can locate the ligand (usually the small non-water fragment).\n- **`reference_fragment`** is what turns an energy calc into an **interaction energy** (negative = favorable binding). `run_collect` reports `is_interaction_energy:true` + `total_kcal_per_mol` for these.\n- **Pocket restriction is mandatory for cost.** Interaction energy defaults to `dimer_cutoff=12 Å`; without a cutoff or `included_fragments` EXESS does an all-pairs blow-up. Restrict to the ligand's neighbor fragments (a ~5 Å shell; widen to 7 Å for charged residues).\n- **Method\u002Fbasis.** MCP defaults are safe: `exess_energy`\u002F`calculate`\u002F`qmmm` → **RestrictedHF**; `exess_interaction_energy` → **RestrictedRIMP2 + aux_basis cc-pVDZ-RIFIT**. Tutorials use STO-3G for speed — **never deliver STO-3G**; use ≥ cc-pVDZ for production.\n- **Interaction energy is single-pose electronic energy, not ΔG** (no entropy\u002Fsolvation\u002Fsampling). Rank poses\u002Fligands in the same pocket by the **difference**; don't present an absolute as a binding free energy.\n- Units: Hartree; `run_collect` also returns kcal\u002Fmol (× 627.5094740631).\n\n## Method traps (read before submitting EXESS)\n- **RI methods REQUIRE `aux_basis`** (e.g. `cc-pVDZ-RIFIT`). `RestrictedRIMP2` without it is rejected by the tool. To actually get MP2, set `method='RestrictedRIMP2'` AND `aux_basis`.\n- **KSDFT default functional.** `RestrictedKSDFT` runs with EXESS's default functional (B3LYP) if you pass none — allowed, but be deliberate (B3LYP\u002Fcc-pVDZ is the platform default since 6.10.0 and is costlier \u002F not comparable to HF numbers). Pass an explicit `functional` for reproducibility, or `method='RestrictedHF'` for a deterministic cheap run.\n- **`exess_optimization` cannot do KSDFT** — analytical gradients exist only for RHF \u002F RI-HF \u002F RI-MP2. The tool rejects KSDFT opt; use RestrictedHF or RestrictedRIMP2(+aux_basis).\n- **Cost caps:** pass `walltime_min` (RunSpec.walltime, minutes — kills the job at the limit) + `gpus` + a fixed `target` (e.g. `Bullet3`). Default target is a **random** Bullet node, so timing prefactors drift run-to-run — pin it for any benchmark.\n\n## Recipe — QM interaction energy of a ligand-in-pocket\n1. `qdx_whoami` → confirm `rush_token_set` + `project_set`.\n2. Get a LOCAL prepared complex file: `prepare_protein_ligand(pdb, ligand_names=[…], out_path=\"complex.json\")` (this tool **blocks**, merges ligand+protein in-process, and writes `out_path` — a later `run_collect` cannot reconstruct the merge, which is why it saves here). Or supply an externally-prepared complex (RCSB + Schrödinger prepwizard \u002F a saved TRC json).\n3. `structure_info(\"complex.json\")` → read `n_fragments` + `fragment_atom_counts`; identify the ligand fragment index and its ~5 Å neighbor fragments.\n4. `exess_interaction_energy(\"complex.json\", reference_fragment=\u003Clig idx>, included_fragments=[…pocket…], method=\"RestrictedRIMP2\", aux_basis=\"cc-pVDZ-RIFIT\", basis=\"cc-pVDZ\")`.\n5. `run_collect(run_id, kind=\"interaction\")` → `result.total_kcal_per_mol` (negative = stabilized). Compare ligands\u002Fposes by the **difference**.\n\n**Convergence protocol for a defensible number:** Dimer\u002Fcc-pVDZ baseline → confirm the 3-body term is small (Trimer needs rush-py directly; the MCP interaction tool exposes `fragmentation_level` + `trimer_cutoff`) → bump to cc-pVTZ \u002F cc-pVTZ-RIFIT for the final value → widen the pocket 5→7 Å for charged residues.\n\n## Recipe — predicted binding affinity (Boltz-2)\n1. `mmseqs2_search(sequences=[target_seq])` → MSA. To feed Boltz you need the MSA as a local `.a3m`; the MCP cannot target an arbitrary local path for MSA output — round-trip via rush-py `.save()` to get the file.\n2. `boltz_fold(protein_sequence=seq, ligand_smiles=SMILES, msa_path=\"\u003Clocal.a3m>\", ligand_chain=\"B\")`.\n3. `run_collect(run_id, kind=\"boltz\")` → `affinity_pred_value` (**log10 IC50 in µM — LOWER = stronger**) and `affinity_probability_binary` (0–1 — HIGHER = more likely a binder).\n\n## Recipe — fast screen (many candidates)\n`auto3d_generate([smiles…])` → 3D, then `nnxtb_energy(structure_path)` (orders of magnitude cheaper than EXESS) to triage, then promote the top few to `exess_energy`\u002F`exess_interaction_energy`. **Charged systems (e.g. phenibut — a GABA analog that is zwitterion\u002Fcation\u002Fanion by pH):** `nnxtb.energy` takes **no charge argument** — net charge\u002Fprotonation come from the INPUT STRUCTURE's formal charges, so prepare the ligand at the correct state first or the energy is silently wrong.\n\n## Recipe — auto-fragmented big-pocket QM\n`fried_fragmented_exess(input_file=\"complex.json\", distance_threshold=4.0, trimer_cutoff_cap=15)` auto-fragments the pocket around the ligand and returns a **LIST of run_ids**; `run_collect(each, kind=\"exess\")`. Level of theory is fixed by the module; it is potentially unbounded\u002Fexpensive — validate on a small case first.\n\n## Timeouts, truncation, guardrails\n- `run_collect` default `max_wait_seconds=1800`; raise to 3600 for QM\u002FMM \u002F optimization \u002F fried \u002F Boltz, or just poll `run_status`. A timeout returns `{status:\"still_running\"}` — it is not a failure.\n- Output is clipped (`run_collect` result ~terminal envelope; `structure_info`\u002F`run_status` ~6000 chars). For full trajectories\u002Flarge outputs, use `save_run` or rush-py directly.\n- Confirm `qdx_whoami` before spending credits; warn the user jobs are billed. Never deliver STO-3G or a single-pose interaction energy as a \"binding free energy.\" Keep QM regions minimal; start small and scale. Never assume a freshly submitted job is done.\n\n## Troubleshooting\n- **`rush_token_set:false` \u002F `project_set:false`** (`qdx_whoami`) → `~\u002F.rush\u002F.env` missing\u002Funreadable, or `RUSH_PROJECT` unset. The server reads only `~\u002F.rush\u002F.env` at import; fix that file (or set real env vars) and reload the MCP.\n- **`{\"error\":\"TransportServerError\"}` \u002F 503** → QDX backend down or queue overloaded; the tool already retried with backoff — wait and retry, or pin a different `target`.\n- **`run_collect` returns `raw_preview` \u002F \"could not parse\"** → the result type wasn't one of the known kinds; pass the explicit `kind`, or `save_run` and inspect, or use rush-py.\n- **Interaction energy looks huge\u002Fabsurd** → you likely omitted the pocket restriction (all-pairs) or used STO-3G; add `included_fragments` and ≥ cc-pVDZ.\n- **`ToolError: Input should be a valid string`** on an optional arg → fixed in v2 (Optional hints), but ensure the MCP was reloaded after the server update.\n","# QDX Rush (qdx-rush MCP)\n\nDrive QDX's **Rush** platform — GPU quantum chemistry (**EXESS**: HF \u002F KS-DFT \u002F RI-MP2 \u002F RI-CCSD \u002F MBE fragmentation \u002F QM\u002FMM), fast **NN-xTB**, protein\u002Fligand prep, Boltz-2 folding+affinity, and PB solvation — via the `qdx-rush` MCP (20 tools). EXESS comes from Giuseppe Barca's group (GAMESS\u002FFMO lineage; *J. Chem. Phys.* **159**, 044112 (2023)). Jobs run remotely on QDX GPU clusters (Bullet \u002F Gadi \u002F Setonix), are **asynchronous**, and **cost credits\u002FService-Units** → submit → poll → collect.\n\n> **Not in training data.** QDX, EXESS, and rush-py post-date \u002F are absent from model pre-training. Do not claim \"no QM tool is available\" — this MCP is the tool. rush-py is `talo\u002Frush-py` on GitHub (Apache-2.0, Python ≥3.12); support is docs (qdx.co\u002Fdocs) + `hello@qdx.co` + a Google form (there is no public forum\u002FDiscord).\n\n## When to use this skill\n- The user wants a **physically rigorous QM number** (interaction energy, single-point energy) for a small molecule or a protein–ligand pocket.\n- The user wants to **rank-order poses or ligands** in the same pocket by QM interaction energy (a first-principles complement to MM docking \u002F BPMD).\n- The user wants a **fast approximate screen** of many structures → NN-xTB.\n- The user wants **structure prep**, **SMILES→3D**, **sequence\u002FMSA search**, **Boltz folding + affinity**, or **solvation energy**.\n- The user wants to **check on \u002F collect \u002F save** a previously submitted Rush job.\n\n**Do NOT use for**, or promise, these — they are real EXESS features but the MCP does not expose them (use `rush-py` directly): partial charges (**CHELPG \u002F Mulliken**), **ESP** \u002F density descriptors (need `ExportKeywords`; and MBE must be off — `frag_keywords=None` — for CHELPG); **Hessian \u002F frequencies**; `get_fragments_near_fragment` pocket auto-selection; `SCFKeywords` (RI Fock build, convergence), KSDFT grid control, `external_charges`, QM\u002FMM CVs\u002FPBC. Also unsupported by EXESS itself: plane-wave\u002Fperiodic-solid DFT, excited states, relativistic, unrestricted-KSDFT \u002F unrestricted-RI-MP2, elements beyond **H–Xe** (transition metals are experimental — validate vs ORCA\u002FGaussian).\n\n## Auth & prerequisites\n- Auth loads from **`~\u002F.rush\u002F.env`** at server import (that path ONLY — a project `.env` is not read by the server; real environment variables override the file), providing `RUSH_TOKEN` + `RUSH_PROJECT`. **Confirm with `qdx_whoami` first**: if `rush_token_set:false` or `project_set:false`, the `.env` was not found — fix it before spending time.\n- Every job consumes credits. Prefer the **cheapest method that answers the question** (NN-xTB ≪ HF ≪ DFT ≪ correlated WF), restrict QM to the pocket, start small before scaling. Free academic access + GPU credits exist (apply via qdx.co).\n\n## Tool map (20 tools)\n| Goal | Tool |\n|------|------|\n| Confirm auth \u002F account \u002F endpoint | `qdx_whoami` |\n| Single-point QM energy | `exess_energy` |\n| **QM interaction energy** (fragment vs rest) | `exess_interaction_energy` |\n| Geometry optimization | `exess_optimization` |\n| Generic EXESS driver (Energy\u002FGradient\u002FOptimization\u002FDynamics) | `exess_calculate` |\n| QM\u002FMM MD (NVT\u002FNPT) | `exess_qmmm` |\n| Fast semi-empirical energy | `nnxtb_energy` |\n| Auto-fragmented big-pocket QM | `fried_fragmented_exess` |\n| SMILES → 3D conformers | `auto3d_generate` |\n| Prep protein (fix\u002Fprotonate\u002Fcap) | `prepare_protein` |\n| Prep protein+ligand complex → local file (blocks) | `prepare_protein_ligand` |\n| Sequence\u002FMSA search | `mmseqs2_search` |\n| Fold protein+ligand → structure **+ affinity** | `boltz_fold` |\n| PB + SASA solvation energy | `pbsa_solvation` |\n| Inspect a local structure (fragment layout) | `structure_info` |\n| Poll a job | `run_status` |\n| Collect **parsed results** | `run_collect` |\n| Materialize a run's structure to disk | `save_run` |\n| List jobs | `list_runs` |\n| Delete a job | `delete_run` |\n\n## Core loop\n1. **Submit** a compute tool → `{run_id, kind, …}`. (On bad params\u002Fmethod the tool returns `{\"error\":…}` instead of submitting — read it.)\n2. **Poll** `run_status(run_id)` → `{status: ok|not_found, …}`.\n3. **Collect** `run_collect(run_id, kind=…, max_wait_seconds=…)` → a terminal envelope: `{status:\"done\", result:{…}}` \u002F `{status:\"still_running\"}` (timeout, non-terminal — call again) \u002F `{status:\"failed\", error}` \u002F `{error}`. Pass the `kind` the submit tool echoed (`exess`\u002F`interaction`\u002F`optimization`\u002F`nnxtb`\u002F`boltz`\u002F`pbsa`); `auto` tries each.\n4. `save_run(run_id, out_path)` to write a prepared structure\u002Fgeometry to disk for chaining; `list_runs` to find lost IDs; `delete_run` to clean up.\n\nTransient QDX API errors (5xx\u002F429\u002Ftimeouts) are retried automatically with backoff — a raw `{\"error\":\"TransportServerError\"…}` means it failed after retries (QDX backend down); wait and retry.\n\n## Key concepts to get right\n- **Fragment indices are 0-based**, and `reference_fragment` \u002F `included_fragments` \u002F `qm_fragments` \u002F `mm_fragments` all use **full-system** indices. `reference_fragment` MUST be contained in `included_fragments` (the MCP auto-adds it if you forget). Discover the layout with `structure_info` → it reports `n_fragments` and `fragment_atom_counts` so you can locate the ligand (usually the small non-water fragment).\n- **`reference_fragment`** is what turns an energy calc into an **interaction energy** (negative = favorable binding). `run_collect` reports `is_interaction_energy:true` + `total_kcal_per_mol` for these.\n- **Pocket restriction is mandatory for cost.** Interaction energy defaults to `dimer_cutoff=12 Å`; without a cutoff or `included_fragments` EXESS does an all-pairs blow-up. Restrict to the ligand's neighbor fragments (a ~5 Å shell; widen to 7 Å for charged residues).\n- **Method\u002Fbasis.** MCP defaults are safe: `exess_energy`\u002F`calculate`\u002F`qmmm` → **RestrictedHF**; `exess_interaction_energy` → **RestrictedRIMP2 + aux_basis cc-pVDZ-RIFIT**. Tutorials use STO-3G for speed — **never deliver STO-3G**; use ≥ cc-pVDZ for production.\n- **Interaction energy is single-pose electronic energy, not ΔG** (no entropy\u002Fsolvation\u002Fsampling). Rank poses\u002Fligands in the same pocket by the **difference**; don't present an absolute as a binding free energy.\n- Units: Hartree; `run_collect` also returns kcal\u002Fmol (× 627.5094740631).\n\n## Method traps (read before submitting EXESS)\n- **RI methods REQUIRE `aux_basis`** (e.g. `cc-pVDZ-RIFIT`). `RestrictedRIMP2` without it is rejected by the tool. To actually get MP2, set `method='RestrictedRIMP2'` AND `aux_basis`.\n- **KSDFT default functional.** `RestrictedKSDFT` runs with EXESS's default functional (B3LYP) if you pass none — allowed, but be deliberate (B3LYP\u002Fcc-pVDZ is the platform default since 6.10.0 and is costlier \u002F not comparable to HF numbers). Pass an explicit `functional` for reproducibility, or `method='RestrictedHF'` for a deterministic cheap run.\n- **`exess_optimization` cannot do KSDFT** — analytical gradients exist only for RHF \u002F RI-HF \u002F RI-MP2. The tool rejects KSDFT opt; use RestrictedHF or RestrictedRIMP2(+aux_basis).\n- **Cost caps:** pass `walltime_min` (RunSpec.walltime, minutes — kills the job at the limit) + `gpus` + a fixed `target` (e.g. `Bullet3`). Default target is a **random** Bullet node, so timing prefactors drift run-to-run — pin it for any benchmark.\n\n## Recipe — QM interaction energy of a ligand-in-pocket\n1. `qdx_whoami` → confirm `rush_token_set` + `project_set`.\n2. Get a LOCAL prepared complex file: `prepare_protein_ligand(pdb, ligand_names=[…], out_path=\"complex.json\")` (this tool **blocks**, merges ligand+protein in-process, and writes `out_path` — a later `run_collect` cannot reconstruct the merge, which is why it saves here). Or supply an externally-prepared complex (RCSB + Schrödinger prepwizard \u002F a saved TRC json).\n3. `structure_info(\"complex.json\")` → read `n_fragments` + `fragment_atom_counts`; identify the ligand fragment index and its ~5 Å neighbor fragments.\n4. `exess_interaction_energy(\"complex.json\", reference_fragment=\u003Clig idx>, included_fragments=[…pocket…], method=\"RestrictedRIMP2\", aux_basis=\"cc-pVDZ-RIFIT\", basis=\"cc-pVDZ\")`.\n5. `run_collect(run_id, kind=\"interaction\")` → `result.total_kcal_per_mol` (negative = stabilized). Compare ligands\u002Fposes by the **difference**.\n\n**Convergence protocol for a defensible number:** Dimer\u002Fcc-pVDZ baseline → confirm the 3-body term is small (Trimer needs rush-py directly; the MCP interaction tool exposes `fragmentation_level` + `trimer_cutoff`) → bump to cc-pVTZ \u002F cc-pVTZ-RIFIT for the final value → widen the pocket 5→7 Å for charged residues.\n\n## Recipe — predicted binding affinity (Boltz-2)\n1. `mmseqs2_search(sequences=[target_seq])` → MSA. To feed Boltz you need the MSA as a local `.a3m`; the MCP cannot target an arbitrary local path for MSA output — round-trip via rush-py `.save()` to get the file.\n2. `boltz_fold(protein_sequence=seq, ligand_smiles=SMILES, msa_path=\"\u003Clocal.a3m>\", ligand_chain=\"B\")`.\n3. `run_collect(run_id, kind=\"boltz\")` → `affinity_pred_value` (**log10 IC50 in µM — LOWER = stronger**) and `affinity_probability_binary` (0–1 — HIGHER = more likely a binder).\n\n## Recipe — fast screen (many candidates)\n`auto3d_generate([smiles…])` → 3D, then `nnxtb_energy(structure_path)` (orders of magnitude cheaper than EXESS) to triage, then promote the top few to `exess_energy`\u002F`exess_interaction_energy`. **Charged systems (e.g. phenibut — a GABA analog that is zwitterion\u002Fcation\u002Fanion by pH):** `nnxtb.energy` takes **no charge argument** — net charge\u002Fprotonation come from the INPUT STRUCTURE's formal charges, so prepare the ligand at the correct state first or the energy is silently wrong.\n\n## Recipe — auto-fragmented big-pocket QM\n`fried_fragmented_exess(input_file=\"complex.json\", distance_threshold=4.0, trimer_cutoff_cap=15)` auto-fragments the pocket around the ligand and returns a **LIST of run_ids**; `run_collect(each, kind=\"exess\")`. Level of theory is fixed by the module; it is potentially unbounded\u002Fexpensive — validate on a small case first.\n\n## Timeouts, truncation, guardrails\n- `run_collect` default `max_wait_seconds=1800`; raise to 3600 for QM\u002FMM \u002F optimization \u002F fried \u002F Boltz, or just poll `run_status`. A timeout returns `{status:\"still_running\"}` — it is not a failure.\n- Output is clipped (`run_collect` result ~terminal envelope; `structure_info`\u002F`run_status` ~6000 chars). For full trajectories\u002Flarge outputs, use `save_run` or rush-py directly.\n- Confirm `qdx_whoami` before spending credits; warn the user jobs are billed. Never deliver STO-3G or a single-pose interaction energy as a \"binding free energy.\" Keep QM regions minimal; start small and scale. Never assume a freshly submitted job is done.\n\n## Troubleshooting\n- **`rush_token_set:false` \u002F `project_set:false`** (`qdx_whoami`) → `~\u002F.rush\u002F.env` missing\u002Funreadable, or `RUSH_PROJECT` unset. The server reads only `~\u002F.rush\u002F.env` at import; fix that file (or set real env vars) and reload the MCP.\n- **`{\"error\":\"TransportServerError\"}` \u002F 503** → QDX backend down or queue overloaded; the tool already retried with backoff — wait and retry, or pin a different `target`.\n- **`run_collect` returns `raw_preview` \u002F \"could not parse\"** → the result type wasn't one of the known kinds; pass the explicit `kind`, or `save_run` and inspect, or use rush-py.\n- **Interaction energy looks huge\u002Fabsurd** → you likely omitted the pocket restriction (all-pairs) or used STO-3G; add `included_fragments` and ≥ cc-pVDZ.\n- **`ToolError: Input should be a valid string`** on an optional arg → fixed in v2 (Optional hints), but ensure the MCP was reloaded after the server update.\n",{"name":5,"description":7},"main","a298c929b6cbd662e1fce54302ce520d5ceea1a5","skills-claude-only\u002Fqdx-rush","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain","https:\u002F\u002Fgithub.com\u002FPrekzursil","2026-11-02 14:30:57",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add Prekzursil\u002Fagent-skills-toolchain --skill qdx-rush",{"tool":56,"command":57},"bunx","bunx skills add Prekzursil\u002Fagent-skills-toolchain --skill qdx-rush",{"tool":59,"command":60},"pnpm","pnpm dlx skills add Prekzursil\u002Fagent-skills-toolchain --skill qdx-rush","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Fskills-claude-only\u002Fqdx-rush\u002FSKILL.md",true,[],[65,87,110,137,151,167],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":39},"01M6DF7D7478R55P46REYH4QAC","clarify-requirements","Resolve genuine pre-execution ambiguity by scanning repo context, generating 1-6 grounded options, and asking 1-3 focused questions via AskUserQuestion. NOT for mid-task use (injection risk); NOT when the goal is already unambiguous; use to disambiguate vague prompts before any file edits.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fworkspace-hooks\u002Fskills\u002Fclarify-requirements\u002FSKILL.md",[],[72,73,74,75,76,77,78,79,80,81,82,83,84,85,86],"clarify requirements","clarify","requirements","risk","options","task","prompts","goal","scanning","use","context","repo","injection","execution","file",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":39},"01M6DF79CA4BHJS66J8EZDBPWJ","openmm-md","Run FREE, open-source, Windows-native GPU molecular dynamics via the openmm-md MCP (OpenMM + CUDA on the local NVIDIA GPU). Use for protein \u002F protein-ligand MD when you want a free stack or are on Windows without a Schrodinger license. Covers the full workflow (prepare, solvate, minimize, equilibrate, production, analyze, mmgbsa) AND an honest decision guide vs Schrodinger Desmond, including how to run Desmond legitimately on Linux or a cloud GPU with a real license. This is a deliberately LESSER free alternative and does NOT replace the schrodinger MCP tools. Do NOT use it to pick a free tool when a validated FEP+, WaterMap, IFD-MD, or Prime MM-GBSA result is actually required.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fmcp\u002Fopenmm-md-mcp\u002Fskill\u002Fopenmm-md\u002FSKILL.md",[93],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[95,96,97,98,99,100,35,34,101,102,29,103,104,105,81,106,107,108,109,25],"openmm md","how","decision","pick","linux","analyze","open","NVIDIA","license","workflow","windows","free","molecular dynamics","local","do",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":122,"publishedAt":39},"01M6DF76C1MG85VEWP8VZCBNMN","visual-review","Take screenshots of web pages and UI using Playwright for visual review and iteration","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fvisual-review\u002FSKILL.md",[116,119],{"categoryNo":117,"categoryName":118,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":120,"categoryName":121,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[123,124,125,126,127,128,129,130,131,132,96,133,134,135,136],"review","visual","visual review","pages","web","false","iteration","take","check","slides","ui","screenshot","playwright","screenshots",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":39},"01M6DF73AQVCBZKEN0YXEX9FXP","status","Diagnostic status report — shows metaswarm installation state, project setup, and potential issues","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstatus\u002FSKILL.md",[],[139,144,145,146,147,148,149,150],"setup","report","project","installation","project setup","issues","state",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":158,"publishedAt":39},"01M6DF6X6C2XB0P6GX76P7TTYV","start","Use when starting work on any task, when the user mentions metaswarm, or when the user wants to begin tracked development work","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstart\u002FSKILL.md",[157],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[153,159,77,160,161,162,81,163,164,165,166],"start issue","issue","ready","work on issue","user","work","work on","development",{"skillNo":168,"name":144,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":172,"publishedAt":39},"01M6DF6QMJ9AJKFKHHKRT005PQ","Interactive project setup — detects your project, configures metaswarm, writes project-local files","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fsetup\u002FSKILL.md",[],[144,146,108,173,148,174],"files","interactive"]