#356 聞くだけMCPサーバとクライアント実装体験会!

2025/5/18 ·

  • この番組はエンジニアの成長は楽しい学びからおもとに日々インプットした話題をワイワイお届けするラジオになってますお届けしに来ました本日ですがちょっと1ヶ月経っちゃったんですけどMCPの続きのエピソードでMCPサーバーとクライアントを作ろうと思ったら具体的に何やってんのっていう具体の話ですねはいちょっと話持ってきましたいいですね



  • アンソロピックが公開しているMCPサーバーとクライアントを作るチュートリアルみたいなのがあって思い越しを上げてやったわけなんですけどサーバーとクライアント実践にちょっと実装してみて今日まとめたって感じなんですがもっと早くやっとけばよかったなと思ってそうなんだ慣れてれば1時間で終わるし



  • 多分慣れてなくても2時間かかんないと思います結構サクッとできる?はいすげえサクッとできますねサクッとできるし自分が実際作ろうと思ったらこうやってやればいいんだみたいなのがすごいつかみやすかったですね作ったのがCLIで動く



  • MCPクライアントMCPクライアントって言ってるのはクロードみたいなクロードアプリみたいなMCPサーバーを読み込ませてチャットベースでやり取りをして必要に応じてMCPサーバーを呼び出して情報を教えてくれるみたいなアプリのクライアントを作ったのとあとはその時に呼び出されるサーバーを作ってみましたMCPクライアントがあれでしたっけLLMを呼ぶために動いてるやつ



  • はいそうですチャットGPTのチャットアプリとかベイキブのクロードのマックアプリみたいなそういうチャットベースでやり取りをしつつLLMを呼び出すやつがクライアントアプリサーバーは各アプリケーションのフロントにいるAPIみたいなやつそうですねMCPサーバーはそうですね今回作ってみたのがチュートリアルにあるやつそのままなんですけど



  • アメリカの天気予報APIみたいなやつを呼び出すMCPサーバーなんでアメリカの天気予報に関する質問来たらそのAPI叩くみたいなそうじゃなかったらLLMの知識の中で回答するみたいなやつを作ってみましたどっちから行こうかなサーバーからいいですかはい



  • どういう実装になってると思います?MCPサーバーってぶっちゃけ全く分かってないなやることとしてはMCPサーバーはMCPクライアントから何かしらのリクエストを受けてそのリクエストをAPIに受け流すでAPIに受け流して返ってきたレスポンスをクライアントに返すはいはい



  • もちろん形式の変換とかあるんですけどみたいなことをやってますけど実際どういう風に実装されてるかというとですねPythonの世界だとMCPサーバーを立てるライブラリみたいなのがあるんですよ多分普通のAPAサーバーを立てるときもそうですよねフレームワークのライブラリ読み込んでそれ.learnみたいな例えばAPAサーバーを起動するみたいな



  • ヤンヤン ツールの名前ですかそれ深井 いや.runは違いますメソッドですね例えば今回mcpサーバーを実行するときにはfastmcpっていうライブラリがあってヤンヤン fastmcp深井 はいヤンヤン そのfastmcpのインスタンス作ってそれに対して.runって実行するとmcpサーバーが上がるんですよ樋口 それだけでいけるの深井 それだけ樋口 すごい



  • ただそれだけだと何の機能もないMCPサーバーなんでファストAPIのフレームワークとかもそうなんですけどデコレーターっていうんですかこのエンドポイントにリクエスト来たらこれ実行するみたいな書き方があるんですけどそれみたいな感じでメソッドをMCPサーバー外に公開するクライアント側に公開するデコレーターをつけます



  • さっきの天気予報を実行するやつとかだと例えばGetForecastっていうメソッドを作ってそのGetForecastのメソッドにmcp.toolっていうデコレーターを付けるとmcpクライアント側がこのmcpサーバーがGetForecastっていうツールっていう言い方するんですけどこのメソッドのことをツール持ってるわっていうのを認識してくれるんですね



  • なのでMCPサーバー側としてはそのMCPのライブラリ読み込んでそのMCPサーバーを立ち上げるのとあとはそのMCPツールとしてメソッドを公開するだけになってますなるほど本当にAPI使用書みたいなものなのかなこういうのあるよみたいなそうですね多分イメージはそんな感じだと思いますそのGetForecastのコードの中ではただ



  • その呼び出し先のAPIを呼ぶだけですただそれだけがMCPサーバーの仕事あとはMCPサーバーとクライアントってJSON RPCという形式でメッセージのやり取りをするんですけどちょっとここで唐突に順平にRPCって何の略でしょうリパーソナルコンピューター変身?



  • 返信なの?返信?メールのプレフィックス?これリモートプロシージャーコールっていうやつですねこのJSON RPCなんですけど普通のAPIやり取りするときってリクエストボディにJSON入るじゃないですかで、あのボディに入ってるのってリクエストのパラメーターじゃないですかうん



  • パラメーターだけ パラメーターというか何でしょうね例えばユーザー登録するんだったらユーザーネームとかそういうユーザー登録に必要なパラメーターを渡すじゃないですかこのJSON RPCの場合はリモートプロシージャーコールという名の通り何の関数実行するまで含めます



  • なるほどねリクエストエンドポイントによって処理を変えるんじゃなくてこのJSON RPCに入っている関数何を実行してほしいっていう情報をもとにMCPサーバーが受け取ってどのツールを実行するかを選択してその選択されたメソッドにJSONの中に



  • 関数実行してほしいメソッドと引数が入ってるんでその引数をそのまま関数に渡して実行してる返す時もJSON RPCの形式に従って返すっていう変換処理とあとJSON RPCの解釈とどのメソッドを実行するかみたいなのをやってるのがMCPサーバー側その関数の中にツールの使い方みたいなのがまとめられてるってことかそこはですね



  • どこ読んでんだろうどこ読んでんでしょうね関数動きとしては最初そのMCPクライアントを立ち上げた時点でサーバー読み込みに行くんですよMCPサーバーを読み込みに行ってこのサーバーは何のツール持ってるかなっていう通信をするんですよその時点で何のメソッドを使うとどういうことができるっていうのをMCPクライアント側で情報として持ちますはいはいはい



  • なんでMCPクライアントとしてはMCPサーバーの実装の詳細をちょっと知った状態でいてこういうことをやりたいっていうのでサーバー側にリクエストが送られてくるみたいな動きになってますなるほどこれがサーバー側の実装の簡単なところになりますこれが



  • 今僕が試したのはローカルでサーバー立ててローカルでクライアントを立ててっていうローカルでのやり取りでやってみたんですけど他にもHTTPでやり取りできるものもあるし逆にサーバー側からクライアント側にイベントを送ることもできるみたいですどういう時に使うんだろうでもなんかあれなんじゃないですかね



  • 情報が更新された時に送るのかな通知とかですよねよくある使い方だとディープリサーチサーチ完了したよ通知みたいなMCPサーバー側LLMと関係ないんでそっか多分API側がプッシュしたい時に使うんじゃないですかねなんかいいねついたよみたいなよくわかんないけどうんうんうん



  • 樋口 そっかサーバー側LLM関係なくてクライアント側でそれをどの関数呼び出すかとかに変換してるのか深井 そうですそうです順番前後してあれなんですけど動きの流れとしてはユーザーがクライアントにメッセージを送りますクライアントがLLMにそれ質問投げますこの質問投げる時点であれなんですよクライアントからLLMに



  • ツールこれ使えませんを合わせて投げますLMにこの質問をしますちなみにツールはこれが使えますっていうのをまるっと投げますそうするとさっきの天気予報の話でいうとどこ



  • カリフォルニアの天気を教えてっていう質問を投げてLM側にカリフォルニアの天気を教えてってクライアントが送りますちなみにGetForecast使えるけどねって言ってLMに送りますそうするとLM側はなんかGetForecast使えるって言うじゃんしかもこのGetForecastってアメリカの天気を取得してくるツールっぽいぞっていうのを解釈して



  • LLMはクライアント側にこのツールを使ってください結果をまた教えてくださいっていうメッセージを返すんですよクライアント側にそうするとMCPクライアントはユーザーに返すことなくMCPサーバーにゲットフォーキャストしに行きますパラメータはいろいろあるじゃないですか実装の詳細的には緯度経度か



  • 井戸経度が必要なんですけどゲットフォーキャストするためにはカリフォルニアの井戸経度はLLMが算出した状態でこの引数でこのAPI叩いてツールを叩いてくださいっていうクライアントに返すんでMCPクライアントはMCPサーバー側にゲットフォーキャスト叩きたいす引数の井戸経度はこれですっていうのでJSON RPCに載せてMCPサーバーにリクエストを送りますなるほど



  • で帰ってきたらその結果をまたLLMに投げてでその情報をひっくるめてLLMがクライアントに返してユーザーに最後回答が渡るっていう動きになってますなるほどなのでちょっとさっき実装の動きもちょっと入ってたんですけどクライアント作ろうと思ったらクライアント側も実は便利なライブラリがあってももうMCPクライアントっていうライブラリがあるんで



  • 正確に言うとMCPの中のクライアントっていうのがあるんでそのライブラリをちょっと拡張させたMCPクライアントクラスを作ってでまぁその中でプログラム実行開始時にコネクトトゥサーバーって言ってMCPサーバーとの接続をしてあとはLLMとのAPIキーとかどのモデル使うみたいな設定値入れて起動ってやった上であとはもう



  • チャットのやり取りは無限ループで回してテキスト受け取ったらそのメッセージを処理するメソッドを呼び出してみたいな実装すると簡単にターミナルでああいうチャットのやり取りをするっていうのは作れるっていう感じですね動きの感じとしてはなんで最初の第1回のエピソードの時にMCPサーバー作ろうと思ったらAPIサーバーのデータベース内版だよねみたいな



  • 話を聞いたっていうのをちょっと触れた気がしてるんですけど触れてなかったらすいませんですが今回作ってみてまさしくその通りだなと思って結局ちょっとツールの性質によると思うんですけど例えばプレイライトのMCPとかだと中どうなってんだろうねって感じですが本当に



  • 公開しているツールを解釈して裏側で何かのAPI呼び出してそれをJSON RPCに直して返すだけっていう動きなんだなというのが分かりましたっていうのが今回ちょっと試してみてっていう感じですねなるほどねそれはあれ2時間ぐらいって言ってましたっけ僕は数十分ぐらいでした本当にコピーしてペッて貼るだけなんで環境構築さえできれば



  • Pythonが入ってれば一瞬ですねライブラリもあるからチュートリアルのコードだとクライアントが158行でサーバーもちょっと短いんじゃないかな93行ですねそのライブラリはアンソロピックが出してるんですかアンソロピックですPythonのやつはそうですね多分JSとPythonは出してくれてる気がしますけどね



  • っていうのが簡単な話でしたあとちょっとちょいトピックなんですけど以前プレイライトMCP紹介したじゃないですかプレイライトMCPっていうのはE2Eテストツールプレイライトを自然言語で指示してブラウザのテストができるみたいなやつなんですけどこれRPA的に使えるんですねっていうのを最近知りました



  • プレイライトってなんだブラウザのテストブラウザのアプリテストをするんでブラウザの操作してブラウザの操作ができるんですけどそれゆえこのサイトでこういう操作してみたいな指示ができるわけなんですよなのでRPA的にプレイライトMCPを使ってるみたいな話を聞いて



  • なるほどなぁと思いましたなのでなんか使い方としてちょっとまだ試してないんですけどノートブックLMにここのドキュメントの配下のページ全部読み込ませるとかなんかそういう繰り返しが発生したりとかあとスプレッドシートとかもいけるんかなちょっとわかんないですけどそれこそねポッドキャストのエピソードの音声アップロードして説明欄つけてとかうんうんまあ



  • ユーザーIDとパスワードを一回クロードに上げる羽目にはなりますが世の中賢い人いるなって思いました確かに逆にそういう専用のツールないんだねMCPはないんじゃないですかMCPはまだあんのかなあんまり聞かないですねMCPは自然言語で使えるの便利だなそうですよね多分



  • 具体的に何が便利とかまだちょっと分かってないですけどねでもどこまで抽象的にできるんですかねGoogle検索とかやらせれるんですかね遊んでみようかなドメインまたやるのかなでもURL複数指定したらこっちのページでこれやってからこっちのページでこれやってみたいなことはできると思いますでもその程度かなもしおすすめの使い方あったら教えてくださいっていう



  • プレイレートかはいじゃあこんなもんなんでお便り言っていいですかはいラジオネームドデカルティンさんからのお便りですいつもありがとうございますありがとうございますサイタですか下手したら鳥占い師さんかドデカルティンさんかですよねすごい毎回感想書いてくれてありがてえ感想からいきますノートブックエレム便利ですよね私はカーソルを使った



  • Kindle本をPDF化するプログラムを使ってPDF化した本をノートブックエレメントに読み込ませ音声概要機能を使いポッドキャストとして聞いていますつんどくしてしまっている本はすべてポッドキャストにしてインプットするのが自分の糧となるので読まず自慢になるよりはいいかもですとすげえ活用するツール作っちゃったってこと?なるほど自分で楽しむ範囲には多分何も言われる筋じゃないですよね多分著作権的には多分そのはず



  • なんだっけな著作権的にはOKだけどKindleの利用規約的にOKじゃないみたいなのがあったような気がするなるほどじゃあそこは読まなかったことにします?わかんないどうなんだろうなんか一回VimJPで盛り上がってたんだよそれそういう系のやつが用法用量守ってっていう感じですねそうですね



  • どうなんすかね雑談会植えているリスナーの方々いるんですかね



  • 言うても僕そんな雑談ないっすよ多分ボイシーで出し尽くしてますよそうですかもっとありそうですけどねカイスさんいやないよ今仕事と子育てとあとポッドキャストのネタを作る日々だよわかるわ子育てのネタとかみんな好きそうじゃないですかそれはあるかもね確かにちょっと入れないですけどそれで言うとなんかあの



  • オンラインコミュニティですか別にいいんですもんねそうですねこれ出るのは結構新しいやろうという話を野望を立ててスラックワークスペースを作ってまだオープンにはなってないですけどそういうところで近況を話すとか話すんじゃないにしろスラックでタイムズチャンネルなのかなランダムなのかなとかできるといいですねうん



  • っていう詳細から入っちゃったんですけど名前も括弧仮で実際に運用するときは名前変わってるかもしれないですけど一応ひまプロ談話室ですか現状っていうのでオンラインコミュニティワイワイしながらエンジニアのインプットができるぞっていうスラックのコミュニティをやろうと思ってるのでおそらくこのエピソードが公開される頃にはチャンネル説明欄とかにリンクがあるのかな可能性はある可能性はあるですね可能性はある



  • というのでちょっと気になったらぜひ入っていただいてそこでは日々インプットしたこととかあとはそのボイシーのライブ配信の通知とかあとはまあ本当にただ子育ての話をするチャンネルとか我々が興味あることもそうですし入ってきていただいた方が興味ある内容についてワイワイしてエンジニアの友達見つけたいとか技術的な成長があるといいよねみたいな



  • ことをやろうと思ってるのでぜひ楽しそうだなと思った方一回スラック入ってみて楽しくなさそうだったら抜けていただいても構わないですしっていう感じで一緒になんかやりたいですね例えばカルタとかいいですねあとはうのうもやりたいですねホームパーティーするやつ正月みたいなことやってる



  • ゲストとして呼んで収録とかもしてみたいですね出てみたい人とかは頻度的にどのくらいの感じでできるかやれるかも分かんないですけどいればとかいつだかやってたメンタリングの公開メンタリングのちょっと変化球みたいなこともできそうですよね確かにYouTube撮りますかそれで撮れたらねYouTubeになっちゃうね



  • 今回メンタリングだいぶ勇気あるよめちゃくちゃ心理的安全性低いよYouTubeで公開するの確かにっていうのをやろうと思ってるんでぜひそこで多分だいぶ雑談をする気がするんでお願いしますとりあえず入ってみればいいっすね入った時に何かの形になってる必要はありますね一回真面目に作らなきゃですね我々も確かに



  • まず3人の状態で一旦温めておくの必要ですよねそうかもじゃあそこで雑談しますか3人でそれこそLINEのエリトリーなくすか全部スラックに移行する?1回それで不便だったらやめますけどはいはいいいんじゃないですかスラックを開く回数増やしたいですそうじゃないと多分やれないですプライベート開かないんですよね



  • 開くようにしていきましょう一旦デマ不便だったらやめましょうそうしましょうはいはいというのでオンラインコミュニティ暇黒ダウンは質問お願いしますお願いしますお願いします別にあれですね別になんかそこで金儲けようというわけではなくて無料で開放しているようなとこなんで我々もなんかちょっとなんだ気楽にやってるんで気楽に入ってきてくださいですねうんてか入ってきていただけるとすごくありがたいですうんまずはちょっと盛り上げないといけないんでそうですねうん



  • あと盛り上げたいよって人盛り上げてくださいお願いしますじゃあ締めますねハッシュタグひまじんプログラマーでSNSNEXTフィードバック募集してますので本日のエピソードに関するフィードバックオンラインコミュニティに関する質問とかありましたらぜひポストをお願いいたしますお願いしますあとはポッドキャストの説明欄からGoogleフォームで番組への要望・感想・質問何でもお待ちしてますお願いいたします聞いてるよーだけでもいいですよね



  • 各種ポッドキャストプラットフォームのフォロー高評価もお願いしますお願いします待ってますそれではまた次回バイバイあなたが落としたのはこの金のサーバーですかそれとも銀のサーバーですかいいえ私が落としたのは普通のウェブサーバーですすみませんあなたは正直者ですね全部のサーバーをあげましょう



  • 正直者のエンジニアは不可分散ができるようになりましたそれを見ていた欲張りな男がサーバーを落としましたあなたが落としたのはこの金のサーバーですか?へい、その金のサーバーを落としましたどうやらあなたは嘘つきのようですそう言って女神は帰っていきました欲張りな男は復旧できないサーバーの前でわんわん泣いていました



  • サーバーを落としたくないあなたへひまじんプログラマーの週末エンジニアリングレッスン

0:00 26:32

#356 聞くだけMCPサーバとクライアント実装体験会!