Guide the user step-by-step through setting up AtomisticSkills. Ask before running anything that installs software, and wait for each step to finish.
Every skill command and every MCP server starts through one launcher, venv/run.
It runs the code in one of three Python environments -- uv projects under venv/:
| Environment | Contents |
|---|---|
cpu |
materials, chemistry, drug discovery and analysis (no torch) |
mlip |
MACE and MatGL on top of the CPU stack (GPU) |
fairchem |
FairChem (UMA, eSEN) on top of the CPU stack (GPU) |
The launcher uses uv on this machine when it can, and otherwise falls back to
a container image built from the same lock (Docker, Podman or Apptainer), with
the same paths, so nothing else changes. Environments are created on first use;
venv/run --setup creates them ahead of time.
What a native (uv) install needs:
- Linux on x86_64 or aarch64, glibc 2.28 or newer (aarch64 GPU stacks: 2.34)
flock(fromutil-linux), to serialize environment setup- uv and a C compiler (
gcc), for the few packages that build from source. Python itself comes from uv (a managed CPython with its headers), so no system Python orpython3-develpackage is needed - For GPU work, an NVIDIA driver 525 or newer. The mlip and fairchem environments
carry two torch builds and
venv/runpicks by driver: CUDA 13 (driver ≥ 580, required for GB10/Blackwell) or CUDA 12.6 (drivers 525–579, common on clusters).venv/run --doctorshows the choice;ATOMISTIC_TORCH_CUDA=cu126|cu130overrides it. Container images carry the CUDA 13 build only
Hosts that do not meet these -- older clusters, macOS, no compiler -- use the container fallback automatically once a container runtime is installed.
Ask the user to run:
curl -LsSf https://astral.sh/uv/install.sh | sh # skip if uv is installed
claude plugin marketplace add learningmatter-mit/AtomisticSkills
claude plugin install atomistic-skills@atomistic-skillsTo install from a local checkout instead, add a fresh clone as the marketplace:
a local path is copied whole into the plugin cache, including any
environments already built under venv/*/.venv (tens of GB).
The plugin brings every skill and all MCP servers. Its options are optional:
runtime (default auto; set apptainer on an HPC cluster that should use
containers), and image_registry / image_tag for the container fallback.
The first use of the GPU environments downloads several GB. To do it up front, have
Claude run the general-atomisticskills-setup skill (it runs venv/run --setup and
venv/run --doctor from the plugin's install directory). An MCP server whose
environment is still being created reports that it is preparing it; reconnect it
with /mcp once the setup finishes.
For Claude Code, Codex, Cursor, Gemini or Windsurf, and for developing skills:
git clone git@github.com:learningmatter-mit/AtomisticSkills.git
cd AtomisticSkills
curl -LsSf https://astral.sh/uv/install.sh | sh # skip if uv is installed
venv/run --setup # cpu, mlip, fairchem (several GB)
python3 configure_mcp.py # register MCP servers and skillsconfigure_mcp.py auto-detects installed agents; pass --agent claude (or codex,
gemini, cursor, windsurf) to choose, and --scope global to make the tools
available outside this repository:
| Client | Project scope | Global scope (all projects) |
|---|---|---|
| Claude Code | .mcp.json (project root) |
~/.claude.json |
| Codex CLI | .codex/config.toml |
~/.codex/config.toml |
| Cursor | .cursor/mcp.json |
~/.cursor/mcp.json |
| Windsurf | — | ~/.codeium/windsurf/mcp_config.json |
| Gemini CLI | .gemini/settings.json |
~/.gemini/settings.json |
For Claude Code it also links every skill into .claude/skills/, so the skills are
registered natively. With --scope global, Codex and Gemini also get the skills and
a pointer to the rules and workflows in their global configuration. Restart the
assistant after changing its configuration.
Settings live in ~/.config/atomistic_skills.yaml (environment variables of the
same name take precedence). Offer this template and fill in what the user has:
# Materials Project (mat-db-mp, phase diagrams, many workflows)
MP_API_KEY: "your_mp_api_key_here"
# Hugging Face token: required for FairChem UMA, a gated model (request access at
# https://huggingface.co/facebook/UMA first)
HF_TOKEN: "your_hf_token_here"
# Atomate2 remote project for DFT jobs (jobflow-remote)
ATOMATE2_REMOTE_PROJECT: "your_project_name"
# ORCA binary for the chem-dft-orca-* skills (x86_64 only)
ORCA_BINARY_PATH: /path/to/orca_directory/orca
# How skills and MCP servers run: auto (default), uv, docker, podman, apptainer
ATOMISTIC_RUNTIME: auto- Run
venv/run --setuponce on a login node with network access; the environments live in the checkout (or the plugin directory) and are shared with compute nodes over the shared filesystem. - If the cluster's glibc is too old or there is no compiler, set
ATOMISTIC_RUNTIME: apptainer.venv/run --setupthen converts the images to SIF files once (minutes per image), so MCP servers start without timing out. - Even with
auto, extras that need a newer glibc than the host's (cpu+openmmandcpu+pymolon RHEL 8) run from the Apptainer image. The first such command converts the image to a SIF, which took 15–30 minutes on an NFS home directory.--setup cpudoes not do this whencpuitself runs natively, so trigger it once ahead of time withvenv/run cpu+openmm python -c 1. - After an upgrade, delete superseded
atomisticskills-*.siffiles (about 1.4 GB each) from~/.cache/atomisticskills/sif/or$ATOMISTIC_MODEL_CACHE/sif/. - GPU nodes can differ from login nodes. A node with glibc older than 2.28 (for example CentOS 7) needs a container runtime installed there, and the images carry the CUDA 13 build. Driver ≥ 580 is the baseline for CUDA 13 minor-version compatibility; older drivers require a compatible forward-compatibility setup on supported hardware. Verify actual CUDA execution in the image rather than inferring it from GPU visibility. On a native uv node, a driver of 525–579 gets the CUDA 12.6 build automatically. See NVIDIA's minor-version compatibility and forward compatibility requirements.
- Keep large caches off a small home quota with
UV_CACHE_DIR(uv's download cache) andATOMISTIC_MODEL_CACHE(container checkpoints and SIF files).
MatterGen, ADiT and DiffCSP++ (ml-generative-*), ICEBERG (chem-msms-predict),
React-OT (chem-react-ot) and SelfConditionedDenoisingAtoms
(ml-property-predict-scd) each have their own pinned uv project under venv/,
created on first use like the shared ones. Their compiled dependencies set what
a host needs, and venv/run --doctor shows what this one can run:
- MatterGen, ADiT, DiffCSP++: natively on x86_64 with glibc ≥ 2.32 (PyG's
wheels need it); elsewhere (aarch64, or EL8-era clusters with glibc 2.28) from
the
generativecontainer image (venv/run --setup generativepulls it). - SelfConditionedDenoisingAtoms (
scd): x86_64 with glibc ≥ 2.32; no image. - ICEBERG (
msms): x86_64 with GCC 9's libstdc++ (DGL needsGLIBCXX_3.4.26: glibc ≥ 2.31 distributions ship it). On EL8, put a newer GCC runtime first (e.g.module load gccorLD_LIBRARY_PATH=<gcc>/lib64:$LD_LIBRARY_PATH) and run it natively withATOMISTIC_RUNTIME=uv. - React-OT (
reactot): x86_64 and aarch64.
These stacks download several GB of CUDA libraries on first use; on a cluster,
create them ahead of time (venv/run --setup mattergen adit ...) rather than on
an MCP server's first start.
LAMMPS with ML plugins (mat-lammps-md) is built against the mlip
environment by the skill's build scripts; FairChem's lmp_fc comes with the
fairchem+lammps extra. Nothing uses conda.
venv/run --doctorreports the host, which backend each environment uses, and whether it is ready. Then run a live test with the user:
- Materials Project: "Search the Materials Project for the stable structure of
LiFePO4." (
base.search_materials_project_by_formula) - MLIP: "Relax this LiFePO4 structure with MACE and report the energy."
(
mace.load_model, thenmace.relax_structure)
- Leverage local GPUs: MLIP tasks are far faster on a machine with a GPU.
- Customize: Add your own skills, MCP tools and workflows to the project.
- Contribute back: If you develop a robust, general skill, please open a PR.
| Issue | Fix |
|---|---|
| An MCP server is not connected | Run venv/run --doctor. A first start creates the environment in the background; reconnect with /mcp when it finishes, or run venv/run --setup first. |
needs glibc >= … or needs a C compiler |
Install a container runtime (Apptainer on HPC, Docker elsewhere); auto then uses it. |
No module named ... in a skill script |
Run the command exactly as the skill writes it: venv/run <env> ... picks the environment the script needs. |
| GPU not used | Run venv/run --doctor: native uv selects CUDA 12.6 for drivers 525–579 and CUDA 13 for 580+. Containers retain their image's CUDA build; test an actual CUDA tensor operation and check model GPU activity. Older-driver container execution depends on the compatibility setup; it does not imply CPU-only execution. See the HPC guidance above and the validated desta result. |
FairChem load_model fails with 401 / gated repo |
UMA checkpoints are gated: request access at https://huggingface.co/facebook/UMA, then set HF_TOKEN (in ~/.config/atomistic_skills.yaml or the environment). |
Model download fails with CERTIFICATE_VERIFY_FAILED |
The launcher points Python at the system CA bundle; behind a proxy or with a custom bundle, set SSL_CERT_FILE to it. |
Apptainer model download fails with a missing host CA path (such as /etc/pki/tls/certs/ca-bundle.crt) |
Update venv/run: it now binds the selected host bundle read-only into the image and sets the container's SSL_CERT_FILE to that mount. |
mcp_smoke.py cannot launch Docker servers from inside the CPU image |
Run the client natively and select Docker for the servers: ATOMISTIC_RUNTIME=uv venv/run cpu python tools/mcp_smoke.py mattergen --server-env ATOMISTIC_RUNTIME=docker. Exporting Docker for the whole command also containerizes the client. |
SyntaxError running a tools/ script |
python3 is too old (Python 3.6 on RHEL 8); run it as venv/run cpu python tools/<script>.py. |
| Atomate2 remote worker issues | See docs/atomate2_remote_workers.md |