gurddy mcp Server

公式

このリポジトリには、完全に機能するMCP(Model Context Protocol)サーバーが含まれており、制約充足問題(CSP)と線形計画法(LP)のソリューションを提供します。gurddyパッケージに基づいており、さまざまな古典的問題の解決をサポートしています。

ドキュメント

Gurddy MCP サーバー

PyPI version Python Support License: MIT Live Demo

制約充足問題 (CSP)、線形計画法 (LP)、ミニマックス最適化、SciPy を活用した高度な最適化問題を解決するための包括的な Model Context Protocol (MCP) サーバーです。gurddy 最適化ライブラリと SciPy 統合に基づいて構築されており、2 つの MCP トランスポート (stdio: IDE 統合用、ストリーミング可能 HTTP: Web クライアント用) を通じて、さまざまな古典的な問題の解決をサポートします。

🚀 クイックスタート (Stdio): pip install gurddy_mcp の後、IDE で設定してください

🌐 クイックスタート (HTTP): docker run -p 8080:8080 gurddy-mcp またはデプロイガイドを参照してください

📦 PyPI パッケージ: https://pypi.org/project/gurddy_mcp

主な機能

🎯 CSP 問題解決

  • N-クイーン問題: N×N のチェス盤に、互いに攻撃し合わないように N 個のクイーンを配置します
  • グラフ彩色: 隣接する頂点が異なる色になるように頂点に色を割り当てます
  • 地図彩色: 隣接する地域が異なる色になるように地理的な地域を彩色します
  • 数独ソルバー: 標準的な 9×9 の数独パズルを解きます
  • 論理パズル: アインシュタインのゼブラパズルやカスタム論理問題
  • スケジューリング: コーススケジューリング、会議スケジューリング、リソース割り当て
  • 汎用 CSP ソルバー: カスタム制約充足問題をサポート

📊 LP/最適化問題

  • 線形計画法: 線形制約付きの連続変数最適化
  • 混合整数計画法: 整数変数と連続変数を含む最適化
  • 生産計画: 感度分析付きのリソース制約付き生産最適化
  • ポートフォリオ最適化: リスク制約下での投資配分
  • 輸送問題: サプライチェーンとロジスティクスの最適化

🎮 ミニマックス/ゲーム理論

  • ゼロサムゲーム: 2 人ゲーム (じゃんけん、マッチングペニー、男女の争い) を解きます
  • 混合戦略ナッシュ均衡: 最適な確率的戦略を見つけます
  • ロバスト最適化: 不確実性下での最悪ケースの損失を最小化します
  • マキシミン決定: 最悪ケースの利益を最大化します (保守的戦略)
  • セキュリティゲーム: 防御側と攻撃側のリソース配分
  • ロバストポートフォリオ: 市場シナリオ全体で最大損失を最小化します
  • 生産計画: 保守的な生産決定 (最小利益を最大化)
  • 広告競争: 市場シェアゲームと競争戦略

🔬 SciPy 統合

  • 非線形ポートフォリオ最適化: SciPy 最適化を用いた二次リスクモデル
  • 統計的パラメータ推定: 制約付き分布フィッティング (MLE、分位点マッチング)
  • 信号処理最適化: 周波数応答最適化を伴う FIR フィルタ設計
  • ハイブリッド CSP-SciPy: 離散施設選択 + 連続容量最適化
  • 数値積分: 積分や複雑な関数を含む最適化問題

🧮 古典的な数学問題

  • 24 ポイントゲーム: 4 つの数字を使って 24 になる算術式を見つけます
  • 鶏とウサギの問題: 頭数と足数による古典的な制約問題
  • ミニ数独: CSP 技術を用いた 4×4 数独ソルバー
  • 4-クイーン問題: 教育用に簡略化された N-クイーン問題
  • 0-1 ナップサック: 重量と価値の制約がある古典的な最適化問題

🔌 MCP プロトコルサポート

  • Stdio トランスポート: ローカル IDE 統合 (Kiro、Claude Desktop、Cline など)
  • ストリーミング可能 HTTP トランスポート: Web クライアントとリモートアクセス (オプションのストリーミング付き)
  • 統一インターフェース: 両方のトランスポートで同じツールを使用可能
  • 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 コマンドは、Kiro などのツールと統合できる MCP stdio サーバーです。

オプション 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 を使用する理由

  • ✅ 常に最新の公開バージョンを自動的に実行
  • ✅ 手動インストールやアップグレードが不要
  • ✅ 実行ごとに分離された環境
  • ✅ システム 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: 直接コマンドを使用する (インストール後)

pip 経由で gurddy-mcp を既にインストールしている場合:

