可串流 HTTP 連線 (Streamable HTTP)
streamable_http 連線類型允許 Griptape Nodes 透過 HTTP 協定與 MCP 伺服器進行通訊,並完整支援雙向串流 (Bidirectional Streaming, 用戶端 ↔ 伺服器) 與即時資料互動。
何時使用 Streamable HTTP
- 雙向資料通訊:用戶端與伺服器兩端皆需自主主動發送資料串流
- 高互動性應用:即時聊天、多人協同編輯、即時協作畫布
- 相容既有 HTTP 基礎設施:沿用現成的 API 閘道、負載平衡器與反向代理
- 自訂細粒度串流:需要比傳統 SSE 更強大的雙向傳輸控制力
- 工作階段持久化 (Session Management):需要維護跨請求持久狀態的應用
現成可用的 Streamable HTTP MCP 伺服器
- Exa — 高階 AI 語意搜尋與深度資料調研能力
Streamable HTTP MCP 伺服器配置範例
即時通訊應用伺服器
{
"name": "chat_app",
"transport": "streamable_http",
"url": "https://api.chat-service.com/mcp/stream",
"headers": {
"Authorization": "Bearer chat-token"
},
"timeout": 60,
"sse_read_timeout": 120,
"terminate_on_close": false,
"description": "即時訊息傳遞與雙向通訊"
}
熱門 Streamable HTTP 應用場景
- 即時通訊工具 (Chat) — 即時串流對話與多方溝通
- 多人協同編輯 (Collaborative Editing) — 類似 Google Docs 的多人即時共享編輯
- 即時團隊協作 (Live Collaboration) — 團隊虛擬工作區與即時共享白板
- 互動式儀表板 (Interactive Dashboards) — 即時遙測數據視覺化與動態互動
- 客服支援系統 (Customer Support) — 線上即時諮詢與智慧客服系統
- 連線遊戲 (Online Gaming) — 回合制或即時多人互動機制
設定參數說明
必要欄位
| 欄位名稱 |
型別 |
描述說明 |
範例 |
url |
string |
MCP 伺服器的 HTTP 服務端點 URL |
"https://api.example.com/mcp" |
選填欄位
| 欄位名稱 |
型別 |
描述說明 |
預設值 |
headers |
object |
用於身分驗證或自訂標頭的 HTTP Headers |
{} |
timeout |
number |
一般請求逾時時限(秒) |
30 |
sse_read_timeout |
number |
SSE 串流讀取逾時時限(秒) |
60 |
terminate_on_close |
boolean |
連線關閉時是否主動終止伺服器端 Session |
true |
組態範例實例
基礎 Streamable HTTP
{
"name": "streamable_api",
"transport": "streamable_http",
"url": "https://api.example.com/mcp/stream",
"description": "支援雙向串流 (用戶端 ↔ 伺服器) 的 HTTP API"
}
具備身分驗證的 Streamable HTTP
{
"name": "auth_streamable",
"transport": "streamable_http",
"url": "https://api.example.com/mcp/stream",
"headers": {
"Authorization": "Bearer your-token-here",
"Content-Type": "application/json",
"Accept": "application/json"
},
"timeout": 60,
"sse_read_timeout": 120,
"terminate_on_close": true
}
自訂標頭配置
{
"name": "custom_streamable",
"transport": "streamable_http",
"url": "https://mcp.example.com/stream",
"headers": {
"X-API-Key": "your-api-key",
"X-Client-Version": "1.0.0",
"User-Agent": "GriptapeNodes/1.0"
},
"timeout": 90,
"sse_read_timeout": 300,
"terminate_on_close": false
}
建置步驟指引
1. 部署 MCP 伺服器端點
確認您的後端 MCP 伺服器具備 Streamable HTTP 串流回應能力:
# 伺服器端 Streamable HTTP 端點範例 (Python/FastAPI)
@app.post("/mcp/stream")
async def mcp_stream(request: Request):
return StreamingResponse(
process_mcp_stream(request),
media_type="application/json",
headers={"Cache-Control": "no-cache", "Connection": "keep-alive"},
)
- 開啟 Griptape Nodes 設定視窗
- 前往 MCP Servers 設定頁面
- 新增伺服器並將連線類型設為
streamable_http
- 輸入伺服器 API 端點 URL
- 配置必要的身份驗證標頭與逾時時間
- 點擊測試連線
3. 在工作流程中調用
- 拖曳一個 MCPTask 節點至畫布中
- 選取方才建立的 Streamable HTTP 伺服器
- 輸入提示詞 (Prompt)
- 點擊執行工作流程
主要優勢
- 全雙工雙向串流:支援 用戶端 ↔ 伺服器 雙向同步實時傳輸
- 良好 Web 相容性:完美運作於現有標準 HTTP/HTTPS 基礎設施與雲端環境
- 即時狀態更新:兩端隨時發布與接收最新事件
- 完善的工作階段管理:內建 Session 狀態維持與回收機制
- 高度客製彈性:可根據業務邏輯自由定義串流控制協定
- 高互動應用首選:非常適合即時協作與大型對話情境
使用限制
- HTTP 協定開銷:相較於純本機直接進程管道,存在 HTTP 標頭等封裝開銷
- 高度依賴網路穩定度:需要穩定、低封包遺失率的網路環境
- 架構複雜度:相較於純單向 REST 請求需要處理更嚴謹的串流生命週期
- 資源佔用:長時間維持開放的 HTTP 串流連線會佔用伺服器連線池配額
Streamable HTTP 與 SSE 比較分析
| 特性面向 |
Streamable HTTP |
SSE (Server-Sent Events) |
| 資料流向 |
雙向 (用戶端 ↔ 伺服器) |
單向 (伺服器 → 用戶端) |
| 底層協定 |
自訂 HTTP 串流封裝 |
標準化格式 (text/event-stream) |
| 主要場景 |
高互動應用、即時對談、協同編輯 |
推播通知、行情跳動、背景日誌監控 |
| 實作方式 |
自訂用戶端/伺服器通訊邏輯 |
瀏覽器原生內建 EventSource 支援 |
| 自動重連 |
需於應用層自訂重連邏輯 |
瀏覽器層級內建自動重新連線 |
| 典型範例 |
即時協同畫布、線上聊天系統 |
股票即時報價機、新聞即時推播 |
身分驗證配置
Bearer Token (JWT 權杖)
{
"headers": {
"Authorization": "Bearer your-jwt-token"
}
}
API Key (專屬金鑰)
{
"headers": {
"X-API-Key": "your-api-key",
"X-Client-ID": "griptape-nodes"
}
}
自訂複合身分驗證
{
"headers": {
"X-Custom-Auth": "your-custom-token",
"X-User-ID": "user123",
"X-Session-ID": "session456"
}
}
工作階段管理 (Session Management)
斷線即終止 (Terminate on Close)
{
"terminate_on_close": true
}
- 當 HTTP 連線中斷或結束時,自動通知伺服器銷毀對應的 Session
- 適合無狀態 (Stateless) 的獨立運算任務
- 系統預設行為
持久化工作階段 (Persistent Sessions)
{
"terminate_on_close": false
}
- 連線中斷後依然在伺服器端保留工作階段狀態
- 適合需要跨次連線維持上下文的有狀態 (Stateful) 運算
- 需伺服器後端支援工作階段儲存機制
疑難排解
連線異常 (Connection Issues)
- 確認伺服器 URL 可自本機直接瀏覽並回應
- 檢查本機與目標主機之間的網路防火牆
- 使用 curl 或 Postman 獨立發送 POST 請求進行測試
- 檢閱伺服器端存取日誌 (Access Log)
逾時問題 (Timeout Problems)
- 適度調高
timeout 或 sse_read_timeout 數值
- 檢查伺服器端長任務運算是否卡在資料庫或外部 API
- 監控兩端網路傳輸延遲 (Ping Latency)
身分驗證失敗 (Authentication Failures)
- 確認憑證金鑰是否正確無誤
- 檢查 Token 是否已經過期
- 確認 Header 名稱大小寫與後端規範完全吻合
- 先以獨立 HTTP 工具驗證 Headers 是否能通過鑑權
串流中斷或異常 (Streaming Issues)
- 確認後端伺服器確實支援長連線串流輸出而非一次性緩衝回傳
- 檢查 Content-Type 與 Cache-Control (
no-cache) 標頭
- 檢查中繼 Proxy / Nginx 是否開啟了緩衝 (
proxy_buffering off)
最佳實踐準則
- 一律採用 HTTPS:生產環境必須使用加密連線以保障數據傳輸安全
- 完善重連機制:在網路震盪時實作平滑優雅的斷線重連邏輯
- 主動回收 Session:避免在伺服器端殘留大量孤兒 Session 消耗記憶體
- 合理設定逾時時限:依據任務類型配置長短相宜的超時閥值
- 安全保護金鑰:絕不將真實 API 權杖外洩或提交至公開版本庫
實用情境組態實例
互動式對話 (Interactive Chat)
{
"name": "chat_interactive",
"transport": "streamable_http",
"url": "https://chat.example.com/stream",
"headers": {
"Authorization": "Bearer chat-token"
},
"terminate_on_close": false
}
即時團隊協同 (Real-Time Collaboration)
{
"name": "collaboration",
"transport": "streamable_http",
"url": "https://collab.example.com/stream",
"headers": {
"X-User-ID": "user123",
"X-Workspace-ID": "workspace456"
}
}
即時數據串流處理 (Live Data Processing)
{
"name": "data_processor",
"transport": "streamable_http",
"url": "https://processor.example.com/stream",
"timeout": 120,
"sse_read_timeout": 600
}
逾時設定梯次建議
- 短逾時 (30-60 秒):適用於輕量型即時問答與快速查詢
- 中等逾時 (60-120 秒):適用於標準多步驟調研與資料聚合
- 長逾時 (120 秒以上):適用於複雜模型運算或長時間批次生成任務
連線池最佳化 (Connection Pooling)
- 盡可能重複使用底層 TCP 連線 (Keep-Alive)
- 監控併發連線上限,防止伺服器連線池耗盡
- 確保異常關閉時優雅釋放通訊埠
相關參考資源