# Hugging Face MCP Course - 1. Introduction to Model Context Protocol 学習メモ
Table of Contents
Hugging Face の MCP Course Unit1 を受講したので、学習内容をまとめておく。MCPは「AIアプリケーションのためのUSB-C」と表現される新しいプロトコルで、AI統合の複雑さを劇的に軽減する可能性を秘めている。
MCPが解決する問題:M×N統合地獄
従来のAI統合では、M個のAIアプリケーションとN個の外部ツール/データソースを連携させるのに M×N個のカスタム統合 が必要だった。これは開発・メンテナンスコストが指数関数的に増大する典型的な問題。
MCPはこれを M+N問題 に変換する:
- 各AIアプリケーション:MCPクライアントを1回実装
- 各ツール/データソース:MCPサーバーを1回実装
これだけで全ての組み合わせが動作する。シンプルで美しい解決策だ。
アーキテクチャ:3つの要素
Host(ホスト)
ユーザーが直接触るAIアプリケーション。Claude Desktop、Cursor、カスタムアプリなど。ユーザーとのやり取りを管理し、全体のフローを調整する。
Client(クライアント)
ホスト内のコンポーネント。特定のMCPサーバーとの1対1通信を担当。プロトコルレベルの詳細を隠蔽してくれる。
Server(サーバー)
外部ツールやデータソースへのアクセスを提供。既存機能の軽量ラッパーとして動作。ローカル・リモート両対応。
4つの主要機能
Tools(ツール)
実行可能な関数。メッセージ送信、API呼び出し、計算実行など。副作用があるためユーザー承認が通常必要。
例:天気データ取得、チケット発行、ファイル操作
Resources(リソース)
読み取り専用データソース。REST APIのGETエンドポイント的な存在。複雑な計算なしでコンテキストを提供。
例:ファイル内容、データベースレコード、設定情報
Prompts(プロンプト)
事前定義されたワークフロー。ユーザー、AIモデル、機能間のインタラクションをガイド。利用可能なツールとリソースを最適活用するための構造化されたテンプレート。
Sampling(サンプリング)
サーバー主導のLLM処理要求。エージェント的な動作や再帰的インタラクションを可能にする。複雑な多段階タスクに威力を発揮。
通信プロトコル
基盤:JSON-RPC 2.0
- 軽量なリモートプロシージャコール
- 人間が読みやすいJSON形式
- 言語非依存
- 明確な仕様と実績
メッセージタイプ
- Request:クライアント→サーバーの操作指示
- Response:リクエストに対する応答(成功/エラー)
- Notification:サーバー→クライアントの一方向メッセージ
トランスポート
- stdio:ローカル通信用。シンプル、ネットワーク設定不要
- HTTP+SSE:リモート通信用。ネットワーク越え、Webサービス連携
実装:SDKとGradio統合
MCP SDK
TypeScript、Python、Java、Kotlin、C#、Swift、Rust、Dart/Flutterで利用可能。プロトコル詳細を隠蔽し、開発者は機能実装に集中できる。
@mcp.tool()def get_weather(location: str) -> str: # 天気データ取得ロジック pass
@mcp.resource()def weather_resource(location: str) -> str: # 天気リソース提供 pass
Gradio統合
demo.launch(mcp_server=True)
だけでGradioアプリがMCPサーバーに変身。人間向けWebUIとAI向けAPIを同時提供できる。
動的発見の威力
MCPクライアントは接続時に tools/list
、resources/list
、prompts/list
でサーバーの機能を動的発見。ハードコードされた知識不要で、各サーバーの特定機能に適応できる。
これにより、基本的なサーバーと高度なサーバーを同一エコシステム内で混在可能。拡張性が高い。
個人的な感想
MCPは統合問題に対する非常にエレガントな解決策だと感じた。特に:
- 標準化の価値:プロトコル統一により開発効率が劇的向上
- モジュラー設計:各コンポーネントが独立して進化可能
- 実用性:Gradio統合など、すぐに使える形で提供
次のステップ
Unit2では実際に Gradio を使って MCP サーバーを構築し、複数のクライアントと接続することで、エンドツーエンドの MCP アプリケーションを構築する方法を学ぶ。