{
  "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 MCP サーバーの情報と機能を取得します
  • install - gurddy パッケージをインストールまたはアップグレードします
  • run_example - サンプルプログラムを実行します (n_queens、graph_coloring、minimax、scipy_optimization、classic_problems など)
  • solve_n_queens - 任意のボードサイズの N-クイーン問題を解きます
  • solve_sudoku - CSP を使用して 9×9 数独パズルを解きます
  • solve_graph_coloring - 設定可能な色数でグラフ彩色を解きます
  • solve_map_coloring - 地図彩色問題を解きます (例: オーストラリア、アメリカ)
  • solve_lp - 線形計画法 (LP) または混合整数計画法 (MIP) を解きます
  • solve_production_planning - オプションの感度分析付き生産最適化
  • solve_minimax_game - 2 人ゼロサムゲーム (ナッシュ均衡を見つける)
  • solve_minimax_decision - ロバスト最適化 (最大損失の最小化または最小利益の最大化)
  • solve_24_point_game - 4 つの数字と算術演算を使用して 24 ポイントゲームを解きます
  • solve_chicken_rabbit_problem - 頭数と足数の制約がある古典的な鶏とウサギの問題を解きます
  • solve_scipy_portfolio_optimization - SciPy を使用して非線形ポートフォリオ最適化を解きます
  • solve_scipy_statistical_fitting - SciPy を使用して統計的パラメータ推定を解きます
  • solve_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 サーバー

HTTP MCP サーバー (ストリーミング可能 HTTP 経由の MCP プロトコル) を起動します:

ローカル開発:

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 MCP サーバーをテストする:

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"
  }
}

利用可能なサンプル: lpcspn_queensgraph_coloringmap_coloringschedulinglogic_puzzlesoptimized_cspoptimized_lpminimaxscipy_optimizationclassic_problems

solve_n_queens

N-クイーン問題を解きます。

{
  "name": "solve_n_queens",
  "arguments": {
    "n": 8
  }
}

solve_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

PuLP を使用して線形計画法 (LP) または混合整数計画法 (MIP) 問題を解きます。

{
  "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

ミニマックス (ゲーム理論) を使用して 2 人ゼロサムゲームを解きます。

{
  "name": "solve_minimax_game",
  "arguments": {
    "payoff_matrix": [
      [0, -1, 1],
      [1, 0, -1],
      [-1, 1, 0]
    ],
    "player": "row"
  }
}

指定されたプレイヤーの最適混合戦略とゲーム値を返します。

solve_minimax_decision

不確実性下でのミニマックス決定問題 (ロバスト最適化) を解きます。

{
  "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

4 つの数字と算術演算を使用して 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
  }
}

平均分散最適化を使用して、リターンを最大化しリスクペナルティを最小化するようにポートフォリオの重みを最適化します。

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-クイーン問題

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 トランスポート

トランスポートコマンドプロトコルユースケース
Stdiogurddy-mcpstdin/stdout 経由の MCPIDE 統合 (Kiro、Claude Desktop など)
ストリーミング可能 HTTPuvicorn mcp_server.mcp_http_server:appオプションのストリーミング付き HTTP 経由の MCPWeb クライアント、リモートアクセス、Docker デプロイメント

すべてのトランスポートは同じ MCP プロトコルを実装し、同一のツールを提供します。

HTTP トランスポートの機能

HTTP トランスポート (/mcp/http エンドポイント):

  • 単一のリクエスト-レスポンスパターン
  • オプションのストリーミング: Accept: text/event-stream または X-Stream: true ヘッダーを追加
  • 単発のリクエストにシンプル
  • 標準的な HTTP クライアントと互換性あり
  • 管理する接続状態がない
  • 通常の JSON レスポンスと SSE 形式のストリーミングレスポンスの両方をサポート

出力例

N-クイーン問題

$ 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-クイーン問題

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-クイーン問題 (4、6、8 クイーン、ビジュアルボード表示付き)
  • graph_coloring - グラフ彩色 (三角形、四角形、ピーターセングラフ、ホイールグラフ)
  • map_coloring - 地図彩色 (オーストラリア、アメリカ西部の州、ヨーロッパ)
  • scheduling - スケジューリング問題 (コーススケジューリング、会議スケジューリング、リソース割り当て)
  • logic_puzzles - 論理パズル (簡単な論理パズル、アインシュタインのゼブラパズル)
  • optimized_csp - 高度な CSP 技術 (数独ソルバー)

LP サンプル ✅

  • lp / optimized_lp - 線形計画法の例:
    • リスク制約付きポートフォリオ最適化
    • 輸送問題 (サプライチェーン最適化)
    • 制約緩和分析
    • 問題サイズ全体でのパフォーマンス比較

ミニマックスサンプル ✅

  • minimax - ミニマックス最適化とゲーム理論:
    • じゃんけん (ゼロサムゲーム)
    • マッチングペニー (コーディネーションゲーム)
    • 男女の争い (混合戦略均衡)
    • ロバストポートフォリオ最適化 (最大損失の最小化)
    • 生産計画 (最小利益の最大化)
    • セキュリティリソース配分 (防御側-攻撃側ゲーム)
    • 広告競争 (市場シェアゲーム)

SciPy 統合例 ✅

  • scipy_optimization - SciPy を用いた高度な最適化:
    • 二次リスクモデルを用いた非線形ポートフォリオ最適化
    • 統計的パラメータ推定(制約付き分布フィッティング)
    • 信号処理最適化(FIR フィルタ設計)
    • ハイブリッド CSP-SciPy 施設配置(離散最適化と連続最適化の組み合わせ)
    • 最適化目的関数における数値積分

