Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Cloudflareで認証付きリモートMCPサーバーをつくりました
Search
nyawach
November 12, 2025
0
190
Cloudflareで認証付きリモートMCPサーバーをつくりました
2025/11/12 Cloudflare Workers Tech Talk in Fukuoka #1
nyawach
November 12, 2025
Tweet
Share
More Decks by nyawach
See All by nyawach
ts-morphを使ってコードリプレイスとASTへのハードルを下げる!
nyawach
5
850
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
310
Designing for Timeless Needs
cassininazir
0
150
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
980
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
660
Crafting Experiences
bethany
1
77
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Odyssey Design
rkendrick25
PRO
2
530
Mind Mapping
helmedeiros
PRO
1
110
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
65
Building Flexible Design Systems
yeseniaperezcruz
330
40k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
Transcript
Cloudflareで認証付き リモートMCPサーバーを つくりました 🍜 Cloudflare Workers Tech Talk in Fukuoka
#1
ひめ 姫野 佑介 / Yusuke Himeno 株式会社マネーフォワード カードプロダクト開発部 フロントエンドエンジニア リーダー
福岡在住。Web技術全般が好き。 X: @_hyme_ GitHub: nyawach
さて、突然ですが、
ラーメンは好きですか?
わたしは大好きです
レビューを貯めてきました 食べログやRetty、noteでの記事投稿などでのレビューが溜まってきた
とあるSlackチャンネルにて
どうせなら ・ 使ったことない技術を使いたい ・ リモートMCPサーバーにして設定が楽になるようにしたい ・ ただ、アクセス制御をかけたい ・ 変なレビューコメントがでたら怒られそう
どうせなら ・ 使ったことない技術を使いたい ・ リモートMCPサーバーにして設定が楽になるようにしたい ・ ただ、アクセス制御をかけたい ・ 変なレビューコメントがでたら怒られそう Cloudflare
ですべて叶いそう!
デモ動画
技術スタック Cloudflare ・ Workers - 実行環境 ・ D1 - データベース
・ Access - アクセス制限 アプリケーション ・ @modelcontextprotocol/sdk ・ Hono / Hono MCP ・ Drizzle ・ TypeScript
Cloudflare D1 ・ note、食べログ、Rettyから頑張って引っ張ってくる ・ Cloudflare D1へ頑張って保存
Cloudflare Access Zero Trust セキュリティで、インフラストラクチャ、セルフホスト型、SaaS アプリ ケーションにアクセスできるユーザーを管理(ダッシュボードの説明そのまま) タイプが色々あるが、今回はSaaSタイプを選択
Cloudflare Access ログイン方法 OIDC対応のIdPを設定可能 今回はデフォルトで提供されている Onetime PINを利用
Cloudflare Access ポリシー設定 以下のようにルールを設定 ・ セレクター: Email ・ 値: 特定のメールアドレス数件
認証クライアントの実装 Exampleがある remote-mcp-cf-access - cloudflare/ai
アプリケーション実装 ・ McpServer 初期化 ・ API(店舗検索)を登録 ・ HonoとHono MCPで Streamable
HTTP配信 import { StreamableHTTPTransport } from "@hono/mcp"; const app = new Hono(); app.all("/mcp", async (c) => { const transport = new StreamableHTTPTransport(); await mcpServer.connect(transport); return transport.handleRequest(c); }); import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { Hono } from "hono"; import { schema, handler, } from "./api/search-restaurants"; const mcpServer = new McpServer({ name: "Ramen Review Search MCP Server", version: "1.0.0", }); mcpServer.tool("search_restaurant", schema, handler);
アプリケーション実装 OAuthProvider でラップしたものを default export https://github.com/cloudflare/workers-oauth-provider // ... import {
OAuthProvider } from "@cloudflare/workers-oauth-provider" export default new OAuthProvider({ apiHandlers: { "/mcp": { fetch: app.fetch as ExportedHandlerFetchHandler<unknown, unknown>, }, }, defaultHandler: { fetch: handleAccessRequest as ExportedHandlerFetchHandler<unknown, unknown>, }, authorizeEndpoint: "/authorize", clientRegistrationEndpoint: "/register", tokenEndpoint: "/token", });
動作確認 Cursor設定 Remote MCPに対応してないため、 mcp-remote コマンドで実行 { "servers": { "ramen-mcp":
{ "command": "npx", "args": [ "-y", "mcp-remote", "<URL>" ] } } }
動作確認 承認画面が表示される
動作確認 メールアドレスを入力 とどいたメールからOTPを入力
🎉
まとめ ✅ アクセス制限付きのリモートMCPサーバーをCloudflareプロダクト群で つくれた ✅ サンプルも豊富なので気軽につくれる環境がある
Thank you! 🍜