【MCP】APIトークンを安全にKeychain保管する【Claude Code】


こんにちは、フリーランスエンジニアの太田雅昭です。

MCPサーバーのトークン

MCPサーバーはテキストファイルに平文でパスワードを保存するものがあります。たとえばChatworkの場合、以下のようになっています。

https://github.com/chatwork/chatwork-mcp-server

{
  "mcpServers": {
    "chatwork": {
      "command": "npx",
      "args": ["@chatwork/mcp-server"],
      "env": {
        "CHATWORK_API_TOKEN": "YOUR_CHATWORK_API_TOKEN"
      }
    }
  }
}

Slack、GitHub、Notionなども同じ手法だそうです(AI談)

これはさすがに厳しいと思い、対策をしてみます。

macOS Keychainで対策する

1. トークンをKeychainに保存

トークンをmacOS Keychainに保存します。

security add-generic-password -a "$USER" -s chatwork-api-token -w 'YOUR_TOKEN'

-a はアカウント名、-s はサービス名(あとで取り出すときのキー)、-w がパスワード(トークン本体)です。

重複登録をしようとすると、already existsで弾かれます。その場合は別のサービス名を使用してください。

確認してみます。

security find-generic-password -a "$USER" -s chatwork-api-token -w

成功すれば、無事に先ほど入れたトークンが出力されます。

2. Claude Codeに追加する

以下のコマンドで追加します。

claude mcp add chatwork \
  --scope user \
  -- sh -c 'CHATWORK_API_TOKEN=$(/usr/bin/security find-generic-password -a "$USER" -s chatwork-api-token -w) exec npx -y @chatwork/mcp-server'

実行後、~/.claude/settings.jsonをで追加されていることが確認できます。

試してみる

以下のようなプロンプトで試すことができます。

Chatworkで自分の情報を取得して

取得できればOKです。