Skip to main content
Glama
HeshamFS

MCP Materials Server

by HeshamFS

get_elastic_properties

Retrieve elastic and mechanical properties for materials, including bulk modulus, shear modulus, Young's modulus, Poisson's ratio, and elastic tensor, using Materials Project IDs.

Instructions

Get elastic and mechanical properties for a material. Args: material_id: Materials Project ID (e.g., "mp-149" for Silicon) Returns: JSON with elastic properties including bulk modulus, shear modulus, Young's modulus, Poisson's ratio, and elastic tensor

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
material_idYes

Implementation Reference

  • The handler function implementing the get_elastic_properties tool. It queries the Materials Project API for elastic properties of a given material_id, extracts key moduli (bulk, shear, Young's, Poisson's ratio), bounds, and elastic tensor if available, returning formatted JSON. Also handles API key checks and errors. The @mcp.tool() decorator registers it as an MCP tool.
    @mcp.tool() def get_elastic_properties( material_id: str, ) -> str: """ Get elastic and mechanical properties for a material. Args: material_id: Materials Project ID (e.g., "mp-149" for Silicon) Returns: JSON with elastic properties including bulk modulus, shear modulus, Young's modulus, Poisson's ratio, and elastic tensor """ 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: # Get elasticity data docs = mpr.materials.elasticity.search( material_ids=[material_id], ) if not docs: return json.dumps({ "material_id": material_id, "error": "No elastic data available for this material", "note": "Elastic properties are only computed for a subset of materials", }) doc = docs[0] # Extract elastic properties properties = { "material_id": material_id, "formula": doc.formula_pretty if hasattr(doc, 'formula_pretty') else None, # Voigt-Reuss-Hill averages (most commonly used) "bulk_modulus_vrh_GPa": doc.bulk_modulus.vrh if doc.bulk_modulus else None, "shear_modulus_vrh_GPa": doc.shear_modulus.vrh if doc.shear_modulus else None, "youngs_modulus_GPa": doc.young_modulus if hasattr(doc, 'young_modulus') else None, "poisson_ratio": doc.homogeneous_poisson if hasattr(doc, 'homogeneous_poisson') else None, # Voigt bounds (upper) "bulk_modulus_voigt_GPa": doc.bulk_modulus.voigt if doc.bulk_modulus else None, "shear_modulus_voigt_GPa": doc.shear_modulus.voigt if doc.shear_modulus else None, # Reuss bounds (lower) "bulk_modulus_reuss_GPa": doc.bulk_modulus.reuss if doc.bulk_modulus else None, "shear_modulus_reuss_GPa": doc.shear_modulus.reuss if doc.shear_modulus else None, # Derived properties "universal_anisotropy": doc.universal_anisotropy if hasattr(doc, 'universal_anisotropy') else None, "debye_temperature_K": doc.debye_temperature if hasattr(doc, 'debye_temperature') else None, # Classification - convert enum to string "state": str(doc.state.value) if hasattr(doc, 'state') and hasattr(doc.state, 'value') else (str(doc.state) if hasattr(doc, 'state') else None), } # Add elastic tensor if available (6x6 Voigt notation) if hasattr(doc, 'elastic_tensor') and doc.elastic_tensor: tensor = doc.elastic_tensor if hasattr(tensor, 'ieee_format'): properties["elastic_tensor_GPa"] = tensor.ieee_format elif hasattr(tensor, 'raw'): properties["elastic_tensor_GPa"] = tensor.raw return json.dumps(properties, indent=2) except Exception as e: return json.dumps({"error": str(e)})

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HeshamFS/mcp-materials-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server