For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主要導覽

建置用於外掛程式與 API 整合的 MCP 伺服器

建置可搭配外掛程式、深度研究或 API 整合使用的 MCP 伺服器。

Model Context Protocol(MCP)是一種開放通訊協定,正逐漸成為業界用來為 AI 模型擴充工具與知識的標準。遠端 MCP 伺服器可透過網際網路,讓模型連接新的資料來源並使用更多功能。

本指南將介紹如何建置遠端 MCP 伺服器,從私有資料來源(向量儲存庫)讀取資料,並透過 ChatGPT 和 Codex 中的外掛程式、ChatGPT 深度研究與公司知識,以及 API 提供這些資料。

注意:若要使用 MCP 伺服器建置外掛程式,請先閱讀外掛程式文件:快速入門建置 MCP 伺服器連接並測試外掛程式身分驗證。如果 MCP 伺服器不需要 UI,就可以直接提供工具,不必提供 UI 資源。

設定資料來源

你可以使用任何來源的資料來支援遠端 MCP 伺服器,但為了簡化範例,我們將使用 OpenAI API 中的向量儲存庫。首先,將一份 PDF 文件上傳至新的向量儲存庫;你可以使用這本已進入公有領域、出版於 19 世紀的貓咪書籍作為範例。

你可以在此處的儀表板上傳檔案並建立向量儲存庫,也可以透過 API 建立向量儲存庫並上傳檔案。請依照向量儲存庫指南設定向量儲存庫,並將檔案上傳至其中。

請記下向量儲存庫的唯一 ID,以便在後續範例中使用。

向量儲存庫組態

建立 MCP 伺服器

接著,我們來建立遠端 MCP 伺服器,讓它能在向量儲存庫中執行搜尋查詢,並根據指定的檔案 ID 傳回文件內容。

在此範例中,我們將使用 Python 和 FastMCP 建置 MCP 伺服器。本節最後提供伺服器的完整實作,以及在瀏覽器開發環境中執行的說明。

請注意,各種程式語言都有其他 MCP 伺服器框架可供選擇。不過,無論使用哪個框架,伺服器中的工具定義都必須符合此處說明的結構。

若要搭配 ChatGPT 深度研究與公司知識使用,MCP 伺服器 應實作兩個唯讀工具:searchfetch,並採用 公司知識相容性中所述的相容性結構描述。 同一套介面也適用於透過 API 執行的研究工作流程。

請為每個工具宣告輸出結構描述,讓用戶端能驗證結果的結構。 在 FastMCP 中,具型別的回傳模型可以自動產生此結構描述; 下方範例則明確傳入由相同模型產生的 output_schema

search 工具

search 工具負責根據使用者的查詢,從 MCP 伺服器的資料來源傳回相關搜尋結果清單。

引數:

單一查詢字串。

傳回值:

一個僅含 results 鍵的物件,其值為結果物件組成的陣列。每個結果物件應包含:

  • id - 文件或搜尋結果項目的唯一 ID
  • title - 便於人員閱讀的標題。
  • url - 用於引用的標準 URL。

在 MCP 中,請以 structuredContent 傳回此物件,並將相同的值 編碼為 JSON 字串,放入 content 陣列中, 以維持相容性。

最終的工具回應應如下所示:

{
  "structuredContent": {
    "results": [{ "id": "doc-1", "title": "...", "url": "..." }]
  },
  "content": [
    {
      "type": "text",
      "text": "{\"results\":[{\"id\":\"doc-1\",\"title\":\"...\",\"url\":\"...\"}]}"
    }
  ]
}

fetch 工具

fetch 工具用於擷取搜尋結果中文件或項目的完整內容。

引數:

用於唯一識別搜尋文件的字串。

傳回值:

一個具有下列屬性的物件:

  • id - 文件或搜尋結果項目的唯一 ID
  • title - 搜尋結果項目的標題,型別為字串
  • text - 文件或項目的全文
  • url - 指向文件或搜尋結果項目的 URL,可用於在研究中 引用特定資源。
  • metadata - 以鍵值配對形式提供的結果相關資料,可省略

