Skip to main content
Glama
gabrielserrao

pyResToolbox MCP Server

validate_simulation_deck

Validate ECLIPSE simulation decks by checking INCLUDE file references, identifying missing files, and optionally creating complete archives for sharing or archiving.

Instructions

Validate and process ECLIPSE simulation deck with INCLUDE files.

DECK MANAGEMENT TOOL - Recursively process ECLIPSE/Intersect simulation decks to find all INCLUDE files, validate references, and optionally create a complete archive.

What It Does:

  • Parses main DATA file for INCLUDE keywords

  • Recursively follows INCLUDE chains

  • Validates all referenced files exist

  • Identifies missing or broken references

  • Optionally creates zip archive with all files

Applications:

  • Deck Validation: Ensure all files present before submission

  • Deck Transfer: Create complete archive for sharing

  • Version Control: Bundle all files for archiving

  • QC Check: Verify deck completeness before cluster runs

Workflow:

  1. Specify main DATA file(s) to check

  2. Tool recursively finds all INCLUDE files

  3. Validates each file exists

  4. Reports missing files or broken paths

  5. Optionally creates zip with all referenced files

INCLUDE File Support:

  • Absolute paths: /full/path/to/file.inc

  • Relative paths: ../INCLUDE/GRID.GRDECL

  • Same directory: SCHEDULE.INC

  • Nested INCLUDE chains: INCLUDE files that reference other INCLUDE files

Output Formats:

  • Summary of all files found

  • List of missing/broken references

  • Optional: ZIP archive with complete deck

Args: request: List of DATA files, zip option, console output preference

Returns: Dictionary with file inventory, validation results, and optional zip path

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
requestYes

Implementation Reference

  • Handler function decorated with @mcp.tool() that implements the core logic: parses simulation decks, validates INCLUDE files recursively, checks for missing files, and optionally creates a ZIP archive.
    @mcp.tool() def validate_simulation_deck(request: ZipSimDeckRequest) -> dict: """Validate and process ECLIPSE simulation deck with INCLUDE files. **DECK MANAGEMENT TOOL** - Recursively process ECLIPSE/Intersect simulation decks to find all INCLUDE files, validate references, and optionally create a complete archive. **What It Does:** - Parses main DATA file for INCLUDE keywords - Recursively follows INCLUDE chains - Validates all referenced files exist - Identifies missing or broken references - Optionally creates zip archive with all files **Applications:** - **Deck Validation:** Ensure all files present before submission - **Deck Transfer:** Create complete archive for sharing - **Version Control:** Bundle all files for archiving - **QC Check:** Verify deck completeness before cluster runs **Workflow:** 1. Specify main DATA file(s) to check 2. Tool recursively finds all INCLUDE files 3. Validates each file exists 4. Reports missing files or broken paths 5. Optionally creates zip with all referenced files **INCLUDE File Support:** - Absolute paths: /full/path/to/file.inc - Relative paths: ../INCLUDE/GRID.GRDECL - Same directory: SCHEDULE.INC - Nested INCLUDE chains: INCLUDE files that reference other INCLUDE files **Output Formats:** - Summary of all files found - List of missing/broken references - Optional: ZIP archive with complete deck Args: request: List of DATA files, zip option, console output preference Returns: Dictionary with file inventory, validation results, and optional zip path """ try: # Process simulation deck results = simtools.zip_check_sim_deck( files2scrape=request.files2scrape, tozip=request.tozip, console_summary=request.console_summary ) # Parse results (format depends on pyrestoolbox implementation) if isinstance(results, dict): found_files = results.get("found_files", []) missing_files = results.get("missing_files", []) zip_path = results.get("zip_path", None) else: # If results is a list of files found_files = results if isinstance(results, list) else [] missing_files = [] zip_path = None return { "deck_validation": { "main_files": request.files2scrape, "total_files_found": len(found_files), "total_files_missing": len(missing_files), "status": "VALID" if len(missing_files) == 0 else "INCOMPLETE", }, "found_files": found_files, "missing_files": missing_files, "zip_archive": zip_path if request.tozip else None, "method": "Recursive INCLUDE file parsing", "inputs": request.model_dump(), "note": "All referenced files must exist for successful simulation run", } except FileNotFoundError as e: return { "error": f"Main deck file not found: {e}", "suggestion": "Verify paths to DATA files are correct", "inputs": request.model_dump(), } except Exception as e: return { "error": str(e), "inputs": request.model_dump(), }
  • Pydantic BaseModel defining the input parameters for the tool: files2scrape (list of main DATA files), tozip (create archive), console_summary.
    class ZipSimDeckRequest(BaseModel): """Request model for simulation deck file checking.""" model_config = ConfigDict( json_schema_extra={ "example": { "files2scrape": ["CASE.DATA"], "tozip": False, "console_summary": True, } } ) files2scrape: List[str] = Field(..., min_length=1, description="List of deck files to process (e.g., ['CASE.DATA'])") tozip: bool = Field(False, description="Create zip archive of all referenced files") console_summary: bool = Field(True, description="Print summary to console")
  • Call to register_simtools_tools(mcp) in the main server.py, which registers all simtools including validate_simulation_deck via its @mcp.tool() decorator.
    register_simtools_tools(mcp)

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/gabrielserrao/pyrestoolbox-mcp'

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