Pythonで簡単なMCPサーバーを自作してみた
前回はplaywright MCPをclaude desktopで動かしてみたので
今回は自作したMCPサーバーをclaude desktopから動かしてみようと思います。TypeScriptやJavaなどもありますが、今回はPython公式SDKをみながら作ってみます。
1. MCPサーバー作成
作るのは日本語の日付(例:"2025年4月8日")をYYYY-MM-DD形式に変換するだけのシンプルなものです。Claude for desktopで自然言語で指示を送り、ツールを使って変換してもらいます。
プロジェクトの作成
公式が推奨しているuvを使って仮想環境でプロジェクトフォルダを作成します。
uv init mcp-server-demo
cd mcp-server-demo
uv add "mcp[cli]"
*uv add mcpを実行するにはpythonのバージョンが3.10以上である必要があります。
コード作成
mcp-server-demoのなかにserver.pyを作り、以下のコードを記述します。
from mcp.server.fastmcp import FastMCP
from datetime import datetime
mcp = FastMCP("DateConverter")
@mcp.tool()
def convert_date_format(text: str) -> str:
try:
dt = datetime.strptime(text, "%Y年%m月%d日")
return dt.strftime("%Y-%m-%d")
except Exception as e:
return f"変換に失敗しました: {e}"
if __name__ == "__main__":
mcp.run()
tool部分以外はSDKのQuickstart通りに書いています。
Claude for desktopの設定
Claude for desktopの設定ファイルであるclaude_desktop_config.jsonに以下のように記述することで、今回作ったdate-converterをclaudeで起動できるようになります。
{
"mcpServers": {
"date-converter": {
"command": "uv",
"args": [
"--directory",
"<mcp-server-demoの絶対パス>,
"run",
"server.py"
],
"alwaysAllow": ["convert_date_format"],
"disabled": false
}
}
}
args
はcommand
に渡す引数リストであり、実行コマンドとしてはこうなります。
uv --directory <mcp-server-demoの絶対パス> run server.py
alwaysAllow
にツール名を指定することで、ツール呼び出し時の確認ダイアログをスキップさせます。
disabled
はfalse
にしておけばMCPサーバーを有効にできます。
Claude Desktopを再起動後、このMCPサーバーが使えるようになります。
2. Claude desktopで実行
プロンプトで以下のように指示します。
2025年5月6日をMCPを使ってyyyy-mm-dd形式に変換してください。
以下のように、MCPサーバーを使用してYYYY-MM-DD形式に変換してくれました。
date-converterのMCPサーバーを使用して、2025年5月6日を2025-05-06(yyyy-mm-dd形式)に変換しました!
3. まとめ
今回はPythonで簡単なMCPサーバーを作り、claude desktopで動かしてみました。
LLMが不得意なタスクはMCPで確実に処理させるなど、便利な使い方ができそうです。
Discussion