C

CS550_MCP服务

@EstebanIIT/CS550_MCP
0 Stars 7 次浏览 EstebanIIT 更新于 2026-08-23

一个基于 FastAPI 的 JSON-RPC 2.0 服务器实现,允许用户通过标准化的 API 端点操作 HDF5 文件、提交 Slurm 作业、获取 CPU 信息以及可视化 CSV 数据。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

MCP 服务器实现

姓名: Esteban Nicolas
学号: A20593170

I. 实现的 MCP 功能

1 数据资源
1.1 HDF5 文件列表

  • 列出模拟的 HDF5 文件目录结构
  • 参数: path_pattern (可选文件路径模式)

2 工具
2.1 Slurm 作业提交

  • 模拟向 Slurm 调度器提交作业
  • 参数: script_path (必需), cores (可选, 默认=1)

2.2 CPU 核心报告

  • 报告系统上可用的 CPU 核心数量
  • 不需要参数

2.3 CSV 可视化

  • 绘制 CSV 文件中的两列(默认为前两列)
  • 参数: csv_path (必需), column x, column y (两者均为可选)

II. 设置说明

  1. 创建虚拟环境
uv venv -p python3.10
.venv\Scripts\activate  # 在 Unix 上: source .venv/bin/activate
  1. 安装依赖项
uv sync
uv lock
  1. 环境配置
    项目使用 pyproject.toml 进行依赖管理。主要依赖包括:
  • FastAPI
  • Uvicorn
  • Pydantic
  • Pandas
  • Matplotlib
  • Pytest
  • Pytest-asyncio
  1. 运行 MCP 服务器

启动服务器

cd src
uvicorn server:app --reload

服务器将在以下地址可用:

III. 测试

  1. 运行所有测试:
pytest tests/

运行特定测试文件:

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
  1. 示例请求
    2.1 列出可用资源
curl -X POST [http://localhost:8000/mcp](https://link.2) \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"mcp/listResources","id":1}'

2.2 列出 HDF5 文件

curl -X POST [http://localhost:8000/mcp](https://link.3) \
  -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 提交 Slurm 作业

curl -X POST [http://localhost:8000/mcp](https://link.4) \
  -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 绘制 CSV 列

curl -X POST [http://localhost:8000/mcp](https://link.5) \
  -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. 实现说明

  1. 模拟实现:

    • HDF5 文件列表使用模拟的目录结构
    • Slurm 作业提交生成模拟作业 ID
    • CPU 核心报告使用 os.cpu_count()
  2. CSV 可视化:

    • 在 plots_results 目录中创建图表
    • 如果未指定,则默认使用前两列
    • 返回生成的 PNG 文件路径
  3. 错误处理:

  • 正确的 JSON-RPC 2.0 错误响应
  • 对所有参数进行输入验证
  • 优雅地处理缺失文件/无效路径

GITHUB: https://github.com/EstebanIIT/cs550_MCP.git