從寫程式碼,到創作下一幕

探索 字節跳動 - 火山方舟 的 AI 程式設計與影片創作活動。

Agent Plan & Coding Plan

一站體驗多款熱門模型,為 AI 程式設計與智能體開發提供更多選擇。新使用者可聯絡(微信: goo_lvyouyou)免費體驗 9.9 agent plan。

Seedance 2.5

讓創意,躍然成片。探索 30 秒影片、多模態參考與局部編輯,把腦海中的畫面變成下一支作品。

繁體中文

Model Context Protocol

Model Context Protocol

讓 Codex 存取第三方工具和上下文

Model Context Protocol (MCP) 將模型連線到工具和上下文。使用它可以 讓 ChatGPT 或 Codex 存取第三方文件,或使其能夠 與瀏覽器或 Figma 等開發者工具互動。

ChatGPT 網頁端可以使用外掛提供、由遠端 MCP 支援的工具。安裝外掛後, Chat 和 Work 可以使用其中捆綁的連接器和遠端 MCP 工具。 開啟 Plugins 標籤頁即可瀏覽和管理可用工具。本機 Codex 客戶端也可以直接連線 MCP server 並共享其設定。

ChatGPT 桌面應用、Codex CLI 和 IDE 擴充套件支援 MCP server, 並為同一 Codex 主機共享 MCP 設定。

以下支援的伺服器功能適用於在 Codex 主機上設定的 MCP 伺服器。託管的外掛工具可能具有不同的功能。

支援的 MCP 功能

  • STDIO 伺服器:作為本機程序執行的伺服器(由命令啟動)。
    • 環境變數
  • 可流式傳輸的 HTTP 伺服器:通過地址存取的伺服器。
    • Bearer token 身份驗證
    • OAuth 身份驗證,包括 Client ID Metadata Documents (CIMD) 和 Dynamic Client Registration (DCR)
    • 適用於可信第一方伺服器的 ChatGPT 會話身份驗證
  • 伺服器指令:Codex 會讀取初始化期間傳回的 MCP instructions 欄位,並將其作為伺服器級指南,與伺服器工具配合使用。

如果你為 Codex 建置或維護 MCP server,請使用 instructions 來說明適用於整個伺服器的跨工具工作流程、約束和速率限制。請讓前 512 個字元自成一體,以便 Codex 在決定如何使用伺服器時能夠獲得最重要的指導。

將 Codex 連線到 MCP server

Codex 將 MCP 設定與其他 Codex 設定一起儲存在 config.toml 中。預設位置為 ~/.codex/config.toml,但你也可以使用 .codex/config.toml 將 MCP server 限定到專案範圍(僅限可信專案)。

ChatGPT 桌面應用、Codex CLI 和 IDE 擴充套件共享此設定。 設定 MCP server 後,你可以在這些客戶端之間切換, 無需重新設定。

在 ChatGPT 桌面應用中設定

  1. 開啟 Settings,然後選擇 MCP servers
  2. 選擇 Add server
  3. 輸入名稱,選擇 STDIOStreamable HTTP,然後提供 伺服器命令或 URL。
  4. 儲存伺服器,然後選擇 Restart

伺服器列表會顯示哪些伺服器已啟用,以及哪些伺服器需要 OAuth。OAuth 伺服器需要登入時,選擇 Authenticate。在輸入框中鍵入 /mcp 即可檢視已連線的伺服器。

使用 config.toml 設定

如需更精細的控制,請編輯 ~/.codex/config.toml 或專案範圍的 .codex/config.toml。請參閱設定參考, 其中提供了所有受支援 MCP 選項的可搜尋列表。

在設定檔中,使用 [mcp_servers.<server-name>] 表設定每個 MCP server 。

STDIO 伺服器

  • command(必填):啟動伺服器的命令。
  • args(可選):傳遞給伺服器的參數。
  • env(可選):為伺服器設定的環境變數。
  • env_vars(可選):允許並轉發的環境變數。
  • cwd(可選):啟動伺服器時使用的工作目錄。
  • experimental_environment(可選):設為 remote,以便在遠端執行器環境可用時通過該環境啟動 stdio 伺服器。

env_vars 可以包含普通變數名或帶有來源的物件:

env_vars = ["LOCAL_TOKEN", { name = "REMOTE_TOKEN", source = "remote" }]

