get_properties
Retrieve comprehensive material properties from the Materials Project database by specifying a material ID. This tool provides detailed data for materials science analysis and research.
Instructions
Get detailed properties for a specific material from Materials Project.
Args:
material_id: Materials Project ID (e.g., "mp-149" for Silicon)
Returns:
JSON with comprehensive material properties
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| material_id | Yes |
Implementation Reference
- src/mcp_materials/server.py:151-208 (handler)The primary handler for the 'get_properties' tool. This function is decorated with @mcp.tool(), automatically registering it as an MCP tool. It fetches comprehensive material properties (thermodynamic, electronic, structural) from the Materials Project API via MPRester for a given material_id, returning formatted JSON or error messages.@mcp.tool() def get_properties( material_id: str, ) -> str: """ Get detailed properties for a specific material from Materials Project. Args: material_id: Materials Project ID (e.g., "mp-149" for Silicon) Returns: JSON with comprehensive material properties """ has_key, key_or_error = check_api_key() if not has_key: return json.dumps({"error": key_or_error}) try: from mp_api.client import MPRester with MPRester(key_or_error) as mpr: doc = mpr.materials.summary.get_data_by_id(material_id) properties = { "material_id": str(doc.material_id), "formula": doc.formula_pretty, "elements": [str(el) for el in doc.elements], "nelements": doc.nelements, "nsites": doc.nsites, "volume": doc.volume, "density": doc.density, # Thermodynamic properties "formation_energy_per_atom": doc.formation_energy_per_atom, "energy_above_hull": doc.energy_above_hull, "is_stable": doc.is_stable, # Electronic properties "band_gap": doc.band_gap, "is_metal": doc.is_metal, "is_magnetic": doc.is_magnetic, "total_magnetization": doc.total_magnetization, # Symmetry "crystal_system": str(doc.symmetry.crystal_system.value) if doc.symmetry and hasattr(doc.symmetry.crystal_system, 'value') else (str(doc.symmetry.crystal_system) if doc.symmetry else None), "space_group_symbol": doc.symmetry.symbol if doc.symmetry else None, "space_group_number": doc.symmetry.number if doc.symmetry else None, "point_group": doc.symmetry.point_group if doc.symmetry else None, # Provenance "database_ids": doc.database_IDs if hasattr(doc, 'database_IDs') else None, } return json.dumps(properties, indent=2) except Exception as e: return json.dumps({"error": str(e)})