Skip to main content
Glama
sengokusal2025

f0_make_randomvalues MCP Server

README.md
# f0_make_randomvalues MCP Server

FGDB(Functional Graph Database)システムの `f0_make_randomvalues` 関数ブロックを、Model Context Protocol (MCP) サーバーとして実装したものです。

## 概要

このMCPサーバーは、乱数生成機能をClaude DesktopやClaude Codeなどのクライアントアプリケーションに提供します。

### 主な機能

- **乱数生成**: 指定された範囲とパラメータで乱数を生成
- **データ保存**: 生成した乱数をCSVファイルに保存
- **統計分析**: データの統計的特性を分析
- **データ読み込み**: 保存されたCSVファイルからデータを読み込み
- **リソースアクセス**: URI経由でデータやメタデータにアクセス
- **プロンプトテンプレート**: 一般的なワークフロー用のインタラクティブプロンプト

## システム要件

- Python 3.8以上
- uv(推奨)またはpip
- Claude DesktopまたはClaude Code(MCPクライアントとして)

## インストール

### 1. uvを使った環境構築

#### uvのインストール

**Windows (PowerShell):**
```powershell
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
```

**macOS/Linux:**
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```

#### プロジェクトのセットアップ

```bash
# プロジェクトディレクトリに移動
cd /path/to/f0_ws

# 仮想環境の作成と依存関係のインストール
uv venv
uv pip install -r requirements.txt
```

### 2. pipを使った環境構築(代替方法)

```bash
# 仮想環境の作成
python -m venv venv

# 仮想環境の有効化
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate

# 依存関係のインストール
pip install -r requirements.txt
```

## 設定

### Claude Desktopでの設定

#### 設定ファイルの場所

**macOS:**
```
~/Library/Application Support/Claude/claude_desktop_config.json
```

**Windows:**
```
%APPDATA%\Claude\claude_desktop_config.json
```

#### 設定内容

`claude_desktop_config.json` に以下を追加:

```json
{
  "mcpServers": {
    "f0_random": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\Users\\sengo\\Dropbox (旧)\\Dropbox\\FGDB\\workspace\\f0_ws\\mcp",
        "run",
        "python",
        "server.py"
      ],
      "env": {
        "PYTHONPATH": "C:\\Users\\sengo\\Dropbox (旧)\\Dropbox\\FGDB\\workspace\\f0_ws\\mcp"
      }
    }
  }
}
```

**注意**: パスは実際のインストール先に合わせて変更してください。

**macOS/Linuxの例:**
```json
{
  "mcpServers": {
    "f0_random": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/f0_ws/mcp",
        "run",
        "python",
        "server.py"
      ],
      "env": {
        "PYTHONPATH": "/absolute/path/to/f0_ws/mcp"
      }
    }
  }
}
```

### Claude Codeでの設定

Claude Codeの設定は、Claude Desktopと同じ設定ファイルを共有します。

#### 設定手順

1. **設定ファイルを開く**
   - Claude Code内で設定メニューを開く
   - MCP設定セクションに移動

2. **サーバーを追加**
   上記のClaude Desktop設定と同じJSON設定を追加

3. **再起動**
   Claude Codeを再起動して設定を反映

## 使い方

### 基本的な使用例

#### 1. 乱数を生成する

```
Claude Desktop/Codeで:
「10個の乱数を生成してください」
```

MCPサーバーが `generate_random_numbers` ツールを使用して乱数を生成します。

#### 2. データを保存する

```
「生成した乱数をtest_data.csvに保存してください」
```

#### 3. 統計分析を実行する

```
「データの統計分析を行ってください」
```

#### 4. リソースにアクセスする

```
「現在のデータを確認してください」
```

サーバーが `random://current` リソースにアクセスします。

### 利用可能なツール

#### generate_random_numbers

乱数を生成します。

**パラメータ:**
- `count` (int): 生成する乱数の個数(デフォルト: 5)
- `min_value` (int): 最小値(デフォルト: 0)
- `max_value` (int): 最大値(デフォルト: 999)
- `seed` (int, optional): 乱数シード(再現性のため)

**戻り値:**
```json
{
  "numbers": [404, 971, 885, ...],
  "count": 10,
  "min_value": 0,
  "max_value": 999,
  "timestamp": "2025-10-02T12:34:56.789012",
  "seed": null
}
```

#### save_random_data

乱数データをCSVファイルに保存します。

**パラメータ:**
- `numbers` (List[int]): 保存する整数のリスト
- `filename` (str): 出力ファイル名(デフォルト: "data.csv")

#### analyze_random_data

データの統計分析を実行します。

**パラメータ:**
- `numbers` (List[int]): 分析する整数のリスト

**戻り値:**
```json
{
  "mean": 615.7,
  "median": 618.0,
  "std_dev": 234.5,
  "variance": 55010.25,
  "min": 328,
  "max": 971,
  "count": 10,
  "sum": 6157,
  "range": 643
}
```

