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つの通信パターンを実装できます。

  1. Direct Response:標準的なリクエスト/レスポンスパターン(REST APIに類似)で、検索のようなステートレスでシンプルな操作に最適です。
  2. Request Scoped Streams:単一リクエストに紐づく一時的なSSEストリーム。動画生成中の進捗更新や、サーバーがユーザーから情報を引き出す必要がある場合に使用されます。
  3. 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アプリケーション開発
  • 既存モデルに推論機能を追加

Sources