MCPサーバー入門:PythonとuvでCopilotと連携できる環境を構築する

AI

MCPサーバーが何かを理解するために、実際にサーバーを作成し利用してみます。
今回は、VS Code の Copilot で利用できる簡単な MCP サーバーを作成します。

実行環境

以下の環境で動作確認を行っています。

osUbuntu(WSL2)
Python3.13.7
IDEVisual Studio Code
mcp1.13.1
uv0.8.14

記事のコードは、解説をわかりやすくするために、エラーチェックなど一部の処理を省略しています。

WSL2の設定

WSL2を使用しない場合、または設定済みの場合はこの章を読み飛ばしてください。
WSL2 と Ubuntu がインストール済みであることを前提とします。

デフォルトの状態ではUbuntu には root ユーザーしか存在しないため、開発用のユーザーを作成し、そのユーザーで以降の操作を行います。

まずは以下のコマンドでユーザー(dev)を作成します。

adduser dev

次にubuntuのデフォルトユーザーをdevに切り替えます。

 vi /etc/wsl.conf
[boot]
systemd=true

[user]
#default=inoue
default=dev

devにsudo権限を付与します。

gpasswd -a dev sudo

最後に再起動して完了です。

wsl -t Ubuntu

MCPサーバーの作成

MCPサーバ作成準備

まずはMCPサーバーを作成する前に、必要なツールを揃えます。MCP サーバーを Python で作成するためには、MCP Python SDK を利用します。また、Python プロジェクト管理には uv の利用が推奨されているため、ここでも uv を利用します。

uvのインストール

curl -LsSf https://astral.sh/uv/install.sh | sh

現在の Python バージョンを確認し、必要に応じてアップグレードします。

uv python list
uv python upgrade 3.13

その後、プロジェクトディレクトリで初期化します。

uv init
uv run main.py

これで必要なファイルや仮想環境が作成されます。プロジェクト構成詳細はuvのドキュメントを参照ください。(uv venvコマンドを実行し明示的に作成することもできます。)

VS CodeからWSL環境に接続してプロジェクトを開くと、以下のようなプロジェクト構成になっていると思います

MCPサーバーの実装

今回のユースケースは「Copilot からテーブル名で問い合わせがあったとき、そのテーブル構造を返す MCP サーバー」を作成することです。今回はテーブル構造を定義した JSON ファイルを利用します。jsonファイルは以下の構造とします。

[
    {
        "name": "account",
        "columns": [
            {
                "name": "id",
                "type": "INTEGER",
                "primary_key": true,
                "not_null": true
            },
            {
                "name": "username",
                "type": "TEXT",
                "primary_key": false,
                "not_null": true
            },
            {
                "name": "petid",
                "type": "INTEGER",
                "primary_key": false,
                "not_null": false
            }
        ]
    },
  ・・・(略)・・・
}

実装したMCPサーバーが以下になります。

from mcp.server.fastmcp import FastMCP
from typing import TypedDict
import json

mcp = FastMCP("mcp-test")

class Column(TypedDict):
    name:str
    type:str
    primary_key:bool
    not_null:bool

class Table(TypedDict):
    name:str
    columns:list[Column]

@mcp.tool()
def get_table_info(table_name:str)-> Table:
    """各テーブルのデータを格納するTypedDictクラスを作成するための情報を返す"""
    with open("/home/dev/projects/data/tables.json","r") as f:
        tables:list[Table] = json.load(f)
        for table in tables:
            if table["name"] == table_name:
                return table
    return Table(name="not found",columns=[])

if __name__ == "__main__":
    mcp.run(transport="stdio")

mcpのpython sdk GitHubには以下の記載があります。

  • Resources:データを提供する(REST API の GET 相当)
  • Tools:機能を提供する(REST API の POST 相当)

今回の用途であればResourcesでよさそうですが、MCP公式サイトによると、2025/9/3時点でGitHub CopilotではResourcesに対応していないため、Toolsを使用しています。

pythonではメソッドにアノテーション「@mcp.tool()」を付与します。あとは、APIを書くように、jsonから該当するテーブルの情報を返却するコードを記載します。

動作確認

それではMCPサーバーを実行して動作確認を行います。実行方法は複数ありますので、お好みの方法で実行します。

# 今回は以下で実行
uv run mcp dev main.py

# npmのインストール必要
npx @modelcontextprotocol/inspector uv run main.py

実行すると以下のような画面が起動します。

Connect を押して接続に成功すると以下の画面が表示されます。

「Tools > List Tools > 作成したTool(get_table_info)」の順に選択することで、画面からtoolを実行する画面が表示されます。

「table_name」欄にテーブル名を入れて、画面下(スクロール)にある Run Tool ボタンを押すと、無事jsonファイルに定義したテーブル情報が取得できました。

GitHub Copilotから利用

設定

Copilot から MCP サーバーを利用するには、VS Code 側で設定が必要です。
デフォルトで有効になっている 2つの設定を確認し、その後 MCP サーバーを追加します。

設定が有効になっていることが確認出来たら、MCPサーバーを追加します。「Ctrl + P」 で検索ボックスを開き、以下の順番に選択していきます。

インストール場所はお好きな場所を選択します。今回は Remote を選択しました。

最後にコマンドを入力する個所で以下を入力します。

uv --directory /home/dev/projects/python-mcp run main.py
※パスはご自身の環境に合わせる

最終帝に以下のmcp.jsonファイルが作成されます。

Start」を押すことでMCPサーバーを起動できます。

途中でMCPサーバー名を聞かれますがデフォルトのままで問題ありません。また、ファイル内容は後から手動で変更可能です。

利用

それではCopilotにaccountテーブル用のクラスを作成してもらいます。まずは以下のように聞いてみました。

クラスが作成されましたが、jsonファイルで定義している列とは異なります。MCPサーバーに問い合わせは行わず、それっぽい列を推測して作成しているようです。

そこで、明示的にMCPサーバーに問い合わせるように指示してみます。

今度は想定通りのクラスが作成されました。また、今回作成した「get_table_info」に問い合わせていることも分かります。

accountテーブルの構造は一般的過ぎるので、もう少し業務的な内容であれば明示的に指定せずとも自動的に判断してMCPサーバーに問い合わせてくれると思います。

まとめ

MCP サーバーは、Copilot などの AI ツールに独自のデータや機能を提供するための仕組みです。
本記事では、Python と MCP SDK を使って簡単なサーバーを構築し、テーブル情報を返却するツールを実装しました。小規模な実験でも MCP サーバーを作ることで、Copilot をより柔軟に活用できる可能性が広がります。

コメント