TL;DR
LLM を使う AI アプリケーションを、外部のデータソースやツールにつなぐためのオープンな標準。MCP と略す。公式ドキュメントは「AI アプリケーションのための USB-C ポート」にたとえている。
なぜ必要か
MCP を使うと、AI アプリケーションにコンテキストを渡せる。ファイルやデータベースといったデータソース、検索エンジンのようなツール、定型のプロンプトなどにつなぐ方法が標準化されるので、一度作ったサーバを多くのクライアントで使える。
仕組み
MCP はクライアントとサーバの構成をとる。
- MCP ホスト: Claude Desktop や Claude Code のような AI アプリケーション。1 つ以上の MCP クライアントを管理する
- MCP クライアント: MCP サーバとの接続を保ち、ホストが使うコンテキストをサーバから受け取る。LLM 自身ではない
- MCP サーバ: クライアントにコンテキストを提供するプログラム
ホストは、接続する MCP サーバごとに MCP クライアントを 1 つ作る。クライアントとサーバの間は JSON-RPC 2.0 でやりとりする。通信路には、同じマシン上のプロセス間で使う stdio と、リモートのサーバと通信する Streamable HTTP がある。
サーバは主に、AI アプリケーションが呼び出して処理を行う Tools、文脈となるデータを渡す Resources、対話の型となる Prompts を公開する。
例
MCP クライアントには Claude Desktop、Cline、Zed、Visual Studio Code などがある(クライアントの一覧)。
自分の理解
LangChain の Agent で使える tools の共通プロトコル、というイメージで捉えている。Function calling との違いは、こちらの記事が参考になる。
LSP に似ていると思う。LSP ではサーバに対して Visual Studio Code や Emacs がクライアントになるように、MCP ではサーバに対して Claude Desktop などがクライアントになる。