🚀 MCP Server Local WP
このプロジェクトは、ClaudeやCursorなどのAIアシスタントに、FlywheelのLocal WordPressデータベースへの直接的な読み取り専用アクセスを提供するModel Context Protocol (MCP)サーバーです。AIが実際のデータを理解できるようになり、テーブル構造の推測やSQLクエリの盲目な記述が不要になります。
🚀 クイックスタート
このMCPサーバーを使用することで、AIアシスタントがあなたのWordPressデータベースを直接参照できるようになります。以下の手順で設定を始めましょう。
✨ 主な機能
- AIアシスタントにWordPressデータベースへの直接的な読み取り専用アクセスを提供
- テーブル構造の推測やSQLクエリの盲目な記述を不要にする
- Local by FlywheelのMySQLインスタンスを自動検出
- 動的なパスやソケット/ポートの設定を自動で処理
📦 インストール
前提条件
クイックセットアップ(推奨)
最も簡単な方法です。インストールは不要です。
Cursor IDEの設定
.cursor/mcp.jsonに以下を追加します。
{
"mcpServers": {
"mcp-local-wp": {
"command": "npx",
"args": [
"-y",
"@verygoodplugins/mcp-local-wp@latest"
]
}
}
}
Claude Desktopの設定
以下のファイルに以下を追加します。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\\Claude\\claude_desktop_config.json
{
"mcpServers": {
"mcp-local-wp": {
"command": "npx",
"args": [
"-y",
"@verygoodplugins/mcp-local-wp@latest"
]
}
}
}
高度なセットアップ(ローカル開発)
カスタマイズやローカル開発のための手順です。
ソースからインストール
git clone https://github.com/verygoodplugins/mcp-local-wp.git
cd mcp-local-wp
npm install
npm run build
ローカル設定
{
"mcpServers": {
"mcp-local-wp": {
"command": "node",
"args": [
"/full/path/to/mcp-local-wp/dist/index.js"
]
}
}
}
カスタム環境変数
非Local環境やカスタム設定のための手順です。
{
"mcpServers": {
"mcp-local-wp": {
"command": "npx",
"args": [
"-y",
"@verygoodplugins/mcp-local-wp@latest"
],
"env": {
"MYSQL_DB": "local",
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASS": "root"
}
}
}
}
💻 使用例
最近の投稿を取得
SELECT ID, post_title, post_date, post_status
FROM wp_posts
WHERE post_type = 'post' AND post_status = 'publish'
ORDER BY post_date DESC
LIMIT 5;
データベース構造を探索
SHOW TABLES;
DESCRIBE wp_posts;
SHOW TABLE STATUS LIKE 'wp_%';
WordPress固有のクエリ
SELECT option_name, option_value
FROM wp_options
WHERE option_name IN ('blogname', 'blogdescription', 'admin_email');
SELECT option_value
FROM wp_options
WHERE option_name = 'active_plugins';
SELECT user_login, user_email, display_name
FROM wp_users
LIMIT 10;
SELECT p.post_title, pm.meta_key, pm.meta_value
FROM wp_posts p
JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = 'post' AND pm.meta_key = '_edit_last';
📚 ドキュメント
利用可能なツール
mysql_query
Local WordPressデータベースに対して読み取り専用のSQLを実行します。
入力フィールド:
sql (文字列): 単一の読み取り専用ステートメント (SELECT/SHOW/DESCRIBE/EXPLAIN)
params (文字列配列): ?プレースホルダーのオプションのパラメータ値
使用例:
SELECT * FROM wp_posts WHERE post_status = ? ORDER BY post_date DESC LIMIT ?;
SELECT option_name, option_value FROM wp_options WHERE option_name LIKE '%theme%';
SHOW TABLES;
DESCRIBE wp_users;
mysql_schema
INFORMATION_SCHEMAを使用してデータベーススキーマを調べます。
- 引数なし: 基本的な統計情報付きでテーブルをリスト表示
table引数あり: そのテーブルの列とインデックスを返す
使用例:
{
"tool": "mysql_schema",
"args": {}
}
{
"tool": "mysql_schema",
"args": { "table": "wp_posts" }
}
🔧 技術詳細
Local by Flywheelでの問題解決
元のmcp-server-mysqlをLocal by Flywheelと一緒に使用する際、開発者はいくつかの問題に直面します。
- 動的なパス: Local by Flywheelは各サイトに一意の識別子(
lx97vbzE7など)を生成し、サイトを再起動すると変更されます。
- ソケットとポートの混乱: LocalはUnixソケットとTCPポートの両方を使用しますが、設定が難しい場合があります。
- ハードコードされた設定: ほとんどの設定では、Localを再起動するたびに手動でパスを更新する必要があります。
解決策
このMCPサーバーは、以下の方法でアクティブなLocal by Flywheel MySQLインスタンスを自動検出します。
- プロセス検出: 実行中のプロセスをスキャンして、アクティブな
mysqldインスタンスを見つけます。
- 設定解析: アクティブなLocalサイトからMySQL設定を抽出します。
- 動的接続: 正しいソケットパスまたはポートを自動で使用して接続します。
- フォールバックサポート: 非Local設定の場合は環境変数にフォールバックします。
なぜこのアプローチが有効なのか
✅ 再起動に強い: Local by Flywheelを再起動するたびに機能します。
✅ サイト切り替え: Localサイトを切り替えた場合も自動的に適応します。
✅ メンテナンス不要: パスを手動で更新する必要はありません。
✅ エラーハンドリング: MySQLが実行されていない場合に明確なエラーメッセージを提供します。
取り扱うLocalディレクトリ構造
~/Library/Application Support/Local/run/
├── lx97vbzE7/ # 動的なサイトID(再起動時に変更)
│ ├── conf/mysql/my.cnf # ポート情報を読み取る
│ └── mysql/mysqld.sock # このソケットを介して接続
└── WP7lolWDi/ # 別のサイト(複数実行中の場合)
├── conf/mysql/my.cnf
└── mysql/mysqld.sock
サーバーはアクティブなサイトを自動的に見つけ、正しいMySQLインスタンスに接続します。
📄 ライセンス
GPL-3.0-or-later - 詳細はLICENSEファイルを参照してください。WordPressに特化したツールとして、このツールはコピーレフトの哲学を受け入れ、コミュニティに無料で公開されています。
トラブルシューティング
一般的な問題
- "No active MySQL process found"
- Local by Flywheelが実行されていることを確認してください。
- Localで少なくとも1つのサイトが起動していることを確認してください。
- サイトのデータベースが実行されていることを確認してください。
- "MySQL socket not found"
- Localサイトが完全に起動していることを確認してください。
- Localでサイトを停止して再起動してみてください。
- LocalのログでMySQLの起動問題を確認してください。
- Connection refused
- LocalサイトのMySQLサービスが実行されていることを確認してください。
- 別のプロセスがMySQLポートを使用していないか確認してください。
- Local by Flywheelを再起動してみてください。
- Permission denied
- MySQLソケットファイルが正しいパーミッションを持っていることを確認してください。
- ユーザーがLocalのディレクトリにアクセスできることを確認してください。
手動設定
自動検出が失敗した場合は、手動で接続を設定することができます。
export MYSQL_SOCKET_PATH="/path/to/your/local/site/mysql/mysqld.sock"
export MYSQL_DB="local"
export MYSQL_USER="root"
export MYSQL_PASS="root"
デバッグ
DEBUGを設定することで、デバッグログを有効にします。
DEBUG=mcp-local-wp mcp-local-wp
セキュリティ
- 読み取り専用操作: SELECT/SHOW/DESCRIBE/EXPLAINのみが許可されます。
- 単一ステートメント: 1回の呼び出しで複数のステートメントはブロックされます。
- ローカル開発: ローカル環境(Local by Flywheel)を対象として設計されています。
- 外部接続なし: 利用可能な場合はUnixソケット接続を優先します。
コントリビューション
コントリビューションは大歓迎です!プルリクエストを送信してください。
開発ガイドライン
- リポジトリをフォークします。
- 機能ブランチを作成します:
git checkout -b feature/your-feature-name
- 変更を加え、テストを追加します。
- TypeScriptがコンパイルされることを確認します:
npm run build
- プルリクエストを送信します。
サポート
- GitHub Issues: バグ報告または機能要求
- ドキュメント: このREADMEとコード内のドキュメント
- コミュニティ: Model Context Protocolコミュニティのディスカッションに参加しましょう。
関連プロジェクト
Built with 🧡 by Jack Arturo at Very Good Plugins · Made with love for the open - source community