mcpField
I
Implementing OAuth for Streamable HTTP Server & Client without PKCE

Implementing OAuth for Streamable HTTP Server & Client without PKCE

ローカル
github.com/asibyl開発ツール179 週間前に更新

Implementing OAuth for Streamable HTTP Server & Client without PKCE について

開発者向けに、GitHub Device Flow OAuthを使うStreamable HTTP MCPサーバーとヘッドレスクライアントを実装した例です。PKCEを使わない認可フローを確認できます。

主な機能

  1. 01Streamable HTTPサーバー
  2. 02GitHub Device Flow OAuth
  3. 03ヘッドレスOAuthクライアント
  4. 04セッションとトークンの処理

活用シーン

  1. 01MCPサーバーのデバイスフロー認可のテスト
  2. 02ヘッドレスクライアントのOAuth接続の検証

MCP 対応

Streamable HTTP MCPサーバーと、Device Flow OAuthで接続するヘッドレスクライアントを含みます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"mcp_oauth_server": {
"command": "npx",
"args": [
"-y",
"tsx"
],
"env": {
"GITHUB_CLIENT_ID": "<GITHUB_CLIENT_ID>",
"GITHUB_CLIENT_SECRET": "<GITHUB_CLIENT_SECRET>"
}
}
}
}
起動コマンドnpx -y tsx
設定が必要な環境変数
GITHUB_CLIENT_ID
GITHUB_CLIENT_SECRETシークレット

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmtsx

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

PKCE を使用しない Streamable HTTP サーバーとクライアントの OAuth 実装

概要

このリポジトリでは、次のものを提供します。

  1. OAuth(デバイスフロー経由)に対応した Streamable HTTP サーバー
  2. OAuth に対応した Streamable HTTP クライアント(ヘッドレスモード)

OAuth のサポート

これを書いている時点では、MCP Inspector を使用して、OAuth 対応の Streamable HTTP サーバーをテストできませんでした。そのため、デバイスフローを通じて OAuth を実装することにしました。

一般的なブラウザーベースのフロー(たとえば MCP Inspector を使用する場合)では、次のようになります。

  1. MCP クライアントが MCP サーバーへの接続を要求します。
  2. サーバーは GitHub AuthProvider を通じてクライアントを認可します(GitHub にリダイレクトします)。ユーザーがスコープを認可すると、サーバーのコールバックハンドラーが次の処理を行います。 a. GitHub からアクセストークンを取得し、続いてユーザーデータを取得します。 b. アクセストークンと新しいセッショントークンをトークンストアに保存します。 c. クライアント用の一時的な認証コードを生成し、新しく生成したセッショントークンとともに保存します。 d. 一時的な認証コードを付けてクライアントにリダイレクトします。
  3. クライアントは一時的な認証コードをセッショントークンと交換し、そのトークンを以降のリクエストに使用します。

このブラウザーフローベースの OAuth を、デバイスフローベースの OAuth に置き換えたいと考えました。次のように動作します。

画像

デバイスフローベースの OAuth では、次の理由から PKCE は不要です。

  1. リダイレクトも、クライアント側でのコード処理もありません。
  2. デバイスコードフローは本質的により安全です。理由は次のとおりです。
    • ユーザーは URL を開き、GitHub のページで直接コードを入力します。
    • すべてのトークン交換はサーバー間で行われます。
    • デバイスコード自体の有効期間は短く、リクエストしたクライアント(この場合はサーバー)だけが使用できます。
    • サーバーからクライアントに渡されるのはユーザーコードのみです。

ただし、セッションストレージにブラウザーを使用できません。MCP の OAuthServerProvider が現在要求しているメソッド(例:exchangeAuthorizationCode や challengeForAuthorizationCode)を、引き続き実装する必要がある場合があります。

使用方法

  1. このリポジトリをクローンし、依存関係をインストールします。
npm install
  1. GitHub の開発者設定(Settings 内)に移動し、OAuth アプリを作成します。必要な場合は、コールバック URL に「http://localhost」を入力します。「Enable Device Flow」が選択されていることを確認してください。Client ID と Client Secret を控えておきます。

  2. ローカルの開発環境で、GITHUB_CLIENT_ID と GITHUB_CLIENT_SECRET の環境変数を設定します。

  3. MCP サーバーを起動します。

npx tsx server/index_streamable.ts
  1. 別のターミナルで MCP クライアントを起動します。
npx tsx client/client.ts

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。