物理问题求解工具

mcp_simple 是一个独立的 TypeScript MCP stdio 服务器,提供物理问题求解功能,支持文本或图像输入,生成 HTML 报告和物理图形包。

  • by COVID-19godie
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 COVID-19godie/mcp_simple

使用说明

mcp-simple

mcp_simple 是一个独立的TypeScript MCP stdio服务器,它公开了一个工具: physics_solve_problem.

它接受物理问题文本或图像输入,可选地使用提供者选择结构化模板,然后在本地运行确定性求解器和报告管道。主要工件是一个自包含的HTML报告和一个 physics_figure/v1 数字束。

部署什么

  • MCP stdio服务器入口点: src/index.ts
  • 单一工具: physics_solve_problem
  • 本地求解器、OCR、报表生成器和图形管道

此仓库不再包含web上传UI。部署目标是MCP服务器本身。

需求

  • Node.js 20+
  • npm 10+
  • 支持MCP stdio的客户端
  • 如果您想要基于模型的模板路由,则可以选择提供程序凭据

快速开始

git clone https://github.com/COVID-19godie/mcp_simple.git
cd mcp_simple
npm install
npm run build
npm start

对于当地发展:

npm run dev

环境变量

复制 .env.example 并填写您需要的值。

主要变量:

  • QWEN_API_KEY
  • QWEN_BASE_URL
  • QWEN_MODEL
  • REPORT_OUTPUT_DIR (可选)

推荐的提供程序默认值:

QWEN_API_KEY=your_api_key_here
QWEN_BASE_URL=https://api.siliconflow.cn/v1
QWEN_MODEL=Qwen/Qwen3.5-122B-A10B

笔记:

  • 如果 provider.mode=local,该工具仍然可以从本地元数据或启发式方法运行。
  • 如果 provider.mode=openai|ollama,路由取决于配置的提供程序。

MCP客户端配置

通用stdio示例

使用 mcp-config.example.json 作为参考。

最小stdio形状:

{
  "name": "mcp_simple",
  "entry": "./dist/index.js",
  "type": "stdio"
}

VSCode代码

此仓库已包含工作区MCP设置:

  • .vscode/mcp.json
  • .vscode/settings.json

在VSCode中使用它:

  1. 将此文件夹作为工作区打开。
  2. 跑 npm install 和 npm run build.
  3. 重新加载VSCode窗口。
  4. 在Codex/Chat中,验证MCP工具列表并致电 physics_solve_problem.

部署检查表

在将此交给其他人之前,他们应该能够完成以下所有操作:

  1. npm install
  2. npm run build
  3. npm start
  4. 将MCP客户端连接到 dist/index.js
  5. 看 physics_solve_problem 在工具列表中
  6. 运行一个示例调用并获取HTML报告路径

部署后自检

使用MCP客户端验证:

  1. tools/list 包括 physics_solve_problem
  2. 最小本地模式请求返回有效的结果对象
  3. 回归 artifact.report_path 存在于磁盘上

最小样本输入:

{
  "question": {
    "text": "Uniform magnetic field problem",
    "metadata": {
      "routing": {
        "template_selection": {
          "template_id": "uniform_b",
          "template_args": {
            "m": 1,
            "q_abs": 1,
            "q_sign": 1,
            "B_abs": 2,
            "v0": 1,
            "B_polarity": "into_page"
          }
        }
      }
    }
  },
  "provider": {
    "mode": "local"
  },
  "render": {
    "language": "zh-CN",
    "output_dir": "./runtime-reports",
    "file_name": "sample-report.html",
    "overwrite": true
  }
}

预期结果:

  • status 存在
  • answer.final 存在
  • artifact.report_path 指向HTML文件
  • artifacts.figure_spec_json.path 指向JSON文件

工具合同

名字

physics_solve_problem

输入

{
  question: {
    text?: string
    image_url?: string
    image_base64?: string
    image_mime?: string
    choices?: string[]
    metadata?: Record<string, unknown>
  }
  provider?: {
    mode?: "local" | "openai" | "ollama"
    base_url?: string
    model?: string
    api_key?: string
  }
  solve_options?: {
    dt?: number
    t_end?: number
    max_steps?: number
    max_particles?: number
    strict_proof?: boolean
  }
  render?: {
    theme?: "white_high_contrast"
    animate?: boolean
    show_layers?: string[]
    language?: "en" | "zh-CN"
    output_dir?: string
    file_name?: string
    overwrite?: boolean
    figure_profile?: "compact" | "debug_full"
  }
}

输出

工具返回:

  • status
  • answer.final
  • derivation.steps
  • visualization
  • artifact.report_path
  • artifacts.figure_spec_json
  • 用于报告输入/核心/可视化的可选拆分JSON工件

测试

npm test

关键回归套件位于 src/tests/solveProblem 和 src/tests/pipeline.