一个全面的模型上下文协议(MCP)服务器,用于解决约束满足问题(CSP)、线性规划(LP)、极小极大优化以及由SciPy支持的高级优化问题。基于集成SciPy的gurddy优化库构建,通过两种MCP传输方式支持解决各种经典问题:标准I/O(IDE集成)和可流式传输的HTTP(Web客户端)。
🚀 快速开始(标准I/O): pip install gurddy_mcp 然后在您的IDE中进行配置
🌐 快速开始(HTTP): docker run -p 8080:8080 gurddy-mcp 或参阅部署指南
📦 PyPI 包: https://pypi.org/project/gurddy_mcp
# 安装最新稳定版本
pip install gurddy_mcp
# 或安装带有开发依赖项
pip install gurddy_mcp[dev]
# 克隆仓库
git clone https://github.com/novvoo/gurddy-mcp.git
cd gurddy-mcp
# 开发模式安装
pip install -e .
# 测试MCP标准I/O服务器
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{} }' | gurddy-mcp
主gurddy-mcp命令是一个可以集成到工具如Kiro中的MCP标准I/O服务器。
使用uvx确保您始终运行最新发布的版本而无需手动安装。
在~/.kiro/settings/mcp.json或.kiro/settings/mcp.json中配置:
推荐: 显式指定最新版本
{
"mcpServers": {
"gurddy": {
"command": "uvx",
"args": ["gurddy-mcp@latest"],
"env": {},
"disabled": false,
"autoApprove": [
"run_example",
"info",
"install",
"solve_n_queens",
"solve_sudoku",
"solve_graph_coloring",
"solve_map_coloring",
"solve_lp",
"solve_production_planning",
"solve_minimax_game",
"solve_minimax_decision",
"solve_24_point_game",
"solve_chicken_rabbit_problem",
"solve_scipy_portfolio_optimization",
"solve_scipy_statistical_fitting",
"solve_scipy_facility_location"
]
}
}
}
替代方案: 不指定版本(也使用最新版本)
{
"mcpServers": {
"gurddy": {
"command": "uvx",
"args": ["gurddy-mcp"],
"env": {},
"disabled": false,
"autoApprove": [
"run_example", "info", "install", "solve_n_queens", "solve_sudoku",
"solve_graph_coloring", "solve_map_coloring", "solve_lp",
"solve_production_planning", "solve_minimax_game", "solve_minimax_decision",
"solve_24_point_game", "solve_chicken_rabbit_problem",
"solve_scipy_portfolio_optimization", "solve_scipy_statistical_fitting",
"solve_scipy_facility_location"
]
}
}
}
固定特定版本(如有需要)
{
"mcpServers": {
"gurddy": {
"command": "uvx",
"args": ["gurddy-mcp==<VERSION>"],
"env": {},
"disabled": false,
"autoApprove": [
"run_example", "info", "install", "solve_n_queens", "solve_sudoku",
"solve_graph_coloring", "solve_map_coloring", "solve_lp",
"solve_production_planning", "solve_minimax_game", "solve_minimax_decision",
"solve_24_point_game", "solve_chicken_rabbit_problem",
"solve_scipy_portfolio_optimization", "solve_scipy_statistical_fitting",
"solve_scipy_facility_location"
]
}
}
}
为什么使用uvx?
前提条件: 首先安装uv:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# 或使用pip
pip install uv
# 或使用Homebrew(macOS)
brew install uv
如果您已经通过pip安装了gurddy-mcp:
{
"mcpServers": {
"gurddy": {
"command": "gurddy-mcp",
"args": [],
"env": {},
"disabled": false,
"autoApprove": [
"run_example", "info", "install", "solve_n_queens", "solve_sudoku",
"solve_graph_coloring", "solve_map_coloring", "solve_lp",
"solve_production_planning", "solve_minimax_game", "solve_minimax_decision",
"solve_24_point_game", "solve_chicken_rabbit_problem",
"solve_scipy_portfolio_optimization", "solve_scipy_statistical_fitting",
"solve_scipy_facility_location"
]
}
}
}
可用的MCP工具(共16个):
info - 获取gurddy MCP服务器信息和能力install - 安装或升级gurddy包run_example - 运行示例程序(n_queens,graph_coloring,minimax,scipy_optimization,classic_problems等)solve_n_queens - 解决任意棋盘大小的N皇后问题solve_sudoku - 使用CSP解决9×9数独谜题solve_graph_coloring - 解决图着色问题,可配置颜色solve_map_coloring - 解决地图着色问题(例如澳大利亚,美国)solve_lp - 解决线性规划(LP)或混合整数规划(MIP)solve_production_planning - 生产优化,可选敏感度分析solve_minimax_game - 两人零和游戏(寻找纳什均衡)solve_minimax_decision - 鲁棒优化(最小化最大损失或最大化最小收益)solve_24_point_game - 使用算术运算解决24点游戏solve_chicken_rabbit_problem - 解决经典鸡兔同笼问题,涉及头和脚约束solve_scipy_portfolio_optimization - 使用SciPy解决非线性投资组合优化solve_scipy_statistical_fitting - 使用SciPy解决统计参数估计solve_scipy_facility_location - 使用混合CSP-SciPy方法解决设施选址问题测试MCP服务器:
# 测试初始化
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | gurddy-mcp
# 测试列出工具
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | gurddy-mcp
# 测试info工具
echo '{"jsonrpc":"2.0","id":10,"method":"tools/call","params":{"name":"info","arguments":{"":""}}}' | gurddy-mcp | jq
# 测试运行示例工具
echo '{"jsonrpc":"2.0","id":10,"method":"tools/call","params":{"name":"run_example","arguments":{"example":"n_queens"}}}' | gurddy-mcp | jq
# 测试数独工具
cat <<EOF | tr -d '\n'|gurddy-mcp|jq
{"jsonrpc":"2.0","id":123,"method":"tools/call","params":{
"name":"solve_sudoku",
"arguments":{
"puzzle":[
[5,3,0,0,7,0,0,0,0],
[6,0,0,1,9,5,0,0,0],
[0,9,8,0,0,0,0,6,0],
[8,0,0,0,6,0,0,0,3],
[4,0,0,8,0,3,0,0,1],
[7,0,0,0,2,0,0,0,6],
[0,6,0,0,0,0,2,8,0],
[0,0,0,4,1,9,0,0,5],
[0,0,0,0,8,0,0,7,9]
]
}
}}
EOF
启动HTTP MCP服务器(MCP协议通过可流式传输的HTTP):
本地开发:
uvicorn mcp_server.mcp_http_server:app --host 127.0.0.1 --port 1234
Docker:
# 构建镜像
docker build -t gurddy-mcp .
# 运行容器
docker run -p 8080:8080 gurddy-mcp
访问服务器:
测试HTTP MCP服务器:
HTTP传输(非流式传输):
# 列出可用工具
curl -X POST http://127.0.0.1:8080/mcp/http \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# 调用工具
curl -X POST http://127.0.0.1:8080/mcp/http \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"info","arguments":{}}}'
HTTP传输(流式传输,带Accept头):
# 列出工具并获取流式响应
curl -X POST http://127.0.0.1:8080/mcp/http \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# 调用工具并获取流式响应
curl -X POST http://127.0.0.1:8080/mcp/http \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"solve_n_queens","arguments":{"n":4}}}'
HTTP传输(流式传输,带X-Stream头):
# 启用流式传输的另一种方式
curl -X POST http://127.0.0.1:8080/mcp/http \
-H "Content-Type: application/json" \
-H "X-Stream: true" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"info","arguments":{}}}'
Python客户端示例:
examples/streamable_http_client.py - 带流式传输示例的HTTP传输客户端服务器提供以下MCP工具:
获取关于gurddy包的信息。
{
"name": "info",
"arguments": {}
}
安装或升级gurddy包。
{
"name": "install",
"arguments": {
"package": "gurddy",
"upgrade": false
}
}
运行gurddy示例。
{
"name": "run_example",
"arguments": {
"example": "n_queens"
}
}
可用示例: lp, csp, n_queens, graph_coloring, map_coloring, scheduling, logic_puzzles, optimized_csp, optimized_lp, minimax, scipy_optimization, classic_problems
解决N皇后问题。
{
"name": "solve_n_queens",
"arguments": {
"n": 8
}
}
解决9x9数独谜题。
{
"name": "solve_sudoku",
"arguments": {
"puzzle": [[5,3,0,...], [6,0,0,...], ...]
}
}
解决图着色问题。
{
"name": "solve_graph_coloring",
"arguments": {
"edges": [[0,1], [1,2], [2,0]],
"num_vertices": 3,
"max_colors": 1
}
}
解决地图着色问题。
{
"name": "solve_map_coloring",
"arguments": {
"regions": ["A", "B", "C"],
"adjacencies": [["A", "B"], ["B", "C"]],
"max_colors": 2
}
}