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

fastmcpとはPythonでMCPサーバーを簡単に作成できるライブラリです。
uv add fastmcp
これによって、プロジェクト内のpyproject.tomlファイル内には次のようになります。
【pyproject.toml】
[project]
name = "mymcp"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"fastmcp>=2.12.4",
]
– `name`と`description`は自由に変更できますが、`name`に「mcp」など既存のパッケージ名を使うとインポートエラーが発生するので避けてください
main.pyに次のようにいれておきます。
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サーバーがツールとして認識できなくなります
これで準備OKです。下記コマンドを実行してみます。
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のフルパスを確認します。
which uv
実行結果をcommandに指定します。たとえば、実行結果が「/Users/user/.local/bin/uv」であった場合は、下記のようにいれます。
{
"mcpServers": {
"my-mcp": {
"command": "/Users/user/.local/bin/uv",
"args": [
"--directory",
"/Users/user/Documents/mcp",
"run",
"main.py"
]
}
}
}
【Windows】
Windowsの場合は、commandは”uv”のみでOKです。
{
"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】
{
"mcpServers": {
"my-mcp": {
"type": "stdio",
"command": "/Users/user/.local/bin/uv",
"args": [
"--directory",
"/Users/user/Documents/mcp",
"run",
"main.py"
]
}
}
}
【Windows】
{
"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について分かりやすく紹介した動画などもあります。

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




コメント