Skip to main content
Glama
HeshamFS

MCP Materials Server

by HeshamFS

get_similar_structures

Find materials with similar crystal structures by providing a Materials Project ID. Returns JSON data for structural analysis and comparison.

Instructions

Find materials with similar crystal structures. Args: material_id: Materials Project ID to find similar structures for max_results: Maximum number of similar structures (default: 5) Returns: JSON with structurally similar materials

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
material_idYes
max_resultsNo

Implementation Reference

  • The handler function decorated with @mcp.tool() that implements the get_similar_structures tool. It queries the Materials Project API to find materials sharing the same space group as the reference material, excluding the reference itself, and returns a JSON list of similar structures.
    @mcp.tool() def get_similar_structures( material_id: str, max_results: int = 5, ) -> str: """ Find materials with similar crystal structures. Args: material_id: Materials Project ID to find similar structures for max_results: Maximum number of similar structures (default: 5) Returns: JSON with structurally similar materials """ 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 the reference material ref_doc = mpr.materials.summary.get_data_by_id(material_id) space_group = ref_doc.symmetry.number if ref_doc.symmetry else None if not space_group: return json.dumps({"error": "Could not determine space group for reference material"}) # Search for materials with same space group docs = mpr.materials.summary.search( spacegroup_number=space_group, fields=[ "material_id", "formula_pretty", "symmetry", "nsites", "volume", ], num_chunks=1, chunk_size=max_results + 1, # +1 to exclude self ) results = [] for doc in docs: if str(doc.material_id) == material_id: continue if len(results) >= max_results: break results.append({ "material_id": str(doc.material_id), "formula": doc.formula_pretty, "space_group": doc.symmetry.symbol if doc.symmetry else None, "nsites": doc.nsites, "volume_A3": doc.volume, }) return json.dumps({ "reference": { "material_id": material_id, "formula": ref_doc.formula_pretty, "space_group": ref_doc.symmetry.symbol if ref_doc.symmetry else None, }, "similar_structures": results, }, indent=2) except Exception as e: return json.dumps({"error": str(e)})
  • The @mcp.tool() decorator registers the get_similar_structures function as an MCP tool.
    @mcp.tool()
  • The function signature and docstring define the input schema (material_id: str, max_results: int=5) and output format (JSON string with reference and similar structures).
    def get_similar_structures( material_id: str, max_results: int = 5, ) -> str: """ Find materials with similar crystal structures. Args: material_id: Materials Project ID to find similar structures for max_results: Maximum number of similar structures (default: 5) Returns: JSON with structurally similar materials

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