Streamable HTTP 接続 (Streamable HTTP Connection)
streamable_http 接続タイプを使用すると、Griptape Nodes は 双方向ストリーミング(クライアント ↔ サーバー)およびリアルタイム通信をサポートした HTTP 経由で MCP サーバーと通信できます。
Streamable HTTP を使用する場面 (When to Use Streamable HTTP)
- 双方向通信: クライアントとサーバーの双方がデータを送信する必要がある場合
- インタラクティブなアプリケーション: リアルタイムチャット、共同編集、ライブコラボレーション
- HTTP インフラストラクチャ: 既存の HTTP ベースのシステムやロードバランサーを活用する場合
- カスタムストリーミング: SSE が提供する以上の細かな制御が必要な場合
- セッション管理: 持続的なセッション状態を維持する必要があるアプリケーション
利用可能な Streamable HTTP MCP サーバーの例
- Exa - 高度な Web 検索およびリサーチ機能
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": "リアルタイムメッセージングおよび通信"
}
主なユースケース
- チャットアプリケーション - リアルタイムメッセージングと対話
- 共同編集 - 共有ドキュメントの編集(Google Docs のようなユースケース)
- ライブコラボレーション - チームワークスペースや共有ホワイトボード
- インタラクティブダッシュボード - リアルタイムのデータ可視化と操作
- カスタマーサポート - ライブチャットおよびサポートシステム
- オンラインゲーム - ターン制およびリアルタイムマルチプレイヤーゲーム
設定項目 (Configuration)
必須フィールド (Required Fields)
| フィールド |
型 |
説明 |
例 |
url |
string |
MCP サーバーの HTTP エンドポイント |
"https://api.example.com/mcp" |
任意フィールド (Optional Fields)
| フィールド |
型 |
説明 |
デフォルト値 |
headers |
object |
認証用などの HTTP ヘッダー |
{} |
timeout |
number |
リクエストタイムアウト(秒単位) |
30 |
sse_read_timeout |
number |
SSE 読み取りタイムアウト(秒単位) |
60 |
terminate_on_close |
boolean |
接続切断時にセッションを終了するかどうか |
true |
設定例 (Example Configurations)
基本的な Streamable HTTP
{
"name": "streamable_api",
"transport": "streamable_http",
"url": "https://api.example.com/mcp/stream",
"description": "双方向ストリーミング対応の HTTP API (client ↔ server)"
}
認証付き 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
}
セットアップ手順 (Setup Steps)
1. MCP サーバーのデプロイ
MCP サーバーが Streamable HTTP をサポートしていることを確認します:
# Streamable HTTP エンドポイントの例 (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"},
)
2. Griptape Nodes での設定
- Griptape Nodes の設定を開きます
- MCP Server 設定画面に移動します
- streamable_http トランスポートを選択して新しいサーバーを追加します
- サーバーの URL を入力します
- 認証ヘッダーやタイムアウトを設定します
- 接続をテストします
3. ワークフローでの使用
- フローに MCPTask ノードを追加します
- 設定した Streamable HTTP サーバーを選択します
- プロンプトを入力します
- ワークフローを実行します
利点 (Advantages)
- 双方向ストリーミング: 完全な全二重通信 (client ↔ server)
- HTTP 互換性: 標準的な Web インフラストラクチャやプロキシで動作
- リアルタイム更新: 双方向でのライブデータストリーミング
- セッション管理: 組み込みのセッション処理をサポート
- 高い制御性: ストリーミングの挙動を細かく制御可能
- インタラクティブ用途に最適: リアルタイムコラボレーションに最適
制限事項 (Limitations)
- HTTP オーバーヘッド: 直接のプロセス通信(stdio)よりもオーバーヘッドが大きい
- ネットワーク依存: 安定したネットワーク接続が必要
- 実装の複雑さ: 単純な HTTP リクエストよりも実装が複雑
- リソース消費: 単純なリクエストよりもリソース使用量が高い
Streamable HTTP と SSE の比較
| 機能 |
Streamable HTTP |
SSE (Server-Sent Events) |
| 通信方向 |
双方向 (client ↔ server) |
単方向 (server → client) |
| プロトコル |
カスタム HTTP ストリーミング |
標準規格 (text/event-stream) |
| 主な用途 |
インタラクティブアプリ、リアルタイムチャット |
通知、ライブフィード、監視 |
| 実装 |
カスタムのクライアント/サーバーロジック |
ブラウザ組み込みのサポート |
| 再接続 |
手動実装 |
自動再接続 |
| 具体例 |
チャットアプリ、共同ドキュメント編集 |
株価ティッカー、ニュース速報 |
認証 (Authentication)
Bearer トークン
{
"headers": {
"Authorization": "Bearer your-jwt-token"
}
}
API キー
{
"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
}
- 接続が閉じたときに自動的にセッションを破棄します
- ステートレスな操作に適しています
- デフォルトの動作です
持続的セッション (Persistent Sessions)
{
"terminate_on_close": false
}
- 接続が切断されてもセッション状態を維持します
- ステートフルな操作に適しています
- サーバー側でのセッション管理が必要です
トラブルシューティング (Troubleshooting)
接続エラー
- サーバー URL にアクセス可能か確認してください
- ネットワーク接続を確認してください
- curl や Postman で直接テストしてください
- サーバーログを監視してください
タイムアウトの問題
- タイムアウト値を長く設定してください
- サーバーの応答時間を確認してください
- ネットワークレイテンシを監視してください
- サーバー側のパフォーマンスを最適化してください
認証の失敗
- 認証情報が正しいか確認してください
- トークンの有効期限を確認してください
- ヘッダー形式が正しいか確認してください
ベストプラクティス (Best Practices)
- HTTPS を使用する: 常に安全な暗号化接続を使用する
- 再接続処理を考慮する: ネットワーク切断時の再接続ロジックを実装する
- セッションを監視する: セッション状態の追跡とクリーンアップを行う
- タイムアウトを最適化する: 処理内容に応じた適切なタイムアウト値を設定する
- 認証情報を安全に保管する: API キーなどの機密データを安全に管理する
次のステップ