Skip to main content
Glama
Constrained Optimization MCP Server

Constrained Optimization MCP Server

Constrained Optimization MCP Server

A general-purpose Model Context Protocol (MCP) server for solving combinatorial optimization problems with logical and numerical constraints. This server provides a unified interface to multiple optimization solvers, enabling AI assistants to solve complex optimization problems across various domains.

๐Ÿš€ Features

  • Unified Interface: Single MCP server for multiple optimization backends

  • AI-Ready: Designed for use with AI assistants through MCP protocol

  • Portfolio Focus: Specialized tools for portfolio optimization and risk management

  • Extensible: Modular design for easy addition of new solvers

  • High Performance: Optimized for large-scale problems

  • Robust: Comprehensive error handling and validation

Related MCP server: Gurddy MCP Server

๐Ÿ› ๏ธ Supported Solvers

  • Z3 - SMT solver for constraint satisfaction problems

  • CVXPY - Convex optimization solver

  • HiGHS - Linear and mixed-integer programming solver

  • OR-Tools - Constraint programming solver

๐Ÿ“ฆ Installation

# Install the package
pip install constrained-opt-mcp

# Or install from source
git clone https://github.com/your-org/constrained-opt-mcp
cd constrained-opt-mcp
pip install -e .

๐Ÿ“ Mathematical Foundations

Optimization Theory

The Constrained Optimization MCP Server implements solutions for various classes of optimization problems:

Linear Programming (LP)

$$\min_{x} c^T x \quad \text{subject to} \quad Ax \leq b, \quad x \geq 0$$

Quadratic Programming (QP)

$$\min_{x} \frac{1}{2}x^T Q x + c^T x \quad \text{subject to} \quad Ax \leq b, \quad x \geq 0$$

Convex Optimization

$$\min_{x} f(x) \quad \text{subject to} \quad g_i(x) \leq 0, \quad h_j(x) = 0$$

Where $f$ and $g_i$ are convex functions.

Constraint Satisfaction Problems (CSP)

Find $x \in \mathcal{D}$ such that $C_1(x) \land C_2(x) \land \ldots \land C_k(x)$

Portfolio Optimization (Markowitz)

$$\max_{w} \mu^T w - \frac{\lambda}{2} w^T \Sigma w \quad \text{subject to} \quad \sum_{i=1}^{n} w_i = 1, \quad w_i \geq 0$$

Where:

  • $w$: portfolio weights

  • $\mu$: expected returns

  • $\Sigma$: covariance matrix

  • $\lambda$: risk aversion parameter

Solver Capabilities

Problem Type

Solver

Complexity

Mathematical Form

Constraint Satisfaction

Z3

NP-Complete

Logical constraints

Convex Optimization

CVXPY

Polynomial

Convex functions

Linear Programming

HiGHS

Polynomial

Linear constraints

Constraint Programming

OR-Tools

NP-Complete

Discrete domains

๐Ÿš€ Quick Start

1. Run Examples

# Run individual examples
python examples/nqueens.py
python examples/knapsack.py
python examples/portfolio_optimization.py
python examples/job_shop_scheduling.py
python examples/nurse_scheduling.py
python examples/economic_production_planning.py

# Run interactive notebook
jupyter notebook examples/constrained_optimization_demo.ipynb

2. Start the MCP Server

constrained-opt-mcp

3. Connect from AI Assistant

Add the server to your MCP configuration:

{
  "mcpServers": {
    "constrained-opt-mcp": {
      "command": "constrained-opt-mcp",
      "args": []
    }
  }
}

4. Use the Tools

The server provides the following tools:

  • solve_constraint_satisfaction - Solve logical constraint problems

  • solve_convex_optimization - Solve convex optimization problems

  • solve_linear_programming - Solve linear programming problems

  • solve_constraint_programming - Solve constraint programming problems

  • solve_portfolio_optimization - Solve portfolio optimization problems

