PythonでMCPサーバーを自作し、Claude DesktopやClaude Codeで使う方法を解説します。
WindowsとMac両対応で、シンプルなサンプルコードを使って説明します。
ローカルでMCPサーバーを自作
まずはプロジェクトディレクトリを作成します。下記コマンドでuvを初期化します。
1 |
uv init |
仮想環境を作成します。
1 |
uv venv |
仮想環境を有効化します。
【Mac】
1 |
source .venv/bin/activate |
【Windows】
1 |
.venv\Scripts\activate |
次に、fastmcpをいれておきます。

fastmcpとはPythonでMCPサーバーを簡単に作成できるライブラリです。
1 |
uv add fastmcp |
これによって、プロジェクト内のpyproject.tomlファイル内には次のようになります。
【pyproject.toml】
1 2 3 4 5 6 7 8 9 |
[project] name = "mymcp" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.11" dependencies = [ "fastmcp>=2.12.4", ] |
dependencies
に"fastmcp"
が入っているか確認してください。 もし空欄だったり、入っていない場合は手動で追加します–
name
とdescription
は自由に変更できますが、name
に「mcp」など既存のパッケージ名を使うとインポートエラーが発生するので避けてくださいmain.pyに次のようにいれておきます。
1 2 3 4 5 6 7 8 9 10 11 |
from fastmcp import FastMCP mcp = FastMCP() @mcp.tool() def add_numbers(number1: int, number2: int) -> int: sum = number1 + number2 return sum if __name__ == "__main__": mcp.run() |
@mcp.tool()
(sなし)と関数定義def
の間に空行を入れないでください。– 空行を入れると、デコレーターが関数に正しく適用されず、MCPサーバーがツールとして認識できなくなります
これで準備OKです。下記コマンドを実行してみます。
1 |
uv run main.py |
下記のような画面が表示されればOKです。この後、Ctrl+Cで止めておいても大丈夫です。
作成したMCPサーバーをClaude Desktopで使う
まずはClaude Desktopをインストールしておきます。
Claude Desktopを起動します。
サイドバー左下/設定/開発者を選択。【設定を編集】ボタンをクリックすると、設定用ファイルclaude_desktop_config.jsonが選択されます。このファイルを開きます。
*上記では既にいくつか登録されたものがありますが、最初は何も表示されない画面となります。
claude_desktop_config.json に次のように指定します。–directoryの下には、実際にMCPサーバーを作成したディレクトリを設定します。
【Mac】
まず、uvのフルパスを確認します。
1 |
which uv |
実行結果をcommandに指定します。たとえば、実行結果が「/Users/user/.local/bin/uv」であった場合は、下記のようにいれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "mcpServers": { "my-mcp": { "command": "/Users/user/.local/bin/uv", "args": [ "--directory", "/Users/user/Documents/mcp", "run", "main.py" ] } } } |
【Windows】
Windowsの場合は、commandは”uv”のみでOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "mcpServers": { "my-mcp": { "command": "uv", "args": [ "--directory", "C:\\python\\mcp\\myMCP", "run", "main.py" ] } } } |
Claude Desktopを再起動します。Macの場合は、許可を求める画面になります。「許可」をクリックします。(Windowの場合は、特にこの画面はありませんでした)
【検索とツール】ボタン(+ボタンの右)をクリックすると、登録したMCPサーバーの名前が確認できます。
下記のように質問をしてみます。すると、作成したMCPサーバー内の関数を使って質問に答えようとしてくれます。なお、MCPサーバーについて使用許可がでてくるので、「一度だけ許可」を選択して進めてみましょう。
「my-mcpを使って答えてください。3と5です」といった形で質問をします。
計算結果が表示されます。
エラーになる場合
Claude Desktopを起動した際に、もしMCPサーバー接続エラーになる場合は、下記のようにエラーメッセージが表示されます。開発者設定画面よりログを確認します。
原因は色々だと思いますが、下記に該当するものがないか確認してみてください。
claude_desktop_config.json
のパスが間違えていないか- Macの場合:
which uv
で確認したパスと一致しているか - Windowsの場合:パスの区切りが
\\
(バックスラッシュ2つ)になっているか - プロジェクトディレクトリのパスが正しいか
- Windowsの場合:Claude Desktopが完全に終了した後に再起動したか(終了したかどうかタスクマネージャーでチェック)
作成したMCPサーバーをClaude Codeで使う
プロジェクトで使用するMCPサーバーは、プロジェクト内に.mcp.jsonファイルを作成します。下記のようにいれておきます。
commandの書き方は、Claude Desktopと同様です(上記説明ご覧ください)。
【Mac】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "mcpServers": { "my-mcp": { "type": "stdio", "command": "/Users/user/.local/bin/uv", "args": [ "--directory", "/Users/user/Documents/mcp", "run", "main.py" ] } } } |
【Windows】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "mcpServers": { "my-mcp": { "type": "stdio", "command": "uv", "args": [ "--directory", "C:/python/mcp/myMCP", "run", "main.py" ] } } } |
Claude Codeを立ち上げると、新たなMCPサーバーがあるが使ってよいかどうか聞かれます。2番目の「Use this MCP server」を選択します。
Claude Code内で「my mcpを使ってください。3と6です。」といった形で質問をしてみます。
MCPサーバーが使われていることが分かる画面が表示されます。
MCPを使って結果が返ってきます。
なお、ClaudeCode内で/mcpを実行すると、現在利用できるmcpサーバーを確認できます。
さいごに
今回はローカルで作成したMCPサーバーを利用する方法をご紹介しました。
MCPサーバー自体はテスト用にかなりシンプルなものを使いましたが、こちらは、ご希望によって変更してください。
記事コンテンツ更新の際には、Xにてご紹介しています。よろしければフォローしてください。
またYoutubeも更新中です。過去にMCPについて分かりやすく紹介した動画などもあります。

ご興味あれば、併せてご覧ください。