# OpenAI Codex で Shager を使う：config.toml、bearer_token_env_var、下書きを下書きのままにするツール許可リスト

_2026-08-20 · Codex CLI に Shager のリモート MCP サーバーを設定し、キーを環境変数から読み、ツールを絞って最初の下書きを作ります。_

OpenAI の Codex CLI に Shager をつなぐには、`~/.codex/config.toml` に `[mcp_servers.shager]` テーブルを追加し、`url = "https://app.shager.ai/api/mcp"` と `bearer_token_env_var = "SHAGER_API_KEY"` を書きます。あとは `shgr_live_` で始まるキーをその変数に export するだけです。Codex は streamable HTTP にネイティブ対応し、キーを Bearer トークンとして送るので、ブリッジもローカルプロセスも要りません。`codex mcp add shager --url ... --bearer-token-env-var SHAGER_API_KEY` で1行で済ませることもできます。

このガイドの残りは、後悔しない設定の仕方についてです。キーをファイルに書かないこと、Codex が呼び出せる Shager のツールを絞ること、そして配線が正しいことを確かめる最初のタスクを選ぶことです。

## Codex はリモート MCP サーバーに何をサポートしていますか？

OpenAI の [Codex MCP ドキュメント](https://developers.openai.com/codex/mcp)には、`url` で設定する streamable HTTP サーバーと、ヘッダーで認証する3つの方法が載っています。[設定リファレンス](https://developers.openai.com/codex/config-reference)での定義は次のとおりです。

| キー | 役割 |
|---|---|
| `bearer_token_env_var` | 値を Bearer トークンとして送信する環境変数の名前 |
| `http_headers` | 毎回のリクエストに含める固定のヘッダー |
| `env_http_headers` | 値を環境変数から読み込むヘッダー |

Shager が期待するのは `Authorization: Bearer shgr_live_...` で、これはまさに `bearer_token_env_var` が生成する形です。使うべきはこのオプションです。

## 方法A：config.toml を編集する

`~/.codex/config.toml` を開き、次を追加します。

```toml
[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
bearer_token_env_var = "SHAGER_API_KEY"
```

キーは TOML ではなく、シェルのプロファイルに置きます。

```bash
export SHAGER_API_KEY="shgr_live_your_key_here"
```

設定ファイルに入っているのは変数の名前で、キーそのものではない点に注目してください。つまり、このスニペットは気兼ねなくコミットしたり共有したりでき、チームメンバーは各自のキーを用意するだけです。一人ひとりに別のキーを持たせておくと、あとで効いてきます。https://app.shager.ai/dashboard/agents にある Shager の監査ログは、すべての呼び出しを、それを行ったキーとともに記録するからです。

## 方法B：codex mcp add

CLI を使えば、同じテーブルを自動で書いてくれます。Codex のソースでは、`codex mcp add` に streamable HTTP サーバー用の `--url` と、それを前提とする `--bearer-token-env-var` フラグが定義されています（[GitHub の mcp_cmd.rs](https://github.com/openai/codex/blob/main/codex-rs/cli/src/mcp_cmd.rs)）。

```bash
codex mcp add shager \
  --url https://app.shager.ai/api/mcp \
  --bearer-token-env-var SHAGER_API_KEY
```

インストールしているバージョンで挙動が違う場合は、`codex mcp add --help` の内容が正です。

結果を確認します。

```bash
codex mcp list
```

Codex の TUI 内では、`/mcp` で有効なサーバーとそのツールを確認できます。

## 代わりに http_headers を使うべきですか？

使えますが、おすすめしません。`http_headers = { "Authorization" = "Bearer shgr_live_..." }` でも動きますが、有効な認証情報がプレーンテキストのファイルに入り、そのファイルは dotfiles のリポジトリにコピーされがちです。Bearer トークン以外のヘッダーが必要な場合は、`env_http_headers` でヘッダー名を環境変数名に対応付けます。

```toml
[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
env_http_headers = { "Authorization" = "SHAGER_AUTH_HEADER" }
```

この書き方では、変数にスキームを含めた値全体を入れる必要があります。`export SHAGER_AUTH_HEADER="Bearer shgr_live_..."` です。Shager の場合は、`bearer_token_env_var` のほうが簡単で、やっていることは同じです。

## Codex が Shager でできることを制限するには？

多くのセットアップガイドが飛ばしてしまうのがここです。Codex では、`enabled_tools`（許可リスト）と `disabled_tools`（その後に適用される拒否リスト）でサーバーのツールを絞り込めます。どちらも設定リファレンスに載っています。これを Shager のキーのスコープと組み合わせれば、どちらも安全側に倒れる2層の守りになります。

すべてを読み取って下書きは作れるが、予約、キャンセル、接続リンクの作成はできない、下書き用のプロファイルの例です。

```toml
[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
bearer_token_env_var = "SHAGER_API_KEY"
enabled_tools = [
  "whoami",
  "list_workspaces",
  "list_channels",
  "list_groups",
  "upload_media_from_url",
  "create_post",
  "get_post",
  "list_posts",
  "get_analytics",
]
tool_timeout_sec = 120
```

`create_post` をリストに残しているのは、`schedule_at` がなければ下書きを保存するだけだからです。さらにキーに `publish` スコープがなければ、Shager は `schedule_at` を含む `create_post` を 403 で拒否します。どれほど機転の利くモデルでも、予約投稿をこっそり通すことはできません。

`tool_timeout_sec` を引き上げているのは、`upload_media_from_url` がサーバー側でファイルをダウンロードするためです。大きな縦型動画だと、リファレンスにあるデフォルトの 60 秒を超えることがあります。

## 最初に試す価値のあるタスク

複数のツールを使い、あとには下書きだけが残るプロンプトから始めましょう。

```text
Use the shager MCP server.
1. whoami, then list_workspaces.
2. In workspace "Lakeside Realty", list_channels and list_groups.
3. upload_media_from_url https://example.com/media/open-house.jpg
4. create_post as a draft to group "All agents" with a different caption per
   channel (per_channel), mentioning each agent's neighborhood from the channel
   name. cta_url https://lakesiderealty.example/open-house, campaign
   "open-house-oct", first_comment "Details and RSVP: " followed by the link.
5. get_post and print a table of channel, network, format and state.
```

期待される結果は、`DRAFT` 状態の投稿が1件あり、アカウントごとに1つの投稿先があって、それぞれ SNS に合わせたフォーマットが決まっている状態です。Shager では、`cta_url` に対してアカウントごとに専用の短縮リンクと UTM タグが付き、`utm_content` にアカウント名が入ります。これが、あとでアカウント別の成果を計測する土台になります。詳しくは[アカウント別のリード計測](/ja/blog/utm-per-account-lead-attribution)をご覧ください。

## 人がキーボードの前にいなくても、Codex で実行できますか？

Codex には、スクリプトや CI 向けの非対話モード `codex exec` があります。ただし、ヘッドレス実行時の MCP ツールの承認の扱いはリリースごとに変わってきたので、定期実行に組み込む前に、インストール済みのバージョンで試運転してください。毎週無人で確実に動かす必要がある処理なら、チャットの層を挟まず、短いスクリプトから Shager の REST API を呼ぶチームも多くあります。承認の確認で止まることがないからです。どちらを選ぶにしても、その処理専用のキーを用意し、ツールの許可リストは絞り込み、そのキーに `publish` を持たせるかどうかは意識して決めてください。こうした判断を前提に組んだ定型処理は、[毎週の配信ルーティン](/ja/blog/skill-weekly-distribution-routine)で紹介しています。

## トラブルシューティング

| 起きていること | 原因 | 対処 |
|---|---|---|
| 401 `unauthorized` | Codex を起動したシェルで変数が export されていない | 同じターミナルで `echo $SHAGER_API_KEY` を確認し、Codex を再起動する |
| `/mcp` にツールが表示されない | `enabled_tools` に名前がない、または `disabled_tools` に入っている | [/ja/agents](/ja/agents) のツール一覧と綴りを照合する |
| 403 `sandbox_unclaimed` | キーがエージェントの自己登録で作られ、まだ人が引き継いでいない | `claim_url` を人に送る |
| 予約で 403 `forbidden` | キーに `publish` がない | 下書き用のキーなら想定どおり |
| 429 `rate_limited` | 1つのキーで1分あたり 120 リクエストを超えた | アカウントごとに呼ぶのではなく、グループと `create_post` 1回を使う |

## よくある質問

### Codex が Shager と通信するのに OAuth は必要ですか？

いいえ。Codex は環境変数からの Bearer トークンに対応しており、Shager はその方法で API キーを受け付けます。Shager の MCP サーバーは OAuth によるログインにも対応していて、Codex も OAuth サーバーに対応しているので、キーを管理したくない場合はログインする方法も選べます。

### Codex の IDE 拡張機能では、Shager の設定が違いますか？

OpenAI の MCP ドキュメントによれば、ChatGPT のデスクトップアプリ、Codex CLI、IDE 拡張機能はこの設定を共有するので、同じ `~/.codex/config.toml` のテーブルがすべてで使われます。ただし、環境変数がエディタのプロセスから見えている必要があります。macOS では、ターミナルからエディタを起動しなければならない場合があります。

### MCP ではなく REST API を Codex に使わせることはできますか？

はい。チャットではなくコードを書くのであれば可能です。[OpenAPI ドキュメント](https://app.shager.ai/api/v1/openapi.json)には MCP ツールと同じ操作が、同じスコープと制限で記載されています。

## 次のステップ

Codex をつないだら、何かを自動化する前に、まず操作そのものに慣れておきましょう。[REST API クイックスタート](/ja/blog/shager-rest-api-quickstart)では、ワークスペースの作成から計測付きの投稿までの一連の流れを curl と Python で順に紹介しています。Codex が MCP ツールを呼び出すとき何をしているのかを読み解く助けにもなります。

---
Source: https://shager.ai/ja/blog/connect-shager-to-codex