๐Ÿ“š Examples

Constraint Satisfaction Problem

# Solve a simple arithmetic constraint problem
variables = [
    {"name": "x", "type": "integer"},
    {"name": "y", "type": "integer"},
]
constraints = [
    "x + y == 10",
    "x - y == 2",
]

# Result: x=6, y=4

Portfolio Optimization

# Optimize portfolio allocation
assets = ["Stocks", "Bonds", "Real Estate", "Commodities"]
expected_returns = [0.10, 0.03, 0.07, 0.06]
risk_factors = [0.15, 0.03, 0.12, 0.20]
correlation_matrix = [
    [1.0, 0.2, 0.6, 0.3],
    [0.2, 1.0, 0.1, 0.05],
    [0.6, 0.1, 1.0, 0.25],
    [0.3, 0.05, 0.25, 1.0],
]

# Result: Optimal portfolio weights and performance metrics

Linear Programming

# Production planning problem
sense = "maximize"
objective_coeffs = [3.0, 2.0]  # Profit per unit
variables = [
    {"name": "product_a", "lb": 0, "ub": None, "type": "cont"},
    {"name": "product_b", "lb": 0, "ub": None, "type": "cont"},
]
constraint_matrix = [
    [2, 1],  # Labor: 2*A + 1*B <= 100
    [1, 2],  # Material: 1*A + 2*B <= 80
]
constraint_senses = ["<=", "<="]
rhs_values = [100.0, 80.0]

# Result: Optimal production quantities

Portfolio Examples

  • Portfolio Optimization - Advanced portfolio optimization strategies including Markowitz, Black-Litterman, and ESG-constrained optimization

  • Risk Management - Risk management strategies including VaR optimization, stress testing, and hedging

Enhanced Portfolio Optimization Features

Equity Portfolio Optimization:

  • Sector diversification constraints (max 25% per sector)

  • Market cap constraints (large, mid, small cap allocations)

  • ESG (Environmental, Social, Governance) constraints

  • Liquidity requirements and individual position limits

  • Risk-return optimization with advanced metrics

Multi-Asset Portfolio Optimization:

  • Asset class constraints (equity, fixed income, alternatives, cash)

  • Regional exposure limits (developed vs emerging markets)

  • Alternative investment constraints (commodities, real estate, private equity)

  • Dynamic rebalancing and risk budgeting

  • Multi-period optimization with transaction costs

Advanced Risk Metrics:

  • Value at Risk (VaR) and Conditional VaR (CVaR)

  • Maximum Drawdown and Tail Risk

  • Factor exposure analysis and risk attribution

  • Stress testing and scenario analysis

  • Correlation and concentration risk management

Comprehensive Examples

๐ŸŽฏ Combinatorial Optimization

๐Ÿญ Scheduling & Operations

๐Ÿ“Š Quantitative Economics & Finance

๐Ÿงฎ Interactive Learning

๐Ÿงช Testing

Run the comprehensive test suite:

# Run all tests
pytest

# Run specific test categories
pytest tests/test_z3_solver.py
pytest tests/test_cvxpy_solver.py
pytest tests/test_highs_solver.py
pytest tests/test_ortools_solver.py
pytest tests/test_mcp_server.py

# Run with coverage
pytest --cov=constrained_opt_mcp

๐Ÿ“– Documentation

๐Ÿ—๏ธ Architecture

Core Components

  1. Core Models (constrained_opt_mcp/core/) - Base classes and problem types

  2. Solver Models (constrained_opt_mcp/models/) - Problem-specific model definitions

  3. Solvers (constrained_opt_mcp/solvers/) - Solver implementations

  4. MCP Server (constrained_opt_mcp/server/) - MCP server implementation

  5. Examples (constrained_opt_mcp/examples/) - Usage examples and demos

Supported Problem Types

Problem Type

Solver

Use Cases

Constraint Satisfaction

Z3

Logic puzzles, verification, planning