在 MCP 中,請以 structuredContent 傳回此物件,並將相同的值 編碼為 JSON 字串,放入 content 陣列中,以維持相容性。

最終的工具回應應如下所示:

{
  "structuredContent": {
    "id": "doc-1",
    "title": "...",
    "text": "full text...",
    "url": "https://example.com/doc",
    "metadata": { "source": "vector_store" }
  },
  "content": [
    {
      "type": "text",
      "text": "{\"id\":\"doc-1\",\"title\":\"...\",\"text\":\"full text...\",\"url\":\"https://example.com/doc\",\"metadata\":{\"source\":\"vector_store\"}}"
    }
  ]
}

引用行為

無論是 search 結果還是 fetch 回應, ChatGPT 都只會在 url 為非空字串時建立引用中繼資料。如果結果有 title, 卻沒有可用的 url,就會保留為一般工具輸出,而不會變成空白引用。 若要讓結果可供引用,請傳回其標準 url

例如,ChatGPT 可能會使用以下引數呼叫 search

{ "query": "What is the quarterly plan?" }

MCP 伺服器可以傳回附有 URL 的結果:

{
  "structuredContent": {
    "results": [
      {
        "id": "quarterly-plan",
        "title": "Quarterly plan",
        "url": "https://example.com/quarterly-plan"
      }
    ]
  },
  "content": [
    {
      "type": "text",
      "text": "{\"results\":[{\"id\":\"quarterly-plan\",\"title\":\"Quarterly plan\",\"url\":\"https://example.com/quarterly-plan\"}]}"
    }
  ]
}

在此回應中,url 欄位有值,因此該結果符合 建立引用中繼資料的條件。查詢本身不會觸發引用處理。 如果結果省略 url,或提供空值或非字串值,ChatGPT 就會將該結果保留為一般工具輸出。

伺服器範例

你可以在瀏覽器開發環境中試用這個 MCP 伺服器範例。請使用你自己的 API 憑證與向量儲存庫資訊來設定範例。

Replit 上的 MCP 伺服器範例

在 Replit 上複製並修改伺服器範例,即可進行即時測試。

為方便參考,下方也提供使用 FastMCP 實作 searchfetch 這兩個工具的完整程式碼。

測試並連接 MCP 伺服器

你可以在提示詞儀表板中,使用深度研究模型測試 MCP 伺服器。建立新提示詞或編輯現有提示詞,並在提示詞組態中新增 MCP 工具。此相容性範例只提供唯讀的 searchfetch 工具,因此其 API 請求會略過這些工具的核准程序。對於可修改資料或執行其他會產生重大影響之動作的工具,請保持啟用核准。

如果你正在測試作為外掛程式一部分的伺服器,請依照連接並測試外掛程式中的步驟操作。

提示詞組態

設定好 MCP 伺服器後,你就可以透過提示詞介面,與使用該伺服器的模型對話。

提示詞對話

你可以使用類似下列的請求,直接透過 Responses API 測試 MCP 伺服器:

curl https://api.openai.com/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
  "model": "gpt-5.6-sol",
  "input": [
    {
      "role": "developer",
      "content": [
        {
          "type": "input_text",
          "text": "You are a research assistant that searches MCP servers to find answers to your questions."
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "type": "input_text",
          "text": "Are cats attached to their homes? Give a succinct one page overview."
        }
      ]
    }
  ],
  "reasoning": {
    "summary": "auto"
  },
  "tools": [
    {
      "type": "mcp",
      "server_label": "cats",
      "server_url": "https://777ff573-9947-4b9c-8982-658fa40c7d09-00-3le96u7wsymx.janeway.replit.dev/sse/",
      "allowed_tools": [
        "search",
        "fetch"
      ],
      "require_approval": "never"
    }
  ]
}'

處理身分驗證

建置自訂遠端 MCP 伺服器時,授權和身分驗證有助於保護你的資料。如果你的授權伺服器支援 CIMD,而且外掛程式建立者選擇使用 CIMD,我們建議使用 OAuth 搭配 Client ID Metadata Documents 進行用戶端註冊。ChatGPT 支援 CIMD 搭配公開用戶端 Token 交換(none)或簽署的用戶端斷言 Token 交換(private_key_jwt)。經過設定後,仍可使用動態用戶端註冊。如需外掛程式的身分驗證要求,請參閱身分驗證。如需協定詳情,請閱讀 MCP 使用者指南授權規格