字串條目和 source = "local" 從 Codex 的本機環境讀取。 source = "remote" 從遠端執行器環境讀取,並且需要 遠端 MCP stdio。

Streamable HTTP 伺服器

  • url(必填):伺服器地址。
  • auth(可選):在已設定的 bearer token 和 授權標頭之後嘗試的身份驗證方式。使用 oauth(預設值)可採用已儲存的 MCP OAuth 憑據。使用 chatgpt 可針對受信任的 第一方 ChatGPT 源使用當前 ChatGPT 會話,並以已儲存的 OAuth 作為回退方案。
  • bearer_token_env_var(可選):用於存放 bearer token 的環境變數名稱,該令牌將通過 Authorization 傳送。
  • http_headers(可選):標頭名稱到靜態值的對映。
  • env_http_headers(可選):標頭名稱到環境變數名稱的對映(值從環境中取得)。
  • http_headers_helper(可選):輸出由標頭名稱和字串值組成的 JSON 物件的本機命令, 例如 {"X-Auth": "temporary-token"}。 支援從本機環境建立的 HTTP MCP 連線;不支援 stdio 伺服器或通過遠端執行環境建立的連線。

Codex 會為該連線快取輔助程式生成的標頭。同源 POST 傳回 401403 後,Codex 會重新整理一次標頭,並且僅當 輔助程式傳回的值發生變化時才重試。顯式 bearer token 和 OAuth 憑據 優先於輔助程式提供的 Authorization 標頭。 如果 OAuth 403 回應報告權限範圍不足,則不會觸發 輔助程式重新整理。

如果無法解析任何憑據來源,Codex 可以在不進行 身份驗證的情況下連線伺服器。單獨執行 codex mcp login <server-name> 以啟動 MCP OAuth 登入。

其他設定選項

  • startup_timeout_sec(可選):伺服器啟動的超時時間(秒)。預設值:10
  • tool_timeout_sec(可選):伺服器執行工具的超時時間(秒)。預設值:60
  • enabled(可選):設為 false 可在不刪除伺服器的情況下將其停用。
  • required(可選):設為 true,可在這個已啟用的伺服器無法初始化時讓啟動失敗。
  • enabled_tools(可選):工具允許列表。
  • disabled_tools(可選):工具拒絕列表(在 enabled_tools 之後應用)。
  • default_tools_approval_mode(可選):此伺服器所提供工具的預設核准行為。 支援的值包括 autopromptwritesapprovewrites 模式會對未標記為只讀的工具發起核准請求。
  • tools.<tool>.approval_mode(可選):針對單個工具覆蓋核准行為。
  • tools.<tool>.output_token_limit(可選):單次工具輸出的正數 token 預算, 不包括標準的 20% 序列化餘量。它會覆蓋模型為該工具設定的 預設輸出截斷預算。

頂層 mcp_optional_startup_grace_ms 設定用於控制 Codex 在建置初始工具目錄時等待可選 MCP server 的時長。 預設值為 1000 毫秒。將其設為 0,即可改為等待每臺伺服器各自的 startup_timeout_sec。必需伺服器仍使用各自的啟動 超時時間。

OAuth 客戶端註冊和回撥

當授權伺服器要求使用預註冊的 OAuth 客戶端時,請在新增 MCP server 時提供 其客戶端 ID:

codex mcp add example --url https://mcp.example.com --oauth-client-id my-client

Codex 會顯示需要向提供方註冊的完整回撥 URL:

OAuth callback URL: http://127.0.0.1/callback

Codex 會將回調與客戶端 ID 一並儲存在 config.toml 中,供後續 登入使用:

[mcp_servers.example]
url = "https://mcp.example.com"

[mcp_servers.example.oauth]
client_id = "my-client"
callback_url = "http://127.0.0.1/callback"

僅當授權伺服器公佈 authorization_response_iss_parameter_supported: true 並在後設資料中提供 issuer 時,新新增的預註冊客戶端才會使用穩定的回撥。如果未公佈頒發者支援,Codex 會附加伺服器專用的 回撥 ID,例如 http://127.0.0.1/callback/XuuuHAzzHOni。未儲存回撥的現有客戶端 將繼續使用其包含特定回撥 ID 的重定向。

登入期間,回撥選擇取決於 OAuth 設定和 授權伺服器後設資料:

