Claude MCP(Model-Context-Protocol)とは、MCPサーバを経由して外部のリソースをClaudeが使えるようになる仕組みのことである。
MCPサーバは外部のリソースに応じた、かなりたくさんの種類が開発されている。
外部リソースには、自分のPCのファイルなども含まれているので、チャット履歴を自分のPCに保存することも可能になってくる。
https://www.anthropic.com/news/model-context-protocol
開発に必須の内容が詰まっている。網羅されているのはよいが、わかりづらい。MCPサーバを1ファイルの部分ごとに意味を説明しながら作らせる感じなので、どこかで躓くとデバッグが困難だ。デバッグの説明のドキュメントはMacを使う前提っぽい説明なのだ。ちょっと最初の入門としては敷居が高そうな印象だ。というわけで、最初のおすすめチュートリアルとしては、すでにできたMCPサーバを後述のMCPサーバをGithubからダウンロードするほうがとっつきやすいと思う。
https://modelcontextprotocol.io/introduction
原文:
https://modelcontextprotocol.io/quickstart
最初のMCPサーバーを構築し、ホストに接続してみましょう
このチュートリアルでは、シンプルな MCP 天気予報サーバーを構築し、ホストである Claude for Desktop に接続します。まずは基本的なセットアップから始めて、より複雑なユースケースに進みます。
サーバのロードに失敗したらfileメニューから終了しないと、リセットされてないっぽい
チュートリアルで、MCPサーバのサンプルが作れるのだが、それは、Claude for Desktopをつかうので、ダウンロードして設定が必要
チュートリアルでの難しい所は、Claude for Desktop起動時に、MCPサーバを定義に従って接続しに行くのだが、設定がずれるとエラーになる。しかしエラーログの出し方がわかりにくいためはまってしまって、解決策は不明のまま先に進めない。
なので、あらかじめある程度そろったコードで試すよりほかない。
ここが真のチュートリアルであり、よく使うMCPサーバ置き場なのではなかろうか。という認識である。
https://github.com/punkpeye/awesome-mcp-servers
https://github.com/modelcontextprotocol/servers
このリポジトリのようなAIの外部拡張は、OS標準装備にするべき、もしくは、AI時代となる現代の義務教育に取り込むべきレベルと言っても過言ではない気がする。空気のように扱えるようにすべきか。。。。
ただしAIがやろうとしていることが正しいわけではないので、ロールバックができたりする状況が必要だったり、確認のインタフェースが必要だったりすると思う。
https://github.com/punkpeye/awesome-mcp-servers
git clone https://github.com/punkpeye/awesome-mcp-servers.git
ここにはサーバのコードが入っていない。つまりリンク集のようだ
以下をgit cloneしましょう、いくつかサーバがまとまっている
https://github.com/modelcontextprotocol/servers
サーバがまとまっているのは上記だけでは無いようだ
https://glama.ai/mcp/servers?attributes=
https://glama.ai/blog/2024-11-25-model-context-protocol-quickstart
https://reffect.co.jp/ai/claude-mcp
たくさんあるので、使いそうなものがある
たくさんあるが、基本はローカルファイルアクセスだと思う
@modelcontextprotocol/server-filesystem
{ "mcpServers": { "filesystem": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem", "C:/Users/kh/Desktop", "C:/Users/kh/prj/mcp_tutorial" ] } } }
許可しているディレクトリをどんどん追加していける
https://note.com/k1mu/n/n7ab09ac7b4e3
検索エンジンといえばGoogleだが、検索履歴が残る、AIが検索する履歴は利用者の好みとはまた別である。そこでbrave-searchという、検索履歴を残さない検索エンジンを使う
https://github.com/modelcontextprotocol/servers/tree/main/src/brave-search
`claude_desktop_config.json`に以下を追加してください:
```json {
"mcpServers": { "brave-search": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-brave-search" ], "env": { "BRAVE_API_KEY": "ここにあなたのAPIキーを入力" } } }
} ```
うーん、検索の精度はあまり高くないかな。今後に期待。
コミットコメントとか代筆してくれるかも @modelcontextprotocol/server-git
レビューを行うAIになりうるかもしれません @modelcontextprotocol/server-github
Youtubeでおすすめされていた MarkusPfundstein?/mcp-obsidian
サーバじゃないのか? zueai/mcp-manager
tevonsb/homeassistant-mcp
https://github.com/markelaugust74/mcp-google-calendar
https://github.com/MarkusPfundstein/mcp-gsuite
https://qiita.com/Maki-HamarukiLab/items/3ccf9cd6edd634476d02
https://github.com/mcp-get/community-servers/tree/main/src/server-curl
https://spring.io/blog/2024/12/11/spring-ai-mcp-announcement
https://github.com/spring-projects-experimental/spring-ai-mcp
https://github.com/spring-projects/spring-ai-examples/tree/main/model-context-protocol
https://github.com/punkpeye/awesome-mcp-servers?tab=readme-ov-file#frameworks
https://github.com/snaggle-ai/openapi-mcp-server
モデルやエージェントの役割を明確に定義します。例えば、「アシスタント」、「エージェント」、「エキスパート」などです。
モデルが実行できるアクションを定義します。例えば、「情報を検索する」、「要約を作成する」、「コードを生成する」などです。
モデルがアクセスできる関連情報を定義します。例えば、ドキュメント、過去の会話履歴、外部データなどです。
モデルの動作を制御するための命令とパラメータを定義します。例えば、応答の長さ、フォーマット、スタイルなどです。
以下の記事をまとめる
https://modelcontextprotocol.io/docs/concepts/architecture
MCPは、MCPサーバと、MCPクライアントの通信から成り立つ。 MCPサーバとMCPクライアントは1:1で通信を行う。 MCPクライアントをホスト(ClaudeアプリやIDE)では複数持つことができる
チュートリアルをまだやっていないならば、これはまだ見ないほうがいい。 Pythonの例やTypeScript?の例が記載されていた。いきなりこれを見ても、なにかわからない。チュートリアルを先にやらないとわからない気がする。
class Protocol<Request, Notification, Result> { // 受信したリクエストを処理する setRequestHandler<T>(schema: T, handler: (request: T, extra: RequestHandlerExtra) => Promise<Result>): void // 受信した通知を処理する setNotificationHandler<T>(schema: T, handler: (notification: T) => Promise<void>): void // リクエストを送信し、レスポンスを待機する request<T>(request: Request, schema: T, options?: RequestOptions): Promise<T> // 一方向の通知を送信する notification(notification: Notification): Promise<void> }
やり方が2つあって、1つは、標準入出力を使う方法、もう一つはSSEというネットワークを使う方法である。メッセージの形式は、JSON-RPC 2.0 を使用してメッセージを交換する。