如果你透過外掛程式連線至自訂遠端 MCP 伺服器,工作區中的使用者就會透過 OAuth 流程連線至你的服務。

在 ChatGPT 中連線

  1. ChatGPT 中,開啟 設定 → 安全性與登入 ,然後啟用 開發人員模式
  2. 前往 ChatGPT 外掛程式,選取加號按鈕,然後在開發人員模式中連線至你的伺服器 URL。
  3. 在對話和深度研究中執行提示詞,測試你的外掛程式。

如需詳細設定步驟,請參閱連線並測試你的外掛程式

風險與安全

自訂 MCP 伺服器可將你的 ChatGPT 工作區連線至外部應用程式,讓 ChatGPT 能在這些應用程式中存取、傳送及接收資料。請注意,自訂 MCP 伺服器並非由 OpenAI 開發或驗證,而是適用其各自條款與條件的第三方服務。

如果你發現惡意 MCP 伺服器,請向 security@openai.com 回報。

提示注入是一種攻擊手法:攻擊者將惡意指令嵌入我們的模型可能接觸到的內容(例如網頁)中,企圖讓這些指令覆蓋 ChatGPT 原本預期的行為。如果模型遵循注入的指令,就可能採取使用者和開發人員從未打算執行的動作,包括將私人資料傳送至外部目的地。

例如,你可能會請 ChatGPT 查看你的行事曆和近期電子郵件,為聚餐尋找餐廳。在查找資料時,它可能遇到一則惡意留言,要求它從 Gmail 取得密碼重設驗證碼,再傳送至惡意網站。這類有害內容的目的,就是誘騙智慧體執行非預期的動作。

下表列出需要考量的具體情境。我們建議你仔細閱讀,作為決定是否使用自訂 MCP 的參考。

情境/風險如果我信任 MCP 的開發人員,就安全了嗎?我可以如何降低風險?
攻擊者可能透過某種方式,將提示注入攻擊植入可透過 MCP 存取的資料中。

範例:
• 對於客戶支援 MCP,攻擊者可能向你傳送含有提示注入攻擊的客戶支援請求。
信任 MCP 的開發人員並不能確保安全。

要確保安全,你必須信任 透過 MCP 可存取的所有內容
• 如果 MCP 可能包含惡意或不受信任的使用者輸入,即使你信任其開發人員,也不要使用。
• 設定存取權限,盡量減少能存取 MCP 的人數。
惡意 MCP 可能在讀取或寫入動作中索取過多參數。

範例:
• 員工機票預訂 MCP 可能提供取得航班時刻表的讀取動作,卻要求提供包含 summaryOfConversationuserAnnualIncomeuserHomeAddress 在內的參數。
信任 MCP 的開發人員不一定能確保安全。

MCP 的開發人員可能認為索取某些資料很合理,但你可能不願意分享這些資料。
• 手動安裝 MCP 伺服器時,請審查每個動作要求的參數,確認沒有過度索取隱私資料。
攻擊者可能利用提示注入攻擊,誘騙 ChatGPT 從自訂 MCP 擷取敏感資料,再傳送給攻擊者。

範例:
• 攻擊者可能透過另一個 MCP(例如電子郵件)向某位企業使用者發動提示注入攻擊,企圖誘騙 ChatGPT 從內部工具讀取敏感資料,再傳送給攻擊者。
信任 MCP 的開發人員並不能確保安全。

新 MCP 內的一切都可能安全且值得信任,但風險在於其他惡意來源發動的攻擊可能竊取這些資料。
ChatGPT 的設計旨在保護使用者,但攻擊者仍可能試圖竊取你的資料,因此請留意風險,並考慮是否值得承擔。
• 設定存取權限,盡量減少能存取含有高度敏感資料之 MCP 的人數。
攻擊者可能利用提示注入攻擊,透過對自訂 MCP 執行寫入動作來洩漏敏感資訊。

