mcp-access-oauth
Model Context Protocol (MCP) サーバー + Access OAuth
これは、Access OAuth を組み込んだリモート MCP 接続をサポートする Model Context Protocol (MCP) サーバーです。
ご自身の Cloudflare アカウントにデプロイし、Access for SaaS OIDC アプリを作成すると、すぐに使えるリモート MCP サーバーが完成します。ユーザーは、接続された Access Identity Provider でサインインして、MCP サーバーに接続できるようになります。
MCP サーバー(Cloudflare Workers を利用)は、以下の役割を担います:
MCP クライアントに対する OAuth サーバー として機能
実際の OAuth サーバー(この場合は Access)に対する OAuth クライアント として機能
はじめに
リポジトリをクローンして依存関係をインストールします:npm install
本番環境向け
新しい Access for SaaS OIDC アプリ を作成します:
認証コールバック URL には、
https://mcp-access-oauth.<your-subdomain>.workers.dev/callbackと、ローカル開発用にhttp://localhost:8788/callbackを指定します。クライアント ID とクライアントシークレットを控えておきます。
Wrangler を使用してシークレットを設定します。
wrangler secret put ACCESS_CLIENT_ID
wrangler secret put ACCESS_CLIENT_SECRET
wrangler secret put ACCESS_TOKEN_URL
wrangler secret put ACCESS_AUTHORIZATION_URL
wrangler secret put ACCESS_JWKS_URL
wrangler secret put COOKIE_ENCRYPTION_KEY # add any random string here e.g. openssl rand -hex 32KV 名前空間の設定
KV 名前空間を作成します:
wrangler kv:namespace create "OAUTH_KV"Wrangler ファイルを KV ID で更新します。
デプロイとテスト
MCP サーバーをデプロイして、workers.dev ドメインで利用可能にします。
wrangler deploy
Inspector を使用してリモートサーバーをテストします:
npx @modelcontextprotocol/inspector@latesthttps://mcp-access-oauth.<your-subdomain>.workers.dev/mcp を入力して接続します。認証フローを完了すると、ツールが動作していることを確認できます:
リモート MCP サーバーがデプロイされました!
アクセス制御
この MCP サーバーは認証に Access を使用しています。認証されたすべての Access ユーザーは、"add" などの基本ツールにアクセスできます。
"generateImage" ツールは、ALLOWED_USERNAMES 設定にリストされた特定の Access ユーザーのみが使用できます:
// Add user emails for image generation access
const ALLOWED_EMAILS = new Set(["employee1@mycompany.com", "teammate1@mycompany.com"]);Claude Desktop からリモート MCP サーバーにアクセスする
Claude Desktop を開き、Settings -> Developer -> Edit Config に移動します。これにより、Claude がアクセスできる MCP サーバーを制御する設定ファイルが開きます。
内容を以下の設定に置き換えます。Claude Desktop を再起動すると、OAuth ログインページがブラウザで開きます。認証フローを完了して、Claude に MCP サーバーへのアクセスを許可します。アクセスを許可すると、ツールが使用可能になります。
{
"mcpServers": {
"math": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp-access-oauth.<your-subdomain>.workers.dev/mcp"
]
}
}
}ツール(🔨 の下)がインターフェースに表示されたら、Claude にそれらを使用するよう依頼できます。例:「math ツールを使って 23 と 19 を足してもらえますか?」Claude がツールを呼び出し、MCP サーバーが生成した結果を表示します。
ローカル開発向け
MCP サーバーを繰り返しテストしたい場合は、ローカル開発環境で行うことができます。
ホームページ URL には
http://localhost:8788を指定します。認証コールバック URL には
http://localhost:8788/callbackを指定します。クライアント ID を控え、クライアントシークレットを生成します。
プロジェクトルートに
.dev.varsファイルを作成し、以下を記述します:
ACCESS_CLIENT_ID=<your client id>
ACCESS_CLIENT_SECRET=<your client secret>
ACCESS_TOKEN_URL=<your Access for SaaS token url>
ACCESS_AUTHORIZATION_URL=<your Access for SaaS authorization url>
ACCESS_JWKS_URL=<your Access for SaaS JWKS url>
COOKIE_ENCRYPTION_KEY=COOKIE_ENCRYPTION_KEY開発とテスト
サーバーをローカルで実行し、http://localhost:8788 で利用可能にします。
wrangler dev
ローカルサーバーをテストするには、Inspector に http://localhost:8788/mcp を入力して接続します。プロンプトに従うと、「ツール一覧」を表示できます。
Claude およびその他の MCP クライアントの使用
Claude を使用してリモート MCP サーバーに接続する際、エラーメッセージが表示される場合があります。これは、Claude Desktop がまだリモート MCP サーバーを完全にはサポートしていないためです。MCP サーバーが接続されているかどうかを確認するには、Claude インターフェースの右下にある 🔨 アイコンにカーソルを合わせます。ツールが利用可能になっているはずです。
Cursor およびその他の MCP クライアントの使用
Cursor を MCP サーバーに接続するには、Type で「Command」を選択し、Command フィールドにコマンドと引数を1つにまとめて入力します(例:npx mcp-remote https://<your-worker-name>.<your-subdomain>.workers.dev/mcp)。
Cursor は HTTP+SSE サーバーをサポートしていますが、認証はサポートしていないため、mcp-remote を使用する必要があることに注意してください(また、HTTP サーバーではなく STDIO サーバーを使用します)。
Windsurf などの他の MCP クライアントに MCP サーバーを接続するには、クライアントの設定ファイルを開き、Claude のセットアップで使用したものと同じ JSON を追加して、MCP クライアントを再起動します。
Related MCP server: MCP Access OAuth Server
仕組み
OAuth プロバイダー
OAuth プロバイダーライブラリは、Cloudflare Workers 向けの完全な OAuth 2.1 サーバー実装として機能します。トークンの発行、検証、管理など、OAuth フローの複雑な処理を担当します。このプロジェクトでは、以下の2つの役割を果たします:
サーバーに接続する MCP クライアントの認証
Access の OAuth サービスへの接続管理
KV ストレージでのトークンと認証状態の安全な保存
Durable MCP
Durable MCP は、Cloudflare の Durable Objects を使用して基本の MCP 機能を拡張し、以下を提供します:
MCP サーバーの永続的な状態管理
リクエスト間での認証コンテキストの安全な保存
this.propsを介した認証済みユーザー情報へのアクセスユーザー ID に基づく条件付きツール利用のサポート
MCP Remote
MCP Remote ライブラリは、Inspector などの MCP クライアントから呼び出し可能なツールをサーバーが公開できるようにします。以下の機能を提供します:
クライアントとサーバー間の通信プロトコルの定義
ツールを構造化して定義する方法の提供
リクエストとレスポンスのシリアル化および逆シリアル化の処理
クライアントとサーバー間の Server-Sent Events (SSE) 接続の維持
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceA reference MCP server for Cloudflare Workers that provides remote connection support with integrated GitHub OAuth authentication. It enables developers to build and deploy authenticated remote tools with user-specific access controls and persistent state management.
- Flicense-qualityCmaintenanceA Cloudflare Workers-based MCP server that enables secure remote connections using built-in OAuth authentication via Cloudflare Access. It provides identity-based access control for MCP tools and supports persistent state management through Durable Objects and SSE.
- Flicense-qualityDmaintenanceDeployable MCP server with Google OAuth for remote connections, enabling authenticated tool access via Cloudflare Workers.
- Flicense-qualityCmaintenanceRemote MCP server with built-in OAuth authentication via Cloudflare Access, enabling secure tool access and user identity-based restrictions.
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Cloudflare Workers MCP server: email-validator
Cloud-hosted MCP server for durable AI memory
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rodolfostoicus/mcp-access-oauth'
If you have feedback or need assistance with the MCP directory API, please join our Discord server