OAuth 設定 頒發者支援 使用的回撥
callback_url,無 client_id 支援 使用設定的回撥進行客戶端註冊。
callback_url,無 client_id 不支援 使用設定的回撥進行客戶端註冊,並在末尾附加伺服器專用的回撥 ID。
client_idcallback_url 支援 複用設定的回撥;授權回應必須包含匹配的 iss
client_id 和以正確回撥 ID 結尾的 callback_url 不支援 原樣複用設定的回撥。
client_id 和缺少正確回撥 ID 的 callback_url 不支援 忽略設定的回撥。Codex 使用 mcp_oauth_callback_url;若未設定,則使用 http://127.0.0.1/callback,並在末尾附加回調 ID。
client_id,但未設定 callback_url 支援或不支援 Codex 使用全域或預設回撥,並在末尾附加伺服器專用的回撥 ID。

回退不會修改已儲存的回撥 URL。Codex 根據 MCP server URL(包括其路徑和查詢字串) 派生回撥 ID。自動登入和顯式登入 採用相同的選擇規則。

需要自訂回撥路徑或遠端 Devbox 入口 URL 時,請設定 mcp_oauth_callback_url。當提供方支援頒發者識別時,新新增的預註冊客戶端會原樣使用該 URL。 否則,它們會使用設定的 URL,並在末尾附加伺服器專用的回撥 ID。請始終註冊 codex mcp add 顯示的確切回撥。

對於不含埠的 http://127.0.0.1 回撥,Codex 會從其顯示和儲存的 URL 中省略監聽埠,然後在授權期間插入當前使用的監聽埠。 此替換不適用於 localhost、IPv6 主機、 HTTPS URL 或已包含埠的回撥。根據 RFC 8252 第 7.3 節,授權伺服器必須接受可變的環回埠。

設定 mcp_oauth_callback_port 可選擇固定的全域監聽埠,也可以設定 mcp_servers.<server-name>.oauth.callback_port 為單個伺服器覆蓋該埠。 回撥 URL 中的顯式埠不會設定監聽器。對於 直接環回回調,請使用不含埠的 http://127.0.0.1,或者為回撥 URL 和監聽器設定相同的 顯式埠。代理回撥可以有意使用與本機監聽器 埠不同的外部 URL 埠。本機回撥 URL 繫結到本機介面;非本機回撥 URL 繫結到 0.0.0.0

Codex 會在交換授權碼之前驗證傳回的所有 iss。如果 iss 不匹配,始終會拒絕該回應。公佈頒發者支援後, 缺少 iss 也會導致回應被拒絕。上述兩種失敗均不會交換授權碼,也不會 回退到其他回撥。回撥 URL 格式錯誤,或者公佈頒發者支援卻未在後設資料中提供頒發者, 也仍屬於不可恢復的失敗。請參閱 對使用者進行身份驗證

如果 MCP server 公佈 scopes_supported,Codex 會在 OAuth 登入期間優先使用這些 由伺服器公佈的作用域。否則,Codex 將回退到 config.toml 中設定的作用域。

OAuth 客戶端註冊

Codex 支援 OAuth Client ID Metadata Documents (CIMD) 和 Dynamic Client Registration (DCR)。預設情況下,當授權伺服器通告 client_id_metadata_document_supported: true、在 token_endpoint_auth_methods_supported 中包含 none,且回撥使用受支援的 環回 URL 時,Codex 會自動選擇 CIMD。否則,Codex 會在 DCR 可用時使用 DCR。已設定的 OAuth 客戶端 ID 始終具有優先權,並會跳過客戶端註冊。

對於 CIMD,Codex 會使用專用於該 MCP 伺服器、由 ChatGPT 託管的後設資料文件:

https://chatgpt.com/oauth/codex/<callback_id>/client.json

Codex 會根據 MCP server URL 派生 <callback_id>,並將其包含在 環回重定向 URI 中,例如 http://127.0.0.1:<port>/callback/<callback_id>。後設資料文件會註冊 不含埠的匹配環回 URI。按照 RFC 8252 的要求,授權伺服器必須接受登入時選擇的 埠,同時精確匹配主機和路徑。自訂 回撥主機、路徑或查詢參數需要使用 DCR 或已設定的 OAuth 客戶端 ID。

對穩定共享 CIMD 文件的支援正在開發中,即將推出:

https://chatgpt.com/oauth/codex/client.json