範例:
• 攻擊者透過另一個 MCP 發動提示注入攻擊,誘騙 ChatGPT 擷取敏感資料,再使用客戶支援系統的 MCP 將資料傳送給攻擊者。
信任 MCP 的開發人員並不能確保安全。

即使你完全信任該 MCP,只要寫入動作產生的任何結果可被攻擊者觀察到,攻擊者就可能試圖加以利用。
• 使用者應在寫入動作發生時仔細審查,確認動作符合原意,且不包含任何不應分享的資料。
攻擊者可能利用提示注入攻擊,透過對惡意自訂 MCP 執行讀取動作來洩漏敏感資訊,因為 MCP 可以記錄這些動作。只有在 MCP 本身具有惡意,或 MCP 將寫入動作誤標為讀取動作時,這種攻擊才會奏效。

如果你相信 MCP 的開發人員會正確地將只有讀取功能的動作標記為 讀取,也相信對方不會試圖竊取資料,那麼這項風險可能很低。
• 只使用你信任的開發人員提供的 MCP(但請注意,光是這樣仍不足以確保安全)。
攻擊者可能利用提示注入攻擊,誘騙 ChatGPT 透過自訂 MCP 執行使用者無意進行的有害或破壞性寫入動作。信任 MCP 的開發人員並不能確保安全。

即使新 MCP 內的一切都安全且值得信任,這項風險仍然存在,因為攻擊來自其他惡意來源。
• 使用者應仔細審查寫入動作,確認動作符合原意且正確無誤。
• ChatGPT 的設計旨在保護使用者,但攻擊者仍可能試圖誘騙 ChatGPT 執行非預期的寫入動作。
• 設定存取權限,盡量減少能存取含有高度敏感資料之 MCP 的人數。

自訂 MCP 也會帶來與提示注入攻擊無關的其他風險:

  • 寫入動作能提升 MCP 伺服器的實用性,也會增加風險,因為伺服器除了向 ChatGPT 回傳資訊,還能執行可能造成破壞的動作。目前,ChatGPT 在任何對話中執行寫入動作前,都需要人工確認。確認時會標示可能的敏感資料,但你仍應先仔細考量 ChatGPT 在執行這類動作時出錯的可能性,並確定自己能接受,才使用寫入動作。即使 MCP 伺服器將動作標記為唯讀,仍可能發生寫入動作。因此,在部署至 ChatGPT 之前,務必確定你信任該自訂 MCP 伺服器。
  • 任何 MCP 伺服器都可能在查詢過程中收到敏感資料。即使伺服器沒有惡意,它仍能存取 ChatGPT 在互動期間提供的所有資料,其中可能包含使用者先前提供給 ChatGPT 的敏感資料。例如,ChatGPT 使用深度研究或對話應用程式工具時,傳送給 MCP 伺服器的查詢就可能包含這類資料。

連線至可信任的伺服器

除非你了解並信任自訂 MCP 伺服器背後的應用程式,否則我們建議不要連線至該伺服器。

例如,選擇由服務供應商自行託管的官方伺服器。請連線至 Stripe 在 mcp.stripe.com 託管的 Stripe 伺服器,而非第三方託管的非官方 Stripe MCP 伺服器。目前可用的官方 MCP 伺服器不多,因此你可能會考慮由某個組織託管、透過 API 將請求轉送至其他服務的伺服器。請先審查該組織如何使用你的資料,並確認該伺服器值得信任,再進行連線。建置並連線至自己的 MCP 伺服器時,請再次確認連線對象是正確的伺服器。當 OpenAI 呼叫你的 MCP 伺服器時,請謹慎處理你為回應請求而提供的資料,以及收到的資料。

你的遠端 MCP 伺服器讓其他人能將 OpenAI 連線至你的服務,並讓 OpenAI 能在這些服務中存取、傳送及接收資料,以及執行動作。請避免在工具的 JSON 中放入任何敏感資訊,也不要儲存存取你遠端 MCP 伺服器的 ChatGPT 使用者所提供的任何敏感資訊。

建置 MCP 伺服器時,請勿在工具定義中加入任何惡意內容。