3行でいうと
- ChatGPTとAPIは、請求の仕組みが別です。公式ヘルプは、ChatGPTとAPI platformには別々の請求システムがある、と書き、Plusのヘルプも、API利用は別に独立して請求される、と書いています。管理画面も別で、ChatGPTは chatgpt.com、APIは platform.openai.com です。
- 公式が新しいプロジェクトに勧める入口は、Responses APIです。公式は、Chat Completionsは引き続き対応としつつ、Responsesを新規向けに勧めています。エージェントを組むならAgents SDK(自分のアプリの中で動く)、OpenAIに預けるならAgents API(hosted)という分け方が、公式のページに出ています。
- APIキーは、公式が「秘密」と書くものです。ブラウザやアプリ(クライアント側のコード)に入れず、サーバー側の環境変数か鍵管理の仕組みに置きます。作った直後の1回しか全文は見えません。チームで使うなら、個人のキーの共有ではなく、プロジェクト単位のキーを使うよう、公式ヘルプが書いています。
- 料金は100万トークン単位で、ツールの利用は別に課金されます。上限は3種類(利用の段階ごとのレート上限、あなたが設定する支出の警告、あなたが設定する支出の上限)が別々に効きます。支出の上限は、超えるとその通信が止まる、と公式は警告しています。
- ChatGPTの中に自分のサービスを入れる道(Apps SDKの流れ)は、公式の資料の呼び名が揺れています。開発者向けドキュメントは「plugin」と書き、ヘルプは「Apps SDK(preview)」と書いています。どちらも土台はMCPです。
この記事は、実際に使って確かめた記録ではありません。運営者はChatGPTを入れていますが、使い心地はこの記事には書いていません。この記事は、2026年10月24日に公式ドキュメントを読んでまとめたものです。コードは、公式のページの記述を要約として取得し、それに合わせて写したり短縮したりしたもので、公式の原文そのままではなく、実行もしていません。モデル名、価格、上限の数字は変わることがあります。取得は要約の形で行ったため、読めていない部分は本文で「読めていない」と書きました。契約や費用の判断は、公式の規約と料金ページで確かめてください。この記事は、購入や契約の助言ではありません。
先に結論
- まず「どこまで自分で書くか」で選びます。 質問して答えをもらうだけなら、Responses APIの1回の呼び出しで足ります。道具を使って何手も進めるエージェントを自分のアプリの中で動かすならAgents SDK、実行環境ごとOpenAIに預けるならAgents APIです。ChatGPTの画面の中に自分のサービスを出したいなら、MCPサーバーを作ってpluginとしてつなぐ道です。
- APIキーは、作る前に置き場所を決めます。 公式のクイックスタートは、環境変数
OPENAI_API_KEYに入れる方法を案内し、SDKはそこから自動で読む、と書いています。コードに直接書かない、公開のリポジトリに入れない、ブラウザやアプリに入れない、が公式の共通の注意です。 - 料金は「モデル」と「ツール」の二本立てで見ます。 公式の価格ページでは、トークンは100万トークンあたり、ツール(検索、ファイル検索、実行環境など)は呼び出しや容量あたりの別の値段です。上限の設定(アラートと、止まるタイプの上限)は、公式のproduction best practicesが、プロジェクトごとに決めるものとして挙げています。使い始める前に入れる、という順番は僕らの整理です。
- ChatGPTの契約は、APIの代わりになりません。 逆も同じです。社内で「ChatGPTを契約しているからAPIも使える」と考える人がいたら、請求の画面が別であることから確かめます。
前提:用語をそろえる
- API(Application Programming Interface):ソフトウェア同士がやりとりするための窓口です。OpenAI APIは、自分のコードからモデルを呼ぶための窓口で、ChatGPTの画面とは別のものです。
- APIキー:APIを呼ぶときの身元を示す文字列です。公式の認証のページは、Bearer認証(
Authorizationヘッダーにキーを入れる方式)と書いています。 - Responses API:公式が「新しい基本部品」と呼ぶAPIです。入力(
input)を送ると、型のついた出力(output)が返ります。Chat Completionsの発展形、と公式のページに書かれています。 - Chat Completions:以前から使われてきたAPIです。公式は「引き続き対応」と書いています。
- Assistants API:公式の開発者ドキュメントの目次で「Legacy APIs(旧いAPI)」の下に並び、移行ガイドだけが付いています。その移行ガイドには、2026年8月26日に終了(sunset)し、もう使えない、と書かれています。新しく始める道ではありません。
- Agents SDK:自分のアプリの中で動く、エージェント用のライブラリです。公式は、デプロイ、保存、承認、実行環境との接続を自分が制御できる、と説明しています。
- Agents API(hosted):OpenAIが管理するCodexの仕組み(harness)を、APIとして使えるものです。セッションの管理と、会話の自動の圧縮をOpenAIが担います(障害からの復旧は、別ページへの案内だけで、読めていません)。
- MCP(Model Context Protocol):AIと外のツールをつなぐ共通の規格です。API側では、リクエストにMCPのツールを足して使います。ChatGPT側では、前のガイド(05)のとおり、自作のMCPサーバーをつなぎます。
- Apps SDK/plugin:ChatGPTの中で動くサービスを作るためのもの、と読めます。ただし、公式の資料の呼び名が揺れています(後の節)。
- トークン:モデルが文章を数える単位です。料金は、入力と出力のトークンの数で決まります。
- レート上限(rate limit):一定の時間に送れる量の上限です。リクエストの数(RPM)、トークンの数(TPM)などで測ります。
全体像:ChatGPTとAPIは何が別なのか
公式の資料から、別物だと確かめられる点を並べます。
| 見る点 | ChatGPT | OpenAI API | 公式のどこに書かれているか |
|---|---|---|---|
| 請求 | 個人はSettings > Billing、Businessは Workspace settings > Billing、Enterprise・EduはGlobal Admin Console | APIの請求の概要ページ。支払い方法を足して使い始める | ヘルプ「Managing billing for ChatGPT and the API platform」 |
| 契約の関係 | Plusなどの月額 | Plusには含まれない。別に、独立して請求される | ヘルプ「What is ChatGPT Plus?」 |
| 管理画面 | chatgpt.com | platform.openai.com | 上のヘルプの記載 |
| 学習への利用 | 個人向けのプランは既定でオン(前のガイド02) | 2023年3月1日以降、明示的に同意しない限り、APIのデータは学習に使われない | 開発者向けドキュメント「Your data」 |
| 使い方 | 画面で会話する | 自分のコードから呼ぶ | 開発者向けドキュメントの概要 |
読んだ範囲では、ChatGPTのログインとAPIのログインが同じかどうかは、請求のヘルプに書かれていませんでした。同じ名前のアカウントでも、請求と画面は別、と考えておくのが安全です(これは僕らの注意です)。
提供地域については、公式に「Supported countries and territories」のページがあり、日本はその一覧に載っていました。ただし、ページに日付は表示されておらず、いつの一覧かは確かめられません。ページには、対象外の地域からの利用でアカウントが停止されうる、という趣旨の警告があります。
公式の開発者ドキュメントの概要ページには、「OpenAI Developers」というプラグインが載っています。ChatGPTとCodexをPlatformにつなぎ、プロジェクトのAPIキーを作れる、という説明です。この記事では扱いません。
入口を選ぶ:6つの道
公式のページから読み取れる分け方を、表にします。
| 入口 | 何をするものか | 実行の場所 | 公式の記載の要点 |
|---|---|---|---|
| Responses API | モデルを直接呼ぶ。文章、構造化された出力、ツール、画像などを扱う | 自分のコードがリクエストを送る | 新規向けに勧められている。組み込みツール(web search、file search、code interpreter、remote MCPなど)がある |
| Chat Completions | 以前からのAPI。messages を送り、choices が返る |
自分のコード | 引き続き対応。GPT-5.4以降では、ツール呼び出しで reasoning_effort が none 以外のとき使えない、と移行ガイドにある |
| Agents SDK | エージェントの繰り返し、引き継ぎ(handoff)、ガードレール、サンドボックスを持つライブラリ | 自分のアプリの中 | 連携の手間の目安は「中」、Responses APIは「高」と、Agentsのガイドのページ(api/docs/guides/agents)が比べている |
| Agents API(hosted) | セッション、サンドボックス、ツールをOpenAIが管理する | OpenAI(または自社の環境を指定) | 連携の手間の目安は「低」。公式ページには OpenAI-Beta: agents=v1 のヘッダーがある |
| plugin/Apps SDK | ChatGPT(とCodex)の中で動くサービス | 自分のMCPサーバー | 次の節で詳しく |
| MCP(API側) | Responses APIのリクエストにMCPのサーバーを足す | リモートのMCPサーバー | type: "mcp" のツール。承認は既定で求められる |
Assistants API、Agent Builder、Evals、Fine-tuningは、公式の目次では「Legacy APIs」の中にあります。このうちAssistants APIは、上の用語の項のとおり、終了済みです。fine-tuningについては、価格ページに、整理(wind down)の方向だという注記がありました。新しく始めるなら、まず表の上の4つを見る、というのが公式の目次の並びから読めることです。
Responses APIとChat Completionsの違いのうち、移行ガイドが挙げている、実際の書き方に響くものを写します。
- 入力と出力:Responsesは
input(文字列か、項目の並び)を受け取り、型のついたoutputの並びを返します。Chat Completionsはmessagesとchoicesです。 - 便利な読み取り:Responsesには
output_textという、文章だけを取り出す手段があります。 - 会話の状態:Chat Completionsは自分で管理します。Responsesは
previous_response_id、Conversations API、出力項目の手渡しのどれかを選べます。 - 複数の生成:
nは、Responsesにはありません。複数が欲しければ、リクエストを分けます。 - 構造化された出力:
response_formatは、Responsesではtext.formatに移りました。 - 保存:Responsesは既定で保存されます。Chat Completionsは、新しいアカウントでのみ既定で保存、と移行ガイドは書いています。どちらも
store: falseで止められます。
移行ガイドは、公式の社内テストでの改善(SWE-benchで3%、キャッシュの利用率が40%〜80%)にも触れていますが、これは提供元の主張です。
手順1:APIキーを作り、置く
作る
公式のクイックスタートは、OpenAIのダッシュボードのAPI keysのページ(platform.openai.com/api-keys)でキーを作る、と案内しています。ヘルプの「Where do I find my API key?」も、同じページを挙げています。読んだ範囲では、ボタンの名前や、キーの権限(読み取りだけにする、など)の設定項目は、これらのページに書かれていませんでした。
キーについて、ヘルプにある注意は次のとおりです。
- 全文は、作った直後の1回しか表示されません。保存し忘れたら、新しいキーを作って、アプリ側を差し替えます。
- キーの削除の手順は、読んだヘルプには書かれていませんでした。消す前に、新しいキーへ差し替えてアプリが動くのを確かめる、という順番は、下の「鍵の管理」にあるとおりです。
- 他人にキーを渡しません。
置く
公式の認証のページは、こう書いています(短い引用です)。キーは「a secret」であり、他人と共有せず、ブラウザやアプリのような「client-side code」に露出させない。置く場所は、サーバー側の環境変数か、鍵管理サービスです。
クイックスタートが示している、環境変数の書き方は次のとおりです。
# macOS / Linux
export OPENAI_API_KEY="your_api_key_here"
# Windows(PowerShell)
setx OPENAI_API_KEY "your_api_key_here"
クイックスタートは、シェルの設定ファイル(.zshrc など)に書いて保存する方法も触れ、各SDKは、環境変数から自動でキーを読む、と書いています。
鍵の管理:公式のproduction best practicesが書いていること
- コードや公開のリポジトリにキーを入れず、環境変数か、秘密を扱う仕組みから読み込みます。
- プロジェクトのキーには有効期限を設定し、定期的に取り替えます。順番は、新しいキーを作る、アプリを更新する、新しいキーが動くのを確かめる、古いキーを失効させる、です。
- 管理者は、キーの寿命の上限を、組織またはプロジェクトの単位で決められます。プロジェクトの上限は、組織の上限を超えられません。
- 「API Key Governance」で、管理者は、新しいキーの作成を、サービスアカウントのキー、利用者個人のプロジェクトキー、または新規作成なし、のどれかに絞れます。組織の制限が優先され、変更は新しいキーにだけ効きます。
- 2023年12月20日より前に作ったキーは、利用状況の追跡が既定ではオフです。キー管理のダッシュボードでオンにできます。
- 次の1点は、production best practicesではなく、認証のページの記載です。失効したキーは、数秒以内に使えなくなります。そのほかの認証の変更は、反映に15分以内、場合によってはそれ以上かかることがあります。
チームで使うとき
ヘルプ「Can I share my API key with my teammate/coworker?」は、個人のキーを、信頼できる同僚とであっても共有することを勧めない、と書いています。理由は、アカウントの安全、利用の追跡、鍵管理の作法の3つです。代わりに、プロジェクト単位のキーを使い、同僚は組織に招いて、読み取り(reader)か所有者(owner)の役割を付けます。プロジェクトごとに、レート上限と支出の管理が分かれる、とも書かれています。
認証のページが挙げる、キーの種類は3つです。アプリのリクエスト用の通常のAPIキー、管理用のAPIを呼ぶAdminキー、短命のアクセストークンを得るためのワークロードIDの連携(workload identity federation)です。複数の組織に所属しているときや、古い形の個人キーを使うときは、OpenAI-Organization と OpenAI-Project のヘッダーで、利用の計上先を選べます。
キーを守る小さな具体策(僕らの整理です)
公式が書いているのは、環境変数や鍵管理の仕組みから読むこと、クライアント側のコードに置かないこと、までです。次の2点は、その方針を手元で実行に移すための、僕らの一般的な整理で、公式のページに書かれているものではありません。
- 手元の設定ファイルに書く場合は、リポジトリに入らないようにします。たとえば、
.envというファイルにキーを書く運用なら、先に.gitignoreへ入れます。
# 僕らの整理(公式の記載ではありません)
echo ".env" >> .gitignore
git status # .env が「追跡されていない」一覧に出ないことを確かめる
- ブラウザやスマホのアプリから使いたいときは、自分のサーバーを間に置きます。形は次のとおりで、キーはサーバー側の環境変数にだけ置きます。
ブラウザ / スマホのアプリ --(あなたのサービスの認証)--> あなたのサーバー --(OPENAI_API_KEY)--> OpenAI API
キーを誤ってチャットや公開の場所に貼ってしまったときは、production best practicesの順番(新しいキーを作る、アプリを更新する、動くのを確かめる、古いキーを失効させる)で、早めに取り替えるのが筋です。
なお、公式ヘルプの「Best practices for API key safety」という記事は、2回取得を試みましたが、読めませんでした。上の内容は、認証のページ、production best practices、共有のヘルプから集めたもので、その記事の内容と一致しているかは確かめていません。
手順2:最小の呼び出し
公式のクイックスタートは、全部の例でResponses APIとモデルID gpt-6-astra(取得時点)を使い、プロンプトには「ユニコーンの就寝前の短い話」を入れています。まず、SDKを入れます。
# JavaScript(Node.js、Deno、Bun)
npm install openai
# Python
pip install openai
このほか、クイックスタートは、.NET(dotnet add package OpenAI)、Java(beta)、Go(beta)、Rubyも挙げています。
呼び出しの形は、公式のページの記述にそろえて、僕らが短く書いたものです(公式の原文のコードではなく、実行もしていません)。
from openai import OpenAI
client = OpenAI() # OPENAI_API_KEY を環境変数から読む
response = client.responses.create(
model="gpt-6-astra",
input="Write a one-sentence bedtime story about a unicorn.",
)
print(response.output_text)
curl https://api.openai.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{"model": "gpt-6-astra", "input": "Write a one-sentence bedtime story about a unicorn."}'
公式のページが示す要点は、次のとおりです。
- 送る先は
POST https://api.openai.com/v1/responses(curlの例)。 modelとinputが基本です。Pythonはclient.responses.create(...)、JavaScriptも同じ名前で、結果の文章はresponse.output_textで読みます。- 画像やファイルを渡すときは、
inputの中身に、input_text、input_image、input_fileの部品を使います(PDFを含む、とクイックスタートにあります)。 - 組み込みのツールは、web search、file search(公式の例では
vector_store_idsを渡している)、code interpreterで、自分で定義する関数呼び出しと、リモートMCPも使えます。
「モデルIDは、取得時点の公式の例のものです。モデルは入れ替わるので、価格ページとモデル一覧で、今のIDを見てから書いてください。」これは、前のガイド(03)が、ChatGPT側でモデルが次々に退役していくと書いたのと同じ理由です。
応答の長さの上限、保存、会話の続け方は、リクエストの欄で決まります。リファレンスのページ「Create a model response」で確かめられた欄は、input、include(追加の出力)、background(バックグラウンドで実行)、conversation、context_management(圧縮)などです。ただし、そのページは途中までしか読めておらず、tools、model、instructions、store、previous_response_id、stream、max_output_tokens、usage の説明は読めていません。
手順3:道具をつける(API側のMCPとツール)
Responses APIにリモートのMCPサーバーを足す形は、公式のガイド「Remote MCP」に載っています。公式の例を、主要なキーに絞って写します(実行はしていません)。
{
"model": "gpt-6-astra",
"tools": [{
"type": "mcp",
"server_label": "openai_docs",
"server_description": "Search and read the public OpenAI documentation.",
"server_url": "https://developers.openai.com/mcp",
"require_approval": "never"
}],
"input": "Search the OpenAI docs for Responses API streaming and return the relevant links."
}
流れは、次のとおりです。
- APIがサーバーのツール一覧を取り、
mcp_list_toolsの項目を返します。この項目が会話の文脈に残っている間は、毎回は取り直しません。 - モデルがツールを選ぶと、APIがサーバーを呼び、
mcp_callの項目(引数、出力、エラー)を返します。 - 承認は、既定で求められます。APIは
mcp_approval_requestを返し、あなたはmcp_approval_responseを、多くはprevious_response_idとつないで送ります。1回の承認は1回の呼び出しに効きます。
設定欄は、server_label、server_description、server_url(Streamable HTTPまたはHTTP/SSE)、require_approval("always"、"never"、またはツール名ごとの指定)、allowed_tools(取り込むツールを絞る。費用と遅れを減らす)、authorization(OAuthのトークン)です。authorization の値はAPIが保存しないので、毎回送ります。非公開のサーバーには、server_url の代わりに tunnel_id(Secure MCP Tunnel)を使います。
公式の警告は、はっきりしています。信頼できるサーバーだけを使うこと。悪意のあるサーバーは、モデルの文脈にあるどんなデータでも外に出しうること。承認を切るときは、MCPサーバーに送られるデータを確認し、できれば記録すること。
ここは僕らの注意です。上の例の "never" は、その例のサーバーが公式の資料サーバー(読み取りだけの案内)だから成り立つ設定です。他人のサーバーや、書き込みのあるサーバーに写すものではありません。
古い書き方の connector_id は、2026年9月1日より後に出たモデルでは非推奨で、server_url か tunnel_id を使うよう、公式は書いています。料金はトークンだけで、ツールの定義と呼び出しの分が課金され、MCPの呼び出し自体の別料金はありません、とも書かれています。
手順4:エージェントを組む(Agents SDK)
公式のクイックスタートは、インストールを次のように示しています。
# JavaScript
npm install @openai/agents zod
# Python
pip install openai-agents
最小のエージェントは、公式の例に近い形で、こうです。instructions の文字列は公式の例と違い、Pythonは型の注記と if __name__ == "__main__": を省いてあります(実行はしていません)。
import asyncio
from agents import Agent, Runner
agent = Agent(
name="History tutor",
instructions="Answer history questions briefly.",
model="gpt-6-astra",
)
async def main():
result = await Runner.run(agent, "When did the Roman Empire fall?")
print(result.final_output)
asyncio.run(main())
import { Agent, run } from "@openai/agents";
const agent = new Agent({
name: "History tutor",
instructions: "Answer history questions briefly.",
model: "gpt-6-astra",
});
const result = await run(agent, "When did the Roman Empire fall?");
console.log(result.finalOutput);
Agents SDKのクイックスタートのページには、実行コマンドの記載は見つかりませんでした。次は、一般的なPythonとNodeの決まりによる、僕らの補足です。Pythonなら python agent.py、JavaScriptなら node agent.mjs で動かせます。拡張子 .mjs か、package.json の "type": "module" で、トップレベルの await が使えます。APIキーは、同じ OPENAI_API_KEY です(Agents SDKのクイックスタートが OPENAI_API_KEY を使う例を示しています)。
公式の次の一歩の案内は、エージェントの定義、道具の使い方(hosted tools、function tools、agents-as-tools)、実行(ループ、ストリーミング、続き方)、オーケストレーションと引き継ぎです。クイックスタートは、能力を1つずつ足すことを勧め、最初から大きなマルチエージェントの設計にしないよう書いています。
OpenAIに預ける道:Agents API
Agents APIのページが示す例は、tools、multi_agent、capability_directories などを含む長い形です。次は、それを僕らが大きく削った形で、instructions と入力文も書き換えています。ページはこれを「最小」とは呼んでおらず、削った形がそのまま通るかは確かめていません。
curl -sS -X POST "https://api.openai.com/v1/agents/sessions" \
-H "OpenAI-Beta: agents=v1" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent": {"model": "gpt-6-astra", "instructions": "Answer technical questions accurately."},
"environment": {"type": "self_hosted", "workspace_directory": "/workspace"},
"input": [{"role": "user", "content": [{"type": "input_text", "text": "Summarize the recommended setup."}]}]
}'
読んだ範囲での要点は、こうです。
- セッションは、ターンをまたいで状態を持つ、長生きのエージェントです(途中での舵取りのしかたは、読めていません)。
- 実行環境は、OpenAIが用意するものと、自分で用意する(
self_hosted)ものから選びます。 - 料金は、選んだモデルのAPI料金、OpenAIのツールの標準料金、OpenAIの砂場の標準のコンテナ料金です。
- データの面では、データの所在地の指定は米国のみ、ゼロデータ保持(ZDR)は非対応で、自分の砂場にしても変わらない、と書かれています。
- ベータかどうかは、ページに明記がありません。
OpenAI-Beta: agents=v1のヘッダーとbeta.agentsの名前から、ベータに近い状態だろう、とは読めますが、これは推測です。変更の可能性を前提にしてください。
Agents SDKとの比較は、ページの中にはなく、別ページに案内があるだけで、そのページは読んでいません。
ChatGPTの中に自分のサービスを入れる:plugin、Apps SDK、MCP
ここは、公式の資料の中で、呼び名が揺れている場所です。読んだ内容を、そのまま並べます。
- 開発者向けドキュメントの
apps-sdkの下には、「MCP server and UI quickstart」と「Add UI to your MCP server」があります。ところが、中身は「plugin」という言葉で書かれています。クイックスタートのURLの末尾はapp-quickstartのままで、題名と本文は「Plugins」です。ページは、「Apps SDK」を定義せず、その言葉は、ブログの話題の欄と、例のリポジトリの名前に出るだけでした。 - plugin向けの資料の入口は、pluginを「skills(指示と資料)、ツールを出すMCPサーバー、またはその両方」を含みうるもの、と説明します。ChatGPTとCodexは、1つのplugin一覧を共有します。
- 一方、ヘルプの「Build with the Apps SDK」は、Apps SDKを、ChatGPTの中で動くアプリの会話の流れと画面を設計する開発キットで、「preview(試験提供)」の段階、MCPに基づくもの、と説明しています。対象のプランは、BusinessとEnterprise・Eduで、作って試せるのは、ワークスペースの管理者と所有者、またはその権限を与えられた人、とあります。ページには「Updated: 2 days ago」という相対表示しかなく、日付は分かりません。収益化の詳細は「まだ」と書かれ、Agentic Commerce Protocol(即時の購入)への対応は予定、とあります。
この食い違いは、僕らには解消できませんでした。見立てとしては、ヘルプの記事が古い呼び名のまま残っている可能性があります。ただし、それを示す記載は読んだ範囲に見つかっていません(僕らの見立てです)。作る前に、自分の画面と、最新のドキュメントの目次で、どの呼び名になっているかを見てください。
作りかた:公式のクイックスタートの流れ
公式の「MCP server and UI quickstart」の流れは、次のとおりです。
- UIの部品(
public/todo-widget.html)を、1つのHTMLファイルとして作る。ホスト(ChatGPT)とのやりとりは、postMessage経由のJSON-RPCです。 - 依存を入れ、
package.jsonに"type": "module"を付ける。 server.jsで、UIのリソースと、add_todo、complete_todoのツールを登録する。- サーバーを動かし、手元で試す。
- 公開のHTTPSで届くようにして、ChatGPTにつなぐ。
主なコマンドは、次のとおりです(ページに載っているとおりです)。
npm install @modelcontextprotocol/sdk @modelcontextprotocol/ext-apps zod
node server.js
npx @modelcontextprotocol/inspector@latest
ngrok http <port>
サーバーのMCPの入口は /mcp で、ステートレス(状態を持たない)モードです。ツールは registerAppTool で登録し、_meta.ui.resourceUri で画面の部品と結びつけます。UIは registerAppResource で、ui:// で始まるアドレスに登録します。
ChatGPTでの試験は、「chatgpt.com/plugins」で「+」を押し、「Add custom MCP server」を選び、/mcp で終わる公開のHTTPSのURLを入れ、名前と認証を決めて、リスクの警告を受け入れ、「Create as a plugin」を押します。その後、pluginをインストールし、新しい会話で @ から選び、ツール(add_todo など)が呼ばれる頼み方をします。ツールやメタデータを変えたら、プラグインの接続を更新します(画面の場所は読めていません)。
公式の、もっと小さい最初の例は「plugins quickstart」で、公開のサンプルのMCPサーバーを、認証なしでつなぎ、ホームの表示を「Chat」から「Work」に切り替えて、@ でpluginを選び、20面のさいころを1回振る roll_dice が、sides に20を渡して呼ばれ、1〜20の値が返ることを確かめます。自分のサーバーを書く前に、つなぎ方だけを試すのに向いています。
画面の部品(MCP Apps):公式が書いている決まり
公式の「MCP Apps in ChatGPT」によると、MCPサーバーが返す対話的な画面は、ChatGPTの会話の横のiframeに描かれます。ChatGPTは、公開された規格「MCP Apps」を実装していて、同じ画面を、ほかの対応するホストでも動かせます。画面は任意で、ツールは、画面なしでも役に立つようにしておく、と書かれています。
| 目的 | MCP Appsの標準 | ChatGPT向けの別名 |
|---|---|---|
| ツールと画面を結ぶ | _meta.ui.resourceUri |
_meta["openai/outputTemplate"] |
| ツールの入力 | ui/notifications/tool-input |
window.openai.toolInput |
| ツールの結果 | ui/notifications/tool-result |
window.openai.toolOutput |
| 画面からツールを呼ぶ | tools/call |
window.openai.callTool |
| 追いかけのメッセージ | ui/message |
window.openai.sendFollowUpMessage |
公式は、window.openai を、標準の流れが動いてから、機能の有無を確かめたうえで使うよう書いています(チェックアウト、ファイル、モーダルなど、標準にないChatGPT固有の機能のため)。リソースのMIMEタイプは text/html;profile=mcp-app、画面の外への通信の許可(csp の connectDomains、resourceDomains、frameDomains)は狭く保つこと、リソースのアドレスはキャッシュの鍵として働くので、互換のない変更では新しいアドレスにすることが挙がっています。データを返すツールと、画面を出すツールを分けると、画面が最終のデータで1回だけ描かれる、という勧めもあります。
読めていないのは、公開の審査の要件(Submit and publish)と、画面の部品の細かい作法です。ヘルプには、公開の流れは別の窓口で、開発者ガイドラインは草案で変わりうる、とだけありました。
料金と上限の見方
トークンの値段(Standard、2026年10月24日に取得)
公式の価格ページは、トークンの値段を100万トークンあたりで示します。主力の3つのStandardの値段は次のとおりです。
| モデルID | 入力 | キャッシュされた入力 | 出力 |
|---|---|---|---|
| gpt-6-astra | $10.00 | $1.00 | $50.00 |
| gpt-6.1-sol | $2.00 | $0.10 | $10.00 |
| gpt-6-luna | $0.10 | $0.01 | $0.50 |
ページには、ほかに、Flex/Batch、Fast、Ultrafastの表があります。ただし、取得した要約では各表の見出しが読めず、僕らは、どの表がどの処理に当たるかを、確認できていません。そのため、ここには数字を載せません。名前の変更としては、「Priority processing」が2026年7月30日に「Fast mode」になった、と書かれています。データの所在地の指定(地域処理)は、2026年3月5日以降のモデルで10%の上乗せです。FedRAMPの窓口にも10%の上乗せがあります。
キャッシュの書き込みの値段(30分、12時間)の列も、Standardの表にありました。たとえば、gpt-6-astraは、30分の書き込みが$12.50、12時間が$25.00です。使い方(どう指定するか)は、この記事では読んでいません。
ツールの値段(同じページ)
- Web search:1,000回の呼び出しあたり$10.00。検索で得た内容のトークンは、モデルの値段で別にかかります。
- File search:保存は1GBあたり1日$0.10(1GBは無料)、呼び出しは1,000回あたり$2.50(この呼び出しの価格は、価格ページでResponses APIのものと書かれています)。
- コンテナ(Hosted ShellとCode Interpreter):20分のセッションごと、メモリ1GBで$0.03、4GBで$0.12、16GBで$0.48、64GBで$1.92。
- ChatKitのファイルと画像の保存:1アカウントあたり月1GBの無料分のあと、1GBあたり1日$0.10。
音声、画像生成、文字起こし、Codex向けのモデルなどにも、別の価格の欄があります。この記事では扱いません。ページには、GPT-5.6 Solの販促の価格が、少なくとも2026年11月21日まで続く、といった期限つきの記載もあるので、予算を組む前に、実際のページで日付を見てください。
見積もりの足し算(僕らの整理です)
価格ページの数字を使って、手で見積もる例です。前提は、僕らが決めたものです。1回の呼び出しで、入力が1万トークン、出力が2千トークン。それを1,000回呼ぶ。Standardの値段で、キャッシュと税は考えません。
| モデルID | 入力(1,000万トークン分) | 出力(200万トークン分) | 合計 |
|---|---|---|---|
| gpt-6-astra | 10 × $10.00 = $100 | 2 × $50.00 = $100 | $200 |
| gpt-6.1-sol | 10 × $2.00 = $20 | 2 × $10.00 = $20 | $40 |
| gpt-6-luna | 10 × $0.10 = $1 | 2 × $0.50 = $1 | $2 |
入力は1,000回 × 1万 = 1,000万トークン、出力は1,000回 × 2千 = 200万トークンなので、100万トークンあたりの値段に、10と2を掛けています。ここに、ツールの分が別に足されます。たとえば、同じ1,000回のすべてでWeb searchを1回ずつ使えば、呼び出しの分だけで$10.00が加わります(検索で得た内容のトークンは、さらにモデルの値段でかかります)。つまり、同じ呼び出しでも、モデルの選び方で金額が桁違いに変わり、ツールは別の請求の行になる、というのが、手で確かめられる「二本立て」です。実際の請求は、キャッシュの有無、期限つきの販促価格、データの所在地の上乗せなどで変わるので、これは目安にとどめてください。
支払いの始めかた(プリペイド)
ヘルプ「Setting up and managing prepaid API billing」の手順は、次のとおりです(取得した要約による)。
- APIの組織の課金を管理する権限を確かめる。
- 組織のAPI請求の概要ページを開く。
- 「Add payment details」で支払い情報を入れる。
- 最初の購入額を選ぶ。最小は$5、既定は$10。
- 「Use auto-reload」の設定を見る。設定のときは、既定でオンです。自動の購入を望まなければ、オフにします。
- オンのままなら、残高のしきい値、目標の残高、任意の月間の再購入の上限を決める。
- 購入を確定する。残高の反映には数分かかることがあります。
そのほかの決まりは、次のとおりです。
- 自動の再購入は、残高がしきい値を下回ると、クレジットを足します。最小の再購入は$5です。月間の上限は、手動の購入には効きません。
- 買ったクレジットは、1年で失効し、OpenAIは延ばせません。
- クレジットは、法律や契約で必要な場合や、承認された例外を除き、返金されません。ただし、確認された請求の誤り、確認された不正利用、確認されたOpenAIの側の障害や誤ったアカウント制限などでは、未使用分が返金の対象になりうる、と書かれています。
- 残高がなくなると、APIは
credit_balance_exhaustedの請求エラーを返します。ただし、止まるまでに遅れがありえて、その間の使用で残高がマイナスになることがあり、その分は次の購入から引かれます。
読んだ範囲では、プリペイドが唯一の払い方なのか(後払いの方式があるのか)は、書かれていませんでした。請求のヘルプは、「後払い(pay-as-you-go)の方式は説明していない」ものでした。
3種類の上限は別のもの
| 上限 | 誰が決めるか | 当たるとどうなるか | 公式のどこに書かれているか |
|---|---|---|---|
| 利用の段階(tier)ごとのレート上限 | OpenAI(クレジットの購入額で上がる) | 429のエラー | 開発者向けドキュメント「Rate limits」 |
| 支出のアラート | あなた | 通知が届く。通信は続く | 同上 |
| 支出のハード上限 | あなた(組織またはプロジェクト) | 対象の通信が429で止まる | 同上、production best practices |
支出のアラートとハード上限を設定する場所は、production best practicesが、アカウント設定の中の「limits page」(platform.openai.com/settings/organization/limits)と書いています。メニューの名前までは書かれていません。使った量を見る画面は、別に、同じ形のアドレスの .../settings/organization/usage です。ただし、どちらもログインが要る画面なので、この記事では中を見ていません。
利用の段階は、「Rate limits」のページにある表のとおり、次のようになっています(取得時点)。
| 段階 | 条件 | 月間の利用上限 |
|---|---|---|
| Free | 利用できる地域の利用者 | $100 |
| Build | クレジットの購入の合計が$5 | $500 |
| Launch | 同じく$100 | $5,000 |
| Grow | 同じく$500 | $200,000 |
購入の合計がしきい値に届くと、自動で上がります。ページには、しきい値の日付は書かれていません。1分あたりの上限は、モデルと段階で違い、たとえばBuildでは、Astra、Sol、Terraが5,000リクエスト/分と100万トークン/分、Lunaが5,000リクエスト/分と200万トークン/分でした。確認の場所は、「Settings > Organization > Limits」の「Rate limits」の欄です。
エラーの扱いも、公式に書かれています。
- 429で
slow_downは、上限の内でも、増やし方が急すぎたときに出ます。Retry-Afterがあれば従い、量を減らして、徐々に戻します。目安として、入力が1分あたり100万トークンに達してからは、15分ごとに50%を超えて増やさない、とあります。 - 503で
server_is_overloadedは、モデルの一時的な過負荷です。待って、遅らせながら再試行します。 Retry-Afterは最小の待ち時間で、ばらつき(ジッター)を足します。ヘッダーがなければ、エラーが続くあいだ、試す間隔を延ばします。- 失敗したリクエストも、1分あたりの上限に数えられます。
- 割り当てや請求のエラーは、再試行しても直らないので、請求や上限の設定を直します(この点と、公式SDKの自動再試行の挙動は、今回読んだページでは確かめられていません)。
エラーが出たときに、まず何をするか、の早見表です。公式のRate limits、プリペイドのヘルプ、認証のページに書かれている範囲だけで作っています(まず何をするかの列は、僕らの整理です)。
| 起きたこと | 公式に書かれている内容 | まずやること |
|---|---|---|
429、slow_down |
上限の内でも、増やし方が急すぎたとき | 量を減らし、Retry-After があれば従い、徐々に戻す |
503、server_is_overloaded |
モデルの一時的な過負荷 | 待ち、間隔を延ばして再試行する |
credit_balance_exhausted(請求のエラー) |
残高がなくなった。止まるまでに遅れがあり、残高がマイナスになることがある | 再試行せず、請求の概要ページで購入するか、自動の再購入の設定を見る |
| 429(ハード上限) | 支出のハード上限に達すると、対象の通信が止まる | 再試行せず、limits pageで上限と、止めていいプロジェクトかを見る |
| キーの失効後の失敗 | 失効したキーは数秒以内に使えなくなる | 新しいキーに差し替えたか、環境変数が古いままでないかを見る(状態コードは、読んだページに書かれていませんでした) |
production best practicesは、さらに、ステージング用と本番用のプロジェクトを分けること、本番へのアクセスを絞ること、プロジェクトごとにレートと支出の上限を決めること、しきい値の通知メールを設定すること、を挙げています。ハード上限については、「影響を受けるAPIの通信が止まる」ので、本番で有効にする前に、支出上限のガイドを読むよう警告しています。そのガイド自体は、読んでいません。
データの行き先
公式の「Your data」のページから、読めた範囲を整理します(取得は要約で、末尾の約1万字は読めていません)。
- 学習:2023年3月1日以降、明示的に同意しない限り、APIに送ったデータは、モデルの学習や改善に使われません。
- 不正利用の監視のログ:APIの機能の利用に対して、既定で作られ、最大30日間保持されます。法律で必要な場合や、サービスや第三者を害から守るのに合理的に必要な場合は、もっと長くなりえます。
- ゼロデータ保持(ZDR)と修正された不正利用の監視(MAM):どちらも、OpenAIの事前の承認が要ります。ZDRでは、
/v1/responsesと/v1/chat/completionsで、storeがtrueでもfalseになります。 - Responses API:不正利用のログは30日。アプリの状態は、既定で、または
storeがtrueのとき、30日。バックグラウンドの実行では、結果が約10分間、ポーリング用に残ります。音声の出力の状態は1時間、プロンプトのキャッシュは最大24時間です。 - Chat Completions:アプリの状態は、音声の出力(1時間)とプロンプトのキャッシュ(24時間)を除いて、なし。
ここに、公式の資料同士の食い違いが1つあります。移行ガイドは、Chat Completionsは新しいアカウントで既定で保存される、と書き、「Your data」のページは、Chat Completionsのアプリの状態はない、と書いています。どちらが現状かは確認できていません。保存したくないなら、リクエストに store: false を明示するのが、書かれた範囲では確実です(これは僕らの読みです)。
ChatGPTのデータの扱い(前のガイド02)は別の話です。APIの規則は、API経由の利用にだけ当てはまります。
最初の10分でやること
公式に書かれている範囲の、最短の流れ(僕らの整理です)。
- 請求の画面が別であることを、ChatGPTのBillingとAPIの請求の概要の両方を開いて確かめます。
- APIのダッシュボードで、プロジェクトを1つ用意します(テスト用)。キーは、そのプロジェクトのものにします。
- キーを作り、表示された1回のうちに、環境変数
OPENAI_API_KEYに入れます。チャットやドキュメントには貼りません。 - 先に、支出のアラートを入れます(通知が届くだけで、通信は止まりません)。ハード上限は、超えると対象の通信が止まります。テスト用のプロジェクトには低めに入れてもよいのですが、本番で有効にする前には、公式の支出上限のガイドを読みます(そのガイドは僕らは読めていません)。設定の場所は、アカウント設定のlimits page(公式は、メニューの名前までは書いていません)です。プリペイドの最初の購入は、最小の$5からでも始められます(ヘルプ上の最小額)。自動の再購入は、使わないなら、オフにします。
pip install openaiかnpm install openaiを入れ、上のResponses APIの最小の呼び出しを動かします。応答がoutput_textに出たら、最初の一歩は済みです。- 次に、モデルIDを、価格ページとモデル一覧で、今のものに合わせます。
- キーをコードに直接書いていないこと、リポジトリに入れていないことを、最後に確かめます。
エージェントを動かしたいなら(Responsesの最小の呼び出しが動いてから)。
1. pip install openai-agents(JavaScriptは npm install @openai/agents zod)を入れます。
2. APIキーは、同じ環境変数 OPENAI_API_KEY です。
3. 上の最小のエージェントを動かし、Runner.run の結果の final_output(JavaScriptは finalOutput)に答えが出るのを確かめます。
4. 道具や引き継ぎは、1つずつ足します。公式のクイックスタートも、最初から大きなマルチエージェントにしないよう書いています。
ChatGPTの中に出したいなら。 1. 先に、plugins quickstartの、公開サンプルのサーバーで、ChatGPTへのつなぎ方(Plugins、Add custom MCP server、Create as a plugin)を体験します。 2. 自分のサーバーは、MCP Inspectorで試してから、公開のHTTPSでつなぎます(前のガイド05の手順)。 3. 自分のプランで、作ってつなげるか(開発者モードやApps SDKの対象か)を、画面で確かめます。
僕らの見立て:どの入口から始めるか
ここから先は、僕らの見立てです。公式の推奨ではありません。
- 1回の質問と答えなら、Responses APIだけで足ります。 エージェントのライブラリは、道具を使って何手も進める必要が出てから足しても遅くない、と思います。公式のAgents SDKのクイックスタートも、能力を1つずつ足すよう書いています。
- Agents APIは、実行環境を自分で持ちたくないときの選択肢ですが、まず公式がベータかどうかを明記するまで、本番の中心には置かない、というのが無理のない構えです。 ヘッダーに
OpenAI-Betaが付いている、ZDRが使えない、データの所在地が米国に限られる、という点が、読んだ範囲での理由です。 - 社内の誰かが、ChatGPTの契約を根拠に、APIの費用は出ないと考えているなら、先に請求の画面を一緒に見ます。 「別の請求」は、公式のヘルプが2か所で書いていることです。
- ブラウザやスマホのアプリから、直接OpenAIを呼ぶ設計は、公式の「クライアント側にキーを置かない」の注意と、ぶつかります。 自分のサーバーを間に置いて、そこでキーを使う形が、公式の書き方に沿います。
- MCPの
require_approvalをneverにするのは、読み取りだけで、信頼できるサーバーに限ります。
気をつけること
- この記事は、実際に使って確かめた記録ではありません。運営者はChatGPTを入れていますが、使い心地はこの記事には書いていません。コードは、公式のページの内容を要約として取得し、それに合わせて写したり短くしたりしたもので、実行していません。
- 公式のクイックスタートの本物のコードは、取得の要約の都合で、そのままは読めませんでした。上のPythonとcurlの例は、僕らが公式のページの記述に合わせて書いた最小の形です。写して使う前に、公式のページの現物と見比べてください。
- 呼び名が揺れています。Apps SDK、plugin、アプリ、コネクタ、Agent Builder、Agents SDK、Agents APIは、公式の資料の中でも混在しています。URLの名前(たとえば
apps-sdk)と、本文の言葉(plugin)が一致しない箇所もありました。 - 数字は、すべて2026年10月24日に要約で取得した表示です。価格の対応(Flex/Batch、Fast、Ultrafastの各表)、プリペイド以外の払い方、Apps SDKのヘルプの日付は、確認できていません。
- 読めなかったもの:ヘルプ「Best practices for API key safety」(2回失敗。キーの削除の手順も、読んだヘルプには見つかりませんでした)、ダッシュボード(platform.openai.com。ログインが要るため)、リファレンスのResponsesのページの末尾、「Your data」の末尾、支出上限のガイド、Agents APIとAgents SDKの比較のページ、Apps SDKの公開の審査の要件、利用規約とサービス契約の本文です。規約に関わる判断は、公式の規約を直接確かめてください。
- 「書かれていない」は、「読んだ範囲では見つからなかった」の意味です。
- 料金、契約、データの扱いの判断は、公式の料金ページと規約、必要なら専門家で確認してください。この記事は、投資や法律の助言ではありません。
出典
- Developer quickstart(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- API Platform overview(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Pricing(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Migrate to the Responses API(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Create a model response(API reference、OpenAI、日付の表示なし、確認日2026-10-24、末尾は未読)
- Your data(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24、末尾は未読)
- Agents(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Agents SDK quickstart(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Agents API(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- MCP and Connectors(Responses API、OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- MCP server and UI quickstart(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Add UI to your MCP server(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Plugins quickstart(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Authentication(API reference、OpenAI、日付の表示なし、確認日2026-10-24)
- Production best practices(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Assistants migration guide(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Rate limits(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Supported countries and territories(OpenAI developer docs、OpenAI、日付の表示なし、確認日2026-10-24)
- Build with the Apps SDK(OpenAI Help Center、OpenAI、相対表示のみ、確認日2026-10-24)
- Where do I find my OpenAI API Key?(OpenAI Help Center、OpenAI、日付の表示なし、確認日2026-10-24)
- Can I share my API key with my teammate/coworker?(OpenAI Help Center、OpenAI、日付の表示なし、確認日2026-10-24)
- Managing billing for ChatGPT and the API platform(OpenAI Help Center、OpenAI、日付の表示なし、確認日2026-10-24)
- Setting up and managing prepaid API billing(OpenAI Help Center、OpenAI、日付の表示なし、確認日2026-10-24)
- What is ChatGPT Plus?(OpenAI Help Center、OpenAI、日付の表示なし、確認日2026-10-24)