🔑

1Password cli で mcp サーバーに渡すトークンを管理する

に公開

mcp サーバーをはじめとして、AI と様々なツールを接続する機会が増えてきました。私たちも mcp サーバーを作って部内で共有するなどして活用していますが、AI と各種サービスをつなぐ際には、トークンを払い出して認証情報を管理する構成が一般的かなと思います。

しかし、これらのトークンをローカル環境に直接保存しておくことはセキュリティ上のリスクが伴います。特に npm サプライチェーン攻撃による鍵の漏洩などの事故は記憶に新しいです。一度トークンを剽窃されるとそのトークンを使って任意の操作が可能になってしまうため、これを適切に管理する必要が出てきます。

https://www.trendmicro.com/ja_jp/research/25/i/npm-supply-chain-attack.html

そこで今回は、社内で活用している 1Password のサービスの一つである 1Password CLI を活用してトークンを管理し、mcp サーバーに安全にトークンを渡す仕組みを構築する方法を紹介します。

環境

op --version
2.32.0
❯ claude --version
2.0.33 (Claude Code)

手順

1Password の設定

1Password CLI をインストール

まずは 1Password CLI をインストールします。これについては以下の公式ドキュメントを参照してください。

https://developer.1password.com/docs/cli/get-started/#install

1Password デスクトップアプリをインストール

ついでに 1Password デスクトップアプリをインストールします。デスクトップアプリがなくても 1Password CLI 単体で管理することは可能ですが、後述の秘密参照先を入手しやすかったり、CLI と連携することで生体認証での解除ができたりと便利なので入れておくと良いです。
素朴に以下からインストールしてください。

https://1password.com/jp/downloads

1Password デスクトップアプリと CLI を統合

1Password デスクトップアプリと CLI を統合することで、mcp サーバーが認証情報を読み込む際に生体認証を利用できるようになります。

設定方法は、1Password デスクトップアプリのメニューから「設定」を開き、「開発者」タブを選択して「1Password CLI と連携」にチェックを入れれば OK です。

1Password にトークンを保存

1Password デスクトップアプリなどから、各種サービスで発行したトークンを保存します。

保存したトークンの秘密参照先を取得

続いて、1Password デスクトップアプリを使って保存したトークンの秘密参照先を取得します。
秘密参照先は以下のようなフォーマットで表現されます。

"op://[アイテムの保存先]/[アイテムの名称]/[情報の属性]"

1Password のデスクトップアプリのプルダウンメニューから、「秘密参照をコピーする」を選択すると参照先がコピーされます。この文字列は後の工程で使用します。

今回の例では以下のような秘密参照先が取得できました。

"op://Employee/token/credential"

mcp サーバーの設定

通常の 1Password CLI の使い方であれば前述の秘密参照先を環境変数にセットして op run コマンドでツールを起動するという流れになりますが、mcp サーバーにこの変数を渡すには一工夫必要です。以下でその手順を説明します。

環境変数ファイル .env.op を作成

1Password CLI で op run コマンドを実行する際、引数として環境変数ファイルを渡すことができるので、このファイルを経由して渡すことにします。
ファイルには以下のように、設定したい環境変数名とその秘密参照先を記載します。

APP_USER_TOKEN=op://Private/token/credential

mcp サーバーを起動するシェルスクリプトを作成

次に、mcp サーバーを起動するためのシェルスクリプトを作成します。以下の内容で ~/bin/start-mcp.sh (作成場所は任意)を作成してください。

#!/usr/bin/env bash
set -euo pipefail

# 1Password にログイン
eval "$(op signin)"

# 1Password のトークンを環境変数にセット
exec op run \
  --env-file=/Users/username/.env.op \
  -- \
  /Users/username/work/mcp-servers/app/dist/index.js

作成したら、このファイルに実行権限を与えます。

chmod +x ~/bin/start-mcp.sh

mcp サーバーの設定

mcp サーバーを設定する際は、接続先を前述のシェルスクリプトに指定します。通常は設定ファイル側で環境変数を設定することが一般的ですが、今回はシェルスクリプト内で環境変数を設定しているため、mcp サーバーの設定ファイル側での環境変数設定は不要です。

例として、 claude code で設定するときは

claude mcp add mcp-app /Users/username/bin/start-mcp.sh

というような感じになります。

claude code 起動

設定がうまくいけば、 Claude code 起動時に、以下のようなダイアログが表示されます。この画面で認証をすると、 mcp サーバーにトークンが渡されます。

/mcp コマンドを打つと、 mcp サーバーの一覧が表示されます。今回設定したアプリが ✔ connected となっていれば、正常に接続されています。

 ▐▛███▜▌   Claude Code v2.0.33
▝▜█████▛▘  Opus 4.1 · Claude Max
  ▘▘ ▝▝    /Users/username/work/project

> /mcp
╭───────────────────────────────────────────────────────────────────────╮
│ Manage MCP servers                                                    │
│                                                                       │
│ ❯ 1. mcp-app              ✔ connected · Enter to view details         │

おわりに

1Password CLI を活用して mcp サーバーのトークンを安全に管理する方法を紹介しました。この方法を採用することで、トークンをローカルファイルに平文で保存するリスクを回避し、セキュアな開発環境を構築できます。

特に生体認証との連携により、セキュリティと利便性を両立できる点が大きなメリットです。mcp サーバーに限らず、各種 API トークンの管理にも応用できる手法ですので、ぜひ活用してみてください。

GitHubで編集を提案
CureApp テックブログ

Discussion