Hugging Face MCPサーバーの構築
Hugging Faceは公式のModel Context Protocol(MCP)サーバー(hf.co/mcp)を開始し、AIアシスタントがHugging Face Hubと連携し、Spaces上の数千のAIアプリケーションにアクセスできるようにしました。この統合により、ユーザーは利用可能なツールをその場でカスタマイズでき、リモートでアクセス可能なURLを提供することで接続プロセスが簡素化されます。
技術設計とカスタマイズ
Hugging Face MCPサーバーは動的に設計されており、ユーザーは専用のMCP Settings Pageを通じて特定のツールを構成できます。このアプローチにより、サーバーはユーザーの研究、開発、コンテンツ作成のニーズに合わせて適応できます。ローカルでのダウンロードや設定の複雑さを排除するため、サーバーはリモートでホストされ、シンプルなURLを介してAIクライアントがアクセスできるようになっています。
リモートトランスポートオプションとトレードオフ
リモートMCPサーバーを実装する際、開発者は複数のトランスポートメカニズムから選択する必要があります。Hugging Faceのオープンソース実装は複数のバリアントをサポートしていますが、本番環境ではStreamable HTTPが利用されています。
トランスポート比較
| トランスポート | 使用例 |
|---|---|
STDIO |
クライアントと同じマシン上で実行されるローカルサーバー;ローカルファイルへのアクセスを可能にします。 |
HTTP with SSE |
HTTP上のリモート接続;2025年3月26日版のMCPで非推奨となりました。 |
Streamable HTTP |
最新で柔軟なリモートHTTPトランスポート;優れたデプロイオプションを提供します。 |
Streamable HTTP の通信パターン
Streamable HTTP を使用する開発者は、主に次の3つの通信パターンを実装できます。
- Direct Response:標準的なリクエスト/レスポンスパターン(REST APIに類似)で、検索のようなステートレスでシンプルな操作に最適です。
- Request Scoped Streams:単一リクエストに紐づく一時的なSSEストリーム。動画生成中の進捗更新や、サーバーがユーザーから情報を引き出す必要がある場合に使用されます。
- Server Push Streams:長時間維持されるSSE接続で、ツールやプロンプトリストの変更通知など、サーバーがメッセージを開始できるようにします。これらはキープアライブと再開メカニズムが必要です。
状態管理
MCPサーバーはStatelessまたはStatefulのいずれかに構成できます。Statelessサーバーは各リクエストを独立して扱い、シンプルな水平スケーリングを可能にします。Statefulサーバーはmcp-session-idで応答し、クライアントコンテキストを保持します。これはRequest Scopedストリーム内のSamplingやElicitationリクエストなどの機能に必要です。
本番デプロイ戦略
本番デプロイにおいて、Hugging FaceはStreamable HTTP を使用したStateless, Direct Response構成を選択しました。その理由は次のとおりです。
- Statelessness:ユーザー状態(選択されたツール、Gradioアプリケーション、ZeroGPUクォータ)は、リクエストごとに参照される
HF_TOKENまたはOAuth認証情報で管理され、リクエスト間でセッション状態を保持する必要がなくなります。 - Direct Response:リソースオーバーヘッドが最小で、現在のツールセットは実行中にSamplingやElicitationを必要としないため、これで十分です。
実装の洞察とクライアントの挙動
ツールリスト変更通知
Hugging Faceは、Server Push Streams を介したリアルタイムの"Tool List Changed"通知を実装すると過度な複雑さが増すと判断しました。多くのクライアントは非アクティブ後に切断されるか、使用せずに接続したままになるため、数千の接続を維持するよりも、必要に応じてクライアントが接続とツールリストをリフレッシュする方が効率的です。
ユーザーエクスペリエンスとブラウザ検出
ユーザー体験向上のため、Hugging Faceはhf.co/mcpにフレンドリーな説明ページを追加しました。しかし、これによりVSCodeがHTMLページを受け取った際にエンドポイントを秒間複数回ポーリングする問題が発生しました。チームはブラウザ検出を実装し、実際のブラウザのみがHTMLページを受け取るようにしてこの問題を解決しました。
クライアントトラフィックパターン
2025年7月第1週の分析では、164の異なるクライアントがサーバーにアクセスしていることが判明しました。チームは、ツール呼び出し1回につき制御メッセージが約100件と高い比率であることを観測しました。多くのクライアントはmcp-remoteをブリッジとしてリモートサーバーに接続しています。
機能とユースケース
Hugging Face Hub と Gradio Spaces を統合することで、LLM は最新の機械学習アプリケーションで拡張できます。現在のユーザー実装例は以下の通りです。
- 動画制作のオーケストレーション
- 画像編集
- 文書検索
- AIアプリケーション開発
- 既存モデルに推論機能を追加