单位转换服务器

一个通过Pint提供确定性单位转换的MCP服务器,支持单位转换、维度兼容性检查、解析数量字符串等功能。

  • by quantumleeps
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 quantumleeps/mcp-units

使用说明

mcp装置

通过以下方式提供确定性单位转换的MCP服务器 品脱.LLM猜测单位转换——此服务器使其精确。

这有什么作用

在上显示5个工具、3个资源和2个提示 模型上下文协议任何MCP客户端(Claude Code、Claude Desktop、Cursor)都可以转换单位、检查维度兼容性、解析数量字符串和简化表达式——所有这些都由Pint的400多个单位注册表而不是LLM算法支持。

运作原理

A. FastMCP 服务器包装Pint UnitRegistry 并通过MCP原语将其公开:

  • 工具 — convert, check_compatibility, parse_quantity, list_compatible_units, simplify
  • 资源 — units://systems, units://systems/{system}, units://dimensions
  • 提示 — convert_document (提取并转换文本中的所有数量), check_calculations (验证尺寸一致性)

默认情况下,服务器通过stdio(适用于Claude Code/Claude Desktop)或Streamable HTTP运行 fastmcp run (用于远程/容器化部署)。

快速启动

先决条件

安装并运行

git clone https://github.com/quantumleeps/mcp-units.git
cd mcp-units
uv sync

添加到克劳德代码

claude mcp add --transport stdio mcp-units -- \
  uv run --directory /path/to/mcp-units mcp-units

添加到克劳德桌面

增添 claude_desktop_config.json:

{
  "mcpServers": {
    "mcp-units": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-units", "mcp-units"]
    }
  }
}

通过HTTP运行

uv run fastmcp run src/mcp_units/server.py --transport http --port 8000

码头工人

docker build -t mcp-units .
docker run -p 8000:8000 mcp-units

测试

uv sync --all-extras
uv run pytest

评估

让法学硕士访问单位转换工具真的能提高其在物理问题上的准确性吗?

对70个SciBench大学级物理问题进行了评估,这些问题需要2种以上的单元类型,涉及6个Claude模型(共840次运行)。最新型号Opus 4.6的涨幅最大(+8.6pp,70.0%)→ 78.6%),这表明,其广泛的知识和精细的工具使用相结合,使其能够利用单位转换作为可靠的增强。4.5-Sonnet是一个强大的推理者和工具使用者,也有所改进(+2.9pp)。较旧的3.7-Sonnet回归(-2.9pp)——分析表明,它有时会将中间转换结果视为最终答案,或者在重复的工具调用中旋转而不收敛,这与不太成熟的工具使用能力是一致的。令人惊讶的是4.5-Haiku:与4.5-Sonnet同一代,具有出色的推理能力和工具使用能力,但下降了(-1.4pp)。对于较小的模型,该工具似乎是一种分心而不是增强——该模型具有使用它的复杂性,但并不总是能够判断何时有用。每个模型只有70个问题和一次运行,这些每个模型的增量带来了真正的不确定性——特别是4.5-Haiku的结果可能反映了噪声,而不是有意义的模式。

下一步行动

  • 单位归一化 --模特写 cm3 但平特需要 cm^3.轻便 normalize_unit() 预处理器加上更好的工具描述和格式指导将消除eval中观察到的12个解析失败。
  • 表达式计算 --模型有时会传递数学表达式(-1.602e-19 * 1.33e-39 / ...)作为值参数 convert().Pint拒绝这些,因为它期望浮动。接受和评估简单的算术表达式将使该工具能够处理中间计算。
  • 偏移单元处理 --平特加薪 OffsetUnitCalculusError 在复合表达式中表示°C和°F。这 parse_quantity 该工具需要对温度偏移进行特殊处理。
  • 问题集更大 --70个问题展示了评估框架,但限制了每个模型增量的统计置信度。单个模型内的运行间差异也是未知的。扩展到200多个问题,每个问题进行多次运行,可以量化这两种影响。

运行eval

uv sync --group eval
uv run python -m eval.runner          # run all 6 models × 2 conditions (requires ANTHROPIC_API_KEY)
uv run python -m eval.visualize       # generate charts from results
uv run python -m eval.analyze         # print detailed analysis

项目结构

mcp-units/
  src/mcp_units/
    server.py       # FastMCP instance — tools, resources, prompts
    registry.py     # Pint UnitRegistry + compatible units workaround
    models.py       # Result dataclasses for structured tool output
  eval/
    runner.py       # Async eval runner — baseline vs tool-augmented
    problems.py     # SciBench problem loading (70 problems, 2+ unit types)
    scorer.py       # Answer extraction + 5% tolerance scoring
    mcp_tools.py    # FastMCP Client wrapper for tool execution
    results.py      # RunResult dataclass + JSON persistence
    visualize.py    # Grouped bar chart + error histograms
    analyze.py      # 16-section detailed analysis
  tests/
    test_tools.py   # 18 Pint logic tests
    test_server.py  # 17 MCP Client integration tests
  Dockerfile        # HTTP transport for containerized deployment

贡献

PR欢迎。跑 pre-commit install 克隆后,确保 uv run pytest 提交前通过。

许可证

麻省理工学院