#### load_data_from_csv

CSVファイルからデータを読み込みます。

**パラメータ:**
- `filename` (str): 読み込むCSVファイル名

#### write_function_notation

FGDB関数記法をファイルに書き込みます。

**パラメータ:**
- `filename` (str): 出力ファイル名(デフォルト: "func.txt")

### 利用可能なリソース

#### random://current

最後に生成された乱数データを取得します。

#### file://data/{filename}

保存されたCSVファイルからデータを読み込みます。

例: `file://data/test_data.csv`

#### meta://statistics

現在のデータの統計メタデータを取得します。

#### meta://files

データディレクトリ内の全ファイルをリストアップします。

#### meta://server-info

サーバー情報と機能一覧を取得します。

### プロンプトテンプレート

#### Generate Test Dataset

テストデータセットを生成するためのガイド付きプロンプト。

**パラメータ:**
- `purpose`: データセットの目的(デフォルト: "testing")
- `size`: サイズ - "small"(10), "medium"(100), "large"(1000)

#### Analyze Random Data

データ分析のためのステップバイステップガイド。

**パラメータ:**
- `data_source`: "current"または保存されたファイル名

#### Create Reproducible Dataset

シードを使用して再現可能なデータセットを作成。

**パラメータ:**
- `seed`: 乱数シード(デフォルト: 42)
- `count`: 生成する値の数(デフォルト: 100)

#### Batch Data Generation

複数バッチのデータを生成するワークフロー。

**パラメータ:**
- `num_batches`: バッチ数(デフォルト: 5)
- `batch_size`: 各バッチのサイズ(デフォルト: 20)

#### Data Quality Check

データ品質チェックを実行するガイド。

**パラメータ:**
- `filename`: チェックするCSVファイル(デフォルト: "data.csv")

## 開発とデバッグ

### デバッグモードでの実行

```bash
cd mcp
uv run python server.py --debug
```

### MCPインスペクターの使用

MCPインスペクターを使用してサーバーをテストできます:

```bash
npx @modelcontextprotocol/inspector uv --directory ./mcp run python server.py
```

### ログの確認

**macOS:**
```bash
tail -f ~/Library/Logs/Claude/mcp-server-f0_random.log
```

**Windows:**
```powershell
Get-Content "$env:APPDATA\Claude\Logs\mcp-server-f0_random.log" -Wait
```

## プロジェクト構造

```
f0_ws/
├── mcp/                      # MCPサーバー実装
│   ├── server.py            # メインサーバー
│   ├── models.py            # Pydanticデータモデル
│   ├── tools.py             # ツール実装
│   ├── resources.py         # リソースハンドラー
│   ├── prompts.py           # プロンプトテンプレート
│   └── data/                # データ保存ディレクトリ
├── f0_make_randomvalues/    # オリジナルの関数ブロック
│   ├── func.py
│   └── lib.py
├── requirements.txt         # Python依存関係
├── README.md               # このファイル
└── mcp_specification.md    # 技術仕様書
```

## トラブルシューティング

### サーバーが起動しない

1. **Pythonバージョンを確認**
   ```bash
   python --version  # 3.8以上が必要
   ```

2. **依存関係を再インストール**
   ```bash
   uv pip install -r requirements.txt --force-reinstall
   ```

3. **パス設定を確認**
   設定ファイルのパスが絶対パスで正しいか確認

### ツールが見つからない

1. **Claude Desktop/Codeを再起動**

2. **設定ファイルの文法を確認**
   JSONが正しい形式か確認(カンマ、括弧など)

3. **サーバーログを確認**
   エラーメッセージを確認

### データが保存されない

1. **書き込み権限を確認**
   ```bash
   # macOS/Linux
   ls -la mcp/data/

   # Windows
   icacls mcp\data
   ```

2. **ディレクトリが存在するか確認**
   ```bash
   # 必要に応じて作成
   mkdir -p mcp/data
   ```

## セキュリティ考慮事項

- ファイルアクセスは `./data` ディレクトリ内に制限されています
- パストラバーサル攻撃を防ぐための検証が実装されています
- 許可された拡張子(.csv, .txt, .json)のみアクセス可能です

## ライセンス

このプロジェクトはFGDBシステムの一部です。

## 参考資料

- [Model Context Protocol仕様](https://spec.modelcontextprotocol.io)
- [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk)
- [FastMCP フレームワーク](https://modelcontextprotocol.io/docs/tools/fastmcp)
- [Claude Desktop統合](https://modelcontextprotocol.io/docs/tools/claude-desktop)

## サポート

問題が発生した場合は、以下を確認してください:

1. この README のトラブルシューティングセクション
2. `mcp_specification.md` の技術仕様
3. サーバーログファイル

---

**バージョン**: 1.0.0
**最終更新**: 2025-10-02