Skip to main content
Glama

MOF Tools MCP Server

A production-ready, professional MCP server for Metal-Organic Framework (MOF) research. This server uses the Streamable HTTP transport to provide scientific tools over HTTP with comprehensive Pydantic validation and a formal tool registry system.

✨ Key Features

  • πŸ”’ Input/Output Validation: All tool inputs and outputs are validated using Pydantic models

  • πŸ“‹ Formal Tool Registry: Centralized tool management with metadata, categories, and tags

  • πŸ›‘οΈ Production-Ready: Industry-standard code with comprehensive error handling

  • πŸ“Š Type Safety: Full type hints throughout the codebase

  • βœ… Tested: Comprehensive test suite with over 35 tests

πŸ“ Repository Structure

  • main.py: Server entrypoint with tool registration and initialization

  • tools.py: Core scientific tools with Pydantic validation models

  • tool_registry.py: Formal tool registration system with metadata management

  • tool_definitions.yaml: YAML configuration file defining all available tools and their metadata

  • tests/test_tools.py: Comprehensive test suite for tools and validation

  • tests/test_tools_load.py: Load and consistency tests for tool definitions

  • pyproject.toml: Dependency and package management

πŸš€ Installation

# Install dependencies
pip install mcp[server] ase pydantic pyyaml bohr-agent-sdk

πŸƒ Running the Server

To run as the modern HTTP server (Streamable HTTP):

python main.py

The server will start on http://0.0.0.0:50001 and display registered tools information:

=== MOF Tools Server ===
Registered 3 tools:
  - search_mofs (search)
  - calculate_energy (calculation)
  - optimize_structure (optimization)

Tools by category:
  search: 1 tool(s)
  calculation: 1 tool(s)
  optimization: 1 tool(s)
  analysis: 0 tool(s)

πŸ§ͺ Testing

Run the comprehensive test suite:

# Run all tests
PYTHONPATH=. pytest tests/ -v

# Run specific test file
PYTHONPATH=. pytest tests/test_tools.py -v
PYTHONPATH=. pytest tests/test_tools_load.py -v

πŸ§ͺ Testing the Server

Method 1: MCP Inspector

# Connect inspector to your running HTTP server
npx @modelcontextprotocol/inspector http://localhost:50001/mcp

Method 2: Manual HTTP Check

Since the server runs on HTTP, you can verify it's up with a simple curl:

curl http://localhost:50001/mcp

πŸ› οΈ Available Tools

All tools return validated JSON responses with comprehensive error handling.

Bohr Agent SDK integration also provides asynchronous job management tools:

  • submit_: Submit a calculation job

  • query_job_status: Check job progress

  • get_job_results: Retrieve completed job data

search_mofs

Category: Search
Description: Search for Metal-Organic Frameworks by name or formula in the database

Input:

{
  "query": "MOF-5"
}

Output:

{
  "success": true,
  "results": [
    {
      "name": "MOF-5",
      "formula": "Zn4O(BDC)3",
      "surface_area": 3800.0
    }
  ],
  "count": 1,
  "message": "Found 1 MOF(s)"
}

calculate_energy

Category: Calculation
Description: Calculate the potential energy of a structure from CIF file content or path using ASE

Input:

{
  "data": "<CIF file content or path>"
}

Output:

{
  "success": true,
  "energy": -123.4567,
  "error": null,
  "message": "Energy: -123.4567 eV"
}

optimize_structure

Category: Optimization
Description: Perform structure optimization for a named MOF structure (placeholder implementation)

Input:

{
  "name": "HKUST-1"
}

Output:

{
  "success": true,
  "structure_name": "HKUST-1",
  "message": "Successfully initiated optimization for HKUST-1"
}

πŸ”Œ Integration

To connect your agent to this server, use the Streamable HTTP endpoint:

URL: http://localhost:50001/mcp

πŸ—οΈ Architecture

Pydantic Validation

All tools use Pydantic models for comprehensive input/output validation:

  • Input Models: Validate and sanitize user inputs

  • Output Models: Ensure consistent response structure

  • Field Validators: Custom validation logic (e.g., trimming whitespace, checking ranges)

  • Error Handling: Graceful error messages returned as validated JSON

Tool Registry System

The formal tool registry provides:

  • Metadata Management: Description, category, version, tags for each tool

  • Categorization: Tools organized by category (search, calculation, optimization, analysis)

  • Tag-based Discovery: Find tools by tags (e.g., "mof", "energy", "database")

Production-Ready Features

  • βœ… Full type hints throughout

  • βœ… Comprehensive error handling

  • βœ… Input sanitization and validation

  • βœ… Consistent JSON output format

  • βœ… Detailed documentation

  • βœ… Test coverage (38 tests)

  • βœ… Modular, maintainable code structure

πŸ“š Development

Tool Configuration

Tool definitions are stored in tool_definitions.yaml for easy configuration and management. This separates tool metadata from code logic.

Example tool definition:

tools:
  - name: my_tool
    description: Tool description
    category: CALCULATION
    function_name: my_tool  # Function name in tools.py
    tags:
      - tag1
      - tag2
    version: "1.0.0"

Adding a New Tool

  1. Define Pydantic models in tools.py:

class MyToolInput(BaseModel):
    param: str = Field(..., description="Parameter description")

class MyToolOutput(BaseModel):
    success: bool
    result: str
  1. Implement the tool function in tools.py:

def my_tool(param: str) -> str:
    try:
        validated_input = MyToolInput(param=param)
        # ... tool logic ...
        output = MyToolOutput(success=True, result="...")
        return output.model_dump_json(indent=2)
    except ValidationError as e:
        # ... error handling ...
  1. Add the tool definition to tool_definitions.yaml:

  - name: my_tool
    description: Tool description
    category: CALCULATION
    function_name: my_tool
    tags:
      - tag1
      - tag2
    version: "1.0.0"

The tool will be automatically registered when the server starts.

  1. Add tests in test_tools.py:

def test_my_tool():
    result = tools.my_tool("test")
    parsed = json.loads(result)
    assert parsed["success"] is True

πŸ“ License

See LICENSE file for details.

-
security - not tested
A
license - permissive license
-
quality - not tested

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/liuyuxiang92/MOFMaster-Scientific-Server'

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