Convex Optimization

CVXPY

Portfolio optimization, machine learning

Linear Programming

HiGHS

Production planning, resource allocation

Constraint Programming

OR-Tools

Scheduling, assignment, routing

Portfolio Optimization

Multiple

Risk management, portfolio construction

๐Ÿค Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests for new functionality

  5. Run the test suite

  6. Submit a pull request

๐Ÿ“„ License

This project is licensed under the Apache License 2.0. See the LICENSE file for details.

๐Ÿ†˜ Support

For questions, issues, or contributions, please:

  1. Check the documentation

  2. Search existing issues

  3. Create a new issue

  4. Join our discussions

๐Ÿ“ˆ Changelog

Version 1.0.0

  • Initial release

  • Support for Z3, CVXPY, HiGHS, and OR-Tools

  • Portfolio optimization examples

  • Comprehensive test suite

  • MCP server implementation

Available Tools

5 tools
solve_constraint_programmingA
Solve constraint programming problems using OR-Tools.

This tool is ideal for combinatorial optimization problems, scheduling,
assignment problems, and constraint satisfaction with discrete variables.

Args:
    variables: List of variable definitions with 'name', 'type', and optional 'domain'/'shape'
    constraints: List of constraint expressions as strings
    objective: Optional objective definition with 'type' and 'expression'
    parameters: Dictionary of solver parameters
    description: Optional problem description
    
Returns:
    Solution results including variable values and feasibility status
    
Example:
    variables = [
        {"name": "x", "type": "integer", "domain": [0, 10]},
        {"name": "y", "type": "boolean"}
    ]
    constraints = [
        "x + y >= 5",
        "x - y <= 3"
    ]
    objective = {"type": "minimize", "expression": "x + y"}

Inputs: variables (required), constraints (required), objective, parameters, +1 more.

solve_constraint_satisfactionB
Solve constraint satisfaction problems using Z3 SMT solver.

This tool is ideal for logical reasoning, puzzle solving, and constraint satisfaction
problems where you need to find values that satisfy a set of logical constraints.

Args:
    variables: List of variable definitions with 'name' and 'type' fields
    constraints: List of constraint expressions as strings
    description: Optional problem description
    timeout: Optional timeout in milliseconds
    
Returns:
    Solution results including variable values and satisfiability status
    
Example:
    variables = [
        {"name": "x", "type": "integer"},
        {"name": "y", "type": "integer"}
    ]
    constraints = [
        "x + y == 10",
        "x - y == 2"
    ]

Inputs: variables (required), constraints (required), description, timeout.

solve_convex_optimizationA
Solve convex optimization problems using CVXPY.

This tool is ideal for mathematical optimization problems with convex objectives
and constraints, including linear programming, quadratic programming, and
semidefinite programming.

Args:
    variables: List of variable definitions with 'name' and 'shape'
    objective_type: Either 'minimize' or 'maximize'
    objective_expr: The objective function expression as a string
    constraints: List of constraint expressions as strings
    parameters: Dictionary of parameter values (e.g., matrices A, b)
    description: Optional problem description
    
Returns:
    Solution results including variable values and objective value
    
Example:
    variables = [{"name": "x", "shape": 2}]
    objective_type = "minimize"
    objective_expr = "cp.sum_squares(x)"
    constraints = ["x >= 0", "cp.sum(x) == 1"]

Inputs: variables (required), objective_type (required), objective_expr (required), constraints (required), +2 more.

solve_linear_programmingA
Solve linear and mixed-integer programming problems using HiGHS.

This tool is ideal for linear programming, mixed-integer linear programming,
and large-scale optimization problems with linear constraints.

Args:
    sense: Optimization sense, either "minimize" or "maximize"
    objective_coeffs: List of objective function coefficients
    variables: List of variable definitions with optional bounds and types
    constraint_matrix: 2D list representing the constraint matrix (dense format)
    constraint_senses: List of constraint directions ("<=", ">=", "=")
    rhs_values: List of right-hand side values for constraints
    options: Optional solver options dictionary
    description: Optional problem description
    
