ChatGPT から Shager で投稿できる? できます。ログインでつなぐか、ほかの3つの方法で
ChatGPTのMCPコネクタはOAuthでログインし、Shagerはこれに対応しています。開発者モードで追加してログイン、承認するだけ。Codex、API、スクリプトの方法も解説します。

できます。ChatGPT のカスタム MCP コネクタは OAuth で認証し、Shager の MCP サーバーは OAuth によるログインに対応しています。開発者モードで https://app.shager.ai/api/mcp をコネクタとして追加し、Shager にログインして承認するだけで、コピーするキーはありません。ほかにも、Codex 経由、OpenAI API 経由、あるいは文章作成は ChatGPT、配信は短いスクリプトという分担で、OpenAI のモデルに Shager の仕事を任せることもできます。
この記事では、コネクタの追加方法を説明し、ほかの方法についても動くコードを紹介します。
Shager を ChatGPT のコネクタとして追加するには
OpenAI の ChatGPT のアプリにおける認証のガイドでは、サポートされる方式が説明されています。認証が必要なサーバーは、MCP の認可仕様に沿った OAuth 2.1 フローを実装します。推奨は Client ID Metadata Documents で、動的クライアント登録にも対応しています。認証なしで動かすことも可能です。同じガイドには、ChatGPT はカスタムの API キーを提示できないとも書かれています。
https://app.shager.ai/api/mcp にある Shager のサーバーはこの仕様に沿っており、Client ID Metadata Documents と動的クライアント登録の両方に対応しています。接続の手順は次のとおりです。
- ChatGPT で「Settings」から「Apps & Connectors」を開き、開発者モード(Developer mode)をオンにして「Create」をクリックします。
- 名前を
Shagerにし、https://app.shager.ai/api/mcpを入力して OAuth を選びます。 - 「Connect」をクリックします。Shager が開くので、ログインし、組織を選んで承認します。
開発者モードは ChatGPT の有料プランで使えます。この接続でできるのは、読み取りと下書きの作成です。予約と公開は承認画面の別のチェックボックスで、チェックを入れない限りオフのままです。接続は https://app.shager.ai/dashboard/agents からいつでも解除できます。
API キーの前に認証なしのプロキシを挟めばいいのでは?
よく提案されますが、やめておくべきです。今はそもそも必要ありません。認証なしのリクエストを受け付けて Shager のキーを差し込むプロキシは、エージェンシーの公開権限を誰でも使えるエンドポイントに変えてしまいます。URL を見つけた人は誰でもクライアントのワークスペースに投稿の下書きを作れ、キーが publish を持っていれば予約までできてしまいます。絶対にやめてください。

