MCP-ORTools について
MCP-ORTools は、Google OR-Tools による制約ソルバーを LLM から利用できるようにする MCP サーバーです。標準化された JSON 形式で制約モデルを記述し、制約充足問題や最適化問題を解く用途に向けられています。
主な機能
- 01JSON による モデル定義
- 02整数変数とブール変数のサポート
- 03線形制約と線形の目的関数
- 04タイムアウトを指定できる CP-SAT ソルバー
- 05OPTIMAL や INFEASIBLE などのステータス出力
活用シーン
- 01ナップサック問題の求解
- 02制約付きのポートフォリオ選択
- 03排他条件や必須条件を含む組み合わせ最適化
MCP 対応
本プロジェクトは MCP サーバーとして動作し、Claude Desktop などの MCP クライアントに OR-Tools の求解機能を公開します。モデルは JSON で送信され、解は JSON で返されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP-ORTools
制約充足に Google OR-Tools を使用する Model Context Protocol(MCP)サーバー実装です。標準化された制約モデル仕様を通じて、大規模言語モデルでの使用を想定しています。
概要
MCP-ORTools は、Model Context Protocol を通じて Google の OR-Tools 制約プログラミングソルバーと大規模言語モデルを統合し、AI モデルが次のことを行えるようにします。
- 制約モデルの送信と検証
- モデルパラメーターの設定
- 制約充足問題と最適化問題の求解
- 解の取得と分析
インストール
- パッケージをインストールします。
pip install git+https://github.com/Jacck/mcp-ortools.git
- Claude Desktop を設定します
%APPDATA%\Claude\claude_desktop_config.json(Windows)または~/Library/Application Support/Claude/claude_desktop_config.json(macOS)に設定ファイルを作成します。
{
"mcpServers": {
"ortools": {
"command": "python",
"args": ["-m", "mcp_ortools.server"]
}
}
}
モデル仕様
モデルは、次の3つの主要なセクションを含む JSON 形式で指定します。
variables:変数とその定義域を指定しますconstraints:OR-Tools のメソッドを使用した制約の一覧objective:任意の最適化目標
制約の構文
制約では、OR-Tools のメソッド構文を使用する必要があります。
.__le__()は以下(<=)を表します.__ge__()は以上(>=)を表します.__eq__()は等しい(==)を表します.__ne__()は等しくない(!=)を表します
使用例
シンプルな最適化モデル
{
"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
}
}
ナップサック問題
例:[3,1,2,1] の価値と [2,2,1,1] の重さを持つアイテムから、合計重量の上限を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
}
}
追加の制約の例:
{
"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
]
}
機能
- OR-Tools CP-SAT ソルバーを全面的にサポート
- JSON ベースのモデル仕様
- 次の項目をサポート:
- 整数変数とブール変数(定義域:[min, max])
- OR-Tools のメソッド構文を使用した線形制約
- 線形最適化目標
- タイムアウトとソルバーパラメーター
- 二項制約と関係
- ポートフォリオ選択問題
- ナップサック問題
制約でサポートされる操作
- 基本的な算術演算:+, -, *
- 比較:.le(), .ge(), .eq(), .ne()
- 変数の線形結合
- 制約の組み合わせによる二値論理
開発
開発環境をセットアップするには:
git clone https://github.com/Jacck/mcp-ortools.git
cd mcp-ortools
pip install -e .
モデル応答形式
ソルバーは JSON 形式で解を返します。
{
"status": "OPTIMAL",
"solve_time": 0.045,
"variables": {
"p0": 0,
"p1": 0,
"p2": 1,
"p3": 1
},
"objective_value": 3.0
}
ステータスの値:
- OPTIMAL:最適解が見つかりました
- FEASIBLE:実行可能解が見つかりました
- INFEASIBLE:解が存在しません
- UNKNOWN:解を特定できませんでした
ライセンス
MIT License — 詳細は LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。