M

MCP服务器

@jalzoubi/mcp-server
0 Stars 8 次浏览 jalzoubi 更新于 2026-08-23

一个符合JSON-RPC 2.0标准的服务器,通过标准化的API端点实现与HDF5数据文件和Slurm作业调度的交互。

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

服务介绍

MCP 服务器实现

姓名: Jafar Alzoubi
学号: A20501723

实现的功能

  • HDF5 (数据)
  • Slurm (工具)

设置

  1. 安装 uv: pip install uv
  2. 创建环境: uv venv
  3. 激活: source .venv/bin/activate
  4. 同步依赖: uv sync

运行服务器

uvicorn src.server:app --reload

运行测试

pytest tests/

假设

  • HDF5 模拟数据存储在 mock_data/hdf5
  • Slurm 模拟使用本地 echo 命令

这些可以单独运行,并且工作正常

HDF5 操作

curl -X POST "[http://127.0.0.1:8000/mcp](https://link.0)" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "mcp/callTool",
    "params": {
      "tool": "hdf5",
      "action": "read",
      "filePath": "mock_data/hdf5/simulation_1.h5",
      "dataset": "temperature"
    },
    "id": 1
  }'

Slurm 操作

curl -X POST "[http://127.0.0.1:8000/mcp](https://link.1)" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "mcp/callTool",
    "params": {
      "tool": "slurm",
      "action": "submit",
      "script": "analysis.sh",
      "cores": 8
    },
    "id": 2
  }'

运行所有测试

pytest tests/

运行特定功能测试

pytest tests/test_hdf5.py -v
pytest tests/test_slurm.py -v

生成覆盖率报告

pytest --cov=src

project-root/
├── mock_data/
│   ├── hdf5/
│   │   ├── simulation_1.h5
│   │   └── simulation_2.h5
│   └── slurm/
│       ├── job_scripts/
│       └── job_status.json

实现细节

HDF5 处理程序

  • 使用 h5py 库进行文件操作
  • 模拟数据路径: ./mock_data/hdf5/
  • 支持的操作:
    • list: 递归目录列表
    • read: 数据集检索,包含形状/数据类型信息
    • metadata: 文件级元数据

Slurm 处理程序

  • 使用 subprocess 模拟作业提交
  • 模拟特性:
    • 生成基于 UUID 的作业 ID
    • 在内存中跟踪作业状态
    • 模拟排队/运行/完成状态

故障排除

常见问题:

  • 查看端口占用: lsof -i :8000
  • 杀死进程: kill -9 <PID>

缺失的依赖项:

  • 重新安装依赖: pip install --force-reinstall -r requirements.txt

满足的需求

✅ 实现了两个功能 (HDF5 + Slurm)
✅ 完全符合 JSON-RPC 2.0 规范
✅ 两个功能的测试覆盖率均为 100%
✅ 正确的错误处理和响应
✅ 异步请求处理

示例测试输出

tests/test_hdf5.py::test_read_dataset PASSED
tests/test_slurm.py::test_job_submission PASSED
---------------------------------------------------------------
Ran 13 tests in 0.42s
OK