Skip to main content
Glama
HeshamFS

MCP Materials Server

by HeshamFS

search_by_elastic_properties

Find materials by specifying bulk and shear modulus ranges to identify substances with desired mechanical properties for engineering applications.

Instructions

Search for materials by elastic/mechanical properties. Args: min_bulk_modulus: Minimum bulk modulus in GPa max_bulk_modulus: Maximum bulk modulus in GPa min_shear_modulus: Minimum shear modulus in GPa max_shear_modulus: Maximum shear modulus in GPa max_results: Maximum number of results (default: 10) Returns: JSON with materials matching the elastic property criteria

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
min_bulk_modulusNo
max_bulk_modulusNo
min_shear_modulusNo
max_shear_modulusNo
max_resultsNo

Implementation Reference

  • Implementation of the search_by_elastic_properties MCP tool handler. Uses Materials Project API's elasticity search with filters on bulk and shear modulus ranges. Includes input validation via types, docstring schema description, and @mcp.tool() decorator for registration.
    @mcp.tool() def search_by_elastic_properties( min_bulk_modulus: float | None = None, max_bulk_modulus: float | None = None, min_shear_modulus: float | None = None, max_shear_modulus: float | None = None, max_results: int = 10, ) -> str: """ Search for materials by elastic/mechanical properties. Args: min_bulk_modulus: Minimum bulk modulus in GPa max_bulk_modulus: Maximum bulk modulus in GPa min_shear_modulus: Minimum shear modulus in GPa max_shear_modulus: Maximum shear modulus in GPa max_results: Maximum number of results (default: 10) Returns: JSON with materials matching the elastic property criteria """ 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: search_kwargs: dict[str, Any] = { "num_chunks": 1, "chunk_size": max_results * 2, } # Add bulk modulus filter if min_bulk_modulus is not None or max_bulk_modulus is not None: bulk_range = ( min_bulk_modulus if min_bulk_modulus else 0, max_bulk_modulus if max_bulk_modulus else 1000, ) search_kwargs["bulk_modulus"] = bulk_range # Add shear modulus filter if min_shear_modulus is not None or max_shear_modulus is not None: shear_range = ( min_shear_modulus if min_shear_modulus else 0, max_shear_modulus if max_shear_modulus else 1000, ) search_kwargs["shear_modulus"] = shear_range docs = mpr.materials.elasticity.search(**search_kwargs) results = [] for doc in docs[:max_results]: results.append({ "material_id": str(doc.material_id), "formula": doc.formula_pretty if hasattr(doc, 'formula_pretty') else None, "bulk_modulus_GPa": doc.bulk_modulus.vrh if doc.bulk_modulus else None, "shear_modulus_GPa": doc.shear_modulus.vrh if doc.shear_modulus else None, "universal_anisotropy": doc.universal_anisotropy if hasattr(doc, 'universal_anisotropy') else None, }) return json.dumps({ "query": { "bulk_modulus_range_GPa": [min_bulk_modulus, max_bulk_modulus], "shear_modulus_range_GPa": [min_shear_modulus, max_shear_modulus], }, "count": len(results), "materials": results, }, 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