1Password MCPをClaude Codeに導入する完全ガイド — シークレット管理をVaultに一元化する
1Password MCPサーバーをClaude Codeに接続する手順を完全解説。インストール・Vault設定・環境変数の自動注入・claude_desktop_config.jsonの設定方法から、実運用でのシークレット管理パターンまでカバー。
エンジニアのゆとです。
Claude CodeのMCPサーバーを増やしていくうちに、ある問題に気づいた。
APIキーをclaude_desktop_config.jsonに直接書いている。GitHubにpushしたことはないけど、ファイルはそこにある。しかもClaude Codeが自律的に動くとき、そのキーに何が起きているかを把握しきれていない。
「エージェントにクレデンシャルをどう渡すか」という問題を、まともに解決しようとすると 1Password MCP に行き着く。
この記事では、1Password MCP の設定手順と、Claude Code での実際の使い方を一通り書く。
何を解決するのか
まず「なぜ1Password MCPが必要なのか」を整理しておく。
Claude Codeで複数のMCPサーバーを使うとき、各サービスのAPIキーが必要になる。現状の管理方法には問題がある。
claude_desktop_config.json に書く場合:
{
"mcpServers": {
"github": {
"env": {
"GITHUB_TOKEN": "ghp_xxxxxxxxxxxxxxxx"
}
}
}
}
これはトークンが平文でファイルに残る。バックアップやDotfiles管理でうっかりGitにコミットするリスクがある。Claude Codeのログに出力される可能性もある。
1Password MCP はこれを解決する。トークンはVaultに保管し、実行時にだけ暗号化チャネル経由でClaude Codeに渡す。config.jsonには op:// という参照パスだけ書けば良くなる。
前提条件
- 1Password アカウント(個人プランでOK、Businessは不要)
- 1Password デスクトップアプリがMacにインストール済み
- 1Password CLI(
opコマンド)がインストール済み - Claude Code がインストール済み
1Password CLI のインストール:
brew install 1password-cli
インストール確認:
op --version
# 2.x.x と表示されればOK
Step 1: 1Password CLI の認証設定
まず1Password CLIを1Passwordアプリと接続する。
op signin
初回はブラウザが開き、1Passwordアカウントへのサインインを求められる。完了すると、以降はデスクトップアプリのロック解除状態がCLIと共有される。つまりMacのロックを解除して1Passwordアプリが動いていれば、op コマンドは追加認証なしで使える。
動作確認:
op vault list
自分のVault一覧が表示されれば接続OK。
Step 2: MCPサーバー用のVaultを作成する
既存のVaultにMCPシークレットを混ぜることもできるが、管理しやすくするため専用Vaultを作ることを推奨する。
op vault create "Claude Code MCP"
作成確認:
op vault list
# Claude Code MCP が表示される
Step 3: シークレットをVaultに登録する
各MCPサーバーのAPIキーをVaultに登録する。
GitHubトークンを登録する例:
op item create \
--category "API Credential" \
--title "GitHub MCP Token" \
--vault "Claude Code MCP" \
"credential[password]=ghp_xxxxxxxxxxxxxxxx"
登録できたか確認:
op item get "GitHub MCP Token" --vault "Claude Code MCP" --fields credential
GUIで登録したい場合は、1Passwordアプリで「Claude Code MCP」Vaultを開いて「新規アイテム→パスワード」から登録できる。
複数のシークレットを登録する場合の命名規則:
GitHub MCP TokenSlack MCP TokenLinear MCP Token
ツール名をプレフィックスにしておくとVault内で整理しやすい。
Step 4: claude_desktop_config.json を更新する
設定ファイルのパス: ~/Library/Application Support/Claude/claude_desktop_config.json
従来の書き方(平文キー):
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "ghp_xxxxxxxxxxxxxxxx"
}
}
}
}
1Password参照に書き換えた版:
{
"mcpServers": {
"github": {
"command": "op",
"args": [
"run",
"--",
"npx",
"-y",
"@modelcontextprotocol/server-github"
],
"env": {
"GITHUB_TOKEN": "op://Claude Code MCP/GitHub MCP Token/credential"
}
}
}
}
op run -- の構造がポイントだ。op コマンドが GITHUB_TOKEN の値を見て op://... という参照パスをVaultから取得した実際の値に展開してから、後続のコマンド(npx)を実行する。Claude Codeのプロセスが受け取るのは実際の値だが、設定ファイルには参照パスしか残らない。
op:// のパス形式: op://<Vault名>/<アイテム名>/<フィールド名>
Step 5: 動作確認
Claude Codeを起動して、MCPサーバーが正常に接続されるか確認する。
claude
起動時のMCPサーバー一覧に github が表示され、エラーなく接続されていればOK。
うまくいかない場合は次を確認する:
1Password CLIの認証状態:
op account get
エラーが出る場合は op signin から再実行。
シークレット参照パスの確認:
op read "op://Claude Code MCP/GitHub MCP Token/credential"
実際の値が表示されればパスは正しい。
実運用での管理パターン
導入後の実際の運用で使えるパターンをまとめる。
パターン1: 環境別にVaultを分ける
Claude Code MCP
├── GitHub MCP Token
├── Slack MCP Token
└── Linear MCP Token
Claude Code MCP (Dev)
├── GitHub MCP Token (dev bot)
└── Staging API Key
本番用と開発用でVaultを分けると、誤って本番のキーを開発環境から使うリスクを減らせる。
パターン2: チーム共有の場合
1Password BusinessプランであればVaultをチームメンバーと共有できる。
op vault user grant \
--vault "Claude Code MCP" \
--user colleague@example.com \
--role viewer
ビューア権限を付けると、値の閲覧(op run経由の利用)はできるが、追加・変更はできない。MCP実行専用のアカウントには viewer で十分。
個人プランでも、同一の1Passwordアカウントを複数デバイスで使えば、自宅PCとオフィスPCで同じVaultを使いまわせる。
パターン3: キーローテーション
APIキーをローテーションする必要がある場合、1Password Vault上のアイテムを更新するだけで全デバイスに反映される。
op item edit "GitHub MCP Token" \
--vault "Claude Code MCP" \
"credential[password]=ghp_newtoken_xxxx"
config.jsonの書き換えは不要。次回Claude Codeを起動したときに新しい値が使われる。
.envファイルのシークレットも移行する
MCP以外の用途、たとえばClaude Codeのカスタムスクリプトで使う .env のシークレットも1Password管理に移せる。
従来の .env:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxxxxx
op run で注入する方式:
# .env の代わりに参照パスを書く
OPENAI_API_KEY=op://Personal/OpenAI API Key/credential
ANTHROPIC_API_KEY=op://Personal/Anthropic API Key/credential
スクリプト実行時:
op run --env-file=".env" -- python3 my_script.py
これで .env を git add してしまっても平文は残らない。チームリポジトリで共有できる .env.template として機能するようになる。
よくある設定ミス
op run が動かない場合のチェックリスト:
1Password CLIが入っていない:
which op # /opt/homebrew/bin/op 等が返ればOK
1Passwordアプリがロックされている: Vault参照の実行時は1Passwordアプリのロックが解除されている必要がある。ロックされていると [ERROR] authorization prompt dismissed が出る。
参照パスの大文字・小文字: Vault名とアイテム名は大文字小文字を区別する。op vault list / op item list で正確な名前を確認してからパスを書く。
フィールド名の確認:
op item get "GitHub MCP Token" --vault "Claude Code MCP" --format json | jq '.fields[] | {id, label}'
アイテムに含まれるフィールド名の一覧が出る。credential と書いたが実際のフィールドが password の場合などはここで確認できる。
まとめ
1Password MCPの設定手順:
brew install 1password-cliでCLIをインストールop signinでデスクトップアプリと接続- MCPシークレット用のVaultを作成
- APIキーをVaultに登録
claude_desktop_config.jsonのenvの値をop://...参照に書き換え- コマンドを
op run --で囲む
設定が完了すると、config.jsonには平文のAPIキーが一切残らなくなる。バックアップをGitHub等に上げても、シークレットがリークするリスクがゼロになる。
MCP接続先が増えるほど、この管理方式の価値が上がる。5個のサービスのAPIキーを平文で管理するよりも、Vault1つに集めてop runで注入する方が圧倒的にシンプルだ。
記事が見つかりません:
記事が見つかりません: