さくらのレンタルサーバ、WordPress mu-plugin で MCP サーバー構築を実現──共用環境での ChatGPT アプリ審査通過と日本語クエリの罠を回避
専用インフラ不要で既存の WordPress 環境から MCP サーバーを公開し、独自の日本語クエリ解析で AI の検索取りこぼしを防ぐ実装手法。
リリース: 2026-08-01 · 読了 4 分記事の要約
1. 核心(What)
- さくらのレンタルサーバの共用環境と WordPress の mu-plugin 機能を利用して、追加の常駐プロセスなしで MCP プロトコル(2025-06-18)に準拠したエンドポイントを構築した。
- ChatGPT アプリの審査要件である .well-known の所有権確認ファイル応答や annotations (title, readOnlyHint, destructiveHint) の定義を実装に組み込んだ。
- 空白区切りで 0 件となった場合に備え、助詞で文字列が破損しないよう「索引側の語をクエリ文から検索する」逆引きマッチングロジックを PHP で実装した。
- PHP が手元にない環境でのリスクを避けるため、Python による簡易構文チェッカーと実データ 842 車種を用いたテストを事前に実施した。
2. 影響(Why)
- 共用サーバにおけるインフラ最適化: 常駐プロセスを立てられない共用レンタルサーバでも、WordPress の mu-plugin と REST API ルート登録を使うことで、専用インフラの追加投資なしでセキュアな MCP サーバーを運用できる。
- 日本語クエリの誤判定防止: AI から渡される複合的な日本語クエリを単純に分割すると検索語が破壊される問題を、辞書と索引をベースにした逆引き方式で解決し、AI が別情報を返してしまうリスクを防いだ。
3. 根拠・詳細(How)
- mu-plugin によるファイル設置と WAF 回避: 管理画面からのコード保存時にさくらのレンタルサーバの WAF が script タグを含む POST を 403 で弾く問題を回避するため、wp-content/mu-plugins/ に直接 PHP ファイルを配置する方式を採用した。
- 逆引きマッチングとクラス変換のアルゴリズム: クエリを分解せず、別名辞書・実在名称・英字・排気量の 4 種類の手がかりをユーザーの入力文から直接探し、ヒットした要素のみを AND 条件として残すことで誤爆を抑制している。
- Python による構文検証と自動テスト: 手元に PHP 環境がない制約の中、文字列リテラルや括弧の対応を検証する Python 製の簡易構文チェッカーと 25 パターンのロジックテストを組み合わせて本番障害を防止した。
4. 展望・課題(Next)
- 取りこぼしパターンの継続的な改善: 検索結果が 0 件になった際に AI が外部の不正確な情報で補う挙動を防ぐため、実際の利用ログに基づいた取りこぼしパターンのテストと辞書データの拡充を継続する。
- クライアント側メンション仕様の周知: ChatGPT 等のクライアント側でメッセージの先頭に @ メンションを指定しないとツールが呼ばれない仕様について、利用者向け解説ページでの案内を徹底する。