Materials Project Database Query
SkillDatabases & dataQuery Materials Project database for crystal structures, computed properties, elastic/magnetic data, and structurally similar materials using the MP API.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Materials Project Database Query skill
What this skill tells your AI
The instructions your AI receives, as published by learningmatter-mit/atomisticskills in .agents/skills/mat-db-mp/SKILL.md and read by ahel’s review.
Goal
To retrieve crystal structures and computed properties from the Materials Project database, enabling efficient materials discovery and property analysis. This skill provides access to:
- Basic material properties (energy above hull, formation energy, band gap)
- Elastic properties (bulk modulus, shear modulus, elastic tensors)
- Magnetic properties (magnetic ordering, magnetization, site moments)
- Structure similarity search (CrystalNN-based fingerprinting)
Note: For quick structure retrieval by formula or chemical system, MCP tools are also available (see MCP Tools section).
Instructions
1. Query Materials by Chemical System or Formula
Use query_mp.py to search for materials by chemical system, formula, or elements with property filtering.
Basic Query (Summary Endpoint):
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/query_mp.py \
--chemsys "Li-S" \
--properties energy_above_hull formation_energy_per_atom band_gap \
--e_above_hull_max 0.05 \
--limit 10 \
--endpoint summary \
--output stable_li_s_materials.json
Detailed Thermodynamic Data (Thermo Endpoint):
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/query_mp.py \
--chemsys "Li-O" \
--endpoint thermo \
--limit 20 \
--output li_o_thermo.json
Key Parameters:
--chemsys: Chemical system (e.g., "Li-S", "Si-O")--formula: Specific chemical formula (e.g., "LiFePO4")--elements: List of elements that must be present--properties: Properties to retrieve (default: energy_above_hull, formation_energy_per_atom)--e_above_hull_max: Maximum energy above hull for stability filtering (eV/atom)--endpoint: Choosesummary(includes structures) orthermo(detailed thermodynamics, no structures)--limit: Maximum number of results to retrieve
Output: JSON file containing material IDs, formulas, CIF strings (summary endpoint), and requested properties.
2. Query Elastic Properties
Use get_elasticity.py to retrieve bulk modulus, shear modulus, and elastic tensor data.
Query Specific Material:
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/get_elasticity.py \
--material_id mp-149 \
--output si_elasticity.json
Filter by Bulk Modulus Range:
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/get_elasticity.py \
--bulk_modulus_min 200 \
--bulk_modulus_max 400 \
--output high_bulk_modulus.json
Key Parameters:
--material_id: Specific MP ID(s) to query--bulk_modulus_min/max: Bulk modulus (VRH) range in GPa--shear_modulus_min/max: Shear modulus (VRH) range in GPa
Output: JSON file with bulk modulus, shear modulus (Voigt, Reuss, VRH averages), and full elastic tensor.
3. Query Magnetic Properties
Use get_magnetism.py to retrieve magnetic ordering, magnetization, and site-specific magnetic moments.
Query Specific Material:
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/get_magnetism.py \
--material_id mp-19770 \
--output fe2o3_magnetism.json
Filter by Magnetic Ordering and Magnetization:
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/get_magnetism.py \
--ordering FM \
--total_magnetization_min 10.0 \
--output ferromagnetic_materials.json
Key Parameters:
--material_id: Specific MP ID(s) to query--ordering: Magnetic ordering type (FM, AFM, FiM, NM)--total_magnetization_min/max: Total magnetization range in μB
Output: JSON file with magnetic ordering, total magnetization, and per-site magnetic moments.
4. Retrieve Structures by Material ID
Use get_structure_by_id.py to retrieve crystal structures directly by their Materials Project ID.
Single Structure Retrieval:
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/get_structure_by_id.py mp-149 \
--output Si_diamond.cif
Batch Retrieval:
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/get_structure_by_id.py \
mp-149 mp-19017 mp-1143 \
--output_dir structures/
Key Parameters:
material_ids: One or more MP IDs to retrieve--output: Output path for single material ID (CIF format)--output_dir: Output directory for batch retrieval--api_key: Optional API key (usesMP_API_KEYenv var by default)
Output: CIF file(s) containing the crystal structure(s).
5. Find Structurally Similar Materials
Use find_similar_structures.py to find materials with similar crystal structures based on CrystalNN fingerprinting.
Find Similar to MP Material:
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/find_similar_structures.py \
--material_id mp-149 \
--top 15 \
--output similar_to_si.json
Find Similar to Custom Structure:
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/find_similar_structures.py \
--structure my_structure.cif \
--top 20 \
--output similar_structures.json
Filter by Chemical System:
# Env: base-agent
python .agents/skills/mat-db-mp/scripts/find_similar_structures.py \
--material_id mp-149 \
--top 20 \
--chemsys "C" \
--output carbon_structures_like_si.json
Key Parameters:
--material_id: MP ID to use as query structure--structure: Path to custom structure file (CIF, POSCAR, etc.)--top: Number of most similar structures to return (default: 50)--chemsys: Optional post-filter by exact chemical system match
Similarity Algorithm: Uses CrystalNN to compute local coordination fingerprints, aggregates them into structure fingerprints, and ranks by Euclidean distance in fingerprint space. Dissimilarity score: 100 * (1 - exp(-distance)), where 0% = identical and 100% = maximally different.
Output: JSON file with similar material IDs, formulas, and dissimilarity scores (0-100%).
Examples
See the examples/ directory for complete working examples:
Basic Queries (examples/query_mp/):
cd .agents/skills/mat-db-mp
bash examples/query_mp/li_s_stability.sh
# Output: Retrieves 2 stable Li-S materials (E_hull < 0.05 eV/atom)
Elastic Properties (examples/elasticity/):
cd .agents/skills/mat-db-mp
bash examples/elasticity/elasticity_query.sh
# Output: Si elastic data + 1387 materials with K=200-400 GPa
Magnetic Properties (examples/magnetism/):
cd .agents/skills/mat-db-mp
bash examples/magnetism/magnetism_query.sh
# Output: Fe2O3 magnetic data + 23,121 ferromagnetic materials
Structure Similarity (examples/similarity/):
cd .agents/skills/mat-db-mp
bash examples/similarity/similarity_search.sh
# Output: 15 structures similar to Si (mp-149)
Structure Retrieval (examples/get_structure/):
cd .agents/skills/mat-db-mp
bash examples/get_structure/structure_retrieval.sh
# Output: CIF files for Si, LiFePO4, and Fe2O3
MCP Tools for Quick Retrieval
For simple structure retrieval tasks, MCP tools provide a convenient alternative to running scripts:
Retrieve Most Stable Structure by Formula
mcp_base_search_materials_project_by_formula(
formula="LiFePO4", # Chemical formula
save_to_file="lifepo4.cif" # Optional: save path (default: auto-generated)
)
Returns only the single most stable structure (lowest energy above hull) matching the formula. If multiple polymorphs exist, only ONE is returned.
Retrieve All Stable Structures by Chemical System
mcp_base_search_materials_project_by_chemsys(
chemsys="Li-O", # Chemical system
save_to_file="LiO_structures" # Optional: directory path (default: {chemsys}_structures)
)
Returns all stable structures on the convex hull (E_hull = 0) in the specified chemical system. Structures are saved to individual CIF files in a directory.
Output: Directory containing CIF files for each hull structure, named {mp-id}_{formula}.cif. Each structure includes metadata (material_id, formula, energy_above_hull) in the atoms.info dict.
Example Output:
Found 3 structures on convex hull for Li-O
Saved to directory: /path/to/LiO_structures
Structures:
- mp-1960: Li2O (E_hull=0.000000 eV/atom)
- mp-12958: Li2O2 (E_hull=0.000000 eV/atom)
- mp-841: LiO2 (E_hull=0.000000 eV/atom)
When to Use MCP Tools vs Scripts
Use MCP Tools when:
- Formula search: Need the single most stable polymorph quickly
- Chemical system search: Need all stable phases on the convex hull
- Working from Python/Jupyter notebooks
- Simple queries without complex property filtering
- Exploring phase diagrams (chemsys tool returns all hull phases)
Use Scripts when:
- Querying structures with specific property filters (e.g., bandgap > 2 eV)
- Need detailed properties (elasticity, magnetism, formation energy)
- Batch processing with custom criteria
- Generating datasets for ML training
- Advanced queries (similarity search, property ranges, metastable structures)
Constraints
- API Key: Requires Materials Project API key set in
MP_API_KEYenvironment variable - Environment: All scripts require the
base-agentconda environment - MP-API Version: Similarity search requires mp-api >= 0.46.0 with
find_similarmethod - Python Version: Base-agent uses Python 3.11
- Rate Limits: Materials Project API has rate limits; large queries may be throttled
- Endpoint Differences:
summaryendpoint includes crystal structures (CIF format)thermoendpoint provides detailed thermodynamic data but no structures
- Similarity Chemical Filter: The
--chemsysparameter in similarity search performs post-filtering for exact element matches, not compositional similarity - Large Result Sets: Queries returning >1000 materials may take several minutes to complete
API Endpoints
- Summary (
mpr.materials.summary): General material data with structures - Thermo (
mpr.materials.thermo): Detailed thermodynamic properties - Elasticity (
mpr.materials.elasticity): Elastic modulus and tensor data - Magnetism (
mpr.materials.magnetism): Magnetic ordering and moments - Similarity (
mpr.materials.similarity): CrystalNN-based structure matching
Author: Bowen Deng Contact: GitHub @learningmatter-mit
Signals
- GitHub stars
- 164
- Forks
- 24
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
mat-db-mp- Source
- github.com/learningmatter-mit/atomisticskills