公式のPython SDKでは、OAuth認証について簡単な記載があるが、詳細な実装方法までは記載されていない。
自分で外部IdPで認証する処理を実装して、Googleの認証プロバイダを使用して試行錯誤してみたが、VSCodeのGitHub Copilotで動かすことができなかった。
公式のPython SDKは、Fast MCPのV1が採用されているが、本家のFast MCPはV2がリリースされている。
Fast MCPはV2では、OAuth認証が認証プロバイダ別に準備されており、簡単に実装できるようになっている。
ここでは、Fast MCP V2で、Googleの認証プロバイダで認証する処理を実装する。
OAuth認証の実装
認証プロバイダにGoogleを使用する際の実装する例、以下の通り。
READMEにも記載がある通り、認証処理が数行で書ける。
import os from fastmcp import FastMCP from fastmcp.server.auth.providers.google import GoogleProvider CLIENT_ID = os.getenv("GOOGLE_CLIENT_ID") CLIENT_SECRET = os.getenv("GOOGLE_CLIENT_SECRET") BASE_URL = os.getenv("BASE_URL", "http://localhost:8000") auth = GoogleProvider(client_id=CLIENT_ID, client_secret=CLIENT_SECRET, base_url=BASE_URL) mcp = FastMCP(name="Demo", auth=auth) # --- tools/resources/prompts --- @mcp.tool() def add(a: int, b: int) -> int: """Add two numbers""" return a + b # Add a dynamic greeting resource @mcp.resource("greeting://{name}") def get_greeting(name: str) -> str: """Get a personalized greeting""" return f"Hello, {name}!" # Add a prompt @mcp.prompt() def greet_user(name: str, style: str = "friendly") -> str: """Generate a greeting prompt""" styles = { "friendly": "Please write a warm, friendly greeting", "formal": "Please write a formal, professional greeting", "casual": "Please write a casual, relaxed greeting", } return f"{styles.get(style, styles['friendly'])} for someone named {name}."
実行方法
STDIOモードの場合
fastmcp run server.py
Streamable HTTPの場合
fastmcp run server.py --transport http --port 8000
Googleの認証設定
Google Cloudのコンソールから、APIとサービスを選択し、認証情報からOAuth 2.0 クライアント IDを追加する。
承認済みの JavaScript 生成元に「http://127.0.0.1:8000」を設定する。
承認済みのリダイレクト URIに、「http://localhost:8000/auth/callback」を設定する。
VSCodeでMCPサーバを登録
GitHub Copilotから実行する場合は、F1キーを押して、「MCP: Add Server...」を選択して、「HTTP (HTTP or Server-Sent Events」を選択する。

URLに、「http://127.0.0.1:8000/mcp」を入力する。

サーバIDを入力する(デフォルトのままでも良い)。

設定の保存先を選択する(ここではWorkspaceを選択)。

認証の許可を求めるダイアログが表示されるので、Allowを押す。

ブラウザでGoogleの認証ページが開くので、Googleアカウントを選択して認証する。
認証が完了すると、Visual Studio Codeを開くか確認するダイアログが表示されるので、[Visual Studio Codeを開く]を押す。

GitHub Copilotで、「#add」が使えることを確認する。


MCPサーバを起動したコンソールのログにもアクセスがあったことが確認できる。
INFO: 127.0.0.1:43528 - "POST /mcp HTTP/1.1" 200 OK
uvicornで起動する
上記の手順では、fastmcpコマンドでサーバを起動しているが、内部的にはuvicornのライブラリが使用されている。
直接uvicornや、他のASGIサーバからも起動できる。
uvicornで起動する場合は、ソースの末尾に以下の行を追加する。
app = mcp.http_app()
以下のコマンドで起動する。
uvicorn --lifespan on server:app