MCP-ORTools

MCP-ORTools

使用Google OR-Tools实现的模型上下文协议(MCP)服务器,用于约束求解。

MCP-ORTools Quick Start Guide

简介

MCP-ORTools 是一个通过模型上下文协议(MCP)将 Google OR-Tools 约束编程求解器与大型语言模型集成的工具,使 AI 模型能够进行约束求解和优化。

安装

pip install git+https://github.com/Jacck/mcp-ortools.git

配置 Claude Desktop

创建配置文件:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "ortools": {
      "command": "python",
      "args": ["-m", "mcp_ortools.server"]
    }
  }
}

使用方法

模型规范

模型以 JSON 格式定义,包含三个主要部分:

  • variables:定义变量及其域
  • constraints:使用 OR-Tools 方法列出的约束
  • objective:可选的优化目标

约束语法

约束使用 OR-Tools 方法语法:

  • .__le__() 表示 <=
  • .__ge__() 表示 >=
  • .__eq__() 表示 ==
  • .__ne__() 表示 !=

示例1:简单优化模型

{
    "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
    }
}

示例2:背包问题

选择价值为 [3,1,2,1] 和重量为 [2,2,1,1] 的物品,总重量限制为 2。

{
    "variables": [
        {"name": "p0", "domain": [0, 1]},
        {"name": "p1", "domain": [0, 1]},
        {"name": "p2", "domain": [0, 1]},
        {"name": "p3", "domain": [0, 1]}
    ],
    "constraints": [
        "(2*p0 + 2*p1 + p2 + p3).__le__(2)"
    ],
    "objective": {
        "expression": "3*p0 + p1 + 2*p2 + p3",
        "maximize": true
    }
}

响应格式

求解器返回 JSON 格式的解决方案:

{
    "status": "OPTIMAL",
    "solve_time": 0.045,
    "variables": {
        "p0": 0,
        "p1": 0,
        "p2": 1,
        "p3": 1
    },
    "objective_value": 3.0
}

状态值:

  • OPTIMAL:找到最优解
  • FEASIBLE:找到可行解
  • INFEASIBLE:无解
  • UNKNOWN:无法确定解

支持的功能

  • 整数和布尔变量
  • 使用 OR-Tools 方法语法的线性约束
  • 线性优化目标
  • 求解器参数和超时设置
  • 二进制约束和关系操作
  • 适用于背包问题和投资组合选择

更多信息

更多详细信息请访问 GitHub 项目页面