Returns:
    Solution results including variable values and objective value
    
Example:
    sense = "minimize"
    objective_coeffs = [1.0, 2.0, 3.0]
    variables = [
        {"name": "x1", "lb": 0, "ub": 10, "type": "cont"},
        {"name": "x2", "lb": 0, "ub": None, "type": "int"},
        {"name": "x3", "lb": 0, "ub": 1, "type": "bin"}
    ]
    constraint_matrix = [[1, 1, 0], [0, 1, 1]]
    constraint_senses = ["<=", ">="]
    rhs_values = [5, 3]

Inputs: sense (required), objective_coeffs (required), variables (required), constraint_matrix (required), +4 more.

solve_portfolio_optimizationA
Solve portfolio optimization problems using modern portfolio theory.

This tool implements Markowitz mean-variance optimization to find optimal
asset allocations that maximize expected return while constraining risk.

Args:
    assets: List of asset names
    expected_returns: List of expected returns for each asset
    risk_factors: List of risk factors (standard deviations) for each asset
    correlation_matrix: Correlation matrix between assets
    max_allocations: Optional maximum allocation limits for each asset
    risk_budget: Optional maximum portfolio risk (variance)
    description: Optional problem description
    
Returns:
    Optimal portfolio weights and performance metrics
    
Example:
    assets = ["Bonds", "Stocks", "RealEstate", "Commodities"]
    expected_returns = [0.08, 0.12, 0.10, 0.15]
    risk_factors = [0.02, 0.15, 0.08, 0.20]
    correlation_matrix = [[1.0, 0.2, 0.3, 0.1], [0.2, 1.0, 0.6, 0.7], ...]
    max_allocations = [0.4, 0.6, 0.3, 0.2]
    risk_budget = 0.01

Inputs: assets (required), expected_returns (required), risk_factors (required), correlation_matrix (required), +3 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelogโ€ฆ

    TDQS

    A3.8/5.0

    Scored across 5 tools

    Disambiguation4/5

    Each tool targets a distinct optimization paradigm or solver (OR-Tools, Z3, CVXPY, HiGHS, Markowitz), but there is slight overlap between constraint programming and constraint satisfaction, and convex optimization encompasses linear programming. Descriptions clarify differences.

    Naming Consistency5/5

    All tools follow the consistent pattern 'solve_<descriptive_noun>', using snake_case and clear terminology for the optimization type.

    Tool Count5/5

    With 5 tools covering major constrained optimization paradigms, the count is well-scoped for the server's purpose. It covers a broad range without being overwhelming.

    Completeness4/5

    The set covers constraint programming, satisfaction, convex, linear, and portfolio optimization. Missing non-convex nonlinear optimization and stochastic optimization, but major paradigms are present.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables solving linear programming (LP) and mixed-integer linear programming (MILP) optimization problems through natural language, with built-in simplex and branch-and-cut solvers plus infeasibility diagnostics. Includes optional OR-Tools fallback for larger problems and supports parsing optimization problems from natural language descriptions.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables solving Constraint Satisfaction Problems (CSP) like N-Queens, graph coloring, and Sudoku, as well as Linear Programming optimization problems through both MCP tools and HTTP API endpoints.
      2
      MIT
    • A
      license
      A
      quality
      F
      maintenance
      Provides constraint satisfaction and optimization capabilities to LLMs and AI agents for scheduling, resource allocation, routing, budget optimization, and configuration problems using Google OR-Tools CP-SAT solver.
      5
      6
      Apache 2.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides linear programming (LP), mixed-integer programming (MIP), and quadratic programming (QP) optimization capabilities using the HiGHS solver, enabling AI assistants to solve complex optimization problems like production planning, logistics, and portfolio optimization.
      26 npm
      17
      MIT