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

Resources

Looking for Admin?

Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.

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