Skip to content

なぜ MCP が AI 統合の境界なのか?

NENE2 は AI エージェントにデータベースやファイルシステムへの直接アクセスを与えるのではなく、Model Context Protocol(MCP)を通じて統合します。このページではその設計上の決定を説明します。

境界の構造

AI エージェント(Claude、Cursor など)
    │  MCP stdio

local-mcp-server.php          ← NENE2 の MCP サーバー
    │  HTTP

NENE2 API(PSR-7 / OpenAPI)   ← ブラウザが使うのと同じエンドポイント
    │  PDO

データベース

AI エージェントはデータベースに直接到達しません。すべての操作は、リクエストバリデーション・認証・構造化エラーレスポンスを持つドキュメントされた HTTP エンドポイントを通ります。

エージェントにデータベースを直接クエリさせない理由

1. API コントラクトが信頼の源

OpenAPI ドキュメントは、どの操作が存在し、どの入力を受け付け、どの出力を返すかを記述します。SQL クエリはこのコントラクトを迂回します。SQL を書くエージェントは意図した操作のスコープ外のデータに暗黙に触れる可能性があります。

2. 認可は API レイヤーにある

API キー認証・CORS ポリシー・リクエストサイズ制限は PSR-15 ミドルウェアで適用されます。データベースへの直接接続はこれらをすべてスキップします。

3. 構造化エラーがエージェントの回復を助ける

API 呼び出しが失敗した場合、エージェントは機械可読な type と構造化された errors を持つ Problem Details レスポンスを受け取ります。失敗した SQL クエリはエージェントがパースまたは無視しなければならないデータベースエラー文字列を返します。

4. 同じエンドポイントがすべてのクライアントに対応

MCP サーバーはブラウザ・テストスイート・curl コマンドと同じルートを呼び出します。つまり:

  • OpenAPI テストが MCP から到達可能な動作を検証する
  • リクエストログが人間のリクエストと並んで MCP 操作をキャプチャする
  • MCP パスに個別のデータベーステストサーフェスが不要

なぜ特に MCP なのか

MCP はクライアントエコシステムが成長しているオープンプロトコルです(Claude・Cursor・Zed・VS Code など)。独自の AI 統合ではなく MCP を実装することで、変更なしに同じ local-mcp-server.php がクライアント間で動作します。

MCP サーバーは HTTP サーバーではなく stdio プロセスです。これは開放ポートがないことを意味し、開発マシンの外から誤って到達されることがありません。

ツールの安全レベル

NENE2 の MCP ツールには明示的な安全レベルがあります。

レベル要件
readgetHealthgetNoteAPI キー以上は不要
writecreateNoteupdateNote同上
admin仮想的なロール変更明示的な確認ステップ
destructiveバッチ削除ローカル開発スコープ外

read ツールから始めて、明示的にスコープが定まった場合にのみ write ツールを追加することで、エージェントが意図しない状態変更を行うリスクを減らします。

関連ドキュメント

  • docs/integrations/mcp-tools.md — ツールカタログポリシー
  • docs/integrations/local-mcp-server.md — ローカルサーバーの起動
  • docs/mcp/tools.json — 現在のツール定義

MIT ライセンスの下で公開されています。