古典的な数学問題 ✅

  • classic_problems - 教育的な数学問題解決:
    • 24 ポイントゲーム(24 に到達する算術式)
    • 鶏と兎の問題(古典的な制約充足)
    • 4×4 ミニ数独(簡略化された CSP のデモ)
    • 4-クイーン問題(教育的な N-クイーンのバリエーション)
    • 0-1 ナップサック問題(古典的最適化)

サポートされている問題タイプ

🧩 CSP 問題

  • N-クイーン: 任意のボードサイズ(N=4 から N=100+)に対する古典的な N-クイーン問題
  • グラフ彩色: 任意のグラフ(三角形、ピーターセン、車輪など)に対する頂点彩色
  • 地図彩色: 地理的な領域の彩色(オーストラリア、アメリカ、ヨーロッパの地図)
  • 数独: 制約伝播を用いた標準的な 9×9 数独パズル
  • 論理パズル: アインシュタインのゼブラパズルとカスタム論理推論問題
  • スケジューリング: 時間制約付きのコーススケジューリング、会議室、リソース割り当て

📈 最適化問題

  • 線形計画法: 線形制約付き連続変数最適化
  • 整数計画法: 離散変数最適化(生産量、割り当て)
  • 混合整数計画法: 連続変数と離散変数の組み合わせ
  • 生産計画: 複数製品のリソース制約付き最適化
  • ポートフォリオ最適化: リスクとリターンの制約付き投資配分
  • 輸送問題: サプライチェーン最適化(倉庫から顧客へ)

🎲 ゲーム理論とロバスト最適化

  • ゼロサムゲーム: じゃんけん、コイン合わせ、男女の争い
  • 混合戦略ナッシュ均衡: 両プレイヤーにとっての最適な確率的戦略
  • ミニマックス決定: 不確実性シナリオ全体で最悪の損失を最小化
  • マキシミン決定: 最悪の利得を最大化(保守的戦略)
  • ロバストポートフォリオ: 市場シナリオ全体で最大損失を最小化
  • セキュリティゲーム: 防御側と攻撃側のリソース割り当て問題

🔬 SciPy を活用した高度な最適化

  • 非線形ポートフォリオ最適化: シャープレシオ最大化を伴う二次リスクモデル
  • 統計的パラメータ推定: 制約付きの MLE および分位点ベースの分布フィッティング
  • 信号処理: 周波数応答最適化を伴う FIR フィルタ設計
  • ハイブリッド最適化: Gurddy CSP と SciPy 連続最適化の組み合わせ
  • 数値積分: 複雑な数学関数を含む最適化問題

🧮 古典的な教育問題

  • 24 ポイントゲーム: 4 つの数字を使って 24 に到達する算術式を見つける
  • 鶏と兎の問題: 頭数と足数による古典的な制約充足
  • ミニ数独: CSP 技術を用いた 4×4 数独の解法
  • N-クイーンのバリエーション: 古典的問題の教育的バージョン
  • ナップサック問題: 重量と価値の制約付き 0-1 ナップサック最適化

パフォーマンス機能

  • 高速求解: 中小規模の問題(N-クイーン N≤12、頂点数 50 未満のグラフ)に対してミリ秒単位の応答
  • スケーラブル: 大規模問題(N-クイーン N=100+、変数 1000+ の LP)を処理
  • メモリ効率: バックトラッキング探索と制約伝播によりメモリ使用量を最小化
  • 拡張可能: カスタム制約、目的関数、問題タイプ
  • 並行処理安全: HTTP API が並行リクエスト処理をサポート
  • 本番環境対応: Docker デプロイ、ヘルスチェック、エラーハンドリング

パフォーマンスベンチマーク

標準的なハードウェアでの典型的な実行時間:

  • CSP 例: 0.4-0.5 秒(N-クイーン、グラフ彩色、論理パズル)
  • LP 例: 0.8-0.9 秒(ポートフォリオ、輸送、生産計画)
  • ミニマックス例: 0.3-0.5 秒(ゲーム解法、ロバスト最適化)
  • SciPy 例: 0.5-1.2 秒(非線形最適化、統計的フィッティング)
  • 古典的問題: 0.1-0.3 秒(24 ポイント、鶏と兎、ミニ数独)
  • 数独: 標準 9×9 パズルで 0.1 秒未満
  • 大規模 N-クイーン: N=100 で約 2-3 秒

トラブルシューティング

一般的なエラー

  • "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 の例に含まれるもの:

  • 非線形ポートフォリオ最適化: シャープレシオ最大化を伴う二次リスクモデル
  • 統計的パラメータ推定: 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 (Web クライアント用)
  • ハンドラ: mcp_server/handlers/gurddy.py (ツール実装)
  • スキーマジェネレータ: scripts/generate_registry.py (関数シグネチャからスキーマを自動生成)

新しいツールの追加

  1. ハンドラを実装 (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"}
    
  2. 基本メタデータを追加 (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"
    }
    
  3. スキーマを生成して検証:

    # 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 ファイルを参照してください。