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 伺服器
應實作兩個唯讀工具:search 和 fetch,並採用
公司知識相容性中所述的相容性結構描述。
同一套介面也適用於透過 API 執行的研究工作流程。
請為每個工具宣告輸出結構描述,讓用戶端能驗證結果的結構。
在 FastMCP 中,具型別的回傳模型可以自動產生此結構描述;
下方範例則明確傳入由相同模型產生的 output_schema。
search 工具
search 工具負責根據使用者的查詢,從 MCP 伺服器的資料來源傳回相關搜尋結果清單。
引數:
單一查詢字串。
傳回值:
一個僅含 results 鍵的物件,其值為結果物件組成的陣列。每個結果物件應包含:
id- 文件或搜尋結果項目的唯一 IDtitle- 便於人員閱讀的標題。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- 文件或搜尋結果項目的唯一 IDtitle- 搜尋結果項目的標題,型別為字串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 上複製並修改伺服器範例,即可進行即時測試。
為方便參考,下方也提供使用 FastMCP 實作 search 和 fetch 這兩個工具的完整程式碼。
測試並連接 MCP 伺服器
你可以在提示詞儀表板中,使用深度研究模型測試 MCP 伺服器。建立新提示詞或編輯現有提示詞,並在提示詞組態中新增 MCP 工具。此相容性範例只提供唯讀的 search 和 fetch 工具,因此其 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 中連線
- 在 ChatGPT 中,開啟 設定 → 安全性與登入 ,然後啟用 開發人員模式。
- 前往 ChatGPT 外掛程式,選取加號按鈕,然後在開發人員模式中連線至你的伺服器 URL。
- 在對話和深度研究中執行提示詞,測試你的外掛程式。
如需詳細設定步驟,請參閱連線並測試你的外掛程式。
風險與安全
自訂 MCP 伺服器可將你的 ChatGPT 工作區連線至外部應用程式,讓 ChatGPT 能在這些應用程式中存取、傳送及接收資料。請注意,自訂 MCP 伺服器並非由 OpenAI 開發或驗證,而是適用其各自條款與條件的第三方服務。
如果你發現惡意 MCP 伺服器,請向 security@openai.com 回報。
提示注入相關風險
提示注入是一種攻擊手法:攻擊者將惡意指令嵌入我們的模型可能接觸到的內容(例如網頁)中,企圖讓這些指令覆蓋 ChatGPT 原本預期的行為。如果模型遵循注入的指令,就可能採取使用者和開發人員從未打算執行的動作,包括將私人資料傳送至外部目的地。
例如,你可能會請 ChatGPT 查看你的行事曆和近期電子郵件,為聚餐尋找餐廳。在查找資料時,它可能遇到一則惡意留言,要求它從 Gmail 取得密碼重設驗證碼,再傳送至惡意網站。這類有害內容的目的,就是誘騙智慧體執行非預期的動作。
下表列出需要考量的具體情境。我們建議你仔細閱讀,作為決定是否使用自訂 MCP 的參考。
| 情境/風險 | 如果我信任 MCP 的開發人員,就安全了嗎? | 我可以如何降低風險? |
|---|---|---|
| 攻擊者可能透過某種方式,將提示注入攻擊植入可透過 MCP 存取的資料中。 範例: • 對於客戶支援 MCP,攻擊者可能向你傳送含有提示注入攻擊的客戶支援請求。 | 信任 MCP 的開發人員並不能確保安全。 要確保安全,你必須信任 透過 MCP 可存取的所有內容。 | • 如果 MCP 可能包含惡意或不受信任的使用者輸入,即使你信任其開發人員,也不要使用。 • 設定存取權限,盡量減少能存取 MCP 的人數。 |
| 惡意 MCP 可能在讀取或寫入動作中索取過多參數。 範例: • 員工機票預訂 MCP 可能提供取得航班時刻表的讀取動作,卻要求提供包含 summaryOfConversation、userAnnualIncome、userHomeAddress 在內的參數。 | 信任 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 伺服器時,請勿在工具定義中加入任何惡意內容。
