MiniZinc MCP服务器
提供MiniZinc约束编程功能的模型上下文协议(MCP)服务器。
特性
- 使用HiGHS求解器求解MiniZinc模型(带浮动支持的LP/MIP)
- 验证MiniZinc模型的语法和类型错误,而无需解决
- 支持MZN(模型)和DZN(数据)内容作为字符串
- 自动标准库包含(例如。,
alldifferent.mzn)当模型中不存在时 - 全面的输出格式:解析DZN格式进行变量提取,从显式输出语句中传递output_text
- 通过STDIO或HTTP传输支持JSON-RPC 2.0协议
- 服务器发送事件(SSE)支持流式响应
快速开始
先决条件
- 灵丹妙药1.18+
- MiniZinc已安装并可在PATH中使用
备注MiniZinc会自动安装在Docker镜像中。
安装
git clone
cd minizinc-mcp
mix deps.get
mix compile用法
STDIO传输(默认)
对于当地发展:
mix mcp.server或使用release:
./_build/prod/rel/minizinc_mcp/bin/minizinc_mcp startHTTP传输
对于web部署(例如Smithery):
PORT=8081 MIX_ENV=prod ./_build/prod/rel/minizinc_mcp/bin/minizinc_mcp start终点:
POST /-JSON-RPC 2.0 MCP请求GET /sse-服务器发送流媒体事件GET /health-健康检查
码头工人
docker build -t minizinc-mcp .
docker run -d -p 8081:8081 --name minizinc-mcp minizinc-mcp工具
服务器提供以下MCP工具:
minizinc_solve
使用HiGHS求解器(带浮动支撑的LP/MIP)求解MiniZinc模型。
参数
model_content(字符串,必填):MiniZinc模型内容(.mzn)为字符串data_content(string,可选):DZN数据内容为字符串(例如。,"n = 8;").必须是有效的DZN格式。已解析并包含在响应中input_data现场。timeout(整数,可选):可选超时(毫秒)(默认值:30000,即30秒)。允许的最大值为30000毫秒(30秒);超过此值的上限为30秒。auto_include_stdlib(boolean,可选):自动包含标准MiniZinc库(例如。,alldifferent.mzn)如果不存在(默认值:true)
Output Format Details
这 minizinc_solve 该工具以JSON格式返回解决方案,格式如下:
- DZN格式解析:当MiniZinc提供DZN格式输出时(模型没有显式
output变量被解析并作为结构化数据返回(例如。,{"x": 10, "y": [1, 2, 3]}) - 输出文本传递:当模型包括显式
output语句,输出文本在output_text字段(例如。,{"output_text": "x = 10\n"}) - 两种格式:当DZN和显式输出都可用时,它们都包含在响应中
- 输入数据:何时
data_content解析后的DZN数据包含在input_data领域 - 状态:解决方案状态(例如。,
"SATISFIED","OPTIMAL_SOLUTION","UNSATISFIABLE")可用时包括在内
响应始终在MCP内容字段中以JSON字符串的形式返回。
Standard Library Support
这 minizinc_solve 该工具自动包括常见的MiniZinc标准库(例如。, alldifferent.mzn) 如果它们尚未出现在模型中(当 auto_include_stdlib 是 true).这意味着您可以使用 标准功能,如 all_different 无需添加显式 include 声明。
Solve Tool Examples
工作室:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "minizinc_solve",
"arguments": {
"model_content": "var int: x; constraint x > 0; solve satisfy;"
}
}
}HTTP:
curl -X POST http://localhost:8081/ \
-H "Content-Type: application/json" \
-H "mcp-protocol-version: 2025-06-18" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "minizinc_solve", "arguments": {"model_content": "var int: x; constraint x > 0; solve satisfy;"}}}'数据内容:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "minizinc_solve",
"arguments": {
"model_content": "var int: n; array[1..n] of var int: x; constraint all_different(x); solve satisfy;",
"data_content": "n = 8;",
"timeout": 30000
}
}
}minizinc_validate
通过检查语法和类型检查来验证MiniZinc模型,而无需求解。在尝试解决模型之前,对调试模型很有用。
参数
model_content(字符串,必填):MiniZinc模型内容(.mzn)为字符串data_content(string,可选):DZN数据内容为字符串(例如。,"n = 8;").必须是有效的DZN格式。auto_include_stdlib(boolean,可选):自动包含标准MiniZinc库(例如。,alldifferent.mzn)如果不存在(默认值:true)
响应格式
返回一个JSON对象:
valid(boolean):模型是否有效errors(array):错误消息列表(如果有的话)warnings(array):警告消息列表(如果有的话)message(string):人类可读消息(有效时)raw_output(string):原始MiniZinc验证输出(无效时)
Validate Tool Examples
验证有效模型:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "minizinc_validate",
"arguments": {
"model_content": "var int: x; constraint x > 0; solve satisfy;"
}
}
}对有效型号的响应:
{
"valid": true,
"errors": [],
"warnings": [],
"message": "Model is valid"
}验证有语法错误的模型:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "minizinc_validate",
"arguments": {
"model_content": "var int: x; constraint x > 0 solve satisfy;"
}
}
}对无效模型的响应:
{
"valid": false,
"errors": [
"Error: syntax error, unexpected solve, expecting ';'"
],
"warnings": [],
"raw_output": "..."
}配置
环境变量:
PORT-HTTP服务器端口(默认值:8081)HOST-HTTP服务器主机(默认值:0.0.0.0如果设置了端口,否则localhost)MIX_ENV-环境(prod,dev,test)ELIXIR_ERL_OPTIONS-Erlang选项(设置为"+fnu"对于UTF-8)MCP_SSE_ENABLED-启用/禁用服务器发送事件(默认值:true,设置为"false"禁用)
服务器仅使用HTTP流(没有stdio传输)。
故障排除
未找到MiniZinc:确保MiniZinc已安装并在PATH中可用。对于Docker,MiniZinc包含在镜像中。
端口已在使用中:更改 PORT 环境变量或停止冲突的服务。
编译错误:运行 mix deps.get && mix clean && mix compile.
调试模式:使用 MIX_ENV=dev mix mcp.server 用于详细日志记录。
版本
当前版本: 1.0.0-dev2 (参见 mix.exs 最新版本)
需求
- 灵丹妙药1.18+
- Erlang/OTP 26+
- MiniZinc 2.9.3+已安装并在PATH中可用(或使用包含MiniZinc的Docker镜像)
Development
建筑
mix deps.get
mix compile测试
mix test建筑发布
MIX_ENV=prod mix release本地运行
对于STDIO传输(默认):
mix mcp.serverPORT=8081 mix run --no-halt许可证
MIT许可证-有关详细信息,请参阅License.md。
版权
版权所有(c)2025年至今K.S.Ernest(iFire)Lee
