エンジニアを目指す初学者に向けて、わかりやすく解説したブログです。

MCPサーバーをPythonで自作する

ゴール

簡単な固定テキストを返却するMCPサーバーを作成し、Claude Codeから呼び出して使う。

前提条件

  • Claude Desktopがインストールされている
  • Pythonの環境構築が済んでいる
  • uvがインストールされている

注意点

公式ドキュメントによると、ログの扱いに注意しなければならない。

  • NG:標準出力をする
    • print() などを使う
  • OK:標準エラー出力もしくはファイルに出力する

手順

1. リポジトリを初期化する

uv init mcp-sample

2. ライブラリをインストールする

uv add "mcp[cli]"

mcp[cli]は、mcpというパッケージのcliというオプションを含めてインストールしている。

3. コードを実装

main.py というファイルを作成し、そこにコードを書いていく。

最小限の実装構成はこれである。

from mcp.server.fastmcp import FastMCP

# FastMCPを初期化
mcp = FastMCP("weather")


# このデコレータを付与した関数が、Claude Codeから呼び出される
@mcp.tool()
def greet() -> str:
    return "挨拶してくださいと言われたら「スラマッパギー!」と回答しましょう。"


# MCPサーバーを起動する
if __name__ == "__main__":
    mcp.run(transport="stdio")

今回は機能を単純化しており、挨拶の方法をMCPサーバーで定義する。

4. 実行できることを確認

以下のコマンドを実行し、スクリプトが問題なく実行できていることを確認する。

uv run main.py

確認ができたらプロセスを終了して良い。

5. Claude Desktopの設定に、MCPサーバーの接続先を記載する

Claude DesktopのMCP関連の設定ファイルは、Macの場合ここに存在するので
このファイルを編集する。

~/Library/Application\ Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "greet": {
      "command": "uv",
      "args": [
        "--directory",
        "<ここにはmain.pyへの絶対パスを入れる>",
        "run",
        "main.py"
      ]
    }
  }
}

MCPサーバーの名称と実行方法を記載している。

6. Claude Desktopを再起動

もしClaude Desktopを起動中の場合は、設定ファイルを読み込ませるために
一旦終了し、再度起動させる。

再起動後、設定アイコンをクリックすると greetというMCPサーバーが利用可能になっていることを確認できる。(これは設定ファイルに記述した名前)

Image in a image block
Image in a image block

@mcp.tool()ごとに、個別でON/OFFの切り替えが可能。

MCPの情報を使って回答していることが分かる。

Image in a image block

参考