Remote MCP Server with GitHub OAuth

by danrthompson

モデルコンテキストプロトコル(MCP)サーバー + Github OAuth

これは、Github OAuth が組み込まれた、リモート MCP 接続をサポートするモデル コンテキスト プロトコル (MCP)サーバーです。

ご自身のCloudflareアカウントにデプロイし、GitHub OAuthクライアントアプリを作成すれば、完全に機能するリモートMCPサーバーを構築できます。ユーザーはGitHubアカウントでサインインすることで、MCPサーバーに接続できます。

これはworkers-oauth-providerライブラリを使用して、Cloudflare にデプロイされた MCP サーバーと他の OAuth プロバイダーを統合する方法の参考例として使用できます。

MCP サーバー ( Cloudflare Workersを使用):

  • MCPクライアントへのOAuthサーバーとして機能します
  • 実際のOAuth サーバー (この場合は GitHub) の OAuthクライアントとして機能します。

はじめる

リポジトリを直接クローンし、依存関係をインストールします: npm install

あるいは、以下のコマンド ラインを使用して、ローカル マシンにリモート MCP サーバーを作成することもできます。

npm create cloudflare@latest -- my-mcp-server --template=cloudflare/ai/demos/remote-mcp-github-oauth

生産用

新しいGitHub OAuth アプリを作成します。

  • ホームページ URL には、 https://mcp-github-oauth.<your-subdomain>.workers.devを指定します。
  • 認証コールバック URL には、 https://mcp-github-oauth.<your-subdomain>.workers.dev/callbackを指定します。
  • クライアント ID をメモし、クライアント シークレットを生成します。
  • Wrangler 経由で秘密を設定する
wrangler secret put GITHUB_CLIENT_ID wrangler secret put GITHUB_CLIENT_SECRET wrangler secret put COOKIE_ENCRYPTION_KEY # add any random string here e.g. openssl rand -hex 32
KV名前空間を設定する
  • KV 名前空間を作成します: wrangler kv:namespace create "OAUTH_KV"
  • KV IDでWranglerファイルを更新する
デプロイとテスト

MCP サーバーをデプロイして、workers.dev ドメインで使用できるようにしますwrangler deploy

Inspectorを使用してリモート サーバーをテストします。

npx @modelcontextprotocol/inspector@latest

https://mcp-github-oauth.<your-subdomain>.workers.dev/sseにアクセスし、「接続」をクリックします。認証フローが完了すると、ツールが動作しているのが確認できます。

これで、リモート MCP サーバーが展開されました。

アクセス制御

このMCPサーバーは認証にGitHub OAuthを使用します。認証されたすべてのGitHubユーザーは、「add」や「userInfoOctokit」などの基本ツールにアクセスできます。

「generateImage」ツールは、 ALLOWED_USERNAMES構成にリストされている特定の GitHub ユーザーに制限されています。

// Add GitHub usernames for image generation access const ALLOWED_USERNAMES = new Set([ 'yourusername', 'teammate1' ]);

Claude Desktop からリモート MCP サーバーにアクセスする

Claude Desktopを開き、「設定」→「開発者」→「設定の編集」に移動します。これにより、ClaudeがアクセスできるMCPサーバーを制御する設定ファイルが開きます。

以下の設定に置き換えてください。Claude Desktopを再起動すると、ブラウザウィンドウが開き、OAuthログインページが表示されます。認証フローを完了して、ClaudeにMCPサーバーへのアクセスを許可してください。アクセスを許可すると、ツールが使用できるようになります。

{ "mcpServers": { "math": { "command": "npx", "args": [ "mcp-remote", "https://mcp-github-oauth.<your-subdomain>.workers.dev/sse" ] } } }

ツール(🔨の下)がインターフェースに表示されたら、クロードにそれらを使うように頼むことができます。例えば、「数学ツールを使って23と19を足し算できますか?」と尋ねます。クロードはツールを起動し、MCPサーバーによって生成された結果を表示する必要があります。