方法1:OpenAI のコーディングエージェント、Codex
「OpenAI のモデルに Shager を操作させたい」のであれば、Codex ですでにすっきり実現できます。Codex は Streamable HTTP の MCP サーバーに対して、環境変数のベアラートークンを使えるので、設定は ~/.codex/config.toml に数行書くだけです。
[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
bearer_token_env_var = "SHAGER_API_KEY"
OpenAI の MCP に関するドキュメントによると、ChatGPT デスクトップアプリ、Codex CLI、IDE 拡張機能はこの設定ファイルを共有します。ツールの許可リストを含む詳しい手順は、Shager を Codex に接続するで解説しています。
方法2:リモート MCP ツールを使う OpenAI Responses API
OpenAI の API で独自のエージェントを作っているなら、Responses API がリモートの MCP サーバーを自分で呼び出してくれます。コネクタと MCP のガイドには、server_url、アクセストークン用の authorization フィールド、allowed_tools、require_approval を持つ mcp ツールが記載されています。また、API は authorization の値を保存しないので、リクエストのたびに送る必要があるとも書かれています。
import os
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model=os.environ["OPENAI_MODEL"],
input=(
"In the Shager workspace 'Cedar Clinics', list the channels, then create a "
"DRAFT post to all active channels announcing Saturday walk-in hours. "
"Use a different caption per channel that names the clinic's town. "
"cta_url https://cedarclinics.example/walk-in, campaign 'walk-in-sat'. "
"Do not pass schedule_at."
),
tools=[{
"type": "mcp",
"server_label": "shager",
"server_url": "https://app.shager.ai/api/mcp",
"authorization": os.environ["SHAGER_API_KEY"],
"allowed_tools": [
"whoami", "list_workspaces", "list_channels",
"list_groups", "create_post", "get_post",
],
"require_approval": {
"never": {"tool_names": ["whoami", "list_workspaces", "list_channels", "list_groups", "get_post"]}
},
}],
)
print(response.output_text)
この種の構成を実際に動かしてみて気づいた点が3つあります。
1つ目は、何よりも先に whoami で認証をテストすることです。OpenAI のドキュメントでは authorization は OAuth のアクセストークン用フィールドとして説明されていますが、Shager のキーはベアラートークンです。最初の呼び出しで、ヘッダーが Shager の想定どおりに届いているかがすぐにわかります。ツールの出力で 401 が返ってきたら、方法3に切り替えてください。
2つ目は、create_post をあえて never のリストから外していることです。そのため API は実行前に承認リクエストを返します。コード側で引数を確認し、承認のレスポンスで応答します。下書きが書き込まれる前に、人またはルールによるチェックポイントを低コストで挟めます。
3つ目は、このキーには publish を付けないことです。そうすれば、承認された呼び出しでも作れるのは下書きだけになります。
方法3:ChatGPT が書き、スクリプトが配信する
ChatGPT を日常的に使っているエージェンシーで最もよく見かけるパターンです。モデルには得意なこと、つまり40通りのキャプションを書く仕事を任せます。配信は20行ほどのスクリプトが、Shager の REST API(https://app.shager.ai/api/v1)を通して行います。API の全容は OpenAPI ドキュメントに記載されています。
まず ChatGPT に、ファイルに貼り付けられる構造化された出力を頼みます。
For each account below, write a caption for our Saturday walk-in hours post.
Vary the opening line and mention the town. Keep facts identical.
Return only JSON: [{"channel_id": "...", "caption": "..."}]
Accounts: <paste the id and name list from list_channels>
それを下書きとして送ります。
import json, os, requests
API = "https://app.shager.ai/api/v1"
H = {"Authorization": f"Bearer {os.environ['SHAGER_API_KEY']}"}
WS = os.environ["SHAGER_WORKSPACE_ID"]
captions = json.load(open("captions.json"))
r = requests.post(f"{API}/workspaces/{WS}/posts", headers=H, json={
"caption": captions[0]["caption"],
"channel_ids": [c["channel_id"] for c in captions],
"per_channel": captions,
"cta_url": "https://cedarclinics.example/walk-in",
"campaign": "walk-in-sat",
"first_comment": "Hours and directions: https://cedarclinics.example/walk-in",
}, timeout=60)
body = r.json()
if not r.ok:
raise SystemExit(f"{body['error']['code']}: {body['error']['message']}")
print("draft", body["data"]["id"], body["data"]["status"])
per_channel 配列は channel_id と caption(任意で first_comment と format)を持つオブジェクトを受け付けるので、ChatGPT の JSON をそのまま流し込めます。cta_url にはアカウントごとに別々の短縮リンクと UTM が付き、utm_content にはアカウント名が入ります。これによって、後から成果をアカウント単位で計測できるようになります。

どのチームにどの方法が合うか
| 状況 | 方法 |
|---|---|
| ターミナルや IDE で、ツールを使うエージェントを今すぐ動かしたい | bearer_token_env_var を使った Codex |
| OpenAI のモデルで自社のプロダクトやエージェントを作っている | mcp ツールを使う Responses API、または素の REST |
| チームが ChatGPT で文章を書いていて、そこから離れるつもりはない | キャプションは ChatGPT、配信はスクリプト |
| ChatGPT アプリの中で Shager を使いたい | 開発者モードのカスタムコネクタで、OAuth でログイン |
ログインで接続すると何ができるか
ChatGPT で https://app.shager.ai/api/mcp をカスタム MCP サーバーとして追加し、Shager のアカウントでログインします。認証付きのサーバーについて、OpenAI の ChatGPT からの接続ガイドが説明しているとおりの流れです。キーを共有するのではなく、一人ひとりが自分のアカウントで接続します。監査ログの仕組みは同じで、ツールも同じです。ツールは REST の各操作と1対1で対応しています。
よくある質問
ChatGPT のコネクタ設定で API キーを使う方法はありますか?
OpenAI の ChatGPT のアプリ向け認証ガイドによれば、ありません。ガイドには OAuth と認証なしの方式だけが挙げられ、ChatGPT はカスタムの API キーを提示できないと書かれています。キーは不要で、OAuth を選んでログインすれば済みます。誰でもアクセスできるエンドポイントの裏にキーをさらすような回避策は、解決策ではなくセキュリティ上の問題だと考えてください。
モバイルの ChatGPT でも Shager は使えますか?
それは、ChatGPT がどこでカスタム MCP サーバーを許可しているかによります。これは OpenAI が決めることで、提供開始の過程でも変わってきました。以前の挙動を当てにせず、OpenAI の最新ドキュメントを確認してください。
これらの方法を試すのに、Shager の有料プランは必要ですか?
いいえ。API と MCP のアクセスはすべてのプランに含まれており、ローンチ期間中の Shager は無料で、カードも不要です。課金を始める前には、事前にお知らせします。プランごとのアカウント数の上限は料金ページでご確認ください。
次のステップ
コードで進めるなら、REST API クイックスタートから始めるのが一番の近道です。新しいキーの発行から、計測付きの複数アカウント向け下書きの作成まで、6回の呼び出しでたどり着けます。


