MCP、概念も目的もよく分からなかったので、少しだけ理解するところまでの雑記

## はじめに

いまにはじまったことではありませんが、MCPがとても流行っていますね。

私もちまちま記事を見る程度には情報を収集していましたが、正直よくわからなかった。「言ってることはわかるんだけど、なんか実際のイメージが湧かない」みたいなふんわりとした状態でした。

そこで今回、まずはちょっとだけ理解するところまで勉強してみたので、その共有です。

## 前提

私は以下あたりの前提があります。

- 生成AIは業務でも、プライベートでも利用している
- 趣味程度にLangChainなどを用いたエージェント開発をしている

## 結論

読むのが面倒な方への結論です。（本当の結論は触ってみるのが早い）

- MCPはプロトコル（通信規約）である
- MCPに対応したアプリが、MCPサーバー経由で提供された機能を実行する
- アプリがMCPに対応することで、各AIサービスの機能に依存せず、MCPサーバーと接続して機能拡張が可能になる
    - このアプリとは、Claudeなど

※「アプリ」という呼称については正式なホスト、クライアントの概念で後述

## 最初にもやもやしていたこと

以下、モヤモヤしていたことです。どれも理解が乏しかったがゆえ。

### LangChainのToolsと何が違うのか

なんか「XXXのMCPが公開されました！」というニュースを見ますが、前からAPI呼び出せてたよね。みたいな。

### MCP?MCPサーバー？ 

結局どれがただしいのか？サーバーはどこかにあるの？でもファイルアクセスするMCPがあったような？みたいな疑問がありました。

例えば、何かの操作を提供してくれるなら。

~~~mermaid
flowchart LR

 subgraph user["ユーザー"]
        u["ユーザー"]
  end
 subgraph one["Cient pc"]
        a1["アプリ"]
  end
 subgraph two["MCPサーバー"]
        b1["MCPサーバー"]
  end
 subgraph three["どこかのなにかのAPI"]
        c1["どこかのなにかのAPI"]
  end
    u --「XXして！」--> a1
    a1 --なにかで繋がる--> b1
    b1 --REST API--> c1

~~~

まあわからなくない。（いや認証認可とかどうするのかしら、という疑問はありましたが）

ただ、ローカルのファイルにアクセスするとなるなら...まあ理解が追いつかない状況でした。

```mermaid
flowchart LR

 u["ユーザー"]
 subgraph one["Client pc"]
        a1["アプリ"]
        f["ファイルシステム"]
  end
 subgraph two["MCPサーバー"]
        b1["MCPサーバー"]
  end

    u --「XXして！」--> a1
    a1 --なにかで繋がる--> b1
    b1 --!?（書き込み）-->f
```

### 結局何で使うのか。

MCPのメリットの表現として、LangChainのツールなどが比較で挙げられました。が、使っている情報をみると、ClaudeDesktopなり、GIthubCopilotなどで使っていました。

ツールの実装を楽にする（なくす）ものなのか、既存サービスの拡張機能なのか、？？？という状態でした。

## 理解が追いついたこと

色々と調べたり、使ってみたりして、以下のように理解が追いつきました。

### LangChainのToolsと何が違うのか

#### Tools

あくまでLangChainで作成しているプログラムの一部。自前での実装が基本。

#### MCP（と呼ばれているもの、この言葉自体はプロトコルを指す）

MCPに準拠したプログラムが提供されているため実装などが不要。既存のツールを用意して自身の端末で起動して使用する。

（一部リモートにホストされるケースもあるらしいので例外あり）


### MCP?MCPサーバー？ 

ここは複数の文脈がごちゃごちゃしていました。

#### MCP(Model Context Protocol)

まだMCPの哲学やアーキテクチャなどの背景までは理解していません。

ただ、理解したこととしては、まずMCPはプロトコルであること。

HTTPを例に挙げると、HTTPに準拠したクライアント（ブラウザなど）とサーバー（Nginx、SpringBootアプリケーション）が通信し、リクエストとレスポンスのやり取りを行う。

「MCP」も、クライアントとサーバーのやり取りのルールと理解しました。

てことは、そのプロトコルを使用する登場人物がいそうですね。

#### MCPサーバー

