A FastAPI-based JSON-RPC 2.0 server implementation that enables users to work with HDF5 files, submit Slurm jobs, retrieve CPU information, and visualize CSV data through standardized API endpoints.
MCP Server Implementation
Name: Esteban Nicolas Student ID: A20593170
I. Implemented MCP Capabilities
1 Data Resources 1.1 HDF5 File Listing
path_pattern
(optional file path pattern)2 Tools 2.1 Slurm Job Submission
script_path
(required), cores
(optional, default=1)2.2 CPU Core Reporting
2.3 CSV Visualization
csv_path
(required), column x
, column y
(both optional)II. Setup Instructions
uv venv -p python3.10 .venv\Scripts\activate # On Unix: source .venv/bin/activate
uv sync uv lock
FastAPI
Uvicorn
Pydantic
Pandas
Matplotlib
Pytest
Pytest-ascyncio
Start the server cd src uvicorn server:app --reload
The server will be available at:
API endpoint: http://localhost:8000/mcp Health check: http://localhost:8000/health
III Testing
pytest tests/ Run specific test file:
pytest tests/test_capabilities_plot_vis.py pytest tests/test_capabilities_hdf5.py pytest tests/test_capabilities_cpu_core.py pytest tests/test_capabilities_slurm.py pytest tests/test_mcp_handler.py
curl -X POST http://localhost:8000/mcp
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","method":"mcp/listResources","id":1}'
2.2 List HDF5 files
curl -X POST http://localhost:8000/mcp
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","method":"mcp/callTool","params":{"tool":"hdf5_file_listing","path_pattern":"/data/sim_run_123"},"id":2}'
2.3 Submit Slurm job
curl -X POST http://localhost:8000/mcp
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","method":"mcp/callTool","params":{"tool":"slurm_job_submission","script_path":"/jobs/analysis.sh","cores":4},"id":3}'
2.4 Plot CSV columns
curl -X POST http://localhost:8000/mcp
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","method":"mcp/callTool","params":{"tool":"plot_vis_columns","csv_path":"data.csv","column x":"time","column y":"temperature"},"id":4}'
IV Implementation Notes
-HDF5 file listing uses a simulated directory structure -Slurm job submission generates mock job IDs -CPU core reporting uses os.cpu_count()
-Creates plots in a plots_results directory -Defaults to first two columns if none specified -Returns path to generated PNG file
-Proper JSON-RPC 2.0 error responses -Input validation for all parameters -Graceful handling of missing files/invalid paths
Discover shared experiences
Shared threads will appear here, showcasing real-world applications and insights from the community. Check back soon for updates!