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 ツールには明示的な安全レベルがあります。

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

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

関連ドキュメント ​

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

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