get_material_details
Retrieve comprehensive material details using the Materials Project ID to access properties, structures, and compositions for research or analysis purposes.
Instructions
Get detailed information about a specific material by its Materials Project ID.
Args:
material_id: The Materials Project ID (e.g., "mp-149").
Returns:
Dictionary containing detailed information about the material.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| material_id | Yes |
Implementation Reference
- The core handler function 'get_material_details' that executes the tool logic: fetches material data via API wrapper and formats key properties into a structured dictionary.def get_material_details(material_id: str) -> Dict[str, Any]: """ Get detailed information about a specific material by its Materials Project ID. Args: material_id: The Materials Project ID (e.g., "mp-149"). Returns: Dictionary containing detailed information about the material. """ properties = [ "material_id", "formula_pretty", "symmetry", "formation_energy_per_atom", "band_gap", "density", "is_stable", "energy_above_hull", "theoretical", "nelements", "elements", "nsites", "volume", "deprecated", "deprecation_reasons" ] material = fetch_material_by_id( material_id=material_id, properties=properties ) # Format the output to make it more readable result = { "material_id": material.get("material_id"), "formula": material.get("formula_pretty"), "elements": material.get("elements"), "number_of_elements": material.get("nelements"), "number_of_sites": material.get("nsites"), "volume": material.get("volume"), "density": material.get("density"), "band_gap": material.get("band_gap"), "formation_energy": material.get("formation_energy_per_atom"), "energy_above_hull": material.get("energy_above_hull"), "is_stable": material.get("is_stable", False), "is_theoretical": material.get("theoretical", True), "crystal_system": material.get("symmetry", {}).get("crystal_system"), "space_group": material.get("symmetry", {}).get("symbol"), "point_group": material.get("symmetry", {}).get("point_group"), "deprecated": material.get("deprecated", False), "deprecation_reasons": material.get("deprecation_reasons", []) } return result
- src/materials_project_mcp/main.py:20-22 (registration)Registers the 'get_material_details' tool (along with others) with the FastMCP server instance.mcp.tool(get_materials_with_elements) mcp.tool(get_material_details) mcp.tool(find_materials_by_formula)
- Supporting API wrapper 'fetch_material_by_id' that queries the Materials Project MPRester client and retrieves raw material data, invoked by the handler.def fetch_material_by_id( material_id: str, properties: Optional[List[str]] = None, ) -> Dict[str, Any]: """ Fetch a specific material by its Materials Project ID. Args: material_id: The Materials Project ID (e.g., "mp-149"). properties: Optional list of properties to include in the results. Returns: Dictionary containing the material data. """ if properties is None: properties = [ "material_id", "formula_pretty", "symmetry", "formation_energy_per_atom", "band_gap", "theoretical", "density", "is_stable", "energy_above_hull", "elements", "nelements", "nsites", "volume" ] with get_mp_client() as mpr: # Search by material_id docs = mpr.materials.summary.search( material_ids=[material_id], fields=properties ) if not docs: return {"error": f"Material {material_id} not found"} # Convert to dictionary material_dict = docs[0].dict() return material_dict