當授權伺服器通告 authorization_response_iss_parameter_supported: true、在其後設資料中提供有效的 issuer,並且授權回應中包含匹配的 iss 時,Codex 將使用帶有共享 /callback 路徑的穩定文件。 未提供與頒發者繫結的回應的伺服器將繼續使用 回撥專用文件。

要為單次 CLI 登入選擇註冊方式,請使用 --oauth-client-registration

codex mcp login <server-name> --oauth-client-registration cimd
codex mcp login <server-name> --oauth-client-registration dcr

預設值為 auto。註冊方式選擇僅適用於當前登入, 不會儲存在 config.toml 中。

config.toml 範例

[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
env_vars = ["LOCAL_TOKEN"]

[mcp_servers.context7.env]
MY_ENV_VAR = "MY_ENV_VALUE"
# Optional MCP OAuth callback overrides (used by `codex mcp login`)
mcp_oauth_callback_port = 5555
mcp_oauth_callback_url = "https://devbox.example.internal/callback"
[mcp_servers.figma]
url = "https://mcp.figma.com/mcp"
bearer_token_env_var = "FIGMA_OAUTH_TOKEN"
http_headers = { "X-Figma-Region" = "us-east-1" }
[mcp_servers.chrome_devtools]
url = "http://localhost:3000/mcp"
enabled_tools = ["open", "screenshot"]
disabled_tools = ["screenshot"] # applied after enabled_tools
default_tools_approval_mode = "prompt"
startup_timeout_sec = 20
tool_timeout_sec = 45
enabled = true

[mcp_servers.chrome_devtools.tools.open]
approval_mode = "approve"
output_token_limit = 30000

外掛提供的 MCP server

已安裝的外掛可以在其外掛清單中捆綁 MCP server 。這些 伺服器從外掛啟動,因此使用者設定無需設定其 傳輸命令。使用者設定仍可在 plugins.<plugin>.mcp_servers.<server> 下控制啟用/停用狀態和工具策略。

[plugins."sample@test".mcp_servers.sample]
enabled = true
default_tools_approval_mode = "prompt"
enabled_tools = ["read", "search"]

[plugins."sample@test".mcp_servers.sample.tools.search]
approval_mode = "approve"

外掛提供的 HTTP MCP server 也可以在 .mcp.json 中宣告 OAuth 設定。 外掛清單使用駝峰式欄位名 clientIdcallbackUrlcallbackPort

{
  "mcpServers": {
    "sample": {
      "type": "http",
      "url": "https://mcp.example.com/mcp",
      "oauth": {
        "clientId": "my-pre-registered-client",
        "callbackUrl": "http://127.0.0.1/callback/registered"
      }
    }
  }
}

外掛提供的 MCP server 與其他 MCP server 採用相同的回撥選擇規則。如果外掛提供了 clientId,其提供方不支援 與頒發者繫結的回撥,並且 callbackUrl 缺少伺服器專用的回撥 ID,Codex 會在登入時忽略該 URL,改用 mcp_oauth_callback_url;若未設定, 則使用 http://127.0.0.1/callback,並在末尾附加回調 ID。 設定的 callbackUrl 保持不變。

外掛的 oauth.callbackPort 會覆蓋全域 mcp_oauth_callback_port;如果兩者均未設定,Codex 會選擇臨時埠。 嵌入 callbackUrl 的埠不會選擇監聽埠。對於使用固定埠的 直接環回回調,請將這兩個值設定為一致:

{
  "callbackUrl": "http://127.0.0.1:4321/callback/registered",
  "callbackPort": 4321
}

對於遠端入口或其他代理,如果代理將請求轉發到設定的 監聽器,回撥 URL 埠可以有意與本機監聽器埠不同。

實用 MCP server 範例

MCP server 列表仍在不斷增長。以下是一些常見範例:

  • OpenAI Docs MCP:搜尋和閱讀 OpenAI 開發者文件。
  • Context7:連線最新的開發者文件。
  • Figma LocalRemote:存取你的 Figma 設計。
  • Playwright:使用 Playwright 控制和檢查瀏覽器。
  • Chrome Developer Tools:控制和檢查 Chrome。
  • Sentry:存取 Sentry 日誌。
  • GitHub:管理 git 所支援範圍之外的 GitHub 功能(例如 PR 和問題單)。