使用说明

项目简介

MCP-ORTools 是一个基于 Model Context Protocol (MCP) 构建的服务器,它使用 Google OR-Tools 强大的约束求解器作为后端,旨在为大型语言模型 (LLM) 提供解决复杂约束满足和优化问题的能力。通过标准化的 MCP 协议,LLM 可以方便地调用该服务器,提交约束模型、设置求解参数、执行求解过程,并获取和分析求解结果。

主要功能点

  • 约束模型提交与验证: 接受 JSON 格式的约束模型定义,并进行初步的语法和结构验证。
  • OR-Tools 求解器集成: 利用 Google OR-Tools CP-SAT 求解器高效地解决各种约束问题。
  • 线性约束和目标优化: 支持定义整数和布尔变量、线性约束条件以及线性优化目标。
  • 灵活的模型规范: 使用 JSON 格式描述模型,易于理解和编辑,支持变量定义、约束列表和优化目标等部分。
  • JSON 格式解决方案返回: 将求解结果以 JSON 格式返回给客户端,包含求解状态、求解时间、变量取值和目标函数值等信息。
  • 支持多种问题类型: 能够处理包括投资组合选择、背包问题等多种约束优化问题。

安装步骤

  1. 安装软件包: 打开终端或命令提示符,运行以下命令安装 MCP-ORTools:

    pip install git+https://github.com/Jacck/mcp-ortools.git
  2. 配置 MCP 客户端 (以 Claude Desktop 为例): 不同的 MCP 客户端配置方式可能有所不同,这里以 Claude Desktop 为例说明如何配置 MCP 服务器。

    打开 Claude Desktop 的配置文件 'claude_desktop_config.json'。

    • Windows 系统通常位于: '%APPDATA%\Claude\claude_desktop_config.json'
    • macOS 系统通常位于: '~/Library/Application Support/Claude/claude_desktop_config.json'

    在 'mcpServers' 字段中添加 'ortools' 服务器的配置信息。如果 'mcpServers' 字段不存在,则需要手动创建。

    {
      "mcpServers": {
        "ortools": {
          "command": "python",
          "args": ["-m", "mcp_ortools.server"]
        }
      }
    }

    服务器配置参数说明:

    • '"ortools"': 服务器名称,可以自定义,用于在 MCP 客户端中标识该服务器。
    • '"command": "python"': 启动服务器的命令,这里使用 'python' 命令来运行 Python 脚本。
    • '"args": ["-m", "mcp_ortools.server"]': 传递给 'python' 命令的参数,'-m mcp_ortools.server' 表示以模块方式运行 'mcp_ortools.server' 模块,即启动 MCP-ORTools 服务器的入口点。

基本使用方法

  1. 启动 MCP-ORTools 服务器: 完成安装和配置后,当 MCP 客户端 (例如 Claude Desktop) 启动时,会自动尝试连接并启动配置的 MCP 服务器。您无需手动运行服务器,它会作为 MCP 客户端的后台服务运行。

  2. 在 LLM 中使用工具: 在支持 MCP 协议的 LLM 应用中,您应该能够看到 'submit_model', 'solve_model', 'get_solution' 这三个工具。

    • 'submit_model' 工具: 用于提交约束模型。你需要提供一个 JSON 字符串作为模型的定义。模型定义需要包含 'variables' (变量定义) 和 'constraints' (约束条件),可选地可以包含 'objective' (优化目标)。

      {
          "variables": [
              {"name": "x", "domain": [0, 10]},
              {"name": "y", "domain": [0, 10]}
          ],
          "constraints": [
              "(x + y).__le__(15)",
              "x.__ge__(2 * y)"
          ],
          "objective": {
              "expression": "40 * x + 100 * y",
              "maximize": true
          }
      }

      请注意,约束条件需要使用 OR-Tools 的方法语法,例如 '.le()' (小于等于), '.ge()' (大于等于), '.eq()' (等于), '.ne()' (不等于)。

    • 'solve_model' 工具: 用于求解已提交的模型。您可以选择性地提供 'timeout' 参数 (单位为秒) 来设置求解超时时间。

    • 'get_solution' 工具: 用于获取最近一次求解的结果。如果模型已成功求解,将返回包含变量取值、求解状态、求解时间以及目标函数值的 JSON 结果。

  3. 解析和利用求解结果: 服务器返回的 JSON 结果包含了约束模型的解。您可以根据 'status' 字段判断求解状态 (OPTIMAL, FEASIBLE, INFEASIBLE, UNKNOWN)。如果找到解,'variables' 字段会给出每个变量的取值,'objective_value' 字段会给出目标函数的值 (如果定义了优化目标)。您可以将这些结果用于后续的 LLM 应用逻辑中,例如根据求解结果生成报告、做出决策等。

注意: MCP-ORTools 服务器需要在 Python 3.9 或更高版本环境下运行,并确保已正确安装 OR-Tools 及其依赖。

信息

分类

AI与计算