💆‍♂️

作ったMCPサーバをGitHubからインストール可能にする(stdio)

に公開

結論

uv init --packegeでmcpサーバを作って、uv tool install git+するだけ。
サンプルリポジトリ

手順

1.プロジェクトを初期化

uv init --package プロジェクトの名前で、プロジェクトをパッケージとして初期化する。
ここでは具体的に、uv init --package greet_mcpとする。
uv公式ドキュメント
あとmcpをインストールするuv add mcp[cli]

2.pyproject.tomlを見る

[project.scripts]内に、コマンドの情報が書かれている。

pyproject.toml
[project]
name = "greet-mcp"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
authors = [
    { name = "your name", email = "sample@example.com" }
]
requires-python = ">=3.13"
dependencies = []

[project.scripts]
greet-mcp = "greet_mcp:main" #greet-mcpというコマンドを追加する。src\greet_mcp\__init__.pyのdef main()がエントリポイントとなる。

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

3.サーバを作る

src\greet_mcp\__init__.pyのmain()を実行すると巡り巡ってmcp.run()が呼ばれるようになっていれば良い。
最小構成として__init__.pyに全部書く。

src\greet_mcp\__init__.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("greet")


@mcp.tool()
def greet(name: str) -> str:
    """MCPサーバから挨拶します。

    Args:
        name (str): 名前

    Returns:
        str: 挨拶メッセージ
    """
    return f"MCPサーバから挨拶します。こんにちは、 {name}さん!"


def main() -> None:
    mcp.run() #デフォルトでtransport="stdio"

4.ローカルでインストールしてみる

プロジェクトディレクトリ配下でuv tool install .とすればローカルでグローバルにコマンドが使用可能になる。
uv tool install . -eとすると変更が即反映されるので便利。
uv tool uninstallでアンインストールできるが、その際ClaudeDesktopなどを終了させておかないと失敗する。

5.使ってみる

試しにcursorで使ってみる。

mcp.json
{
  "mcpServers": {
    "greet-mcp": {
      "command": "greet-mcp"
    }
  }
}

ちゃんと認識するとこうなる。
サーバ動いてる
動いた!

6.GitHubにアップロード

してリモートリポジトリを作成したら、
uv tool install git+https://github.com/<ユーザ名>/<リポジトリ名>
でインストールできる。

おわり。

Discussion