(Python、venv、pip版)自作MCPサーバを作成してCursorで使う

Python,プログラミング

MCP Python SDKを使い、MCPサーバーの自作を試した内容を共有します。
uvを使った方法はよく見かけるので、この記事ではvenvとpipを使って実装する方法を紹介します。
また、日本語や空白を含んだパスを指定できるのか、など、いくつか試したことについても紹介します。

実施環境について

  • Windows 11
  • Cursor 0.48.9
  • Python 標準のvenvとpip

環境構築

MCPサーバー用に、Pythonの仮想環境を構築します。SDKのサイトでは uv を推奨していますが、今回は venv を使用します。環境を分けて必要なファイルを取得するだけなので、venv でも大丈夫です。

手順:

1.プロジェクト用ディレクトリ作成: 任意の場所にプロジェクト用のディレクトリを作成します。後述しますが、このディレクトリのフルパスに空白が含まれないようにしてください。

2.仮想環境作成: ターミナル(コマンドプロンプトやPowerShell)でディレクトリに移動し、 venv を使って任意の名前の仮想環境を作成します(ここでは venv という名前)。
python -m venv venv

3.仮想環境に入る: 作成した仮想環境に入ります。

コマンドプロンプト
.\venv\Scripts\activate.bat

PowerShell
.\venv\Scripts\activate.ps1

4.MCP Python SDK のインストール: pip を使い、仮想環境に MCP Python SDK をインストールします。SDKサイトのInstallationに書かれている通りの手順です。
pip install "mcp[cli]"

以上で開発環境の準備は完了です。

MCPサーバーの作成

次に、SDKサイトの Quickstart の通りに実装します。

手順:

1.サーバーコードの作成: プロジェクト用のディレクトリに、例えば server.py という名前で Python ファイルを作成し、以下の Quickstart のコードを貼り付けます

# server.pyfrom mcp.server.fastmcp import FastMCP

# Create an MCP server
mcp = FastMCP("Demo")

# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"

2.サーバーの起動: ターミナルでサーバーを実行します。
mcp run server.py

特にエラーが出ず、リクエストの待ち受け状態になればOKです。Ctrl-Cでプログラムを停止します。

CursorでのMCP設定

最後に、Cursor側で、作成した MCPサーバーを使えるように設定します。

手順:

1.Cursor 設定画面を開く: 設定 (歯車アイコン) > MCP > + Add new global MCP server をクリックします。

CursorのMCPサーバ設定

2.mcp.json に設定を追加: mcp.jsonのmcpServersの記述に、作成したMCPサーバの設定を追加します。

{
    "mcpServers": {
        "add_number": { // 任意の名前
            "command": "プロジェクト用フォルダ/venv/scripts/mcp.exe", // 仮想環境内のmcp.exeのフルパス
            "args": [
                "run",
                "プロジェクト用フォルダ/server.py" // サーバーの.pyファイルのフルパス
            ]
        }
    }
}

設定時の注意点

ここからは設定時に試してみた内容です。

確認1: パスに空白が含まれるとNG

mcp設定で指定するパス(mcp.exe のパスや .py のパス)に、スペース(空白文字)が含まれていると、正常に認識されませんでした。パス全体をダブルクォーテーション (") などで囲ってもダメでした。
空白が含まれない場所・名前に変更することで解決しました。

NG例:

"\"C:\\My Projects\\my_mcp_project\\server.py\""

"C:\\My Projects\\my_mcp_project\\server.py"

OK例:

例:"My Projects" を "MyProjects" に変更

"C:\\MyProjects\\my_mcp_project\\server.py"

確認2: パスに日本語が含まれていてもOK

mcp設定で指定するパス(mcp.exe のパスや .py のパス)に日本語が含まれていても、問題なく動作しました。

OK例:

"server": "C:\\プロジェクトX\\my_mcp_project\\server.py"

確認3: 仮想環境を使っても、使わなくてもOK

今回のように、仮想環境に MCP SDKをインストールした場合、そのままmcp.exeコマンドを呼び出せません。mcp.jsonのcommandプロパティに、仮想環境内の mcp.exe へのフルパスを指定することで、CursorがMCPサーバーを起動できるようになります。
仮想環境でのmcp.exeの保存場所は、プロジェクト用フォルダ/仮想環境名/scripts/mcp.exe です。

仮想環境を作らずに MCP をインストールした場合は、commandプロパティにはmcpとだけ指定すればOKです。

動作確認

設定が完了したら、Cursorのチャットで自作MCPサーバーを使わせてみてください。

まとめ

今回は、Pythonの標準的な仮想環境 (venv、pip) を用いてMCPサーバーを作成し、Cursorで利用する手順、設定時の注意点について解説しました。

  • venvpip で環境構築可能。
  • パスに空白文字はNG。日本語はOK。
  • 仮想環境内のmcp.exeを使う場合はフルパスを指定。

MCPを活用すれば、Cursor単体ではできないような独自の作業を対応させることも可能になります。これから、独自のMCPサーバーの開発に挑戦してみたいと思います。

参考リンク

MCP Python SDK