一个使用Google OR-Tools进行约束求解的Model Context Protocol (MCP)服务器实现。设计用于通过标准化的约束模型规范与大型语言模型一起使用。
MCP-ORTools通过Model Context Protocol将Google的OR-Tools约束编程求解器与大型语言模型集成,使AI模型能够:
pip install git+https://github.com/Jacck/mcp-ortools.git
%APPDATA%\Claude\claude_desktop_config.json(Windows)或~/Library/Application Support/Claude/claude_desktop_config.json(macOS)创建配置文件:{
"mcpServers": {
"ortools": {
"command": "python",
"args": ["-m", "mcp_ortools.server"]
}
}
}
模型以JSON格式指定,主要分为三个部分:
variables:定义变量及其域constraints:使用OR-Tools方法列出的约束条件objective:可选的优化目标约束必须使用OR-Tools方法语法:
.__le__() 表示小于或等于(<=).__ge__() 表示大于或等于(>=).__eq__() 表示等于(==).__ne__() 表示不等于(!=){
"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
}
}
示例:选择具有值[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
}
}
附加约束示例:
{
"constraints": [
"p0.__eq__(1)", // 必须选择物品p0
"p1.__ne__(p2)", // 不能同时选择p1和p2
"(p2 + p3).__ge__(1)" // 必须至少选择p2或p3中的一个
]
}
为了设置开发环境:
git clone https://github.com/Jacck/mcp-ortools.git
cd mcp-ortools
pip install -e .
求解器返回解决方案的JSON格式:
{
"status": "OPTIMAL",
"solve_time": 0.045,
"variables": {
"p0": 0,
"p1": 0,
"p2": 1,
"p3": 1
},
"objective_value": 3.0
}
状态值:
MIT许可证 - 查看LICENSE文件获取详情