MCP 設定のシークレット管理

API キーやトークンを平文 JSON から外す方法 — シェル env 参照、1Password CLI、macOS Keychain、マシン別ラッパースクリプト。

Security

詳細な説明

平文 JSON 問題

デフォルトでは MCP 設定はシークレットを平文で保持します — GitHub PAT、DB パスワード、OpenAI API キー、BRAVE_API_KEY。ファイルはホームディレクトリにあり、クラウドバックアップ(iCloud、Dropbox)で同期され、Time Machine スナップショットに残ることもあります。よりよい方法があります。

パターン 1:シェル env 変数の参照(Cursor のみ)

Cursor は env 値内の ${VAR_NAME} を展開します:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PAT}" }
    }
  }
}

シェルプロファイルや direnv で GITHUB_PAT を設定。Claude Desktop は 展開しません — リテラルとして扱います。

パターン 2:1Password CLI ラッパー

サーバコマンドを op run でラップ:

{
  "mcpServers": {
    "github": {
      "command": "op",
      "args": [
        "run",
        "--env-file=/Users/me/.config/mcp/github.env",
        "--",
        "npx",
        "-y",
        "@modelcontextprotocol/server-github"
      ]
    }
  }
}

github.envGITHUB_PERSONAL_ACCESS_TOKEN=op://Personal/GitHub-MCP/credential のような中身。1Password CLI が起動時にシークレットを取得し、ディスクには書きません。

パターン 3:macOS Keychain ラッパー

security find-generic-password でシークレットを取り出し、本物のコマンドを exec する小さなシェルスクリプト:

#!/usr/bin/env bash
export GITHUB_PERSONAL_ACCESS_TOKEN="$(security find-generic-password -s github-mcp -w)"
exec npx -y @modelcontextprotocol/server-github

MCP 設定はそのスクリプトを指します:

"command": "/Users/me/.local/bin/launch-github-mcp.sh",
"args": []

パターン 4:gitignore + 厳しいファイル権限

実用上の最小限:

chmod 600 ~/Library/Application\ Support/Claude/claude_desktop_config.json
echo ".cursor/mcp.json" >> .gitignore

チャットやバグレポートに貼る前に シークレット秘匿ツール を通してください。

設定の中身を監査する

grep -E '(token|key|password|secret)' ~/.cursor/mcp.json を定期的に走らせ、誤コミットされた平文を検知します。

ユースケース

重要な認証情報(write スコープの GitHub トークン、本番 DB レプリカ、課金影響のある有料 API キー)で MCP を使う人は、最低限パターン 4、できればパターン 2 か 3 を採用すべきです。

試してみる — MCP Server Config Generator

フルツールを開く