「MCPサーバーを使ったら、AIが意図しないファイルを書き換えてしまった…」そんな経験、ありませんか?🚨
最近、Cursor・Claude Code・VS CodeといったAIコーディングツールにMCP(Model Context Protocol)サーバーを接続して開発する「バイブコーディング」が急速に広まっています。でも実は、ここに見落とされがちな大きなリスクが潜んでいるんですよね。
🤔 MCPの何が危ないの?

MCPは、AIエージェントにツールや外部リソースへのアクセスを与えるプロトコルです。イメージとしては「AIに工具箱を渡す」感じです。
問題は、その工具箱にガードレールがないこと。デフォルト状態では、AIエージェントがあなたのファイルシステム上のどこでも読み書きできてしまうんです。つまり——
- ⚠️ 意図しないディレクトリのファイルを削除
- ⚠️ 機密情報を含む設定ファイルを上書き
- ⚠️ プロジェクト外のパスへの不正アクセス
こういったことが、AIの「善意の判断」によって起きてしまう可能性があります。怖いですよね。
🛡️ SafeMCPという考え方
この問題への答えがSafeMCPという設計パターンです。ざっくり言うと「AIエージェントがアクセスできる範囲をコードで明示的に制限する」アプローチです。
Pythonで簡単なサンドボックス付きMCPツールを作るとこんな感じになります👇
import os
from pathlib import Path
# 許可するベースディレクトリを明示的に指定
ALLOWED_BASE = Path("/home/user/projects/my_project").resolve()
def safe_read_file(filepath: str) -> str:
"""サンドボックス内のファイルのみ読み取れる安全な関数"""
target = Path(filepath).resolve()
# ベースディレクトリの外へのアクセスをブロック
if not str(target).startswith(str(ALLOWED_BASE)):
raise PermissionError(
f"アクセス拒否: {target} は許可ディレクトリ外です"
)
if not target.exists():
raise FileNotFoundError(f"ファイルが見つかりません: {target}")
return target.read_text(encoding="utf-8")
# 使用例
try:
content = safe_read_file("/home/user/projects/my_project/main.py")
print("読み取り成功!")
except PermissionError as e:
print(f"ブロック: {e}")
ポイントをまとめるとこんな感じです👇
- ✅ resolve() でシンボリックリンクや相対パスのトリックを無効化
- ✅ startswith で許可ディレクトリ外への脱出を検知
- ✅ PermissionError で明示的に拒否のメッセージを返す
🔧 実装時にチェックしておきたいこと
SafeMCPを自分のプロジェクトに導入する際は、以下の点を確認しておきましょう。
- 📁 許可するディレクトリをできるだけ狭く設定する(最小権限の原則)
- 🚫 書き込み・削除操作は読み取りとは別に明示的に許可する設計にする
- 📝 AIエージェントが何をしようとしたかをログに記録しておく
- 🔄 定期的に許可リストを見直す習慣をつける
まとめ
MCPは本当に便利なプロトコルですが、「便利」と「安全」は自動的にセットにはならないんですよね。AIエージェントにファイルシステムへの無制限アクセスを与えるのは、鍵をかけずに家を開放するようなものです。
SafeMCPの考え方でアクセス範囲を明示的に制限する、この一手間がトラブルを未然に防いでくれます。バイブコーディングを楽しみつつ、ぜひ安全な設計も意識してみてください!🛡️





