Provides a RESTful API interface built with FastAPI for solving constraint satisfaction problems and linear programming problems, supporting JSON requests and responses with comprehensive error handling.
Gurddy MCP Server
A comprehensive Model Context Protocol (MCP) server for solving Constraint Satisfaction Problems (CSP), Linear Programming (LP), Minimax optimization, and SciPy-powered advanced optimization problems. Built on the gurddy optimization library with SciPy integration, it supports solving various classic problems through two MCP transports: stdio (for IDE integration) and streamable HTTP (for web clients).
š Quick Start (Stdio): pip install gurddy_mcp then configure in your IDE
š Quick Start (HTTP): docker run -p 8080:8080 gurddy-mcp or see deployment guide
š¦ PyPI Package: https://pypi.org/project/gurddy_mcp
Main Features
šÆ CSP Problem Solving
N-Queens Problem: Place N queens on an NĆN chessboard with no attacks
Graph Coloring: Assign colors to vertices so adjacent vertices differ
Map Coloring: Color geographic regions with adjacent regions differing
Sudoku Solver: Solve standard 9Ć9 Sudoku puzzles
Logic Puzzles: Einstein's Zebra puzzle and custom logic problems
Scheduling: Course scheduling, meeting scheduling, resource allocation
General CSP Solver: Support for custom constraint satisfaction problems
š LP/Optimization Problems
Linear Programming: Continuous variable optimization with linear constraints
Mixed Integer Programming: Optimization with integer and continuous variables
Production Planning: Resource-constrained production optimization with sensitivity analysis
Portfolio Optimization: Investment allocation under risk constraints
Transportation Problems: Supply chain and logistics optimization
š® Minimax/Game Theory
Zero-Sum Games: Solve two-player games (Rock-Paper-Scissors, Matching Pennies, Battle of Sexes)
Mixed Strategy Nash Equilibria: Find optimal probabilistic strategies
Robust Optimization: Minimize worst-case loss under uncertainty
Maximin Decisions: Maximize worst-case gain (conservative strategies)
Security Games: Defender-attacker resource allocation
Robust Portfolio: Minimize maximum loss across market scenarios
Production Planning: Conservative production decisions (maximize minimum profit)
Advertising Competition: Market share games and competitive strategies
š¬ SciPy Integration
Nonlinear Portfolio Optimization: Quadratic risk models with SciPy optimization
Statistical Parameter Estimation: Distribution fitting with constraints (MLE, quantile matching)
Signal Processing Optimization: FIR filter design with frequency response optimization
Hybrid CSP-SciPy: Discrete facility selection + continuous capacity optimization
Numerical Integration: Optimization problems involving integrals and complex functions
š§® Classic Math Problems
24-Point Game: Find arithmetic expressions to reach 24 using four numbers
Chicken-Rabbit Problem: Classic constraint problem with heads and legs
Mini Sudoku: 4Ć4 Sudoku solver using CSP techniques
4-Queens Problem: Simplified N-Queens for educational purposes
0-1 Knapsack: Classic optimization problem with weight and value constraints
š MCP Protocol Support
Stdio Transport: Local IDE integration (Kiro, Claude Desktop, Cline, etc.)
Streamable HTTP Transport: Web clients and remote access with optional streaming
Unified Interface: Same tools across both transports
JSON-RPC 2.0: Full protocol compliance
Auto-approval: Configure trusted tools for seamless execution
Installation
From PyPI (Recommended)
From Source
Verify Installation
Usage
1. MCP Stdio Server (Primary Interface)
The main gurddy-mcp command is an MCP stdio server that can be integrated with tools like Kiro.
Option A: Using uvx (Recommended - Always Latest Version)
Using uvx ensures you always run the latest published version without manual installation.
Configure in ~/.kiro/settings/mcp.json or .kiro/settings/mcp.json:
Recommended: Explicit latest version
Alternative: Without version specifier (also uses latest)
Pin to specific version (if needed)
Why use uvx?
ā Always runs the latest published version automatically
ā No manual installation or upgrade needed
ā Isolated environment per execution
ā No dependency conflicts with your system Python
Prerequisites: Install uv first:
Option B: Using Direct Command (After Installation)
If you've already installed gurddy-mcp via pip:
Available MCP tools (16 total):
info- Get gurddy MCP server information and capabilitiesinstall- Install or upgrade the gurddy packagerun_example- Run example programs (n_queens, graph_coloring, minimax, scipy_optimization, classic_problems, etc.)solve_n_queens- Solve N-Queens problem for any board sizesolve_sudoku- Solve 9Ć9 Sudoku puzzles using CSPsolve_graph_coloring- Solve graph coloring with configurable colorssolve_map_coloring- Solve map coloring problems (e.g., Australia, USA)solve_lp- Solve Linear Programming (LP) or Mixed Integer Programming (MIP)solve_production_planning- Production optimization with optional sensitivity analysissolve_minimax_game- Two-player zero-sum games (find Nash equilibria)solve_minimax_decision- Robust optimization (minimize max loss or maximize min gain)solve_24_point_game- Solve 24-point game with four numbers using arithmetic operationssolve_chicken_rabbit_problem- Solve classic chicken-rabbit problem with heads and legs constraintssolve_scipy_portfolio_optimization- Solve nonlinear portfolio optimization using SciPysolve_scipy_statistical_fitting- Solve statistical parameter estimation using SciPysolve_scipy_facility_location- Solve facility location problem using hybrid CSP-SciPy approach
Test the MCP server:
2. MCP HTTP Server
Start the HTTP MCP server (MCP protocol over streamable HTTP):
Local Development:
Docker:
Access the server:
Root: http://127.0.0.1:8080/
Health check: http://127.0.0.1:8080/health
HTTP transport: http://127.0.0.1:8080/mcp/http (POST - supports both regular and streaming)
Test the HTTP MCP server:
HTTP Transport (non-streaming):
HTTP Transport (streaming with Accept header):
HTTP Transport (streaming with X-Stream header):
Python Client Example:
examples/streamable_http_client.py- HTTP transport client with streaming examples
MCP Tools
The server provides the following MCP tools:
info
Get information about the gurddy package.
install
Install or upgrade the gurddy package.
run_example
Run a gurddy example.
Available examples: lp, csp, n_queens, graph_coloring, map_coloring, scheduling, logic_puzzles, optimized_csp, optimized_lp, minimax, scipy_optimization, classic_problems
solve_n_queens
Solve the N-Queens problem.
solve_sudoku
Solve a 9x9 Sudoku puzzle.
solve_graph_coloring
Solve graph coloring problem.
solve_map_coloring
Solve map coloring problem.
solve_lp
Solve a Linear Programming (LP) or Mixed Integer Programming (MIP) problem using PuLP.
solve_production_planning
Solve a production planning optimization problem with optional sensitivity analysis.
solve_minimax_game
Solve a two-player zero-sum game using minimax (game theory).
Returns the optimal mixed strategy and game value for the specified player.
solve_minimax_decision
Solve a minimax decision problem under uncertainty (robust optimization).
Objectives: minimize_max_loss (robust portfolio) or maximize_min_gain (conservative production)
solve_24_point_game
Solve the 24-point game with four numbers using arithmetic operations.
Finds arithmetic expressions using +, -, *, / and parentheses to reach exactly 24.
solve_chicken_rabbit_problem
Solve the classic chicken-rabbit problem with heads and legs constraints.
Determines the number of chickens (2 legs) and rabbits (4 legs) given total heads and legs.
solve_scipy_portfolio_optimization
Solve nonlinear portfolio optimization using SciPy with quadratic risk models.
Optimizes portfolio weights to maximize return minus risk penalty using mean-variance optimization.
solve_scipy_statistical_fitting
Solve statistical parameter estimation using SciPy with distribution fitting.
Fits statistical distributions ("normal", "exponential", "uniform") to data and provides goodness-of-fit tests.
solve_scipy_facility_location
Solve facility location problem using hybrid CSP-SciPy approach.
Combines discrete facility selection (CSP) with continuous capacity optimization (SciPy) to minimize total cost.
Docker Deployment
Build and Run
Docker Compose
Example Output
N-Queens Problem
Project Structure
MCP Transports
Transport | Command | Protocol | Use Case |
Stdio |
| MCP over stdin/stdout | IDE integration (Kiro, Claude Desktop, etc.) |
Streamable HTTP |
| MCP over HTTP with optional streaming | Web clients, remote access, Docker deployment |
All transports implement the same MCP protocol and provide identical tools.
HTTP Transport Features
HTTP Transport (/mcp/http endpoint):
Single request-response pattern
Optional streaming: Add
Accept: text/event-streamorX-Stream: trueheaderSimpler for one-off requests
Compatible with standard HTTP clients
No connection state to manage
Supports both regular JSON responses and SSE-formatted streaming responses
Example Output
N-Queens Problem
Logic Puzzles
HTTP API Examples
Classic Problem Solving
Australian Map Coloring
8-Queens Problem
Available Examples
All examples can be run using gurddy-mcp run-example <name> or python -m mcp_server.server run-example <name>:
CSP Examples ā
n_queens - N-Queens problem (4, 6, 8 queens with visual board display)
graph_coloring - Graph coloring (Triangle, Square, Petersen graph, Wheel graph)
map_coloring - Map coloring (Australia, USA Western states, Europe)
scheduling - Scheduling problems (Course scheduling, meeting scheduling, resource allocation)
logic_puzzles - Logic puzzles (Simple logic puzzle, Einstein's Zebra puzzle)
optimized_csp - Advanced CSP techniques (Sudoku solver)
LP Examples ā
lp / optimized_lp - Linear programming examples:
Portfolio optimization with risk constraints
Transportation problem (supply chain optimization)
Constraint relaxation analysis
Performance comparison across problem sizes
Minimax Examples ā
minimax - Minimax optimization and game theory:
Rock-Paper-Scissors (zero-sum game)
Matching Pennies (coordination game)
Battle of the Sexes (mixed strategy equilibrium)
Robust portfolio optimization (minimize maximum loss)
Production planning (maximize minimum profit)
Security resource allocation (defender-attacker game)
Advertising competition (market share game)
SciPy Integration Examples ā
scipy_optimization - Advanced optimization with SciPy:
Nonlinear portfolio optimization with quadratic risk models
Statistical parameter estimation (distribution fitting with constraints)
Signal processing optimization (FIR filter design)
Hybrid CSP-SciPy facility location (discrete + continuous optimization)
Numerical integration in optimization objectives
Classic Math Problems ā
classic_problems - Educational math problem solving:
24-Point Game (arithmetic expressions to reach 24)
Chicken-Rabbit Problem (classic constraint satisfaction)
4Ć4 Mini Sudoku (simplified CSP demonstration)
4-Queens Problem (educational N-Queens variant)
0-1 Knapsack Problem (classic optimization)
Supported Problem Types
š§© CSP Problems
N-Queens: Classic N-Queens problem for any board size (N=4 to N=100+)
Graph Coloring: Vertex coloring for arbitrary graphs (triangle, Petersen, wheel, etc.)
Map Coloring: Geographic region coloring (Australia, USA, Europe maps)
Sudoku: Standard 9Ć9 Sudoku puzzles with constraint propagation
Logic Puzzles: Einstein's Zebra puzzle and custom logical reasoning problems
Scheduling: Course scheduling, meeting rooms, resource allocation with time constraints
š Optimization Problems
Linear Programming: Continuous variable optimization with linear constraints
Integer Programming: Discrete variable optimization (production quantities, assignments)
Mixed Integer Programming: Combined continuous and discrete variables
Production Planning: Multi-product resource-constrained optimization
Portfolio Optimization: Investment allocation with risk and return constraints
Transportation: Supply chain optimization (warehouses to customers)
š² Game Theory & Robust Optimization
Zero-Sum Games: Rock-Paper-Scissors, Matching Pennies, Battle of Sexes
Mixed Strategy Nash Equilibria: Optimal probabilistic strategies for both players
Minimax Decisions: Minimize worst-case loss across uncertainty scenarios
Maximin Decisions: Maximize worst-case gain (conservative strategies)
Robust Portfolio: Minimize maximum loss across market scenarios
Security Games: Defender-attacker resource allocation problems
š¬ SciPy-Powered Advanced Optimization
Nonlinear Portfolio Optimization: Quadratic risk models with Sharpe ratio maximization
Statistical Parameter Estimation: MLE and quantile-based distribution fitting with constraints
Signal Processing: FIR filter design with frequency response optimization
Hybrid Optimization: Combine Gurddy CSP with SciPy continuous optimization
Numerical Integration: Optimization problems involving complex mathematical functions
š§® Classic Educational Problems
24-Point Game: Find arithmetic expressions using four numbers to reach 24
Chicken-Rabbit Problem: Classic constraint satisfaction with heads and legs
Mini Sudoku: 4Ć4 Sudoku solving using CSP techniques
N-Queens Variants: Educational versions of the classic problem
Knapsack Problems: 0-1 knapsack optimization with weight and value constraints
Performance Features
Fast Solution: Millisecond response for small-medium problems (N-Queens Nā¤12, graphs <50 vertices)
Scalable: Handles large problems (N-Queens N=100+, LP with 1000+ variables)
Memory Efficient: Backtracking search and constraint propagation minimize memory usage
Extensible: Custom constraints, objective functions, and problem types
Concurrency-Safe: HTTP API supports concurrent request processing
Production Ready: Docker deployment, health checks, error handling
Performance Benchmarks
Typical execution times on standard hardware:
CSP Examples: 0.4-0.5s (N-Queens, Graph Coloring, Logic Puzzles)
LP Examples: 0.8-0.9s (Portfolio, Transportation, Production Planning)
Minimax Examples: 0.3-0.5s (Game solving, Robust optimization)
SciPy Examples: 0.5-1.2s (Nonlinear optimization, Statistical fitting)
Classic Problems: 0.1-0.3s (24-point, Chicken-rabbit, Mini sudoku)
Sudoku: <0.1s for standard 9Ć9 puzzles
Large N-Queens: ~2-3s for N=100
Troubleshooting
Common Errors
"gurddy package not available": Install withpython -m mcp_server.server install"No solution found": No solution exists under given constraints; try relaxing constraints"Invalid input types": Check the data types of input parameters"Unknown example": Usepython -m mcp_server.server run-example --helpto see available examples
Installation Issues
Example Debugging
Run examples directly for debugging:
SciPy Integration Requirements
The SciPy integration examples require additional dependencies:
SciPy Examples Include:
Nonlinear Portfolio Optimization: Quadratic risk models with Sharpe ratio maximization
Statistical Parameter Estimation: Distribution fitting with MLE and quantile methods
Signal Processing: FIR filter design with frequency response optimization
Hybrid CSP-SciPy: Facility location combining discrete and continuous optimization
Numerical Integration: Complex optimization problems involving integrals
Development
Architecture
The project uses a centralized tool registry with auto-generated schemas to ensure consistency between stdio and HTTP servers:
Tool Definitions:
mcp_server/tool_definitions.py(basic metadata only)Auto-Generated Registry:
mcp_server/tool_registry.py(schemas generated from function signatures)Stdio Server:
mcp_server/mcp_stdio_server.py(for IDE integration)HTTP Server:
mcp_server/mcp_http_server.py(for web clients)Handlers:
mcp_server/handlers/gurddy.py(tool implementations)Schema Generator:
scripts/generate_registry.py(auto-generates schemas from function signatures)
Adding a New Tool
Implement handler in
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"}Add basic metadata in
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" }Generate schemas and verify:
# Auto-generate schemas from function signatures python scripts/generate_registry.py # Verify consistency python scripts/verify_consistency.py pytest tests/test_consistency.py -v
That's it! The schema is automatically generated from your function's type hints, and both stdio and HTTP servers will pick up the new tool.
Custom Constraints
Testing
License
This project is licensed under an open source license. Please see the LICENSE file for details.
This server cannot be installed