MCPサーバーについて、最初はどこかにあるサーバーを指すのかと思っていました。
（ただそういうケースもあるらしいですね、自分はまだそのケースを触れられていません）

実際は、基本的にはMCPサーバーと呼んでいるもの自体も、ユーザーのPC上で起動するものでした。

https://modelcontextprotocol.io/introduction#general-architecture

#### MCPホスト、MCPクライアント

ホスト自体はClaude Desktopや、GithubCopilitなどがあります。

クライアントは、ホストのなかでMCPの通信を司る部分を指し、特定のサービスがMCPに対応することで、ホストにMCPクライアントが用意され、MCPホストと呼べる状態になるのかもしれません。

## 「Why」について、やっと追いついてきたこと

言っていることはわかるんだけど、何のために使うの？についても結構モヤモヤしていました。

何のために使うか、という観点、以下のように理解できました。

### これまで（これまでがちょっと前を指すなら私が時代遅れだった）

- デフォルトのサービス群は提供された機能しか使えませんでした
    - Claudeのアーティファクト
    - OpenAI,Geminiのdeepresearch
    - あとは何か色々あるけど、各種サービスがいろいろ連携を追加、それに一喜一憂
- てことは提供されないとそれ以上のことができない
- で、私はLangChainなどでLLMを用いて、LLMをベースに、ファイルやAPIなど、+αに作用するプログラムを作成して遊んでいました

### MCPを用いることで

ホストはMCPに対応することで、プロトコルに基づいて、いろいろな機能拡張が可能になった。
そして、それぞれの目線でも、以下のようなメリットが生まれる。

#### 利用者
- 自分で使いたい機能を取り込むことができる
- 好きなMCPホストから、好きなサービスを利用できる

#### 開発者
- 自身のサービスに対して、MCPサーバーを提供することで、LLMアプリケーションから利用可能にするIFを提供

---
ああ、ここまで来ると、MCPがUSB-Cポートに例えられる意味が理解できてきました。

>Think of MCP like a USB-C port for AI applications.

https://modelcontextprotocol.io/introduction

## もやもやの源泉

一番の根本原因は早く一次情報にアクセスして、やってみなかったことにあるのですが、そこはさておき。

自分のなかで理解が難しかった一番の理由は、LangChainのToolの実装の視点が色濃く残っていたためと思われます。
「不要になる」「サーバーで機能が提供される」みたいなのを見て、ライブラリが提供されるのか、REST APIを呼び出すのか、それは既存と何が違うのか？みたいなことを考えていました。

## じゃあLangChainでどう使うのか？

LangChainアプリケーション（エージェント）にMCPクライアントを用意するみたいです。

世の中に全くついていけていませんが、以下のようなものを用いて解決できるようです。使ってみよう。

https://github.com/langchain-ai/langchain-mcp-adapters

## LangChainのToolなどは不要になるのか？MCPに置き換わるのか？

そんな感じはしていません。

これまでを踏まえて、MCPのポイントとして、以下が挙げられると考えます。

- プロトコルをベースとした機能の提供
- 共有性

そのため、そもそも提供されていない、独自のビジネスロジックである場合は、当たり前ですが実装が必要になります。

そして、それをMCPベースに作成するかは、そのユースケースにおける取捨選択と感じました。

## まとめ

今回、今更感ありますが、MCPについてリサーチして、モヤモヤしていたことを理解してみました。

その過程で、GithubCopilotから「playwright mcp」を使用しましたが、自然言語でWebブラウザを操作できるという面白さと、
なにより、既存サービスだけではできないことを、MCPを用いることで、既存サービス＋MCPで、機能拡張できることに驚きでした。

https://github.com/microsoft/playwright-mcp

MCPについては、MCPクライアントとサーバーの通信や機能提供など、まだまだ気になることは多いので、引き続きリサーチしつつ、何か作ってみたいですね。

MCPはLLMアプリ、エージェント開発において、銀の弾丸みたいなすごいものなのかと思っていましたが、なんとなく標準化に近いのかな...なんて今回思いました。引き続き、使って楽しい、みたいなところだけではなく、アーキテクチャなどの部分も理解を深めていきたいと思います。

理論というよりとっかかり、モヤモヤの解消ネタでしたが、参考になれば幸いです。
以上です。