【要約】MCP入門 ② 自作 MCP Client から MCP Server を呼び出す [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が、Claude Code等の既存ツールが内部で行うMCPの動作を、自作のAIアプリへ応用したいという課題がある。既存のHostが自動で行う処理がブラックボックス化しているため、以下の問題が生じる。
- ・Clientが担うサーバー起動や通信仲介の仕組みが不明確である。
- ・ツールの戻り値の型(dict, list, str)により、パース処理が異なる。
- ・LLMがツールを正しく選択するためのメタデータの重要性が理解しにくい。
// Approach
筆者は、PythonのMCP SDKを用いて、サーバーと通信するClientを段階的に実装する手法をとった。以下のステップで、通信の制御とデータの取得を行う。
- ・
stdio_clientを用い、標準入出力による通信経路を確立する。 - ・
ClientSessionを介して、ツールのリスト取得と実行を行う。 - ・ツールの戻り値の型に応じて、
content内のデータを適切にパースする。 - ・サーバー側のdocstringを詳細に記述し、LLMの選択精度を高める。
// Result
開発者は、LLMを介さずに直接MCPサーバーの機能を制御するコードを記述できるようになった。具体的な成果は以下の通りである。
- ・引数なしおよび引数ありのツール実行を完全に再現した。
- ・ツールの戻り値の構造(CallToolResult)を正確に扱えるようになった。
- ・LLMのツール選択精度を左右する、サーバー側の記述ルールを特定した。
- ・次ステップとして、ローカルLLM(Ollama)との統合への道筋を付けた。
Senior Engineer Insight
> 実戦投入において、MCPサーバーの品質はdocstringの記述精度に直結する。LLMの推論ミスを防ぐため、引数の型ヒントと明確な説明文は必須である。また、戻り値のパース処理は、型によって構造が激しく変化するため、共通のラッパー関数を実装して抽象化すべきだ。これにより、クライアント側のコードの堅牢性と開発効率が向上する。