Pythonで自作したMCPサーバーをVSCode Copilot Agentから利用する
概要
VSCode v1.99からCopilot Agent Modeが利用可能になりました。
Agent ModeではCopilot Agentが様々なツールを利用し、タスクを実行することが可能になります。また、Agent ModeではMCPの機能をすることで、外部のMCPサーバーで定義されているツールの情報を取得し、タスクの実行に利用することができます。
代表的な例として、Playwright MCPがあります。Playwright MCPにはWebブラウザの操作に対応する各種ツールが定義されており、Copilot Agentはユーザーから要求されたWebブラウザに関するタスクをこれらのツールを用いて実行します。
これにより、自然言語をベースとしたWebブラウザ操作の自動化を実現できるようになります。
本記事では簡単なMCPサーバーをPythonを用いて実装し、Copilot Agentから利用するまでの流れを解説します。
完成系
Pythonで以下2つのツールを含むMCPサーバーを実装し、Copilot Agentから使用できるようにします。
-
add
: 2つの値の足し算を行う -
subtract
: 2つの値の引き算を行う
Copilot Agentはユーザーから足し算および引き算に関連する要求を受け取ると、対応するツールを実行しその結果を返します。
MCPとは
MCP(Model Context Protocol)とはAI AgentをはじめとしたAIアプリケーションが、外部のデータソースやツールを利用できるようにするためのプロトコルです。
名前の通り、厳密にはMCPという言葉はプロトコルを指すためそれ自体は単なる仕様に過ぎないのですが、ざっくり「AIがタスクを実行するために外部で定義されたツールを利用するための仕組み」と捉えて差し支えないかと思います。
本記事ではMCPに関するこれ以上の解説しませんが、詳細は以下の資料が大変参考になります。
ハンズオン
それではここから実際にMCPサーバーを作成し、Copilot Agentから利用できるようにしていきます。
全体像は以下の通りです。
Copilot AgentおよびLLMとのやりとりの部分はVSCodeの実装に含まれているため、ここからは主に以下2つのことを行っていくことになります。
- MCP Serverの実装
- MCP Serverを利用するためのCopilot Agentの設定
-
-
Copilot Agent
がMCP Server
からツール情報を取得
-
-
- ユーザーが
Copilot Agent
に対してメッセージを送信
- ユーザーが
-
-
Copilot Agent
がLLM
に対してメッセージとCopilot Agent
が`使用可能なツール情報を送信
-
-
- メッセージとツール情報を元に
LLM
が推論を実行し、実行すべきタスクと使用すべきツールを特定
- メッセージとツール情報を元に
-
-
LLM
が推論結果として使用すべきツールとツールを実行するための引数を返却(Tool Calling
)
-
-
-
Copilot Agent
がLLM
からの回答を元にツールを実行するリクエストをMCP Server
に送信
-
-
-
MCP Server
でツールを実行
-
※この後はツールの実行結果が再度LLMに渡され、その結果を元に生成されたメッセージがユーザーに返されるのが一般的ですが図では省略しています。
環境
今回使用した環境は以下の通りです。
- MacBook Air(M2)
- Visual Studio Code Version: 1.99.3
- Python v3.12.9
MCP Serverの実装
MCP公式で各言語向けにSDKが提供されているため、ここではPython向けのpython-sdkを使ってシンプルなMCP Serverを実装します。
はじめにPythonプロジェクトを作成するためにuvコマンドをインストールしておきます。
uv
コマンドを使ってプロジェクトの作成を行います。
uv init mochimcp-server -p 3.12.9
uv sync
仮想環境を起動しmcpのパッケージを追加します。
. .venv/bin/activate
uv add mcp
プロジェクトを作成するとディレクトリ配下にmain関数を含むmain.py
というファイルが作成されますが、main関数はこの後作成するMCP Serverのソースコードに含めるため一旦ここで削除しておきます。
cd mochimcp-server
rm main.py
MCP Serverのソースコードを作成します。
touch mochimcp-server.py
ソースコードの中身は以下の通りです。
以下のソースコードではmcpというMCP Serverのインスタンスを作成した後、@mcp.tool
というデコレーターを付与した関数を定義しています。
これらの関数がMCP Serverに含まれるツールに該当します。
最後にmain関数の中でrun()
メソッドを呼び出し、MCP Serverを起動します。
mochimcp-server.py
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("mochimcp-server")
# addというツールを定義
@mcp.tool(name="add", description="Add two numbers")
async def add(a: int, b: int) -> int:
return a + b
# subtractというツールを定義
@mcp.tool(name="subtract", description="Subtract two numbers")
async def subtract(a: int, b: int) -> int:
return a - b
if __name__ == "__main__":
# MCPサーバーを起動
# 通信にstdioを使用する
mcp.run(transport="stdio")
以下実装済のプロジェクトです。
(補足)transportについて
MCP Serverを起動するためのrun()
メソッドの中でtransport="stdio"
という指定を行っていますが、これはMCPクライアントとサーバーの通信方式(Transports)を示すものです。
ここではstdio
を指定しているため、クライアントを含むCopilot AgentとMCP ServerはMCP Serverプロセスの標準入力(stdin
)および標準出力(stdout
)を介して情報をやりとりすることになります。
ちなみにstdio
は標準入出力を介してやりとりを行うという仕組み上、MCPクライアントとサーバーのプロセスが同一ホスト上で動作している必要があります。
MCPサーバーをリモートで起動する場合はStreamable HTTP
もしくはHTTP with SSE
(非推奨)を使用する必要があります。
各通信方式でMCPを利用する例を検証したリポジトリを掲載しておきますので、興味のある方はご参照いただければと思います。
MCP Serverを利用するためのCopilot Agentの設定
ここまでで実装したMCP ServerをCopilot Agentから利用するための設定を行います。
VSCode
の設定(setting.json
)を開き、以下のようにMCPサーバー(mochimcp-server
)の情報を追加します。ここではMCP Serverの名前とMCP Serverを起動するためのコマンドを記載しています。
setting.json
"mcp": {
"inputs": [],
"servers": {
"mochimcp-server": {
"command": "uv",
"args": [
"--directory",
"/PATH/TO/DIR/mochimcp-server",
"run",
"mochimcp-server.py"
],
}
}
},
設定を追加するとStart
という表記が現れます。これを押下してRunning
という表記に変われば問題なくMCP Serverを起動できる状態であることが確認できます。
もしここでエラーとなる場合はパスの指定などが誤っている可能性があるため、設定内容を見直してください。
設定が完了したらVSCode Copilot Chatを開き、Agent Modeに切り替えます。
切り替えを行った後、ツールアイコンを押下すると先ほど実装したMCP Serverおよびそこで定義されているツールが表示されます。
この状態で、たとえばチャット欄に「Please calculate 2+3.」という文章を入力してみます。
以下のようにadd
というツール実行の許可が求められるため、Continue
を押下します。
Continue
を押下してツールの実行を許可すると、add
ツールを実行した結果を踏まえて回答が返されることを確認できます。
これで無事、自作したMCPサーバーをVSCode Copilot Agentから利用できたことになります。
Discussion