本書『MCP入門―生成AIアプリ本格開発』はPythonをベースに解説していますが、C#/.NETで同じ内容を実践したいという方にとって、非常に心強い連載記事がZennに公開されています。
株式会社ジードの出井秀行さん(@gushwell)が、本書の内容をC#に移植した全7回の連載です。単なるコードの置き換えではありません。.NETのエコシステムに最適化された実装と、独自の工夫が随所に盛り込まれためちゃ質の高いシリーズです。
出井さんは実は私が尊敬するC#関連のパイオニアです。『C#コードレシピ集』『なるほどなっとく C#入門』をはじめとするバイブル的なC#関連書籍を多数執筆され、2005年から18年連続でMicrosoft MVPアワードを受賞されている、日本のC#コミュニティを代表する技術者です。最新著作『[改訂新版]実戦で役立つ C#プログラミングのイディオム/定石&パターン』(技術評論社、2024年)では、C# 12.0/.NET 8.0に対応した全面改訂を行われています。
そのC#のエキスパートが本書に注目し、全編にわたってC#への移植を手がけてくださったことに、著者として深い敬意と感謝を表します。
| # | 記事タイトル | 対応する章 |
|---|---|---|
| 1 | MCPサーバーをC#で作る(STDIO方式編) | 第3章 最初のMCPサーバーを作る |
| 2 | MCPサーバーをC#で作る(HTTP方式編) | 第5章 2つの通信方式 |
| 3 | MCPサーバーをC#で作る(DB接続編) | 第6章 データベース連携サーバー |
| 4 | MCPサーバーをC#で作る(Weather API連携編) | 第7章 外部API連携(Step 3) |
| 5 | MCPサーバーをC#で作る(NEWS API連携編) | 第7章 外部API連携(Step 4) |
| 6 | MCPサーバーをC#で作る(IP情報連携編) | 第7章 外部API連携(Step 5) |
| 7 | MCPサーバーをC#で作る(Webサーチ編) | 第8章 汎用MCPツール群を作る |
本書の第3章では、PythonのFastMCPと@mcp.tool()デコレータを使って電卓サーバーを作ります。gushwellさんのC#版では、dotnet new mcpserverテンプレートから出発し、[McpServerTool]と[Description]属性で同等の機能を実現しています。
特筆すべきは、[Description]に記述されたテキストの充実度です。本書のPython版が"""2つの数を足し算""" と簡潔に書いているのに対し、C#版では「2つの数値を加算(足し算)します。整数・小数に対応。金額計算、合計値の算出、累積計算などに使用」と、AIがツールを選択する際の判断材料を大幅に強化しています。MCPにおいてDescriptionがどれほど重要かを理解した上での工夫であり、本書で学んだ知識をさらに発展させた好例です。
本書の第5章では「内線電話 vs IP電話」の比喩でSTDIOとHTTPの2つの通信方式を解説し、Python側ではMCP_TRANSPORT環境変数とmcp-proxyで切り替えています。
C#版では、ASP.NET CoreのWithHttpTransport()メソッドを使うことで、mcp-proxyを介さずにHTTPトランスポートを直接サポートしています。csprojファイルのSDKをMicrosoft.NET.Sdk.Webに変更するだけで通信方式が切り替わるという、.NETならではのアプローチです。MCP Inspectorでの動作確認手順もカバーされており、本書の段階的な検証プロセスが再現されています。
本書の第6章のデータベース連携サーバー(create_sample_db.pyによるサンプルDB作成、database_server.pyによるlist_tables()とexecute_safe_query()の実装)をC#に移植しています。
ここで光るのはDTO(Data Transfer Object)パターンの導入です。Python版が辞書型で柔軟にデータを返しているのに対し、C#版ではTableInfoやQueryResultといった型を定義し、レスポンスを構造化しています。SQLインジェクション対策のValidateSqlSafety()も正規表現を使って移植されており、本書が強調する「安全なデータベース操作」の理念がそのまま受け継がれています。
本書の第7章Step 3で実装するOpenWeatherMap APIとの連携をC#で再現しています。