もくじ
https://tera1707.com/entry/2022/02/06/144447
C#で自作MCPを作ってVSCodeで動かす
目標
今回は、以下のようなMCPサーバーを作って、それをVSCode + github copilot でのチャットで使用することを目標にする。
- C#製
- stdio形式
- 予めビルドしたMCPサーバー(exe)を、Program Files以下のフォルダに配置する
- 配置したMCPサーバーをVSCodeに登録する
- 登録したMCPサーバーをVSCodeのチャットから使用する
前提
- 2025/11/3に本記事作成
- VSCode 1.105.1
- VisualStudio2022 17.14.17
- ModelContextProtocol 0.3.0-preview.4
- Microsoft.Extensions.Hosting 9.0.8
- C#
構成
以下の構成要素がある。
図にするとこういうイメージ。
MCPとは?を理解するには、
私の図を参考にするより、👇の書籍を読んだ方がよい。
今回作るのは、この図の一番左の「MCPサーバー」の部分のみ。AIチャットクライアントの作り方は別で実験した。
簡単なMCPサーバーをビルドする
私が以前行った、AIチャットクライアントの実験の時に作った簡単なMCPサーバーを使う。
以下にコードがある。
AIチャットクライアント部分のコードとMCPサーバー部分のコードがある。
MCP部は👇の部分。
今回試すうえでは、ソリューシュン(sln)まるごとビルドすればOK。

コードをダウンロードして、AIChatJikkenをVisualStudio2022で開き、ソリューションをビルドする。
ビルドしてできたMyMcpServer.exeを含む成果物一式は、.\AIChatJikken-main\AIChatJikken-main\MyMcpServer\bin\x64\Debug\net9.0-windows10.0.26100.0\win-x64\フォルダにできる。
今回は、この成果物を開発PCのC:\Program Files\MyMcpServer\に配置して使う。
リポジトリの中に、配置のためのバッチ.\AIChatJikken-main\CopyMcp.batを用意しているので、それを実行する。
※githubからダウンロードしたら、batの文字コードがUTF8で改行コードがLF、等になってる場合があるので、ANSI+CRLFに変換すること。
実行すると、そのフォルダに、ビルド成果物一式がコピーされる。
これで、ビルドと配置はOK。(MCPサーバーのコードの中身は全然大したことない。別途説明はする)
今回のMCPサーバーの仕様
このMCPの仕様は下記の通り。
■休日の過ごし方を取得するMCPサーバー ・パパの休日の過ごし方を聞くと「ごろごろしています」と回答する ・ママの休日の過ごし方を聞くと「ショッピングしています」と回答する ・息子の休日の過ごし方を聞くと「走り回っています」と回答する ・娘の休日の過ごし方を聞くと「歌を歌っています」と回答する ・英語で聞いても同様の回答をする
配置したMCPサーバーをVSCodeに登録する
登録するうえでは、以下の内容を入力する。
以下の手順で行う。
下の2つのボタンを順番に押して、MCPサーバーの登録画面を出す。

stdioを選択する。

先ほど配置した、自作MCPのパスを入力する。
※「Program Files」に半角スペースが入るので、パスを「"」で囲むこと。

適当な名前を付ける。(今回はMyMCPServer1103にした)

これで、「MyMCPServer1103」という名前で、stdioのMCPサーバーが登録された。
VScodeの場合、
C:\Users\masa\AppData\Roaming\Code\User\mcp.json
というファイルに、👇のような内容で、MCPサーバーが登録される様子。
今回登録したのは赤枠の「MyMCPServer1103」だが、その登録内容の上側(L6とL7の間)に、サーバーの操作のための表示が出る。

うまくMCPが登録できていて、かつMCPの実装も正しければ、ここが「✔起動中」になっていて、「〇個のツール」と表示されているはず。
(MCPツールの実装がうまくいってないと、起動はしているがツールが0個になっている、などが起きる。今回の場合は1個だけツールを実装しているので、これでOK。)
※MCPサーバー設定の保存についての詳細は、下で書く。
ここまでやると、VScodeのMCPサーバー/ツール一覧に、登録した自作MCPサーバーが出てくる。
今回の場合は、「MyMCPServer1103」という、「get_how_to_spend_holiday」というツールを持ったMCPサーバーが登録されている。

登録は、これでOK。
MCPサーバーを動かす
動かすのは、チャット欄に、そのMCPサーバーが持っているツールが「動きそうな」質問をすればよい。
今回の場合、MCPのツールの実装は下記のようになっている。
using ModelContextProtocol.Server; using System.ComponentModel; namespace MyMcpServer; [McpServerToolType] internal static class HowToSpendHoliday { [McpServerTool, Description("Get how to spend holiday. 休日の過ごし方を取得する。")] internal static string GetHowToSpendHoliday( [Description("A name for a family member who wants to learn how to spend their holidays. 休日の過ごし方を取得したい家族の呼称")] string target) => target switch { "パパ" => "ごろごろしています。", "ママ" => "ショッピングしています。", "息子" => "走り回っています。", "娘" => "歌を歌っています。", "father" => "Swimming in the pool.", "mother" => "Shopping.", "son" => "Runnning.", "daughter" => "Singing songs.", _ => "I don't know", }; }
メソッドに付けるMcpServerTool()属性で、休日の過ごし方を取得するためのツールであることを示している。
引数に付けるDescription()属性で、受け取る引数が休日の過ごし方を取得したい家族の呼称であることを示している。
なので、チャットクライアントに、家族の呼称を指定して休日の過ごし方を質問すれば、上のコードに書いた内容を答えてくれると思われる。
やってみる。
まず、MCPサーバーのツールを使用する許可をこちらに求めた後、

許可をすると、ツールが実行され、ツールから情報を取得し、それを使ってAIが回答をしてくれる。

これで、とりあえず簡単な自作MCPサーバーを動かすことができた。
備考
MCPサーバー設定の保存について
MCPサーバーがjsonに保存されるという部分は、VScodeの仕様。
ClaudeDesctopなど別のクライアントを使うと、また別の保存のされ方になる。
(クライアントがどうMCPサーバーの登録を保存するかは、MCPサーバー自体の仕様ではない)
VSCodeの場合、ここに登録されたMCPサーバーは、VSCodeで共通のMCpサーバーになる。 ワークスペース単位で別の設定も持たせられるが、それはまた別のjsonに保存される。
参考: https://tera1707.com/entry/2025/06/10/223614
