README.md•10.3 kB
# 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