地域開発のために

MCPサーバーの反復テストを行いたい場合は、ローカル開発環境で実行できます。その場合は、GitHub上に別のOAuthアプリを作成する必要があります。

  • ホームページURLにはhttp://localhost:8788を指定します。
  • 認証コールバックURLには、 http://localhost:8788/callbackを指定します。
  • クライアント ID をメモし、クライアント シークレットを生成します。
  • 次のようにして、プロジェクト ルートに.dev.varsファイルを作成します。
GITHUB_CLIENT_ID=your_development_github_client_id GITHUB_CLIENT_SECRET=your_development_github_client_secret
開発とテスト

サーバーをローカルで実行し、 http://localhost:8788 wrangler devで利用できるようにします。

ローカルサーバーをテストするには、Inspectorにhttp://localhost:8788/sseと入力し、「接続」をクリックします。プロンプトに従うと、「ツールの一覧」が表示されます。

Claude や他の MCP クライアントの使用

Claude を使用してリモート MCP サーバーに接続すると、エラーメッセージが表示される場合があります。これは、Claude Desktop がまだリモート MCP サーバーをサポートしていないため、正しく動作しないことがあるためです。MCP サーバーに接続されているかどうかを確認するには、Claude インターフェースの右下にある🔨 アイコンにマウスを移動してください。利用可能なツールが表示されます。

カーソルとその他のMCPクライアントの使用

Cursor を MCP サーバーに接続するには、 Type :「コマンド」を選択し、 Commandフィールドでコマンド フィールドと引数フィールドを 1 つに結合します (例npx mcp-remote https://<your-worker-name>.<your-subdomain>.workers.dev/sse )。

Cursor は HTTP+SSE サーバーをサポートしていますが、認証はサポートしていないため、 mcp-remote (HTTP サーバーではなく STDIO サーバー) を使用する必要があります。

クライアントの構成ファイルを開き、Claude セットアップに使用したのと同じ JSON を追加して、MCP クライアントを再起動すると、MCP サーバーを Windsurf などの他の MCP クライアントに接続できます。

どのように機能しますか?

OAuthプロバイダー

OAuth Providerライブラリは、Cloudflare Workers向けの完全なOAuth 2.1サーバー実装として機能します。トークンの発行、検証、管理など、OAuthフローの複雑な部分を処理します。このプロジェクトでは、以下の2つの役割を果たします。

  • サーバーに接続するMCPクライアントの認証
  • GitHubのOAuthサービスへの接続の管理
  • トークンと認証状態をKVストレージに安全に保存する
耐久性のあるMCP

Durable MCP は、Cloudflare の Durable Objects を使用して基本 MCP 機能を拡張し、次の機能を提供します。

  • MCP サーバーの永続的な状態管理
  • リクエスト間の認証コンテキストの安全な保存
  • this.props経由で認証されたユーザー情報にアクセスする
  • ユーザーIDに基づく条件付きツールの可用性のサポート
MCPリモート

MCP リモートライブラリを使用すると、Inspector などの MCP クライアントから呼び出せるツールをサーバー上で公開できます。このライブラリは以下の機能を提供します。

  • クライアントとサーバー間の通信プロトコルを定義します
  • ツールを定義するための構造化された方法を提供する
  • リクエストとレスポンスのシリアル化とデシリアル化を処理します
  • クライアントとサーバー間の Server-Sent Events (SSE) 接続を維持します
-
security - not tested
-
license - not tested
-
quality - not tested

リモート接続をサポートし、GitHub OAuth を介してユーザーを認証し、GitHub ID に基づいてツールにアクセスできるようにするモデル コンテキスト プロトコル サーバー。

  1. はじめる
    1. 生産用
    2. アクセス制御
    3. Claude Desktop からリモート MCP サーバーにアクセスする
    4. 地域開発のために
  2. どのように機能しますか?
    1. OAuthプロバイダー
    2. 耐久性のあるMCP
    3. MCPリモート
ID: bttey7bfuf