本書『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ツール群を作る

各記事の見どころ

第1回:MCPサーバーをC#で作る(STDIO方式編)

本書の第3章では、PythonのFastMCPと@mcp.tool()デコレータを使って電卓サーバーを作ります。gushwellさんのC#版では、dotnet new mcpserverテンプレートから出発し、[McpServerTool][Description]属性で同等の機能を実現しています。

特筆すべきは、[Description]に記述されたテキストの充実度です。本書のPython版が"""2つの数を足し算""" と簡潔に書いているのに対し、C#版では「2つの数値を加算(足し算)します。整数・小数に対応。金額計算、合計値の算出、累積計算などに使用」と、AIがツールを選択する際の判断材料を大幅に強化しています。MCPにおいてDescriptionがどれほど重要かを理解した上での工夫であり、本書で学んだ知識をさらに発展させた好例です。

第2回:MCPサーバーをC#で作る(HTTP方式編)

本書の第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での動作確認手順もカバーされており、本書の段階的な検証プロセスが再現されています。

第3回:MCPサーバーをC#で作る(DB接続編)

本書の第6章のデータベース連携サーバー(create_sample_db.pyによるサンプルDB作成、database_server.pyによるlist_tables()execute_safe_query()の実装)をC#に移植しています。

ここで光るのはDTO(Data Transfer Object)パターンの導入です。Python版が辞書型で柔軟にデータを返しているのに対し、C#版ではTableInfoQueryResultといった型を定義し、レスポンスを構造化しています。SQLインジェクション対策のValidateSqlSafety()も正規表現を使って移植されており、本書が強調する「安全なデータベース操作」の理念がそのまま受け継がれています。

第4回:MCPサーバーをC#で作る(Weather API連携編)

本書の第7章Step 3で実装するOpenWeatherMap APIとの連携をC#で再現しています。