pymatgen
Analyzes, validates, converts, and transforms materials structures and computed materials data with pymatgen. Use for local phase diagrams, symmetry sensitivity, electronic-structure I/O, and bounded Materials Project queries.
Install / Use
npx skills add K-Dense-AI/scientific-agent-skills --skill pymatgenInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Our assessment of pymatgen
pymatgen scores 100/100 on our quality scale, 36th of 4,648 Development & Engineering skills we index (top 1%).
Its SKILL.md is 16 KB long, well organised into 15 sections with 18 code examples: a thorough specification that gives an agent plenty to work with.
With 46,441 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated about 2 months ago, so pymatgen is actively maintained.
- Our last check on 2026-10-22 found the source still online.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.
AI review by kimi-k2.7-code on 2026-09-25. Automated pattern scan on 2026-09-25. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
pymatgen compared with similar skills
pymatgen has the highest quality score among these 4 similar skills, though 4 alternatives have been updated more recently.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| pymatgen (this skill)by K-Dense-AI | 100 | 46.4k | 48d ago | SKILL.md |
| taste-skillby Leonxlnx | 100 | 112.0k | 1d ago | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 110.3k | 1d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 79.1k | today | CLAUDE.md |
| ai-job-searchby ai-job-search-dev | 100 | 70.5k | today | CLAUDE.md |
Frequently asked questions
- How do I install pymatgen?
- Run
npx skills add K-Dense-AI/scientific-agent-skills --skill pymatgen. The install tabs above show the steps for each supported agent. - Which AI agents does pymatgen work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is pymatgen safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is pymatgen still maintained?
- The repository was last updated about 2 months ago, so pymatgen is actively maintained.
Skill content
View source on GitHubname: pymatgen description: Analyze, validate, convert, and transform materials structures and computed materials data with current pymatgen APIs, including local phase diagrams, symmetry sensitivity, electronic-structure I/O, and explicitly bounded Materials Project queries. license: MIT compatibility: Python 3.11+ with uv. The verified snapshot uses pymatgen 2026.5.4, pymatgen-core 2026.7.16, and mp-api 0.46.4. Bundled help and planning CLIs use only the standard library; local scientific execution lazily requires the pinned pymatgen packages. Materials Project access additionally requires explicit network approval and the single named secret MP_API_KEY. allowed-tools: Read Write Bash Glob Python metadata: version: "1.3" skill-author: "K-Dense Inc." last-reviewed: "2026-07-23"
pymatgen
Use pymatgen for explicit, provenance-preserving work with compositions, molecules, periodic structures, computed entries, symmetry, phase diagrams, electronic structures, and electronic-structure-code files. Treat every parse, conversion, symmetry assignment, transformation, and database result as method- and parameter-dependent.
The MIT frontmatter license covers this skill. pymatgen and
pymatgen-core are MIT; mp-api declares BSD-3-Clause-LBNL. Materials Project
data is generally CC BY 4.0, while contributed data remains owned by its
contributors. Check the exact artifact and data terms before redistribution.
Verified snapshot (2026-07-23)
pymatgen==2026.5.4is the latest stable wrapper release (2026-05-04). Package metadata requires Python 3.11+ and directly requirespymatgen-core>=2026.4.16.pymatgen-core==2026.7.16is the latest stable core release (2026-07-16). It now contains core objects, symmetry/lattice operations, and the I/O layer, all under the existingpymatgen.*namespace.mp-api==0.46.4is the latest stable Materials Project client (2026-06-15), requires Python 3.11+, and depends onpymatgen>2024.2.20.- The current API site is built from 2026.7.16 core documentation. Pinning both
distributions prevents
pymatgen==2026.5.4from silently resolving to a different future core. - Pymatgen uses date-based versions. PyPI renders the date with dots; do not infer semantic-version compatibility from the numbers.
Create a project lock for reproducibility:
uv init --python 3.11
uv add "pymatgen==2026.5.4" "pymatgen-core==2026.7.16" "mp-api==0.46.4"
uv lock
uv sync --frozen
For a disposable reviewed environment:
uv venv --python 3.11 .venv-pymatgen
uv pip install --python .venv-pymatgen/bin/python \
"pymatgen==2026.5.4" "pymatgen-core==2026.7.16" "mp-api==0.46.4"
Direct pins do not freeze all transitive wheels. Preserve uv.lock, platform,
Python version, package versions, and artifact hashes.
Required workflow
- State whether the object is a non-periodic
Moleculeor periodicStructure; record lattice and periodic boundary conditions. - State units. Pymatgen commonly uses Å, degrees, eV, eV/atom, amu, and g/cm³, but each API's documented contract is authoritative.
- State coordinate mode.
Structurecoordinates are fractional unlesscoords_are_cartesian=True;Moleculecoordinates are Cartesian. - Inspect every parser warning. For CIF, preserve occupancy, site-merging, stoichiometry, and correction warnings; do not silently accept fixes.
- Report disorder/partial occupancies and oxidation-state decoration. Never guess oxidation states implicitly.
- Run validation before symmetry, neighbor, transformation, conversion, or thermodynamic analysis.
- Sweep symmetry tolerances and report
symprecin Å andangle_tolerancein degrees with every assignment. - Treat transformations as new artifacts. Preserve the input, parameters, software versions, warnings, and parent/child checksums.
- Before conversion, identify representation loss. Write only to a new path and round-trip-check scientifically relevant properties.
- Build phase diagrams only from compatible total energies and correction schemes. A computed hull is conditional on the supplied entry set.
- Keep all database access off by default. Disclose endpoint, filters, fields, result limit, cache behavior, output, license, and citation before an explicit execution step.
- Preserve an artifact manifest. Never use pickle or load an untrusted general object graph; use schema-validated JSON and explicit constructors.
Core objects
Use the public convenience imports:
from pymatgen.core import Composition, Element, Lattice, Molecule, Structure
composition = Composition("LiFePO4", strict=True)
iron = Element("Fe")
lattice = Lattice.cubic(5.64) # Å
structure = Structure(
lattice,
["Na", "Cl"],
[[0, 0, 0], [0.5, 0.5, 0.5]],
coords_are_cartesian=False,
validate_proximity=True,
)
molecule = Molecule(
["O", "H", "H"],
[[0.0, 0.0, 0.0], [0.758, 0.0, 0.504], [-0.758, 0.0, 0.504]],
charge=0,
spin_multiplicity=1,
)
Structure and Molecule are mutable; use IStructure/IMolecule or an
explicit copy when mutation would compromise provenance. See
core classes.
Safe local structure intake
Prefer the bundled validator, which captures CIF and Python warnings and reports units, occupancy, disorder, oxidation states, periodicity, coordinate mode, and minimum distances:
python scripts/composition_structure_validator.py composition "Fe2O3"
python scripts/composition_structure_validator.py structure structure.cif
python scripts/structure_analyzer.py structure.cif --symmetry
For direct CIF work, use the current parser method and inspect both warning channels:
import warnings
from pymatgen.io.cif import CifParser
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter("always")
parser = CifParser("input.cif", check_cif=True)
structures = parser.parse_structures(
primitive=False,
check_occu=True,
on_error="raise",
)
parser_messages = list(parser.warnings)
python_messages = [str(item.message) for item in caught]
Do not parse untrusted files in a privileged process. A critical malicious-CIF code-execution flaw affected pymatgen through 2024.2.8 and was fixed in 2024.2.20; the pinned release is newer, but parsers still process attacker controlled input. Use isolation and CPU/RAM/disk/time limits.
Symmetry
Space-group assignment depends on tolerances and structure quality:
from pymatgen.symmetry.analyzer import SpacegroupAnalyzer
analyzer = SpacegroupAnalyzer(
structure,
symprec=0.01, # Å
angle_tolerance=5.0, # degrees
)
symbol = analyzer.get_space_group_symbol()
number = analyzer.get_space_group_number()
The Materials Project pipeline commonly uses symprec=0.1 Å, while pymatgen's
documented default is 0.01 Å; these can produce different assignments.
Generate a sensitivity report instead of changing tolerance until a preferred
answer appears:
python scripts/symmetry_sensitivity_report.py structure.cif \
--symprec 0.001,0.01,0.1 --angle-tolerance 1,5
See analysis modules.
Conversion and parser/writer I/O
Plan first; the planner does not open files or import pymatgen:
python scripts/io_conversion_plan.py \
--input input.cif --input-format cif \
--output POSCAR.new --output-format poscar \
--periodic --coordinate-mode direct
Then convert to a new path with explicit loss acknowledgement:
python scripts/structure_converter.py input.cif POSCAR.new \
--output-format poscar --coordinate-mode direct --allow-lossy \
--acknowledge-parser-warnings
CIF, POSCAR, XYZ, and JSON do not preserve the same semantics. Check lattice, periodicity, coordinate mode, species ordering, selective dynamics, site properties, oxidation states, labels, and disorder after every conversion. See I/O formats.
Transformations and provenance
Transform a copy and preserve history:
from pymatgen.alchemy.materials import TransformedStructure
from pymatgen.transformations.standard_transformations import (
SubstitutionTransformation,
SupercellTransformation,
)
tracked = TransformedStructure(structure.copy(), [])
tracked.append_transformation(SupercellTransformation([2, 2, 2]))
tracked.append_transformation(SubstitutionTransformation({"Na": "K"}))
derived = tracked.final_structure
history = tracked.history
One-to-many ordering, doping, slab, and magnetic transformations can expand combinatorially or invoke optional executables. Bound candidates, sites, supercell size, runtime, and output count. See transformations and workflows.
Local phase diagrams
The bundled generator is offline and accepts only a strict JSON schema with total eV per entry and provenance:
{
"schema_version": "1.0",
"energy_unit": "eV",
"energy_basis": "total_per_entry",
"provenance": {
"source": "reviewed local calculations",
"method": "one compatible energy/correction scheme"
},
"entries": [
{
"entry_id": "local-Li",
"composition": "Li",
"energy_eV": -1.0,
"provenance": {"source": "calculation manifest sha256:..."}
}
]
}
python scripts/phase_diagram_generator.py entries.json --analyze Li2O
Elemental endpoints and all competing phases must be present. Do not mix raw energies from different functionals, pseudopotentials, magnetic states, or correction conventions. Computed on-hull status is not experimental stability.
Band structures, DOS, VASP, and Q-Chem
Parse only the data needed:
from pymatgen.io.vasp import Vasprun
run = Vasprun(
"vasprun.xml",
parse_dos=True,
parse_eigen=True,
parse_projected_eigen=False,
parse_potcar_file=False,
)
band_structure = run.get_band_structure(line_mode=True)
band_gap = band_structure.get_band_gap()
complete_dos = run.complete_dos
Projected eigenvalues can require extreme memory. Verify convergence, k-path, spin/SOC settings, Fermi-level conventions, smearing, and projection basis before interpreting gaps or DOS. A parser success is not a converged calculation.
Current Q-Chem interfaces are pymatgen.io.qchem.inputs.QCInput and
pymatgen.io.qchem.outputs.QCOutput:
from pymatgen.io.qchem.inputs import QCInput
job = QCInput(
molecule,
rem={"job_type": "sp", "method": "wb97x-v", "basis": "def2-svpd"},
)
text = str(job)
Pymatgen writes inputs and parses outputs; it does not grant a VASP or Q-Chem license or establish method validity. POTCAR files are VASP-licensed and are not distributed by pymatgen. Never redistribute them or scan unrelated directories for them. Optional tools such as enumlib, Bader, packmol, ffmpeg, and Zeo++ are native/external executables: review provenance, licenses, argv, working directory, and resource limits before a separate explicit invocation.
Materials Project: plan before network
Use only:
from mp_api.client import MPRester
The client reads MP_API_KEY when constructed. Supply only that named
environment variable through the user's shell or secret manager. Do not accept
the key as a CLI argument, traverse .env files, dump environment variables,
or print exception data without redaction.
Dry-run planning is the default:
python scripts/mp_query.py \
--chemsys Li-Fe-O \
--energy-above-hull 0 0.05 \
--fields formula_pretty,energy_above_hull,band_gap,origins \
--limit 25
Only --execute permits one bounded summary query and requires a new output:
python scripts/mp_query.py \
--material-id mp-149 \
--fields formula_pretty,structure,origins,last_updated \
--limit 1 --output mp-149.json --execute
The CLI sets num_chunks=1, requires explicit fields and filters, caps results,
do
Truncated for display — read the full file on GitHub.
Related Skills
taste-skill
112.0kAgent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages
Agent-Reach
110.3kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
79.1kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
ai-job-search
70.5kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
