gurddy mcp Server
ทางการพื้นที่เก็บข้อมูลนี้ประกอบด้วยเซิร์ฟเวอร์ MCP (Model Context Protocol) ที่ทำงานได้อย่างสมบูรณ์ โดยให้โซลูชันสำหรับปัญหาการตอบสนองข้อจำกัด (CSP) และการโปรแกรมเชิงเส้น (LP) ซึ่งอิงตามแพ็กเกจ gurddy และรองรับการแก้ปัญหาคลาสสิกที่หลากหลาย
เอกสาร
Gurddy MCP Server
เซิร์ฟเวอร์ Model Context Protocol (MCP) ที่ครอบคลุมสำหรับการแก้ปัญหา Constraint Satisfaction Problems (CSP), Linear Programming (LP), Minimax optimization และปัญหาการหาค่าเหมาะที่สุดขั้นสูงที่ขับเคลื่อนด้วย SciPy สร้างขึ้นบนไลบรารีการหาค่าเหมาะที่สุด gurddy พร้อมการผสานรวม SciPy รองรับการแก้ปัญหาคลาสสิกหลากหลายผ่านการขนส่ง MCP สองแบบ: stdio (สำหรับการผสานรวม IDE) และ HTTP แบบสตรีมได้ (สำหรับเว็บไคลเอนต์)
🚀 เริ่มต้นอย่างรวดเร็ว (Stdio): pip install gurddy_mcp จากนั้นกำหนดค่าใน IDE ของคุณ
🌐 เริ่มต้นอย่างรวดเร็ว (HTTP): docker run -p 8080:8080 gurddy-mcp หรือดูคู่มือการปรับใช้
📦 แพ็คเกจ PyPI: https://pypi.org/project/gurddy_mcp
คุณสมบัติหลัก
🎯 การแก้ปัญหา CSP
- ปัญหา N-Queens: วางราชินี N ตัวบนกระดานหมากรุก N×N โดยไม่มีการโจมตีกัน
- การระบายสีกราฟ: กำหนดสีให้จุดยอดเพื่อให้จุดยอดที่อยู่ติดกันมีสีต่างกัน
- การระบายสีแผนที่: ระบายสีภูมิภาคทางภูมิศาสตร์โดยให้ภูมิภาคที่อยู่ติดกันมีสีต่างกัน
- ตัวแก้ Sudoku: แก้ปริศนา Sudoku มาตรฐาน 9×9
- ปริศนาตรรกะ: ปริศนาม้าลายของไอน์สไตน์และปัญหาตรรกะที่กำหนดเอง
- การจัดตาราง: การจัดตารางเรียน, การจัดตารางประชุม, การจัดสรรทรัพยากร
- ตัวแก้ CSP ทั่วไป: รองรับปัญหาความพึงพอใจของข้อจำกัดที่กำหนดเอง
📊 ปัญหา LP/การหาค่าเหมาะที่สุด
- Linear Programming: การหาค่าเหมาะที่สุดของตัวแปรต่อเนื่องด้วยข้อจำกัดเชิงเส้น
- Mixed Integer Programming: การหาค่าเหมาะที่สุดด้วยตัวแปรจำนวนเต็มและต่อเนื่อง
- การวางแผนการผลิต: การหาค่าเหมาะที่สุดของการผลิตภายใต้ข้อจำกัดทรัพยากรพร้อมการวิเคราะห์ความไว
- การหาค่าเหมาะที่สุดของพอร์ตโฟลิโอ: การจัดสรรการลงทุนภายใต้ข้อจำกัดความเสี่ยง
- ปัญหาการขนส่ง: การหาค่าเหมาะที่สุดของห่วงโซ่อุปทานและโลจิสติกส์
🎮 Minimax/ทฤษฎีเกม
- เกมผลรวมศูนย์: แก้เกมสองผู้เล่น (Rock-Paper-Scissors, Matching Pennies, Battle of Sexes)
- สมดุลแนชกลยุทธ์ผสม: ค้นหากลยุทธ์ความน่าจะเป็นที่เหมาะสมที่สุด
- การหาค่าเหมาะที่สุดแบบทนทาน: ลดการสูญเสียกรณีเลวร้ายที่สุดภายใต้ความไม่แน่นอน
- การตัดสินใจ Maximin: เพิ่มผลได้กรณีเลวร้ายที่สุด (กลยุทธ์อนุรักษ์นิยม)
- เกมความปลอดภัย: การจัดสรรทรัพยากรผู้ป้องกัน-ผู้โจมตี
- พอร์ตโฟลิโอทนทาน: ลดการสูญเสียสูงสุดในสถานการณ์ตลาดต่างๆ
- การวางแผนการผลิต: การตัดสินใจผลิตแบบอนุรักษ์นิยม (เพิ่มกำไรขั้นต่ำ)
- การแข่งขันโฆษณา: เกมส่วนแบ่งตลาดและกลยุทธ์การแข่งขัน
🔬 การผสานรวม SciPy
- การหาค่าเหมาะที่สุดของพอร์ตโฟลิโอแบบไม่เชิงเส้น: แบบจำลองความเสี่ยงกำลังสองด้วยการหาค่าเหมาะที่สุดของ SciPy
- การประมาณค่าพารามิเตอร์ทางสถิติ: การปรับการแจกแจงด้วยข้อจำกัด (MLE, การจับคู่ควอนไทล์)
- การหาค่าเหมาะที่สุดของการประมวลผลสัญญาณ: การออกแบบตัวกรอง FIR ด้วยการหาค่าเหมาะที่สุดของการตอบสนองความถี่
- CSP-SciPy แบบผสม: การเลือกสถานที่แบบไม่ต่อเนื่อง + การหาค่าเหมาะที่สุดของกำลังการผลิตต่อเนื่อง
- การอินทิเกรตเชิงตัวเลข: ปัญหาการหาค่าเหมาะที่สุดที่เกี่ยวข้องกับอินทิกรัลและฟังก์ชันซับซ้อน
🧮 ปัญหาคณิตศาสตร์คลาสสิก
- เกม 24 จุด: ค้นหานิพจน์เลขคณิตเพื่อให้ได้ 24 โดยใช้ตัวเลขสี่ตัว
- ปัญหาไก่-กระต่าย: ปัญหาข้อจำกัดคลาสสิกที่มีหัวและขา
- Mini Sudoku: ตัวแก้ Sudoku 4×4 โดยใช้เทคนิค CSP
- ปัญหา 4-Queens: N-Queens แบบง่ายเพื่อการศึกษา
- 0-1 Knapsack: ปัญหาการหาค่าเหมาะที่สุดคลาสสิกที่มีข้อจำกัดน้ำหนักและมูลค่า
🔌 การรองรับโปรโตคอล MCP
- การขนส่ง Stdio: การผสานรวม IDE ในเครื่อง (Kiro, Claude Desktop, Cline, ฯลฯ)
- การขนส่ง HTTP แบบสตรีมได้: เว็บไคลเอนต์และการเข้าถึงระยะไกลพร้อมการสตรีมเสริม
- อินเทอร์เฟซแบบรวม: เครื่องมือเดียวกันในการขนส่งทั้งสองแบบ
- JSON-RPC 2.0: การปฏิบัติตามโปรโตคอลอย่างสมบูรณ์
- การอนุมัติอัตโนมัติ: กำหนดค่าเครื่องมือที่เชื่อถือได้เพื่อการดำเนินการที่ราบรื่น
การติดตั้ง
จาก PyPI (แนะนำ)
# Install the latest stable version
pip install gurddy_mcp
# Or install with development dependencies
pip install gurddy_mcp[dev]
จากซอร์ส
# Clone the repository
git clone https://github.com/novvoo/gurddy-mcp.git
cd gurddy-mcp
# Install in development mode
pip install -e .
ตรวจสอบการติดตั้ง
# Test MCP stdio server
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | gurddy-mcp
การใช้งาน
1. เซิร์ฟเวอร์ MCP Stdio (อินเทอร์เฟซหลัก)
คำสั่ง gurddy-mcp หลักคือเซิร์ฟเวอร์ MCP stdio ที่สามารถผสานรวมกับเครื่องมือเช่น Kiro
ตัวเลือก A: ใช้ uvx (แนะนำ - เวอร์ชันล่าสุดเสมอ)
การใช้ 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?
- ✅ เรียกใช้เวอร์ชันล่าสุดที่เผยแพร่โดยอัตโนมัติเสมอ
- ✅ ไม่ต้องติดตั้งหรืออัปเกรดด้วยตนเอง
- ✅ สภาพแวดล้อมแยกต่อการดำเนินการ
- ✅ ไม่มีข้อขัดแย้งของ dependencies กับ Python ระบบของคุณ
ข้อกำหนดเบื้องต้น: ติดตั้ง uv ก่อน:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Or using pip
pip install uv
# Or using Homebrew (macOS)
brew install uv
ตัวเลือก B: ใช้คำสั่งโดยตรง (หลังการติดตั้ง)
หากคุณติดตั้ง gurddy-mcp ผ่าน pip แล้ว:
{
"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 MCPinstall- ติดตั้งหรืออัปเกรดแพ็คเกจ gurddyrun_example- เรียกใช้โปรแกรมตัวอย่าง (n_queens, graph_coloring, minimax, scipy_optimization, classic_problems, ฯลฯ)solve_n_queens- แก้ปัญหา N-Queens สำหรับขนาดกระดานใดๆsolve_sudoku- แก้ปริศนา Sudoku 9×9 โดยใช้ CSPsolve_graph_coloring- แก้การระบายสีกราฟด้วยสีที่กำหนดค่าได้solve_map_coloring- แก้ปัญหาการระบายสีแผนที่ (เช่น ออสเตรเลีย, สหรัฐอเมริกา)solve_lp- แก้ Linear Programming (LP) หรือ Mixed Integer Programming (MIP)solve_production_planning- การหาค่าเหมาะที่สุดของการผลิตพร้อมการวิเคราะห์ความไวเสริมsolve_minimax_game- เกมผลรวมศูนย์สองผู้เล่น (ค้นหาสมดุลแนช)solve_minimax_decision- การหาค่าเหมาะที่สุดแบบทนทาน (ลดการสูญเสียสูงสุดหรือเพิ่มผลได้ขั้นต่ำ)solve_24_point_game- แก้เกม 24 จุดด้วยตัวเลขสี่ตัวโดยใช้การดำเนินการเลขคณิตsolve_chicken_rabbit_problem- แก้ปัญหาไก่-กระต่ายคลาสสิกด้วยข้อจำกัดหัวและขาsolve_scipy_portfolio_optimization- แก้การหาค่าเหมาะที่สุดของพอร์ตโฟลิโอแบบไม่เชิงเส้นโดยใช้ SciPysolve_scipy_statistical_fitting- แก้การประมาณค่าพารามิเตอร์ทางสถิติโดยใช้ SciPysolve_scipy_facility_location- แก้ปัญหาการเลือกสถานที่โดยใช้วิธี CSP-SciPy แบบผสม
ทดสอบเซิร์ฟเวอร์ MCP:
# Test initialization
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | gurddy-mcp
# Test listing tools
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | gurddy-mcp
# Test info tools
echo '{"jsonrpc":"2.0","id":10,"method":"tools/call","params":{"name":"info","arguments":{"":""}}}' | gurddy-mcp |jq
# Test run example tools
echo '{"jsonrpc":"2.0","id":10,"method":"tools/call","params":{"name":"run_example","arguments":{"example":"n_queens"}}}' | gurddy-mcp |jq
# Test sudoku tools
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
2. เซิร์ฟเวอร์ MCP HTTP
เริ่มเซิร์ฟเวอร์ MCP HTTP (โปรโตคอล MCP ผ่าน HTTP แบบสตรีมได้):
การพัฒนาในเครื่อง:
uvicorn mcp_server.mcp_http_server:app --host 127.0.0.1 --port 8080
Docker:
# Build the image
docker build -t gurddy-mcp .
# Run the container
docker run -p 8080:8080 gurddy-mcp
เข้าถึงเซิร์ฟเวอร์:
- รูท: http://127.0.0.1:8080/
- การตรวจสอบสุขภาพ: http://127.0.0.1:8080/health
- การขนส่ง HTTP: http://127.0.0.1:8080/mcp/http (POST - รองรับทั้งแบบปกติและแบบสตรีมมิ่ง)
ทดสอบเซิร์ฟเวอร์ MCP HTTP:
การขนส่ง HTTP (ไม่สตรีม):
# List available tools
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":{}}'
# Call a tool
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):
# List tools with streaming response
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":{}}'
# Call a tool with streaming response
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):
# Alternative way to enable streaming
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
เซิร์ฟเวอร์มีเครื่องมือ MCP ดังต่อไปนี้:
info
รับข้อมูลเกี่ยวกับแพ็คเกจ gurddy
{
"name": "info",
"arguments": {}
}
install
ติดตั้งหรืออัปเกรดแพ็คเกจ gurddy
{
"name": "install",
"arguments": {
"package": "gurddy",
"upgrade": false
}
}
run_example
เรียกใช้ตัวอย่าง 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
solve_n_queens
แก้ปัญหา N-Queens
{
"name": "solve_n_queens",
"arguments": {
"n": 8
}
}
solve_sudoku
แก้ปริศนา Sudoku 9x9
{
"name": "solve_sudoku",
"arguments": {
"puzzle": [[5,3,0,...], [6,0,0,...], ...]
}
}
solve_graph_coloring
แก้ปัญหาการระบายสีกราฟ
{
"name": "solve_graph_coloring",
"arguments": {
"edges": [[0,1], [1,2], [2,0]],
"num_vertices": 3,
"max_colors": 3
}
}
solve_map_coloring
แก้ปัญหาการระบายสีแผนที่
{
"name": "solve_map_coloring",
"arguments": {
"regions": ["A", "B", "C"],
"adjacencies": [["A", "B"], ["B", "C"]],
"max_colors": 2
}
}
solve_lp
แก้ปัญหา Linear Programming (LP) หรือ Mixed Integer Programming (MIP) โดยใช้ PuLP
{
"name": "solve_lp",
"arguments": {
"profits": {
"ProductA": 30,
"ProductB": 40
},
"consumption": {
"ProductA": {"Labor": 2, "Material": 3},
"ProductB": {"Labor": 3, "Material": 2}
},
"capacities": {
"Labor": 100,
"Material": 120
},
"integer": true
}
}
solve_production_planning
แก้ปัญหาการหาค่าเหมาะที่สุดของการวางแผนการผลิตพร้อมการวิเคราะห์ความไวเสริม
{
"name": "solve_production_planning",
"arguments": {
"profits": {
"ProductA": 30,
"ProductB": 40
},
"consumption": {
"ProductA": {"Labor": 2, "Material": 3},
"ProductB": {"Labor": 3, "Material": 2}
},
"capacities": {
"Labor": 100,
"Material": 120
},
"integer": true,
"sensitivity_analysis": false
}
}
solve_minimax_game
แก้เกมผลรวมศูนย์สองผู้เล่นโดยใช้ minimax (ทฤษฎีเกม)
{
"name": "solve_minimax_game",
"arguments": {
"payoff_matrix": [
[0, -1, 1],
[1, 0, -1],
[-1, 1, 0]
],
"player": "row"
}
}
ส่งคืนกลยุทธ์ผสมที่เหมาะสมที่สุดและมูลค่าเกมสำหรับผู้เล่นที่ระบุ
solve_minimax_decision
แก้ปัญหาการตัดสินใจ minimax ภายใต้ความไม่แน่นอน (การหาค่าเหมาะที่สุดแบบทนทาน)
{
"name": "solve_minimax_decision",
"arguments": {
"scenarios": [
{"A": -0.2, "B": -0.1, "C": 0.05},
{"A": 0.3, "B": 0.2, "C": -0.02},
{"A": 0.05, "B": 0.03, "C": -0.01}
],
"decision_vars": ["A", "B", "C"],
"budget": 100.0,
"objective": "minimize_max_loss"
}
}
วัตถุประสงค์: minimize_max_loss (พอร์ตโฟลิโอทนทาน) หรือ maximize_min_gain (การผลิตแบบอนุรักษ์นิยม)
solve_24_point_game
แก้เกม 24 จุดด้วยตัวเลขสี่ตัวโดยใช้การดำเนินการเลขคณิต
{
"name": "solve_24_point_game",
"arguments": {
"numbers": [1, 2, 3, 4]
}
}
ค้นหานิพจน์เลขคณิตโดยใช้ +, -, *, / และวงเล็บเพื่อให้ได้ 24 พอดี
solve_chicken_rabbit_problem
แก้ปัญหาไก่-กระต่ายคลาสสิกด้วยข้อจำกัดหัวและขา
{
"name": "solve_chicken_rabbit_problem",
"arguments": {
"total_heads": 35,
"total_legs": 94
}
}
กำหนดจำนวนไก่ (2 ขา) และกระต่าย (4 ขา) จากจำนวนหัวและขาทั้งหมด
solve_scipy_portfolio_optimization
แก้การหาค่าเหมาะที่สุดของพอร์ตโฟลิโอแบบไม่เชิงเส้นโดยใช้ SciPy ด้วยแบบจำลองความเสี่ยงกำลังสอง
{
"name": "solve_scipy_portfolio_optimization",
"arguments": {
"expected_returns": [0.12, 0.18, 0.15],
"covariance_matrix": [
[0.04, 0.01, 0.02],
[0.01, 0.09, 0.03],
[0.02, 0.03, 0.06]
],
"risk_tolerance": 1.0
}
}
หาค่าเหมาะที่สุดของน้ำหนักพอร์ตโฟลิโอเพื่อเพิ่มผลตอบแทนลบด้วยค่าปรับความเสี่ยงโดยใช้การหาค่าเหมาะที่สุด mean-variance
solve_scipy_statistical_fitting
แก้การประมาณค่าพารามิเตอร์ทางสถิติโดยใช้ SciPy ด้วยการปรับการแจกแจง
{
"name": "solve_scipy_statistical_fitting",
"arguments": {
"data": [1.2, 2.3, 1.8, 2.1, 1.9, 2.4, 1.7, 2.0],
"distribution": "normal"
}
}
ปรับการแจกแจงทางสถิติ ("normal", "exponential", "uniform") ให้เข้ากับข้อมูลและให้การทดสอบความดีของการปรับ
solve_scipy_facility_location
แก้ปัญหาการเลือกสถานที่โดยใช้วิธี CSP-SciPy แบบผสม
{
"name": "solve_scipy_facility_location",
"arguments": {
"customer_locations": [[0, 0], [10, 10], [5, 15]],
"customer_demands": [100, 150, 80],
"facility_locations": [[2, 3], [8, 12], [6, 8]],
"max_facilities": 2,
"fixed_cost": 100.0
}
}
รวมการเลือกสถานที่แบบไม่ต่อเนื่อง (CSP) กับการหาค่าเหมาะที่สุดของกำลังการผลิตต่อเนื่อง (SciPy) เพื่อลดต้นทุนรวม
การปรับใช้ Docker
สร้างและเรียกใช้
# Build the image
docker build -t gurddy-mcp .
# Run the container
docker run -p 8080:8080 gurddy-mcp
# Or with environment variables
docker run -p 8080:8080 -e PORT=8080 gurddy-mcp
Docker Compose
version: '3.8'
services:
gurddy-mcp:
build: .
ports:
- "8080:8080"
environment:
- PYTHONUNBUFFERED=1
restart: unless-stopped
ตัวอย่างผลลัพธ์
ปัญหา N-Queens
POST /solve-n-queens
{
"n": 8
}
โครงสร้างโปรเจกต์
mcp_server/
├── handlers/
│ └── gurddy.py # Core solver implementation (16 MCP tools)
│ # - solve_24_point_game, solve_chicken_rabbit_problem
│ # - solve_scipy_portfolio_optimization, solve_scipy_statistical_fitting
│ # - solve_scipy_facility_location, and 11 other solvers
├── tools/ # MCP tool wrappers
├── examples/ # Rich Problem Examples
│ ├── n_queens.py # N-Queens Problem
│ ├── graph_coloring.py # Graph Coloring Problem
│ ├── map_coloring.py # Map Coloring Problem
│ ├── logic_puzzles.py # Logic Puzzles
│ ├── scheduling.py # Scheduling Problem
│ ├── scipy_optimization.py # SciPy Integration Examples
│ │ # - Portfolio optimization, statistical fitting, facility location
│ ├── classic_problems.py # Classic Math Problems
│ │ # - 24-point game, chicken-rabbit problem, mini sudoku
│ ├── optimized_csp.py # Advanced CSP techniques
│ ├── optimized_lp.py # Linear programming examples
│ └── minimax.py # Game theory and robust optimization
├── mcp_stdio_server.py # MCP Stdio Server (for IDE integration)
└── mcp_http_server.py # MCP HTTP Server (for web clients)
examples/
└── http_mcp_client.py # Example HTTP MCP client
Dockerfile # Docker configuration for HTTP server
การขนส่ง MCP
| การขนส่ง | คำสั่ง | โปรโตคอล | กรณีใช้งาน |
|---|---|---|---|
| Stdio | gurddy-mcp | MCP ผ่าน stdin/stdout | การผสานรวม IDE (Kiro, Claude Desktop, ฯลฯ) |
| HTTP แบบสตรีมได้ | uvicorn mcp_server.mcp_http_server:app | MCP ผ่าน HTTP พร้อมการสตรีมเสริม | เว็บไคลเอนต์, การเข้าถึงระยะไกล, การปรับใช้ Docker |
การขนส่งทั้งหมดใช้โปรโตคอล MCP เดียวกันและให้เครื่องมือที่เหมือนกัน
คุณสมบัติการขนส่ง HTTP
การขนส่ง HTTP (จุดสิ้นสุด /mcp/http):
- รูปแบบคำขอ-ตอบกลับเดี่ยว
- การสตรีมเสริม: เพิ่มส่วนหัว
Accept: text/event-streamหรือX-Stream: true - ง่ายกว่าสำหรับคำขอครั้งเดียว
- เข้ากันได้กับไคลเอนต์ HTTP มาตรฐาน
- ไม่มีสถานะการเชื่อมต่อที่ต้องจัดการ
- รองรับทั้งการตอบกลับ JSON ปกติและการตอบกลับแบบสตรีมที่จัดรูปแบบ SSE
ตัวอย่างผลลัพธ์
ปัญหา N-Queens
$ gurddy-mcp-cli run-example n_queens
Solving 8-Queens problem...
8-Queens Solution:
+---+---+---+---+---+---+---+---+
| Q | | | | | | | |
+---+---+---+---+---+---+---+---+
| | | | | Q | | | |
+---+---+---+---+---+---+---+---+
| | | | | | | | Q |
+---+---+---+---+---+---+---+---+
| | | | | | Q | | |
+---+---+---+---+---+---+---+---+
| | | Q | | | | | |
+---+---+---+---+---+---+---+---+
| | | | | | | Q | |
+---+---+---+---+---+---+---+---+
| | Q | | | | | | |
+---+---+---+---+---+---+---+---+
| | | | Q | | | | |
+---+---+---+---+---+---+---+---+
Queen positions: (0,0), (1,4), (2,7), (3,5), (4,2), (5,6), (6,1), (7,3)
ปริศนาตรรกะ
$ python -m mcp_server.server run-example logic_puzzles
Solving Simple Logic Puzzle:
Solution:
Position 1: Alice has Cat in Green house
Position 2: Bob has Dog in Red house
Position 3: Carol has Fish in Blue house
Solving the Famous Zebra Puzzle (Einstein's Riddle)...
ANSWERS:
Who owns the zebra? Ukrainian (House 5)
Who drinks water? Japanese (House 2)
ตัวอย่าง HTTP API
การแก้ปัญหาคลาสสิก
การระบายสีแผนที่ออสเตรเลีย
import requests
response = requests.post("http://127.0.0.1:8080/solve-map-coloring", json={
"regions": ['WA', 'NT', 'SA', 'QLD', 'NSW', 'VIC', 'TAS'],
"adjacencies": [
['WA', 'NT'], ['WA', 'SA'], ['NT', 'SA'], ['NT', 'QLD'],
['SA', 'QLD'], ['SA', 'NSW'], ['SA', 'VIC'],
['QLD', 'NSW'], ['NSW', 'VIC']
],
"max_colors": 4
})
ปัญหา 8-Queens
response = requests.post("http://127.0.0.1:8080/solve-n-queens",
json={"n": 8})
ตัวอย่างที่มี
ตัวอย่างทั้งหมดสามารถเรียกใช้โดยใช้ gurddy-mcp run-example <name> หรือ python -m mcp_server.server run-example <name>:
ตัวอย่าง CSP ✅
- n_queens - ปัญหา N-Queens (4, 6, 8 ราชินีพร้อมการแสดงกระดานภาพ)
- graph_coloring - การระบายสีกราฟ (สามเหลี่ยม, สี่เหลี่ยม, กราฟ Petersen, กราฟวงล้อ)
- map_coloring - การระบายสีแผนที่ (ออสเตรเลีย, รัฐตะวันตกของสหรัฐอเมริกา, ยุโรป)
- scheduling - ปัญหาการจัดตาราง (การจัดตารางเรียน, การจัดตารางประชุม, การจัดสรรทรัพยากร)
- logic_puzzles - ปริศนาตรรกะ (ปริศนาตรรกะอย่างง่าย, ปริศนาม้าลายของไอน์สไตน์)
- optimized_csp - เทคนิค CSP ขั้นสูง (ตัวแก้ Sudoku)
ตัวอย่าง LP ✅
- lp / optimized_lp - ตัวอย่าง Linear Programming:
- การหาค่าเหมาะที่สุดของพอร์ตโฟลิโอด้วยข้อจำกัดความเสี่ยง
- ปัญหาการขนส่ง (การหาค่าเหมาะที่สุดของห่วงโซ่อุปทาน)
- การวิเคราะห์การผ่อนคลายข้อจำกัด
- การเปรียบเทียบประสิทธิภาพตามขนาดปัญหา
ตัวอย่าง Minimax ✅
- minimax - การหาค่าเหมาะที่สุด Minimax และทฤษฎีเกม:
- Rock-Paper-Scissors (เกมผลรวมศูนย์)
- Matching Pennies (เกมประสานงาน)
- Battle of the Sexes (สมดุลกลยุทธ์ผสม)
- การหาค่าเหมาะที่สุดของพอร์ตโฟลิโอทนทาน (ลดการสูญเสียสูงสุด)
- การวางแผนการผลิต (เพิ่มกำไรขั้นต่ำ)
- การจัดสรรทรัพยากรความปลอดภัย (เกมผู้ป้องกัน-ผู้โจมตี)
- การแข่งขันโฆษณา (เกมส่วนแบ่งตลาด)
ตัวอย่างการใช้งาน SciPy ✅
- scipy_optimization - การหาค่าเหมาะที่สุดขั้นสูงด้วย SciPy:
- การหาค่าเหมาะที่สุดของพอร์ตโฟลิโอแบบไม่เชิงเส้นด้วยแบบจำลองความเสี่ยงกำลังสอง
- การประมาณค่าพารามิเตอร์ทางสถิติ (การปรับการแจกแจงให้พอดีกับข้อจำกัด)
- การหาค่าเหมาะที่สุดในการประมวลผลสัญญาณ (การออกแบบตัวกรอง FIR)
- ตำแหน่งที่ตั้งสิ่งอำนวยความสะดวกแบบผสม CSP-SciPy (การหาค่าเหมาะที่สุดแบบไม่ต่อเนื่อง + ต่อเนื่อง)
- การอินทิเกรตเชิงตัวเลขในวัตถุประสงค์การหาค่าเหมาะที่สุด
ปัญหาคณิตศาสตร์คลาสสิก ✅
- classic_problems - การแก้ปัญหาคณิตศาสตร์เพื่อการศึกษา:
- เกม 24 แต้ม (นิพจน์เลขคณิตเพื่อให้ได้ 24)
- ปัญหาไก่-กระต่าย (ปัญหาความพึงพอใจของข้อจำกัดแบบคลาสสิก)
- มินิซูโดกุ 4×4 (การสาธิต CSP แบบง่าย)
- ปัญหาควีน 4 ตัว (รูปแบบปัญหาควีน N ตัวเพื่อการศึกษา)
- ปัญหาเป้ 0-1 (การหาค่าเหมาะที่สุดแบบคลาสสิก)
ประเภทปัญหาที่รองรับ
🧩 ปัญหา CSP
- N-Queens: ปัญหาควีน N ตัวแบบคลาสสิกสำหรับขนาดกระดานใดๆ (N=4 ถึง N=100+)
- การระบายสีกราฟ: การระบายสีจุดยอดสำหรับกราฟใดๆ (สามเหลี่ยม, Petersen, วงล้อ, ฯลฯ)
- การระบายสีแผนที่: การระบายสีภูมิภาคทางภูมิศาสตร์ (แผนที่ออสเตรเลีย, สหรัฐอเมริกา, ยุโรป)
- ซูโดกุ: ปริศนาซูโดกุมาตรฐาน 9×9 พร้อมการเผยแพร่ข้อจำกัด
- ปริศนาตรรกะ: ปริศนาม้าลายของไอน์สไตน์และปัญหาการให้เหตุผลเชิงตรรกะแบบกำหนดเอง
- การจัดตารางเวลา: การจัดตารางเรียน, ห้องประชุม, การจัดสรรทรัพยากรพร้อมข้อจำกัดด้านเวลา
📈 ปัญหาการหาค่าเหมาะที่สุด
- การโปรแกรมเชิงเส้น: การหาค่าเหมาะที่สุดของตัวแปรต่อเนื่องด้วยข้อจำกัดเชิงเส้น
- การโปรแกรมจำนวนเต็ม: การหาค่าเหมาะที่สุดของตัวแปรไม่ต่อเนื่อง (ปริมาณการผลิต, การมอบหมายงาน)
- การโปรแกรมจำนวนเต็มผสม: การรวมตัวแปรต่อเนื่องและไม่ต่อเนื่อง
- การวางแผนการผลิต: การหาค่าเหมาะที่สุดแบบหลายผลิตภัณฑ์ที่มีข้อจำกัดด้านทรัพยากร
- การหาค่าเหมาะที่สุดของพอร์ตโฟลิโอ: การจัดสรรการลงทุนพร้อมข้อจำกัดด้านความเสี่ยงและผลตอบแทน
- การขนส่ง: การหาค่าเหมาะที่สุดของห่วงโซ่อุปทาน (คลังสินค้าถึงลูกค้า)
🎲 ทฤษฎีเกมและการหาค่าเหมาะที่สุดแบบทนทาน
- เกมผลรวมเป็นศูนย์: เป่ายิ้งฉุบ, การโยนเหรียญ, สงครามระหว่างเพศ
- สมดุลแนชแบบกลยุทธ์ผสม: กลยุทธ์ความน่าจะเป็นที่เหมาะสมที่สุดสำหรับผู้เล่นทั้งสอง
- การตัดสินใจแบบมินิแมกซ์: ลดการสูญเสียในกรณีที่เลวร้ายที่สุดในสถานการณ์ความไม่แน่นอน
- การตัดสินใจแบบแมกซิมิน: เพิ่มผลกำไรในกรณีที่เลวร้ายที่สุด (กลยุทธ์แบบอนุรักษ์นิยม)
- พอร์ตโฟลิโอแบบทนทาน: ลดการสูญเสียสูงสุดในสถานการณ์ตลาดต่างๆ
- เกมความปลอดภัย: ปัญหาการจัดสรรทรัพยากรระหว่างผู้ป้องกันและผู้โจมตี
🔬 การหาค่าเหมาะที่สุดขั้นสูงด้วย SciPy
- การหาค่าเหมาะที่สุดของพอร์ตโฟลิโอแบบไม่เชิงเส้น: แบบจำลองความเสี่ยงกำลังสองพร้อมการเพิ่มอัตราส่วน Sharpe สูงสุด
- การประมาณค่าพารามิเตอร์ทางสถิติ: การปรับการแจกแจงให้พอดีด้วยวิธี MLE และควอนไทล์พร้อมข้อจำกัด
- การประมวลผลสัญญาณ: การออกแบบตัวกรอง FIR พร้อมการหาค่าเหมาะที่สุดของการตอบสนองความถี่
- การหาค่าเหมาะที่สุดแบบผสม: รวม Gurddy CSP เข้ากับการหาค่าเหมาะที่สุดต่อเนื่องของ SciPy
- การอินทิเกรตเชิงตัวเลข: ปัญหาการหาค่าเหมาะที่สุดที่เกี่ยวข้องกับฟังก์ชันทางคณิตศาสตร์ที่ซับซ้อน
🧮 ปัญหาคลาสสิกเพื่อการศึกษา
- เกม 24 แต้ม: ค้นหานิพจน์เลขคณิตโดยใช้ตัวเลขสี่ตัวเพื่อให้ได้ 24
- ปัญหาไก่-กระต่าย: ปัญหาความพึงพอใจของข้อจำกัดแบบคลาสสิกด้วยหัวและขา
- มินิซูโดกุ: การแก้ซูโดกุ 4×4 โดยใช้เทคนิค CSP
- รูปแบบปัญหาควีน N ตัว: รูปแบบเพื่อการศึกษาของปัญหาคลาสสิก
- ปัญหาเป้: การหาค่าเหมาะที่สุดของเป้ 0-1 พร้อมข้อจำกัดด้านน้ำหนักและมูลค่า
คุณสมบัติด้านประสิทธิภาพ
- การแก้ปัญหาที่รวดเร็ว: การตอบสนองระดับมิลลิวินาทีสำหรับปัญหาขนาดเล็กถึงกลาง (N-Queens N≤12, กราฟ <50 จุดยอด)
- ปรับขนาดได้: จัดการปัญหาขนาดใหญ่ (N-Queens N=100+, LP ที่มีตัวแปร 1000+)
- ใช้หน่วยความจำอย่างมีประสิทธิภาพ: การค้นหาแบบย้อนรอยและการเผยแพร่ข้อจำกัดช่วยลดการใช้หน่วยความจำ
- ขยายได้: ข้อจำกัดแบบกำหนดเอง, ฟังก์ชันวัตถุประสงค์, และประเภทปัญหา
- ปลอดภัยสำหรับการทำงานพร้อมกัน: HTTP API รองรับการประมวลผลคำขอพร้อมกัน
- พร้อมสำหรับการใช้งานจริง: การปรับใช้ Docker, การตรวจสอบความสมบูรณ์, การจัดการข้อผิดพลาด
เกณฑ์มาตรฐานประสิทธิภาพ
เวลาดำเนินการทั่วไปบนฮาร์ดแวร์มาตรฐาน:
- ตัวอย่าง CSP: 0.4-0.5 วินาที (N-Queens, การระบายสีกราฟ, ปริศนาตรรกะ)
- ตัวอย่าง LP: 0.8-0.9 วินาที (พอร์ตโฟลิโอ, การขนส่ง, การวางแผนการผลิต)
- ตัวอย่าง Minimax: 0.3-0.5 วินาที (การแก้เกม, การหาค่าเหมาะที่สุดแบบทนทาน)
- ตัวอย่าง SciPy: 0.5-1.2 วินาที (การหาค่าเหมาะที่สุดแบบไม่เชิงเส้น, การปรับทางสถิติ)
- ปัญหาคลาสสิก: 0.1-0.3 วินาที (24 แต้ม, ไก่-กระต่าย, มินิซูโดกุ)
- ซูโดกุ: <0.1 วินาที สำหรับปริศนามาตรฐาน 9×9
- N-Queens ขนาดใหญ่: ~2-3 วินาที สำหรับ N=100
การแก้ไขปัญหา
ข้อผิดพลาดทั่วไป
"gurddy package not available": ติดตั้งด้วยpython -m mcp_server.server install"No solution found": ไม่มีวิธีแก้ปัญหาภายใต้ข้อจำกัดที่กำหนด; ลองผ่อนคลายข้อจำกัด"Invalid input types": ตรวจสอบประเภทข้อมูลของพารามิเตอร์อินพุต"Unknown example": ใช้python -m mcp_server.server run-example --helpเพื่อดูตัวอย่างที่มีอยู่
ปัญหาการติดตั้ง
# install individually
pip install gurddy pulp>=2.6.0 scipy>=1.9.0 numpy>=1.21.0
# Check installation
python -c "import gurddy, pulp, scipy, numpy; print('All dependencies installed')"
การดีบักตัวอย่าง
รันตัวอย่างโดยตรงเพื่อการดีบัก:
# After installing gurddy_mcp
python -c "from mcp_server.examples import n_queens; n_queens.main()"
# Or from source - CSP examples
python mcp_server/examples/n_queens.py
python mcp_server/examples/graph_coloring.py
python mcp_server/examples/logic_puzzles.py
python mcp_server/examples/optimized_csp.py
# LP and optimization examples
python mcp_server/examples/optimized_lp.py
# Game theory and minimax examples
python mcp_server/examples/minimax.py
# SciPy integration examples (includes portfolio, statistical fitting, facility location)
python mcp_server/examples/scipy_optimization.py
# Classic math problems (includes 24-point game, chicken-rabbit problem)
python mcp_server/examples/classic_problems.py
# Test individual MCP tools directly
python -c "from mcp_server.handlers.gurddy import solve_24_point_game; print(solve_24_point_game([1,2,3,4]))"
python -c "from mcp_server.handlers.gurddy import solve_chicken_rabbit_problem; print(solve_chicken_rabbit_problem(35, 94))"
python -c "from mcp_server.handlers.gurddy import solve_scipy_portfolio_optimization; print(solve_scipy_portfolio_optimization([0.12, 0.18], [[0.04, 0.01], [0.01, 0.09]]))"
ข้อกำหนดการใช้งาน SciPy
ตัวอย่างการใช้งาน SciPy ต้องการการพึ่งพาเพิ่มเติม:
# Install SciPy and NumPy
pip install scipy>=1.9.0 numpy>=1.21.0
# Verify SciPy integration
python -c "import scipy.optimize, numpy; print('SciPy integration ready')"
ตัวอย่าง SciPy รวมถึง:
- การหาค่าเหมาะที่สุดของพอร์ตโฟลิโอแบบไม่เชิงเส้น: แบบจำลองความเสี่ยงกำลังสองพร้อมการเพิ่มอัตราส่วน Sharpe สูงสุด
- การประมาณค่าพารามิเตอร์ทางสถิติ: การปรับการแจกแจงให้พอดีด้วยวิธี MLE และควอนไทล์
- การประมวลผลสัญญาณ: การออกแบบตัวกรอง FIR พร้อมการหาค่าเหมาะที่สุดของการตอบสนองความถี่
- CSP-SciPy แบบผสม: ตำแหน่งที่ตั้งสิ่งอำนวยความสะดวกที่รวมการหาค่าเหมาะที่สุดแบบไม่ต่อเนื่องและต่อเนื่อง
- การอินทิเกรตเชิงตัวเลข: ปัญหาการหาค่าเหมาะที่สุดที่ซับซ้อนเกี่ยวกับอินทิกรัล
การพัฒนา
สถาปัตยกรรม
โปรเจกต์ใช้ รีจิสทรีเครื่องมือแบบรวมศูนย์ พร้อม สกีมาที่สร้างขึ้นอัตโนมัติ เพื่อให้แน่ใจถึงความสอดคล้องระหว่างเซิร์ฟเวอร์ stdio และ HTTP:
- คำจำกัดความของเครื่องมือ:
mcp_server/tool_definitions.py(เมตาดาต้าพื้นฐานเท่านั้น) - รีจิสทรีที่สร้างขึ้นอัตโนมัติ:
mcp_server/tool_registry.py(สกีมาที่สร้างจากลายเซ็นฟังก์ชัน) - เซิร์ฟเวอร์ Stdio:
mcp_server/mcp_stdio_server.py(สำหรับการรวม IDE) - เซิร์ฟเวอร์ HTTP:
mcp_server/mcp_http_server.py(สำหรับไคลเอนต์เว็บ) - ตัวจัดการ:
mcp_server/handlers/gurddy.py(การนำเครื่องมือไปใช้) - ตัวสร้างสกีมา:
scripts/generate_registry.py(สร้างสกีมาจากลายเซ็นฟังก์ชันโดยอัตโนมัติ)
การเพิ่มเครื่องมือใหม่
-
นำตัวจัดการไปใช้ ใน
mcp_server/handlers/gurddy.py:def my_new_tool(param1: str, param2: int = 10) -> Dict[str, Any]: """Tool implementation with proper type hints.""" return {"result": "success"} -
เพิ่มเมตาดาต้าพื้นฐาน ใน
mcp_server/tool_definitions.py:{ "name": "my_new_tool", "function": "my_new_tool", "description": "Description of what the tool does", "category": "optimization", "module": "handlers.gurddy" } -
สร้างสกีมาและตรวจสอบ:
# Auto-generate schemas from function signatures python scripts/generate_registry.py # Verify consistency python scripts/verify_consistency.py pytest tests/test_consistency.py -v
เท่านี้เอง! สกีมาจะถูกสร้างขึ้นโดยอัตโนมัติจากคำใบ้ประเภทของฟังก์ชันของคุณ และทั้งเซิร์ฟเวอร์ stdio และ HTTP จะรับเครื่องมือใหม่
ข้อจำกัดแบบกำหนดเอง
# Define a custom constraint in gurddy
def custom_constraint(var1, var2):
return var1 + var2 <= 10
model.addConstraint(gurddy.FunctionConstraint(custom_constraint, (var1, var2)))
การทดสอบ
# Run all tests
pytest
# Run specific test suites
pytest tests/test_consistency.py -v
pytest tests/test_tool_registry.py -v
# Verify tool registry consistency
python scripts/verify_consistency.py
ใบอนุญาต
โปรเจกต์นี้ได้รับอนุญาตภายใต้ใบอนุญาตโอเพนซอร์ส โปรดดูไฟล์ LICENSE สำหรับรายละเอียด