Materials Project MCP
# Materials Project MCP
A fastmcp-based tool for writing prompts against data in the Materials Project database.
## Installation
You can install the package from source:
```bash
pip install -e .
```
Or using uv:
```bash
uv pip install -e .
```
## Usage
You can use the CLI:
```bash
mp-mcp
```
Or import in your Python code:
```python
from materials_project_mcp.main import create_mcp
mcp = create_mcp()
mcp.run()
```
## API Key Setup
The Materials Project API requires an API key. You can set up your API key in several ways:
1. Pass it directly to the MPRester:
```python
from mp_api.client import MPRester
with MPRester("your_api_key_here") as mpr:
# do stuff with mpr
```
2. Set it as an environment variable:
```bash
export MP_API_KEY="your_api_key_here"
```
## Example
Here's a simple example that demonstrates how to use the MCP tools directly:
```python
import os
import json
from materials_project_mcp.tools import (
get_materials_with_elements,
get_material_details,
find_materials_by_formula
)
# Set your API key
os.environ["MP_API_KEY"] = "your_api_key_here"
# Or load it from a file
# with open("~/materials_project_api.key", "r") as f:
# os.environ["MP_API_KEY"] = f.read().strip()
# Function to print JSON data in a readable format
def print_json(data):
print(json.dumps(data, indent=2))
# Find materials containing Fe and O
print("\n=== Finding materials containing Fe and O ===")
materials = get_materials_with_elements(
elements=["Fe", "O"],
max_records=3
)
print_json(materials)
# Get details for a specific material
if materials:
material_id = materials[0]["material_id"]
print(f"\n=== Getting details for material {material_id} ===")
details = get_material_details(material_id)
print_json(details)
# Find materials with a specific formula
print("\n=== Finding materials with formula Fe2O3 ===")
formula_materials = find_materials_by_formula(
formula="Fe2O3",
max_records=3
)
print_json(formula_materials)
```
## Development
### Local Setup
```bash
# Clone the repository
git clone https://github.com/justaddcoffee/materials-project-mcp.git
cd materials-project-mcp
# Install development dependencies
uv pip install -e ".[dev]"
```
### Running Tests
```bash
pytest
```
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: find_materials_by_formula searches by chemical formula, get_material_details retrieves detailed information by ID, and get_materials_with_elements searches by element composition. There is no overlap in functionality, making tool selection unambiguous for an agent.
All tool names follow a consistent verb_noun pattern with snake_case (e.g., find_materials_by_formula, get_material_details, get_materials_with_elements). The naming is predictable and readable throughout the set.
With only 3 tools, the set feels thin for a materials science domain, which might involve more operations like filtering by properties, comparing materials, or updating data. While the tools cover basic search and retrieval, the count is borderline for comprehensive coverage.
The tools provide essential search and retrieval functions (by formula, ID, and elements), but there are notable gaps. For a materials database, operations like filtering by material properties (e.g., band gap, stability), sorting, or pagination are missing, which could limit agent workflows in more complex tasks.