Skip to main content
Glama

Google OR-Tools server

by Jacck

MCP-ORTools

A Model Context Protocol (MCP) server implementation using Google OR-Tools for constraint solving. Designed for use with Large Language Models through standardized constraint model specification.

Overview

MCP-ORTools integrates Google's OR-Tools constraint programming solver with Large Language Models through the Model Context Protocol, enabling AI models to:

  • Submit and validate constraint models

  • Set model parameters

  • Solve constraint satisfaction and optimization problems

  • Retrieve and analyze solutions

Installation

  1. Install the package:

pip install git+https://github.com/Jacck/mcp-ortools.git
  1. Configure Claude Desktop Create the configuration file at %APPDATA%\Claude\claude_desktop_config.json (Windows) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{ "mcpServers": { "ortools": { "command": "python", "args": ["-m", "mcp_ortools.server"] } } }

Model Specification

Models are specified in JSON format with three main sections:

  • variables: Define variables and their domains

  • constraints: List of constraints using OR-Tools methods

  • objective: Optional optimization objective

Constraint Syntax

Constraints must use OR-Tools method syntax:

  • .__le__() for less than or equal (<=)

  • .__ge__() for greater than or equal (>=)

  • .__eq__() for equality (==)

  • .__ne__() for not equal (!=)

Usage Examples

Simple Optimization Model

{ "variables": [ {"name": "x", "domain": [0, 10]}, {"name": "y", "domain": [0, 10]} ], "constraints": [ "(x + y).__le__(15)", "x.__ge__(2 * y)" ], "objective": { "expression": "40 * x + 100 * y", "maximize": true } }

Knapsack Problem

Example: Select items with values [3,1,2,1] and weights [2,2,1,1] with total weight limit of 2.

{ "variables": [ {"name": "p0", "domain": [0, 1]}, {"name": "p1", "domain": [0, 1]}, {"name": "p2", "domain": [0, 1]}, {"name": "p3", "domain": [0, 1]} ], "constraints": [ "(2*p0 + 2*p1 + p2 + p3).__le__(2)" ], "objective": { "expression": "3*p0 + p1 + 2*p2 + p3", "maximize": true } }

Additional constraints example:

{ "constraints": [ "p0.__eq__(1)", // Item p0 must be selected "p1.__ne__(p2)", // Can't select both p1 and p2 "(p2 + p3).__ge__(1)" // Must select at least one of p2 or p3 ] }

Features

  • Full OR-Tools CP-SAT solver support

  • JSON-based model specification

  • Support for:

    • Integer and boolean variables (domain: [min, max])

    • Linear constraints using OR-Tools method syntax

    • Linear optimization objectives

    • Timeouts and solver parameters

    • Binary constraints and relationships

    • Portfolio selection problems

    • Knapsack problems

Supported Operations in Constraints

  • Basic arithmetic: +, -, *

  • Comparisons: .le(), .ge(), .eq(), .ne()

  • Linear combinations of variables

  • Binary logic through combinations of constraints

Development

To setup for development:

git clone https://github.com/Jacck/mcp-ortools.git cd mcp-ortools pip install -e .

Model Response Format

The solver returns solutions in JSON format:

{ "status": "OPTIMAL", "solve_time": 0.045, "variables": { "p0": 0, "p1": 0, "p2": 1, "p3": 1 }, "objective_value": 3.0 }

Status values:

  • OPTIMAL: Found optimal solution

  • FEASIBLE: Found feasible solution

  • INFEASIBLE: No solution exists

  • UNKNOWN: Could not determine solution

License

MIT License - see LICENSE file for details

-
security - not tested
A
license - permissive license
-
quality - not tested

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jacck/mcp-ortools'

If you have feedback or need assistance with the MCP directory API, please join our Discord server