From 8980e2ec9f6b1c493a3e62cb89d512636e8b2b91 Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Thu, 13 Mar 2025 10:17:46 -0700 Subject: [PATCH 01/13] Scaffolding --- .../authorization/built-in-oauth-provider.mdx | 0 .../authorization/external-oauth-provider.mdx | 10 ++++++++++ .../model-context-protocol/authorization/index.mdx | 12 ++++++++++++ .../agents/model-context-protocol/examples/index.mdx | 12 ++++++++++++ .../docs/agents/model-context-protocol/index.mdx | 12 ++++++++++++ .../agents/model-context-protocol/mcp-client.mdx | 10 ++++++++++ .../agents/model-context-protocol/mcp-server.mdx | 10 ++++++++++ 7 files changed, 66 insertions(+) create mode 100644 src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx create mode 100644 src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx create mode 100644 src/content/docs/agents/model-context-protocol/authorization/index.mdx create mode 100644 src/content/docs/agents/model-context-protocol/examples/index.mdx create mode 100644 src/content/docs/agents/model-context-protocol/index.mdx create mode 100644 src/content/docs/agents/model-context-protocol/mcp-client.mdx create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server.mdx diff --git a/src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx new file mode 100644 index 000000000000000..e69de29bb2d1d64 diff --git a/src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx new file mode 100644 index 000000000000000..46f151c73d37de6 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx @@ -0,0 +1,10 @@ +--- +pcx_content_type: concept +title: External oAuth Provider +sidebar: + order: 1 + +--- + +import { Render } from "~/components" + diff --git a/src/content/docs/agents/model-context-protocol/authorization/index.mdx b/src/content/docs/agents/model-context-protocol/authorization/index.mdx new file mode 100644 index 000000000000000..8dd9757f2caa21b --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/authorization/index.mdx @@ -0,0 +1,12 @@ +--- +title: Authorization +pcx_content_type: navigation +sidebar: + order: 4 + group: + hideIndex: true +--- + +import { DirectoryListing } from "~/components" + + diff --git a/src/content/docs/agents/model-context-protocol/examples/index.mdx b/src/content/docs/agents/model-context-protocol/examples/index.mdx new file mode 100644 index 000000000000000..a67747e7570c4f1 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/examples/index.mdx @@ -0,0 +1,12 @@ +--- +title: Examples +pcx_content_type: navigation +sidebar: + order: 4 + group: + hideIndex: true +--- + +import { DirectoryListing } from "~/components" + + diff --git a/src/content/docs/agents/model-context-protocol/index.mdx b/src/content/docs/agents/model-context-protocol/index.mdx new file mode 100644 index 000000000000000..419b823b86e29c4 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/index.mdx @@ -0,0 +1,12 @@ +--- +title: Model Context Protocol (MCP) +pcx_content_type: navigation +sidebar: + order: 4 + group: + hideIndex: true +--- + +import { DirectoryListing } from "~/components" + + diff --git a/src/content/docs/agents/model-context-protocol/mcp-client.mdx b/src/content/docs/agents/model-context-protocol/mcp-client.mdx new file mode 100644 index 000000000000000..c1504f2ff3e9a24 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-client.mdx @@ -0,0 +1,10 @@ +--- +pcx_content_type: concept +title: Agent as MCP Client +sidebar: + order: 1 + +--- + +import { Render } from "~/components" + diff --git a/src/content/docs/agents/model-context-protocol/mcp-server.mdx b/src/content/docs/agents/model-context-protocol/mcp-server.mdx new file mode 100644 index 000000000000000..df26bf18c5498e8 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server.mdx @@ -0,0 +1,10 @@ +--- +pcx_content_type: concept +title: MCP Servers +sidebar: + order: 1 + +--- + +import { Render } from "~/components" + From 78b19b1446d23a64db8550ff9acde77484009e5a Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Sat, 15 Mar 2025 15:45:56 -0700 Subject: [PATCH 02/13] Scaffolding --- .../authorization/built-in-oauth-provider.mdx | 30 ++++++++++++ .../authorization/external-oauth-provider.mdx | 4 +- .../authorization/index.mdx | 47 ++++++++++++++++++- .../model-context-protocol/examples/index.mdx | 2 +- .../agents/model-context-protocol/index.mdx | 2 +- .../model-context-protocol/mcp-client.mdx | 4 +- .../model-context-protocol/mcp-server.mdx | 4 +- 7 files changed, 81 insertions(+), 12 deletions(-) diff --git a/src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx index e69de29bb2d1d64..fa2ab1c212c2db7 100644 --- a/src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx +++ b/src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx @@ -0,0 +1,30 @@ +--- +pcx_content_type: concept +title: Built-in oAuth Provider +sidebar: + order: 1 +--- + +import { Render } from "~/components"; + +When building an MCP (Model Context Protocol) server, you need a way to authenticate and authorize the AI agents and clients that access your server. OAuth 2.1 is the recommended authentication protocol for MCP servers, providing a secure way to grant limited access to your APIs without sharing credentials. +Cloudflare Workers offers a built-in OAuth provider framework that allows you to implement the OAuth 2.1 protocol directly within your Worker, eliminating the need for external OAuth services. This guide explains how to set up and configure this built-in OAuth provider for your MCP server. + +#### What is an OAuth Provider? + +An OAuth provider is a service that: + +- Authenticates users (verifies their identity) +- Issues access tokens to client applications +- Validates tokens when protected resources are requested +- Manages token lifecycle (issuance, expiration, and refresh) + +In the context of MCP servers, the OAuth provider ensures that AI agents (acting as MCP clients) can only access the resources they're authorized to use. + +### Architecture + +### Benefits of using Cloudflare as your OAuth Provider + +### Cloudflare's OAuth framework + +Cloudflare's OAuth provider framework handles the complex parts of OAuth implementation, allowing you to focus on your application logic. The framework manages: diff --git a/src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx index 46f151c73d37de6..367ccf5d0dab409 100644 --- a/src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx +++ b/src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx @@ -3,8 +3,6 @@ pcx_content_type: concept title: External oAuth Provider sidebar: order: 1 - --- -import { Render } from "~/components" - +import { Render } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/authorization/index.mdx b/src/content/docs/agents/model-context-protocol/authorization/index.mdx index 8dd9757f2caa21b..b133c20283dcfa6 100644 --- a/src/content/docs/agents/model-context-protocol/authorization/index.mdx +++ b/src/content/docs/agents/model-context-protocol/authorization/index.mdx @@ -7,6 +7,51 @@ sidebar: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; + +### Understanding the Model Context Protocol (MCP) + +[Model Context Protocol (MCP)](https://modelcontextprotocol.io) is an open standard that connects AI systems with external applications. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various accessories, MCP provides a standardized way to connect AI agents to different services. + +### MCP Architecture + +- **MCP Hosts**: AI assistants (like Claude or Cursor), AI agents, or applications that need to access external capabilities. +- **MCP Clients**: Clients embedded within the MCP hosts that connect to MCP servers and invoke tools. +- **MCP Servers**: Applications that expose tools that AI agents can use. +- **Remote service**: External systems (services, APIs, databases, etc.) that MCP servers can connect to over the Internet. + +### MCP Capabilities + +- **Tools**: Functions that AI can call to perform specific tasks like searching a database, sending an email, or updating a calendar. + +- **Resources**: Contextual information that AI agent can access to better understand user needs and make more informed decisions. + +- **Prompts**: Templates that guide how AI responds in specific situations, allowing for consistent and tailored interactions. + +- **Sampling**: Controls that adjust how AI generates responses. + +### Remote MCP + +Remote MCP enables AI agents to securely connect to services running anywhere on the Internet. These are the key elements that make Remote MCP possible: + +#### Authentication and authorization + +When AI interacts with services on a user's behalf, proper security is essential. Authentication confirms the identity of the connecting client, while authorization determines what they can access. Together, these mechanisms ensure AI agents only access specific tools and resources they have permission to use, keeping sensitive data protected. + +#### Long lived connections + +Remote MCP uses WebSockets and Server-Sent Events (SSE) as transport methods that enable real-time data exchange between clients and servers over long-lived connections, eliminating the need to establish new connections for each interaction. + +#### Stateful connections + +It's helpful to track state across MCP interactions. This allows your AI to maintain conversation context, remember user preferences, and continue from previous interactions without requiring users to repeat information. + +#### Service discovery + +MCP directories provide a way to discover available MCP servers. Remote MCP makes use of server metadata exposed on well-known endpoints, allowing MCP servers to become discoverable to clients that may want to use their capabilities. + +### An evolving standard + +MCP is an actively evolving standard, with ongoing development to expand its capabilities and improve interoperability. The Remote MCP features described above—authentication, state management, transport options, and service discovery—are all in active development by the standards community. You can follow the discussion and development of MCP [here](https://github.com/orgs/modelcontextprotocol/discussions). diff --git a/src/content/docs/agents/model-context-protocol/examples/index.mdx b/src/content/docs/agents/model-context-protocol/examples/index.mdx index a67747e7570c4f1..e1ca4dbfd798448 100644 --- a/src/content/docs/agents/model-context-protocol/examples/index.mdx +++ b/src/content/docs/agents/model-context-protocol/examples/index.mdx @@ -7,6 +7,6 @@ sidebar: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/index.mdx b/src/content/docs/agents/model-context-protocol/index.mdx index 419b823b86e29c4..44f1cc1f9de2d89 100644 --- a/src/content/docs/agents/model-context-protocol/index.mdx +++ b/src/content/docs/agents/model-context-protocol/index.mdx @@ -7,6 +7,6 @@ sidebar: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/mcp-client.mdx b/src/content/docs/agents/model-context-protocol/mcp-client.mdx index c1504f2ff3e9a24..93e9cb94d67929d 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-client.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-client.mdx @@ -3,8 +3,6 @@ pcx_content_type: concept title: Agent as MCP Client sidebar: order: 1 - --- -import { Render } from "~/components" - +import { Render } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/mcp-server.mdx b/src/content/docs/agents/model-context-protocol/mcp-server.mdx index df26bf18c5498e8..bc55d11ddc9710a 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server.mdx @@ -3,8 +3,6 @@ pcx_content_type: concept title: MCP Servers sidebar: order: 1 - --- -import { Render } from "~/components" - +import { Render } from "~/components"; From d4fa6b60d9f1fba3d4016d4b69869776e73ac0f0 Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Sat, 15 Mar 2025 16:53:25 -0700 Subject: [PATCH 03/13] Start to add and structure content --- .../authorization/built-in-oauth-provider.mdx | 30 -- .../model-context-protocol/mcp-client.mdx | 2 +- .../authorization/external-oauth-provider.mdx | 2 +- .../mcp-server/authorization/index.mdx | 44 +++ .../mcp-server/authorization/oauth-sdk.mdx | 290 ++++++++++++++++++ .../{ => mcp-server}/examples/index.mdx | 0 .../mcp-server/examples/stytch.mdx | 8 + .../{authorization => mcp-server}/index.mdx | 27 +- .../mcp-server/tools.mdx | 8 + .../mcp-server/transport.mdx | 8 + 10 files changed, 367 insertions(+), 52 deletions(-) delete mode 100644 src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx rename src/content/docs/agents/model-context-protocol/{ => mcp-server}/authorization/external-oauth-provider.mdx (91%) create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx rename src/content/docs/agents/model-context-protocol/{ => mcp-server}/examples/index.mdx (100%) create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/examples/stytch.mdx rename src/content/docs/agents/model-context-protocol/{authorization => mcp-server}/index.mdx (70%) create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx diff --git a/src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx deleted file mode 100644 index fa2ab1c212c2db7..000000000000000 --- a/src/content/docs/agents/model-context-protocol/authorization/built-in-oauth-provider.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -pcx_content_type: concept -title: Built-in oAuth Provider -sidebar: - order: 1 ---- - -import { Render } from "~/components"; - -When building an MCP (Model Context Protocol) server, you need a way to authenticate and authorize the AI agents and clients that access your server. OAuth 2.1 is the recommended authentication protocol for MCP servers, providing a secure way to grant limited access to your APIs without sharing credentials. -Cloudflare Workers offers a built-in OAuth provider framework that allows you to implement the OAuth 2.1 protocol directly within your Worker, eliminating the need for external OAuth services. This guide explains how to set up and configure this built-in OAuth provider for your MCP server. - -#### What is an OAuth Provider? - -An OAuth provider is a service that: - -- Authenticates users (verifies their identity) -- Issues access tokens to client applications -- Validates tokens when protected resources are requested -- Manages token lifecycle (issuance, expiration, and refresh) - -In the context of MCP servers, the OAuth provider ensures that AI agents (acting as MCP clients) can only access the resources they're authorized to use. - -### Architecture - -### Benefits of using Cloudflare as your OAuth Provider - -### Cloudflare's OAuth framework - -Cloudflare's OAuth provider framework handles the complex parts of OAuth implementation, allowing you to focus on your application logic. The framework manages: diff --git a/src/content/docs/agents/model-context-protocol/mcp-client.mdx b/src/content/docs/agents/model-context-protocol/mcp-client.mdx index 93e9cb94d67929d..6e171ba3901c861 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-client.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-client.mdx @@ -2,7 +2,7 @@ pcx_content_type: concept title: Agent as MCP Client sidebar: - order: 1 + order: 4 --- import { Render } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/external-oauth-provider.mdx similarity index 91% rename from src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx rename to src/content/docs/agents/model-context-protocol/mcp-server/authorization/external-oauth-provider.mdx index 367ccf5d0dab409..209335a8e230089 100644 --- a/src/content/docs/agents/model-context-protocol/authorization/external-oauth-provider.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/external-oauth-provider.mdx @@ -2,7 +2,7 @@ pcx_content_type: concept title: External oAuth Provider sidebar: - order: 1 + order: 2 --- import { Render } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx new file mode 100644 index 000000000000000..f0c5dcdf7083d03 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx @@ -0,0 +1,44 @@ +--- +title: Authorization +sidebar: + order: 2 + group: + hideIndex: false +--- + +import { DirectoryListing } from "~/components"; + +When building an MCP (Model Context Protocol) server, you need both a way to allow users to login (authentication) and allow them to grant the MCP client access to resources on their account (authorization). + + + + + +The Model Context Protocol uses [a subset of OAuth 2.1 for authorization](https://spec.modelcontextprotocol.io/specification/draft/basic/authorization/). OAuth allows your users to grant limited access to resources, without them having to share API keys or other credentials. + +Cloudflare provides an oAuth SDK that implements the provider side of the OAuth 2.1 protocol, allowing you to easily add authorization to your MCP server. You can also use your own OAuth provider with the MCP Server SDK, including Stytch, Auth0, and other authorization providers. + +### Workers OAuth Provider SDK + +```ts +import OAuthProvider from "workers-oauth-provider"; + +export default new OAuthProvider({ + apiRoute: "/mcp", + apiHandler: MyMCPServer.Router, + defaultHandler: MyMCPServer.defaultHandler, + authorizeEndpoint: "/authorize", + tokenEndpoint: "/token", + clientRegistrationEndpoint: "/register", +}); +``` + +Read the docs for the [Workers oAuth Provider SDK](/agents/model-context-protocol/mcp-server/authorization/oauth-sdk/) for more details. + +### External OAuth Providers + +You can also use an external OAuth provider with the MCP Server SDK. + +- [Stytch](/agents/model-context-protocol/mcp-server/examples/stytch/) + + diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx new file mode 100644 index 000000000000000..4959da22d861f17 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx @@ -0,0 +1,290 @@ +--- +pcx_content_type: concept +title: Workers oAuth SDK +sidebar: + order: 1 +--- + +import { Render } from "~/components"; + +# OAuth 2.1 Provider for MCP Servers + +## Overview + +The OAuth Provider library is a TypeScript implementation of the OAuth 2.1 protocol with PKCE support, designed specifically for Cloudflare Workers. This library enables MCP (Model Context Protocol) server developers to easily add OAuth-based authorization to their APIs, allowing AI agents to securely access resources on behalf of users. + +### Key Benefits + +- **Seamless Integration**: Acts as a wrapper around your Worker code, adding authorization to your API endpoints with minimal changes to your existing code. +- **Automatic Token Management**: Handles all aspects of token issuance, validation, and refresh automatically. +- **Simplified API Development**: Your API handlers receive pre-authenticated user details, eliminating the need for manual token validation. +- **User-Agnostic**: Works with any user management system you already have in place. +- **UI-Agnostic**: Implement your authorization flow using any UI framework you prefer. +- **Enhanced Security**: Stores only hashes of sensitive values, never the actual secrets. +- **PKCE Support**: Implements Proof Key for Code Exchange for enhanced security, especially for public clients. + +## Getting Started + +### 1. Create a KV Namespace + +First, create a KV namespace to store OAuth-related data: + +```sh +wrangler kv:namespace create OAUTH_KV +``` + +Add the namespace to your `wrangler.toml`: + +```toml +kv_namespaces = [ + { binding = "OAUTH_KV", id = "your-namespace-id" } +] +``` + +### 2. Minimal Implementation Example + +Here's a minimal example of implementing the OAuth Provider in a Cloudflare Worker: + +```ts +import { OAuthProvider } from "@cloudflare/mcp-server-authorization"; +import type { ExportedHandler } from "@cloudflare/workers-types"; + +// API handler for authenticated requests +const apiHandler = { + async fetch(request, env, ctx) { + // Access authenticated user data via ctx.props + const { userId, username } = ctx.props; + + const url = new URL(request.url); + if (url.pathname === "/api/user") { + return new Response( + JSON.stringify({ + userId, + username, + }), + { + headers: { "Content-Type": "application/json" }, + }, + ); + } + + return new Response("Not found", { status: 404 }); + }, +}; + +// Default handler for non-API requests +const defaultHandler = { + async fetch(request, env, ctx) { + const url = new URL(request.url); + + // Handle authorization endpoint + if (url.pathname === "/authorize") { + // Parse the OAuth request + const authRequest = await env.OAUTH_PROVIDER.parseAuthRequest(request); + + // Look up client information + const clientInfo = await env.OAUTH_PROVIDER.lookupClient( + authRequest.clientId, + ); + + // In a real implementation, you would show a consent UI here + // For this example, we'll auto-approve the request + + // Complete the authorization + const { redirectTo } = await env.OAUTH_PROVIDER.completeAuthorization({ + request: authRequest, + userId: "user-123", + metadata: { + approvedAt: new Date().toISOString(), + deviceInfo: request.headers.get("User-Agent"), + }, + scope: authRequest.scope, + props: { + userId: "user-123", + username: "example-user", + permissions: ["read", "write"], + }, + }); + + return Response.redirect(redirectTo, 302); + } + + return new Response("Hello World", { + headers: { "Content-Type": "text/plain" }, + }); + }, +}; + +// Export the OAuth Provider as the Worker entrypoint +export default new OAuthProvider({ + apiRoute: "/api/", + apiHandler, + defaultHandler, + authorizeEndpoint: "/authorize", + tokenEndpoint: "/oauth/token", + clientRegistrationEndpoint: "/oauth/register", + scopesSupported: ["read", "write", "profile"], +}); +``` + +### 3. Register a Client + +Before clients can connect, you need to register at least one OAuth client. You can do this programmatically: + +```ts +// In your defaultHandler or during Worker initialization +const clientInfo = await env.OAUTH_PROVIDER.createClient({ + clientName: "Example MCP Client", + redirectUris: ["https://your-client-app.com/callback"], + // For confidential clients, a secret will be generated automatically + // For public clients (like browser apps), set tokenEndpointAuthMethod to "none" + tokenEndpointAuthMethod: "client_secret_basic", +}); + +// Store the clientId and clientSecret securely +console.log("Client registered:", clientInfo); +``` + +## API Reference + +### OAuthProvider Options + +When creating a new `OAuthProvider` instance, you can configure it with the following options: + +| Option | Type | Required | Description | +| ---------------------------------- | ------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------- | +| `apiRoute` | `string \| string[]` | Yes | URL(s) for API routes that require authentication. Can be full URLs or just paths. | +| `apiHandler` | `ExportedHandler \| WorkerEntrypoint` | Yes | Handler for API requests with valid access tokens. | +| `defaultHandler` | `ExportedHandler \| WorkerEntrypoint` | Yes | Handler for non-API requests or API requests without valid tokens. | +| `authorizeEndpoint` | `string` | Yes | URL of the OAuth authorization endpoint where users grant permissions. | +| `tokenEndpoint` | `string` | Yes | URL of the token endpoint for issuing, refreshing, and revoking tokens. | +| `clientRegistrationEndpoint` | `string` | No | Optional URL for dynamic client registration. | +| `accessTokenTTL` | `number` | No | Time-to-live for access tokens in seconds (default: 3600). | +| `scopesSupported` | `string[]` | No | List of scopes supported by this OAuth provider. | +| `allowImplicitFlow` | `boolean` | No | Controls whether the OAuth implicit flow is allowed (default: false). | +| `disallowPublicClientRegistration` | `boolean` | No | When true, only confidential clients can register via the dynamic registration endpoint (default: false). | + +### OAuthHelpers Interface + +The `OAuthHelpers` interface is available to your handlers via `env.OAUTH_PROVIDER` and provides the following methods: + +#### Authorization Flow Methods + +| Method | Description | Parameters | Return Value | +| -------------------------------- | ------------------------------------- | --------------------------------------- | --------------------------------- | +| `parseAuthRequest(request)` | Parses an OAuth authorization request | `request: Request` | `Promise` | +| `lookupClient(clientId)` | Looks up a client by ID | `clientId: string` | `Promise` | +| `completeAuthorization(options)` | Completes an authorization request | `options: CompleteAuthorizationOptions` | `Promise<{ redirectTo: string }>` | + +#### Client Management Methods + +| Method | Description | Parameters | Return Value | +| --------------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------------- | +| `createClient(clientInfo)` | Creates a new OAuth client | `clientInfo: Partial` | `Promise` | +| `listClients(options?)` | Lists all registered clients | `options?: ListOptions` | `Promise>` | +| `updateClient(clientId, updates)` | Updates an existing client | `clientId: string, updates: Partial` | `Promise` | +| `deleteClient(clientId)` | Deletes a client | `clientId: string` | `Promise` | + +#### Grant Management Methods + +| Method | Description | Parameters | Return Value | +| ---------------------------------- | --------------------------- | --------------------------------------- | ----------------------------------- | +| `listUserGrants(userId, options?)` | Lists all grants for a user | `userId: string, options?: ListOptions` | `Promise>` | +| `revokeGrant(grantId, userId)` | Revokes a grant | `grantId: string, userId: string` | `Promise` | + +### Data Types + +#### AuthRequest + +Represents an OAuth authorization request: + +```ts +interface AuthRequest { + responseType: string; // OAuth response type (e.g., "code") + clientId: string; // Client identifier + redirectUri: string; // URL to redirect to after authorization + scope: string[]; // Array of requested permission scopes + state: string; // Client state value to be returned in the redirect + codeChallenge?: string; // PKCE code challenge + codeChallengeMethod?: string; // PKCE code challenge method (plain or S256) +} +``` + +#### ClientInfo + +Represents an OAuth client registration: + +```ts +interface ClientInfo { + clientId: string; // Unique identifier for the client + clientSecret?: string; // Secret for confidential clients (only returned during creation) + redirectUris: string[]; // List of allowed redirect URIs + clientName?: string; // Human-readable name of the client application + logoUri?: string; // URL to the client's logo + clientUri?: string; // URL to the client's homepage + policyUri?: string; // URL to the client's privacy policy + tosUri?: string; // URL to the client's terms of service + jwksUri?: string; // URL to the client's JSON Web Key Set + contacts?: string[]; // Email addresses for contacting client developers + grantTypes?: string[]; // List of grant types the client supports + responseTypes?: string[]; // List of response types the client supports + registrationDate?: number; // Unix timestamp when the client was registered + tokenEndpointAuthMethod: string; // Authentication method used by the client +} +``` + +#### CompleteAuthorizationOptions + +Options for completing an authorization request: + +```ts +interface CompleteAuthorizationOptions { + request: AuthRequest; // The original parsed authorization request + userId: string; // Identifier for the user granting the authorization + metadata: any; // Application-specific metadata for this grant + scope: string[]; // List of scopes that were actually granted + props: any; // Application-specific properties for API requests +} +``` + +#### GrantSummary + +Summary information about an authorization grant: + +```ts +interface GrantSummary { + id: string; // Unique identifier for the grant + clientId: string; // Client that received this grant + userId: string; // User who authorized this grant + scope: string[]; // List of scopes that were granted + metadata: any; // Application-specific metadata + createdAt: number; // Unix timestamp when the grant was created +} +``` + +#### ListOptions + +Options for pagination in list operations: + +```ts +interface ListOptions { + limit?: number; // Maximum number of items to return (max 1000) + cursor?: string; // Cursor for pagination +} +``` + +## Security Considerations + +The OAuth Provider library implements several security best practices: + +1. **No Plaintext Storage**: All sensitive values (tokens, secrets, codes) are stored as SHA-256 hashes. +2. **End-to-End Encryption**: Application-specific properties are encrypted using AES-GCM. +3. **PKCE Support**: Implements Proof Key for Code Exchange for enhanced security. +4. **Refresh Token Rotation**: Implements a compromise approach that balances security with reliability. +5. **TTL-based Expiration**: Access tokens automatically expire using KV's TTL feature. + +For more details on the storage schema and security implementation, refer to the [Storage Schema Documentation](/agents/model-context-protocol/mcp-server/authorization/storage-schema). + +## Advanced Usage + +For more advanced usage scenarios, including custom authorization flows, token validation, and integration with existing authentication systems, refer to the [OAuth SDK Documentation](/agents/model-context-protocol/mcp-server/authorization/oauth-sdk). diff --git a/src/content/docs/agents/model-context-protocol/examples/index.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/examples/index.mdx similarity index 100% rename from src/content/docs/agents/model-context-protocol/examples/index.mdx rename to src/content/docs/agents/model-context-protocol/mcp-server/examples/index.mdx diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/examples/stytch.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/examples/stytch.mdx new file mode 100644 index 000000000000000..69e6ad4c719aac9 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server/examples/stytch.mdx @@ -0,0 +1,8 @@ +--- +pcx_content_type: concept +title: Stytch as oAuth Provider +sidebar: + order: 3 +--- + +import { Render } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/authorization/index.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/index.mdx similarity index 70% rename from src/content/docs/agents/model-context-protocol/authorization/index.mdx rename to src/content/docs/agents/model-context-protocol/mcp-server/index.mdx index b133c20283dcfa6..5e29ac1efeeac44 100644 --- a/src/content/docs/agents/model-context-protocol/authorization/index.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/index.mdx @@ -1,36 +1,23 @@ --- -title: Authorization +title: MCP Server SDK pcx_content_type: navigation sidebar: - order: 4 + order: 1 group: - hideIndex: true + hideIndex: false --- import { DirectoryListing } from "~/components"; -### Understanding the Model Context Protocol (MCP) - [Model Context Protocol (MCP)](https://modelcontextprotocol.io) is an open standard that connects AI systems with external applications. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various accessories, MCP provides a standardized way to connect AI agents to different services. -### MCP Architecture - -- **MCP Hosts**: AI assistants (like Claude or Cursor), AI agents, or applications that need to access external capabilities. -- **MCP Clients**: Clients embedded within the MCP hosts that connect to MCP servers and invoke tools. -- **MCP Servers**: Applications that expose tools that AI agents can use. -- **Remote service**: External systems (services, APIs, databases, etc.) that MCP servers can connect to over the Internet. - -### MCP Capabilities - -- **Tools**: Functions that AI can call to perform specific tasks like searching a database, sending an email, or updating a calendar. - -- **Resources**: Contextual information that AI agent can access to better understand user needs and make more informed decisions. - -- **Prompts**: Templates that guide how AI responds in specific situations, allowing for consistent and tailored interactions. +### MCP Terminology -- **Sampling**: Controls that adjust how AI generates responses. +- **MCP Hosts**: AI assistants (like [Claude](http://claude.ai) or [Cursor](http://cursor.com)), AI agents, or applications that need to access external capabilities. +- **MCP Clients**: Clients embedded within the MCP hosts that connect to MCP servers and invoke tools. Each MCP client instance has a single connection to an MCP server. +- **MCP Servers**: Applications that expose [tools](/agents/model-context-protocol/mcp-server/tools/), [prompts](https://modelcontextprotocol.io/docs/concepts/prompts), and [resources](https://modelcontextprotocol.io/docs/concepts/resources) that MCP clients can use. ### Remote MCP diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx new file mode 100644 index 000000000000000..f1f3b2731348f68 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx @@ -0,0 +1,8 @@ +--- +pcx_content_type: concept +title: Tools +sidebar: + order: 3 +--- + +import { Render } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx new file mode 100644 index 000000000000000..ab652435157783e --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx @@ -0,0 +1,8 @@ +--- +pcx_content_type: concept +title: Transport +sidebar: + order: 4 +--- + +import { Render } from "~/components"; From 32a4fc5db035032869dc4c1a2c48a2cb43fd1fed Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Sat, 15 Mar 2025 17:02:18 -0700 Subject: [PATCH 04/13] Reference MCP tools in RPC docs --- .../docs/workers/runtime-apis/rpc/index.mdx | 104 +++++++++--------- .../workers/runtime-apis/rpc/mcp-tools.mdx | 9 ++ 2 files changed, 62 insertions(+), 51 deletions(-) create mode 100644 src/content/docs/workers/runtime-apis/rpc/mcp-tools.mdx diff --git a/src/content/docs/workers/runtime-apis/rpc/index.mdx b/src/content/docs/workers/runtime-apis/rpc/index.mdx index 67d00eab82f53a4..cb5f6b636ca98c0 100644 --- a/src/content/docs/workers/runtime-apis/rpc/index.mdx +++ b/src/content/docs/workers/runtime-apis/rpc/index.mdx @@ -4,10 +4,9 @@ title: Remote-procedure call (RPC) head: [] description: The built-in, JavaScript-native RPC system built into Workers and Durable Objects. - --- -import { DirectoryListing, Render, Stream, WranglerConfig } from "~/components" +import { DirectoryListing, Render, Stream, WranglerConfig } from "~/components"; :::note To use RPC, [define a compatibility date](/workers/configuration/compatibility-dates) of `2024-04-03` or higher, or include `rpc` in your [compatibility flags](/workers/configuration/compatibility-flags/#nodejs-compatibility-flag). @@ -15,8 +14,9 @@ To use RPC, [define a compatibility date](/workers/configuration/compatibility-d Workers provide a built-in, JavaScript-native [RPC (Remote Procedure Call)](https://en.wikipedia.org/wiki/Remote_procedure_call) system, allowing you to: -* Define public methods on your Worker that can be called by other Workers on the same Cloudflare account, via [Service Bindings](/workers/runtime-apis/bindings/service-bindings/rpc) -* Define public methods on [Durable Objects](/durable-objects) that can be called by other workers on the same Cloudflare account that declare a binding to it. +- Define public methods on your Worker that can be called by other Workers on the same Cloudflare account, via [Service Bindings](/workers/runtime-apis/bindings/service-bindings/rpc) +- Define public methods on [Durable Objects](/durable-objects) that can be called by other workers on the same Cloudflare account that declare a binding to it. +- Define public methods on [Model Context Protocol (MCP) Servers](/agents/model-context-protocol/mcp-server/) that are automatically translated to MCP [tools](/agents/model-context-protocol/mcp-server/tools/) that can be called by MCP clients. The RPC system is designed to feel as similar as possible to calling a JavaScript function in the same Worker. In most cases, you should be able to write code in the same way you would if everything was in a single Worker. @@ -42,11 +42,11 @@ As an exception to Structured Clone, application-defined classes (or objects wit The RPC system also supports a number of types that are not Structured Cloneable, including: -* Functions, which are replaced by stubs that call back to the sender. -* Application-defined classes that extend `RpcTarget`, which are similarly replaced by stubs. -* [ReadableStream](/workers/runtime-apis/streams/readablestream/) and [WriteableStream](/workers/runtime-apis/streams/writablestream/), with automatic streaming flow control. -* [Request](/workers/runtime-apis/request/) and [Response](/workers/runtime-apis/response/), for conveniently representing HTTP messages. -* RPC stubs themselves, even if the stub was received from a third Worker. +- Functions, which are replaced by stubs that call back to the sender. +- Application-defined classes that extend `RpcTarget`, which are similarly replaced by stubs. +- [ReadableStream](/workers/runtime-apis/streams/readablestream/) and [WriteableStream](/workers/runtime-apis/streams/writablestream/), with automatic streaming flow control. +- [Request](/workers/runtime-apis/request/) and [Response](/workers/runtime-apis/response/), for conveniently representing HTTP messages. +- RPC stubs themselves, even if the stub was received from a third Worker. ## Functions @@ -81,35 +81,33 @@ main = "./src/counter.js" import { WorkerEntrypoint, RpcTarget } from "cloudflare:workers"; class Counter extends RpcTarget { - #value = 0; + #value = 0; - increment(amount) { - this.#value += amount; - return this.#value; - } + increment(amount) { + this.#value += amount; + return this.#value; + } - get value() { - return this.#value; - } + get value() { + return this.#value; + } } export class CounterService extends WorkerEntrypoint { - async newCounter() { - return new Counter(); - } + async newCounter() { + return new Counter(); + } } export default { - fetch() { - return new Response("ok") - } -} + fetch() { + return new Response("ok"); + }, +}; ``` The method `increment` can be called directly by the client, as can the public property `value`: - - ```toml @@ -124,18 +122,18 @@ services = [ ```js export default { - async fetch(request, env) { - using counter = await env.COUNTER_SERVICE.newCounter(); + async fetch(request, env) { + using counter = await env.COUNTER_SERVICE.newCounter(); - await counter.increment(2); // returns 2 - await counter.increment(1); // returns 3 - await counter.increment(-5); // returns -2 + await counter.increment(2); // returns 2 + await counter.increment(1); // returns 3 + await counter.increment(-5); // returns -2 - const count = await counter.value; // returns -2 + const count = await counter.value; // returns -2 - return new Response(count); - } -} + return new Response(count); + }, +}; ``` :::note @@ -189,24 +187,24 @@ This works when calling properties of objects returned by RPC methods as well. F import { WorkerEntrypoint } from "cloudflare:workers"; export class MyService extends WorkerEntrypoint { - async foo() { - return { - bar: { - baz: () => "qux" - } - } - } + async foo() { + return { + bar: { + baz: () => "qux", + }, + }; + } } ``` ```js export default { - async fetch(request, env) { - using foo = env.MY_SERVICE.foo(); - let baz = await foo.bar.baz(); - return new Response(baz); - } -} + async fetch(request, env) { + using foo = env.MY_SERVICE.foo(); + let baz = await foo.bar.baz(); + return new Response(baz); + }, +}; ``` If the initial RPC ends up throwing an exception, then any pipelined calls will also fail with the same exception @@ -244,7 +242,11 @@ Currently, this proxying only lasts until the end of the Workers' execution cont In this video, we explore how Cloudflare Workers support Remote Procedure Calls (RPC) to simplify communication between Workers. Learn how to implement RPC in your JavaScript applications and build serverless solutions with ease. Whether you're managing microservices or optimizing web architecture, this tutorial will show you how to quickly set up and use Cloudflare Workers for RPC calls. By the end of this video, you'll understand how to call functions between Workers, pass functions as arguments, and implement user authentication with Cloudflare Workers. - + ## More Details @@ -252,5 +254,5 @@ In this video, we explore how Cloudflare Workers support Remote Procedure Calls ## Limitations -* [Smart Placement](/workers/configuration/smart-placement/) is currently ignored when making RPC calls. If Smart Placement is enabled for Worker A, and Worker B declares a [Service Binding](/workers/runtime-apis/bindings) to it, when Worker B calls Worker A via RPC, Worker A will run locally, on the same machine. -* The maximum serialized RPC limit is 1 MB. Consider using [`ReadableStream`](/workers/runtime-apis/streams/readablestream/) when returning more data. \ No newline at end of file +- [Smart Placement](/workers/configuration/smart-placement/) is currently ignored when making RPC calls. If Smart Placement is enabled for Worker A, and Worker B declares a [Service Binding](/workers/runtime-apis/bindings) to it, when Worker B calls Worker A via RPC, Worker A will run locally, on the same machine. +- The maximum serialized RPC limit is 1 MB. Consider using [`ReadableStream`](/workers/runtime-apis/streams/readablestream/) when returning more data. diff --git a/src/content/docs/workers/runtime-apis/rpc/mcp-tools.mdx b/src/content/docs/workers/runtime-apis/rpc/mcp-tools.mdx new file mode 100644 index 000000000000000..f0e43f57be0cd14 --- /dev/null +++ b/src/content/docs/workers/runtime-apis/rpc/mcp-tools.mdx @@ -0,0 +1,9 @@ +--- +pcx_content_type: navigation +title: Model Context Protocol (MCP) Tools +external_link: /agents/model-context-protocol/mcp-server/tools/ +sidebar: + order: 6 +head: [] +description: Write TypeScript methods using the JavaScript-native remote procedure call (RPC) system, and automatically translate these methods to Model Context Protocol (MCP) tools that can be called by MCP clients and AI agents. +--- From 1ff6146428fe6e950a61d0e43b3a262b7ce4f7dc Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Sat, 15 Mar 2025 17:11:25 -0700 Subject: [PATCH 05/13] Basic tools docs --- .../mcp-server/tools.mdx | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx index f1f3b2731348f68..e4f1933874b30b2 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx @@ -6,3 +6,32 @@ sidebar: --- import { Render } from "~/components"; + +{/* Need to note that you must use Wrangler v4 since this uses decorators */} + +Model Context Protocol (MCP) tools are functions that a [MCP Server](/agents/model-context-protocol/mcp-server) provides and MCP clients can call. + +When you build MCP Servers with the `@cloudflare/model-context-protocol` package, you can define tools by writing JavaScript or TypeScript methods and decorating them with the `@mcp.tool` decorator. This removes the need to manually implement the tool discovery, serialization, and invocation logic. + +For example, the following code defines a simple MCP server that adds two numbers together: + +```ts +import { WorkerEntrypoint, env } from "cloudflare:workers"; +import { WorkersMCP, mcp } from "@cloudflare/model-context-protocol"; + +@mcp({ name: "My MCP Server", version: "1.0.0", route: "/mcp" }) +class McpEntrypoint extends WorkerEntrypoint { + @mcp.tool(` + Add two numbers the way only MCP can + + @param a {number} The first number + @param b {number} The second number + @returns {number} The sum of the two numbers + `) + add(a: number, b: number) { + return a + b; + } +} +``` + +In this example, the `add` method is decorated with the `@mcp.tool` decorator, which adds the tool to the MCP server and provides the tool's description, input parameters, and return type. From 87f5d4c33734b48ba68ce37dc7671a5238975eed Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Sat, 15 Mar 2025 17:17:58 -0700 Subject: [PATCH 06/13] Add note to tools docs --- .../docs/agents/model-context-protocol/mcp-server/tools.mdx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx index e4f1933874b30b2..e7faca9cec874ac 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx @@ -11,7 +11,7 @@ import { Render } from "~/components"; Model Context Protocol (MCP) tools are functions that a [MCP Server](/agents/model-context-protocol/mcp-server) provides and MCP clients can call. -When you build MCP Servers with the `@cloudflare/model-context-protocol` package, you can define tools by writing JavaScript or TypeScript methods and decorating them with the `@mcp.tool` decorator. This removes the need to manually implement the tool discovery, serialization, and invocation logic. +When you build MCP Servers with the `@cloudflare/model-context-protocol` package, you can define tools by writing JavaScript or TypeScript methods and decorating them with the `@mcp.tool` [decorator](https://github.com/tc39/proposal-decorators). This removes the need to manually implement the tool discovery, serialization, and invocation logic. For example, the following code defines a simple MCP server that adds two numbers together: @@ -35,3 +35,7 @@ class McpEntrypoint extends WorkerEntrypoint { ``` In this example, the `add` method is decorated with the `@mcp.tool` decorator, which adds the tool to the MCP server and provides the tool's description, input parameters, and return type. + +:::note +Because decorators are a [Stage 3 TC39 proposed addition to the JavaScript language](https://github.com/tc39/proposal-decorators), to use decorators in your code, and to use the Cloudflare MCP Server SDK, you must use Wrangler v4.0.0 or later, or [`@cloudflare/vite-plugin`](https://www.npmjs.com/package/@cloudflare/vite-plugin). This ensures that decorators in your code are automatically transpiled into code that the [Cloudflare Workers runtime](/workers/reference/how-workers-works/) can understand. +::: From 3956dc9e1dc88714c5a05fd731968a35ed71d950 Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Sun, 16 Mar 2025 10:57:56 -0700 Subject: [PATCH 07/13] More details --- .../images/agents/mcp-demo-oauth-flow.png | Bin 0 -> 203662 bytes .../agents/mcp-inspector-authenticated.png | Bin 0 -> 120629 bytes .../images/agents/mcp-inspector-enter-url.png | Bin 0 -> 70359 bytes .../mcp-server/authorization/index.mdx | 2 +- .../mcp-server/examples/index.mdx | 2 +- .../mcp-server/getting-started.mdx | 116 ++++++++++++++++++ .../mcp-server/index.mdx | 38 +----- .../mcp-server/tools.mdx | 6 +- .../mcp-server/transport.mdx | 2 +- 9 files changed, 123 insertions(+), 43 deletions(-) create mode 100644 src/assets/images/agents/mcp-demo-oauth-flow.png create mode 100644 src/assets/images/agents/mcp-inspector-authenticated.png create mode 100644 src/assets/images/agents/mcp-inspector-enter-url.png create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/getting-started.mdx diff --git a/src/assets/images/agents/mcp-demo-oauth-flow.png b/src/assets/images/agents/mcp-demo-oauth-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..beb9181b8e8dac494adf8a78e8723928ef538edd GIT binary patch literal 203662 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
    ZM#k0hScyhpY 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/agents/mcp-inspector-authenticated.png b/src/assets/images/agents/mcp-inspector-authenticated.png new file mode 100644 index 0000000000000000000000000000000000000000..7029fc27bc428070e14778663c542aeab0f3a751 GIT binary patch literal 120629 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 RSHQn>G76^?PTjco{{V7<(vAQC literal 0 HcmV?d00001 diff --git a/src/assets/images/agents/mcp-inspector-enter-url.png b/src/assets/images/agents/mcp-inspector-enter-url.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3596f4045bab96e4de84d26729a287c441f140 GIT binary patch literal 70359 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 + +Now, you have the MCP server setup, with dependencies installed. Move into that project folder: + +```sh +cd my-mcp-server +``` + +### Local development + +In the directory of your new project, run the following command to start the development server: + +```sh +npm start +``` + +Your MCP server is now running on `http://localhost:8787/sse`. + +In a new terminal, run the [MCP inspector](https://github.com/modelcontextprotocol/mcp-inspector). The MCP inspector is an interactive MCP client that allows you to connect to your MCP server and invoke tools from a web browser. + +```sh +npx @modelcontextprotocol/inspector@latest +``` + +Open the MCP inspector in your web browser: + +```sh +open http://localhost:5173 +``` + +In the inspector, enter the URL of your MCP server, `http://localhost:8787/sse`, and click **Connect**: + +![MCP inspector — where to enter the URL of your MCP server](~/assets/images/agents/mcp-inspector-enter-url.png) + +You will be redirected to an example OAuth login page. Enter any username and password and click "Log in and approve" to continue. (you can add your own authentication and/or authorization provider to replace this. Refer to the [authorization](/agents/model-context-protocol/mcp-server/authorization/) section for details on how to do this.) + +![MCP OAuth Login Page](~/assets/images/agents/mcp-demo-oauth-flow.png) + +Once you have logged in, you will be redirected back to the inspector. You should see the "List Tools" button, which will list the tools that your MCP server exposes. + +![MCP inspector — authenticated](~/assets/images/agents/mcp-inspector-authenticated.png) + +### Deploy your MCP server + +You can deploy your MCP server to Cloudflare using the following [Wrangler CLI command](/workers/wrangler) within the example project: + +```sh +npx wrangler@latest deploy +``` + +If you have already [connected a git repository](/workers/ci-cd/builds/) to the Worker with your MCP server, you can deploy your MCP server by pushing a change or merging a pull request to the main branch of the repository. + +### Next Steps + +- Add [tools](/agents/model-context-protocol/mcp-server/tools/) to your MCP server. +- Customize your MCP Server's [authentication and authorization](/agents/model-context-protocol/mcp-server/authorization/). +- Try other [example MCP servers](/agents/model-context-protocol/mcp-server/examples/) diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/index.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/index.mdx index 5e29ac1efeeac44..1ba57a2333a0e30 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/index.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/index.mdx @@ -4,41 +4,5 @@ pcx_content_type: navigation sidebar: order: 1 group: - hideIndex: false + hideIndex: true --- - -import { DirectoryListing } from "~/components"; - - - -[Model Context Protocol (MCP)](https://modelcontextprotocol.io) is an open standard that connects AI systems with external applications. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various accessories, MCP provides a standardized way to connect AI agents to different services. - -### MCP Terminology - -- **MCP Hosts**: AI assistants (like [Claude](http://claude.ai) or [Cursor](http://cursor.com)), AI agents, or applications that need to access external capabilities. -- **MCP Clients**: Clients embedded within the MCP hosts that connect to MCP servers and invoke tools. Each MCP client instance has a single connection to an MCP server. -- **MCP Servers**: Applications that expose [tools](/agents/model-context-protocol/mcp-server/tools/), [prompts](https://modelcontextprotocol.io/docs/concepts/prompts), and [resources](https://modelcontextprotocol.io/docs/concepts/resources) that MCP clients can use. - -### Remote MCP - -Remote MCP enables AI agents to securely connect to services running anywhere on the Internet. These are the key elements that make Remote MCP possible: - -#### Authentication and authorization - -When AI interacts with services on a user's behalf, proper security is essential. Authentication confirms the identity of the connecting client, while authorization determines what they can access. Together, these mechanisms ensure AI agents only access specific tools and resources they have permission to use, keeping sensitive data protected. - -#### Long lived connections - -Remote MCP uses WebSockets and Server-Sent Events (SSE) as transport methods that enable real-time data exchange between clients and servers over long-lived connections, eliminating the need to establish new connections for each interaction. - -#### Stateful connections - -It's helpful to track state across MCP interactions. This allows your AI to maintain conversation context, remember user preferences, and continue from previous interactions without requiring users to repeat information. - -#### Service discovery - -MCP directories provide a way to discover available MCP servers. Remote MCP makes use of server metadata exposed on well-known endpoints, allowing MCP servers to become discoverable to clients that may want to use their capabilities. - -### An evolving standard - -MCP is an actively evolving standard, with ongoing development to expand its capabilities and improve interoperability. The Remote MCP features described above—authentication, state management, transport options, and service discovery—are all in active development by the standards community. You can follow the discussion and development of MCP [here](https://github.com/orgs/modelcontextprotocol/discussions). diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx index e7faca9cec874ac..e0a83e4ff8d59ed 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx @@ -2,19 +2,19 @@ pcx_content_type: concept title: Tools sidebar: - order: 3 + order: 4 --- import { Render } from "~/components"; -{/* Need to note that you must use Wrangler v4 since this uses decorators */} - Model Context Protocol (MCP) tools are functions that a [MCP Server](/agents/model-context-protocol/mcp-server) provides and MCP clients can call. When you build MCP Servers with the `@cloudflare/model-context-protocol` package, you can define tools by writing JavaScript or TypeScript methods and decorating them with the `@mcp.tool` [decorator](https://github.com/tc39/proposal-decorators). This removes the need to manually implement the tool discovery, serialization, and invocation logic. For example, the following code defines a simple MCP server that adds two numbers together: +{/* TODO: Reference code in Github, link to a runnable example, use Deploy to Workers button */} + ```ts import { WorkerEntrypoint, env } from "cloudflare:workers"; import { WorkersMCP, mcp } from "@cloudflare/model-context-protocol"; diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx index ab652435157783e..931bd43e034eaee 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx @@ -2,7 +2,7 @@ pcx_content_type: concept title: Transport sidebar: - order: 4 + order: 5 --- import { Render } from "~/components"; From 5d39540ca97e2f33754744f00ccd99e76678101e Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Sun, 16 Mar 2025 12:15:37 -0700 Subject: [PATCH 08/13] Scaffolding out authorization docs --- .../authorization/external-oauth-provider.mdx | 4 +- .../mcp-server/authorization/index.mdx | 116 ++++++++- .../mcp-server/authorization/oauth-sdk.mdx | 4 +- .../third-party-oauth-provider.mdx | 222 ++++++++++++++++++ .../worker-as-oauth-provider.mdx | 8 + 5 files changed, 343 insertions(+), 11 deletions(-) create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/authorization/third-party-oauth-provider.mdx create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/authorization/worker-as-oauth-provider.mdx diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/external-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/external-oauth-provider.mdx index 209335a8e230089..c08d789f60f9ae0 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/external-oauth-provider.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/external-oauth-provider.mdx @@ -1,8 +1,8 @@ --- pcx_content_type: concept -title: External oAuth Provider +title: Use your own OAuth Provider sidebar: - order: 2 + order: 4 --- import { Render } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx index 63699249ee87fe5..4ffd8818f405751 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx @@ -8,7 +8,7 @@ sidebar: import { DirectoryListing } from "~/components"; -When building an MCP (Model Context Protocol) server, you need both a way to allow users to login (authentication) and allow them to grant the MCP client access to resources on their account (authorization). +When building a [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server, you need both a way to allow users to login (authentication) and allow them to grant the MCP client access to resources on their account (authorization). @@ -16,29 +16,131 @@ When building an MCP (Model Context Protocol) server, you need both a way to all The Model Context Protocol uses [a subset of OAuth 2.1 for authorization](https://spec.modelcontextprotocol.io/specification/draft/basic/authorization/). OAuth allows your users to grant limited access to resources, without them having to share API keys or other credentials. -Cloudflare provides an oAuth SDK that implements the provider side of the OAuth 2.1 protocol, allowing you to easily add authorization to your MCP server. You can also use your own OAuth provider with the MCP Server SDK, including Stytch, Auth0, and other authorization providers. +Cloudflare provides an OAuth SDK that implements the provider side of the OAuth 2.1 protocol, allowing you to easily add authorization to your MCP server. -### Workers OAuth Provider SDK +You can use the OAuth SDK in three ways: + +1. **Your Worker handles authorization itself.** Your MCP server, running on Cloudflare, handles the complete OAuth flow. ([Example](/agents/model-context-protocol/mcp-server/getting-started/)) +2. **Integrate with a third-party OAuth provider**, such as GitHub or Google. ([Example](/agents/model-context-protocol/mcp-server/examples/third-party-oauth-provider/)) +3. **Integrate with your own OAuth provider**, including authorization-as-a-service providers such as Stytch and Auth0. ([Example](/agents/model-context-protocol/mcp-server/examples/external-oauth-provider/)) + +The following sections describe each of these options and link to runnable code examples for each. + +## Authorization options + +### (1) Your MCP Server handles authorization itself + +Your MCP Server, using the Cloudflare MCP Server and OAuth Provider SDKs, can handle the complete OAuth authorization flow, without any third-party involvement. + +The [Workers OAuth Provider SDK](/agents/model-context-protocol/mcp-server/authorization/oauth-sdk/) is a Cloudflare Worker that implements a [`fetch()` handler](/workers/runtime-apis/handlers/fetch/), and handles incoming requests to your MCP server. You provide your own handlers for your MCP Server's API, and autentication and authorization logic, and URI paths for the OAuth endpoints, and the SDK handles the rest. + +{/* TODO: Update link */} +The OAuth Provider SDK comes with an [example handler implementation](https://github.com/geelen/mcp-remote-examples/tree/main/02-user-password/src/routes) for autentication and authorization, referenced below as `defaultHandler`: + +{/* TODO: GithubCodeComponent */} + +```ts +import OAuthProvider from "workers-oauth-provider"; + +// TODO: Bunch of naming decisions here +export default new OAuthProvider({ + apiRoute: "/mcp", + // Your MCP server: + apiHandler: MyMCPServer.Router, + // Your handler for authentication and authorization: + defaultHandler: OAuthProvider.defaultHandler, + // TODO: Should these have default values? + authorizeEndpoint: "/authorize", + tokenEndpoint: "/token", + clientRegistrationEndpoint: "/register", +}); +``` + +```mermaid +sequenceDiagram + participant B as User-Agent (Browser) + participant C as MCP Client + participant M as MCP Server (your Worker) + + C->>M: MCP Request + M->>C: HTTP 401 Unauthorized + Note over C: Generate code_verifier and code_challenge + C->>B: Open browser with authorization URL + code_challenge + B->>M: GET /authorize + Note over M: User logs in and authorizes + M->>B: Redirect to callback URL with auth code + B->>C: Callback with authorization code + C->>M: Token Request with code + code_verifier + M->>C: Access Token (+ Refresh Token) + C->>M: MCP Request with Access Token + Note over C,M: Begin standard MCP message exchange +``` + +Remember — [authentication is different from authorization](https://www.cloudflare.com/learning/access-management/authn-vs-authz/). Your MCP Server can handle authorization itself, while still relying on an external authentication service to first authenticate users. The [example](/agents/model-context-protocol/mcp-server/) in getting started provides a mock authentdcation flow. You will need to implement your own authentication handler — either handling authentication yourself, or using an external authentication service such as Clerk, Stytch, Auth0 or others. + +For a step-by-step example, refer to the [Worker as OAuth Provider](/agents/model-context-protocol/mcp-server/authorization/worker-as-oauth-provider/) section., and refer to the [API reference docs for the OAuth Provider SDK](/agents/model-context-protocol/mcp-server/authorization/oauth-sdk/). + +### (2) Third-party OAuth Provider + +The OAuth Provider SDK can be configured to use a third-party OAuth provider, such as [GitHub](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app) or [Google](https://developers.google.com/identity/protocols/oauth2). + +When you use a third-party OAuth provider, you must provide a handler to the `OAuthProvider` that implements the OAuth flow for the third-party provider. ```ts import OAuthProvider from "workers-oauth-provider"; +import MyAuthHandler from "./auth-handler"; +// TODO: Bunch of naming decisions here export default new OAuthProvider({ apiRoute: "/mcp", + // Your MCP server: apiHandler: MyMCPServer.Router, - defaultHandler: MyMCPServer.defaultHandler, + // Your handler for authentication and authorization with the third-party provider: + defaultHandler: MyAuthHandler, + // TODO: Should these have default values? authorizeEndpoint: "/authorize", tokenEndpoint: "/token", clientRegistrationEndpoint: "/register", }); ``` +Note that as [defined in the Model Context Protocol specification](https://spec.modelcontextprotocol.io/specification/draft/basic/authorization/#292-flow-description) when you use a third-party OAuth provider, the MCP Server (your Worker) generates and issues its own token to the MCP client: + +```mermaid +sequenceDiagram + participant B as User-Agent (Browser) + participant C as MCP Client + participant M as MCP Server (your Worker) + participant T as Third-Party Auth Server + + C->>M: Initial OAuth Request + M->>B: Redirect to Third-Party /authorize + B->>T: Authorization Request + Note over T: User authorizes + T->>B: Redirect to MCP Server callback + B->>M: Authorization code + M->>T: Exchange code for token + T->>M: Third-party access token + Note over M: Generate bound MCP token + M->>B: Redirect to MCP Client callback + B->>C: MCP authorization code + C->>M: Exchange code for token + M->>C: MCP access token +``` + Read the docs for the [Workers oAuth Provider SDK](/agents/model-context-protocol/mcp-server/authorization/oauth-sdk/) for more details. -### External OAuth Providers +### (3) Bring your own OAuth Provider -You can also use an external OAuth provider with the MCP Server SDK. +If your application already implements an Oauth Provider itself, or you use Stytch, Auth0, or authorization-as-a-service provider, you can use this in the same way that you would use a third-party OAuth provider, described above. + +The following examples show how to use the OAuth Provider SDK with an external OAuth provider: - [Stytch](/agents/model-context-protocol/mcp-server/examples/stytch/) +- [Auth0](/agents/model-context-protocol/mcp-server/examples/auth0/) + +## Next steps - +- [Learn how to use the OAuth Provider SDK](/agents/model-context-protocol/mcp-server/authorization/oauth-sdk/) +- [Learn how to use a third-party OAuth provider](/agents/model-context-protocol/mcp-server/examples/third-party-oauth-provider/) +- [Learn how to bring your own OAuth provider](/agents/model-context-protocol/mcp-server/examples/external-oauth-provider/) diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx index 4959da22d861f17..e62f775509f82a7 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx @@ -1,8 +1,8 @@ --- pcx_content_type: concept -title: Workers oAuth SDK +title: API reference sidebar: - order: 1 + order: 5 --- import { Render } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/third-party-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/third-party-oauth-provider.mdx new file mode 100644 index 000000000000000..2fab9fc226d894d --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/third-party-oauth-provider.mdx @@ -0,0 +1,222 @@ +--- +pcx_content_type: concept +title: Third-party OAuth Provider +sidebar: + order: 3 +--- + +import { Render, GitHubCode } from "~/components"; + +{/* TODO: Why doesn't GitHub Code Component work? */} + +```ts +import OAuthProvider, { + AuthRequest, + OAuthHelpers, +} from "workers-oauth-provider"; +import { MCPEntrypoint } from "./lib/MCPEntrypoint"; +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { z } from "zod"; +import { Hono } from "hono"; +import pick from "just-pick"; +import { Octokit } from "octokit"; + +// Context from the auth process, encrypted & stored in the auth token +// and provided to the MCP Server as this.props +type Props = { + login: string; + name: string; + email: string; + accessToken: string; +}; + +export class MyMCP extends MCPEntrypoint { + get server() { + const server = new McpServer({ + name: "Github OAuth Proxy Demo", + version: "1.0.0", + }); + + server.tool( + "add", + "Add two numbers the way only MCP can", + { a: z.number(), b: z.number() }, + async ({ a, b }) => ({ + content: [{ type: "text", text: String(a + b) }], + }), + ); + + server.tool( + "whoami", + "Tasty props from my OAuth provider", + {}, + async () => ({ + content: [ + { + type: "text", + text: JSON.stringify(pick(this.props, "login", "name", "email")), + }, + ], + }), + ); + + server.tool( + "userInfoHTTP", + "Get user info from GitHub, via HTTP", + {}, + async () => { + const res = await fetch("https://api.github.com/user", { + headers: { + Authorization: `Bearer ${this.props.accessToken}`, + "User-Agent": "04-auth-pivot", + }, + }); + return { content: [{ type: "text", text: await res.text() }] }; + }, + ); + + server.tool( + "userInfoOctokit", + "Get user info from GitHub, via Octokit", + {}, + async () => { + const octokit = new Octokit({ auth: this.props.accessToken }); + return { + content: [ + { + type: "text", + text: JSON.stringify(await octokit.rest.users.getAuthenticated()), + }, + ], + }; + }, + ); + return server; + } +} + +const app = new Hono<{ Bindings: Env & { OAUTH_PROVIDER: OAuthHelpers } }>(); + +/** + * OAuth Authorization Endpoint + * + * This route initiates the GitHub OAuth flow when a user wants to log in. + * It creates a random state parameter to prevent CSRF attacks and stores the + * original OAuth request information in KV storage for later retrieval. + * Then it redirects the user to GitHub's authorization page with the appropriate + * parameters so the user can authenticate and grant permissions. + */ +app.get("/authorize", async (c) => { + const oauthReqInfo = await c.env.OAUTH_PROVIDER.parseAuthRequest(c.req.raw); + // Store the request info in KV to catch ya up on the rebound + const randomString = crypto.randomUUID(); + await c.env.OAUTH_KV.put( + `login:${randomString}`, + JSON.stringify(oauthReqInfo), + { expirationTtl: 600 }, + ); + + const upstream = new URL(`https://github.com/login/oauth/authorize`); + upstream.searchParams.set("client_id", c.env.GITHUB_CLIENT_ID); + upstream.searchParams.set( + "redirect_uri", + new URL("/callback", c.req.url).href, + ); + upstream.searchParams.set("scope", "read:user"); + upstream.searchParams.set("state", randomString); + upstream.searchParams.set("response_type", "code"); + + return Response.redirect(upstream.href); +}); + +/** + * OAuth Callback Endpoint + * + * This route handles the callback from GitHub after user authentication. + * It exchanges the temporary code for an access token, then stores some + * user metadata & the auth token as part of the 'props' on the token passed + * down to the client. It ends by redirecting the client back to _its_ callback URL + */ +app.get("/callback", async (c) => { + const code = c.req.query("code") as string; + + // Get the oathReqInfo out of KV + const randomString = c.req.query("state"); + if (!randomString) { + return c.text("Missing state", 400); + } + const oauthReqInfo = await c.env.OAUTH_KV.get( + `login:${randomString}`, + { type: "json" }, + ); + if (!oauthReqInfo) { + return c.text("Invalid state", 400); + } + + // Exchange the code for an access token + const resp = await fetch(`https://github.com/login/oauth/access_token`, { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + }, + body: new URLSearchParams({ + client_id: c.env.GITHUB_CLIENT_ID, + client_secret: c.env.GITHUB_CLIENT_SECRET, + code, + redirect_uri: new URL("/callback", c.req.url).href, + }).toString(), + }); + if (!resp.ok) { + console.log(await resp.text()); + return c.text("Failed to fetch access token", 500); + } + const body = await resp.formData(); + const accessToken = body.get("access_token"); + if (!accessToken) { + return c.text("Missing access token", 400); + } + + // Fetch the user info from GitHub + const apiRes = await fetch(`https://api.github.com/user`, { + headers: { + Authorization: `bearer ${accessToken}`, + "User-Agent": "04-auth-pivot", + }, + }); + if (!apiRes.ok) { + console.log(await apiRes.text()); + return c.text("Failed to fetch user", 500); + } + + const user = (await apiRes.json()) as Record; + const { login, name, email } = user; + + // Return back to the MCP client a new token + const { redirectTo } = await c.env.OAUTH_PROVIDER.completeAuthorization({ + request: oauthReqInfo, + userId: login, + metadata: { + label: name, + }, + scope: oauthReqInfo.scope, + // This will be available on this.props inside MyMCP + props: { + login, + name, + email, + accessToken, + } as Props, + }); + + return Response.redirect(redirectTo); +}); + +export default new OAuthProvider({ + apiRoute: "/sse", + apiHandler: MyMCP.Router, + defaultHandler: app, + authorizeEndpoint: "/authorize", + tokenEndpoint: "/token", + clientRegistrationEndpoint: "/register", +}); +``` diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/worker-as-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/worker-as-oauth-provider.mdx new file mode 100644 index 000000000000000..8ff1fa38e620311 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/worker-as-oauth-provider.mdx @@ -0,0 +1,8 @@ +--- +pcx_content_type: concept +title: Worker as OAuth Provider +sidebar: + order: 2 +--- + +import { Render } from "~/components"; From 1b6832965e41236904b3614adc6e0016cb92adc0 Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Sun, 16 Mar 2025 13:15:29 -0700 Subject: [PATCH 09/13] More updates --- .../mcp-server/authentication/index.mdx | 17 + .../mcp-server/authorization/index.mdx | 20 +- .../oauth-provider-api-reference.mdx | 9 + .../mcp-server/authorization/oauth-sdk.mdx | 290 ------------------ .../third-party-oauth-provider.mdx | 4 + .../worker-as-oauth-provider.mdx | 6 + .../mcp-server/examples/github.mdx | 8 + .../mcp-server/examples/stytch.mdx | 2 +- .../mcp-server/getting-started.mdx | 8 + .../mcp-server/tools.mdx | 4 +- .../mcp-server/transport.mdx | 23 ++ 11 files changed, 88 insertions(+), 303 deletions(-) create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/authentication/index.mdx create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference.mdx delete mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx create mode 100644 src/content/docs/agents/model-context-protocol/mcp-server/examples/github.mdx diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authentication/index.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authentication/index.mdx new file mode 100644 index 000000000000000..00a2243d5a174c4 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authentication/index.mdx @@ -0,0 +1,17 @@ +--- +title: Authentication +sidebar: + order: 4 + group: + hideIndex: false +--- + +import { DirectoryListing } from "~/components"; + +WIP + +Explain / reiterate difference between authN and authz + +This section should have some examples of using other services / libraries for authentication. + +It should show you how to rip out the mock auth from the example project, and replace it with your own. diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx index 4ffd8818f405751..140104e0a7f205c 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/index.mdx @@ -16,9 +16,9 @@ When building a [Model Context Protocol (MCP)](https://modelcontextprotocol.io) The Model Context Protocol uses [a subset of OAuth 2.1 for authorization](https://spec.modelcontextprotocol.io/specification/draft/basic/authorization/). OAuth allows your users to grant limited access to resources, without them having to share API keys or other credentials. -Cloudflare provides an OAuth SDK that implements the provider side of the OAuth 2.1 protocol, allowing you to easily add authorization to your MCP server. +Cloudflare provides an [OAuth Provider Library](https://github.com/geelen/mcp-remote-examples/tree/main/.vendor/workers-oauth-provider) that implements the provider side of the OAuth 2.1 protocol, allowing you to easily add authorization to your MCP server. -You can use the OAuth SDK in three ways: +You can use the OAuth Provider Library in three ways: 1. **Your Worker handles authorization itself.** Your MCP server, running on Cloudflare, handles the complete OAuth flow. ([Example](/agents/model-context-protocol/mcp-server/getting-started/)) 2. **Integrate with a third-party OAuth provider**, such as GitHub or Google. ([Example](/agents/model-context-protocol/mcp-server/examples/third-party-oauth-provider/)) @@ -30,12 +30,12 @@ The following sections describe each of these options and link to runnable code ### (1) Your MCP Server handles authorization itself -Your MCP Server, using the Cloudflare MCP Server and OAuth Provider SDKs, can handle the complete OAuth authorization flow, without any third-party involvement. +Your MCP Server, using the Cloudflare [MCP Server SDK](/agents/model-context-protocol/mcp-server/getting-started/) and [OAuth Provider Library](/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference/), can handle the complete OAuth authorization flow, without any third-party involvement. -The [Workers OAuth Provider SDK](/agents/model-context-protocol/mcp-server/authorization/oauth-sdk/) is a Cloudflare Worker that implements a [`fetch()` handler](/workers/runtime-apis/handlers/fetch/), and handles incoming requests to your MCP server. You provide your own handlers for your MCP Server's API, and autentication and authorization logic, and URI paths for the OAuth endpoints, and the SDK handles the rest. +The [Workers OAuth Provider Library](/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference/) is a Cloudflare Worker that implements a [`fetch()` handler](/workers/runtime-apis/handlers/fetch/), and handles incoming requests to your MCP server. You provide your own handlers for your MCP Server's API, and autentication and authorization logic, and URI paths for the OAuth endpoints, and the SDK handles the rest. {/* TODO: Update link */} -The OAuth Provider SDK comes with an [example handler implementation](https://github.com/geelen/mcp-remote-examples/tree/main/02-user-password/src/routes) for autentication and authorization, referenced below as `defaultHandler`: +The OAuth Provider Library comes with an [example handler implementation](https://github.com/geelen/mcp-remote-examples/tree/main/02-user-password/src/routes) for autentication and authorization, referenced below as `defaultHandler`: {/* TODO: GithubCodeComponent */} @@ -82,7 +82,7 @@ For a step-by-step example, refer to the [Worker as OAuth Provider](/agents/mode ### (2) Third-party OAuth Provider -The OAuth Provider SDK can be configured to use a third-party OAuth provider, such as [GitHub](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app) or [Google](https://developers.google.com/identity/protocols/oauth2). +The OAuth Provider Library can be configured to use a third-party OAuth provider, such as [GitHub](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app) or [Google](https://developers.google.com/identity/protocols/oauth2). When you use a third-party OAuth provider, you must provide a handler to the `OAuthProvider` that implements the OAuth flow for the third-party provider. @@ -128,19 +128,19 @@ sequenceDiagram M->>C: MCP access token ``` -Read the docs for the [Workers oAuth Provider SDK](/agents/model-context-protocol/mcp-server/authorization/oauth-sdk/) for more details. +Read the docs for the [Workers oAuth Provider Library](/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference/) for more details. ### (3) Bring your own OAuth Provider -If your application already implements an Oauth Provider itself, or you use Stytch, Auth0, or authorization-as-a-service provider, you can use this in the same way that you would use a third-party OAuth provider, described above. +If your application already implements an Oauth Provider itself, or you use Stytch, Auth0, or authorization-as-a-service provider, you can use this in the same way that you would use a third-party OAuth provider, described above in (2). -The following examples show how to use the OAuth Provider SDK with an external OAuth provider: +The following examples show how to use the OAuth Provider Library with an external OAuth provider: - [Stytch](/agents/model-context-protocol/mcp-server/examples/stytch/) - [Auth0](/agents/model-context-protocol/mcp-server/examples/auth0/) ## Next steps -- [Learn how to use the OAuth Provider SDK](/agents/model-context-protocol/mcp-server/authorization/oauth-sdk/) +- [Learn how to use the OAuth Provider SDK](/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference/) - [Learn how to use a third-party OAuth provider](/agents/model-context-protocol/mcp-server/examples/third-party-oauth-provider/) - [Learn how to bring your own OAuth provider](/agents/model-context-protocol/mcp-server/examples/external-oauth-provider/) diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference.mdx new file mode 100644 index 000000000000000..99b211d19406078 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference.mdx @@ -0,0 +1,9 @@ +--- +pcx_content_type: navigation +title: OAuth Provider Library +# TODO: Update link to published library +external_link: https://github.com/geelen/mcp-remote-examples/tree/main/.vendor/workers-oauth-provider +sidebar: + order: 5 +head: [] +--- diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx deleted file mode 100644 index e62f775509f82a7..000000000000000 --- a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-sdk.mdx +++ /dev/null @@ -1,290 +0,0 @@ ---- -pcx_content_type: concept -title: API reference -sidebar: - order: 5 ---- - -import { Render } from "~/components"; - -# OAuth 2.1 Provider for MCP Servers - -## Overview - -The OAuth Provider library is a TypeScript implementation of the OAuth 2.1 protocol with PKCE support, designed specifically for Cloudflare Workers. This library enables MCP (Model Context Protocol) server developers to easily add OAuth-based authorization to their APIs, allowing AI agents to securely access resources on behalf of users. - -### Key Benefits - -- **Seamless Integration**: Acts as a wrapper around your Worker code, adding authorization to your API endpoints with minimal changes to your existing code. -- **Automatic Token Management**: Handles all aspects of token issuance, validation, and refresh automatically. -- **Simplified API Development**: Your API handlers receive pre-authenticated user details, eliminating the need for manual token validation. -- **User-Agnostic**: Works with any user management system you already have in place. -- **UI-Agnostic**: Implement your authorization flow using any UI framework you prefer. -- **Enhanced Security**: Stores only hashes of sensitive values, never the actual secrets. -- **PKCE Support**: Implements Proof Key for Code Exchange for enhanced security, especially for public clients. - -## Getting Started - -### 1. Create a KV Namespace - -First, create a KV namespace to store OAuth-related data: - -```sh -wrangler kv:namespace create OAUTH_KV -``` - -Add the namespace to your `wrangler.toml`: - -```toml -kv_namespaces = [ - { binding = "OAUTH_KV", id = "your-namespace-id" } -] -``` - -### 2. Minimal Implementation Example - -Here's a minimal example of implementing the OAuth Provider in a Cloudflare Worker: - -```ts -import { OAuthProvider } from "@cloudflare/mcp-server-authorization"; -import type { ExportedHandler } from "@cloudflare/workers-types"; - -// API handler for authenticated requests -const apiHandler = { - async fetch(request, env, ctx) { - // Access authenticated user data via ctx.props - const { userId, username } = ctx.props; - - const url = new URL(request.url); - if (url.pathname === "/api/user") { - return new Response( - JSON.stringify({ - userId, - username, - }), - { - headers: { "Content-Type": "application/json" }, - }, - ); - } - - return new Response("Not found", { status: 404 }); - }, -}; - -// Default handler for non-API requests -const defaultHandler = { - async fetch(request, env, ctx) { - const url = new URL(request.url); - - // Handle authorization endpoint - if (url.pathname === "/authorize") { - // Parse the OAuth request - const authRequest = await env.OAUTH_PROVIDER.parseAuthRequest(request); - - // Look up client information - const clientInfo = await env.OAUTH_PROVIDER.lookupClient( - authRequest.clientId, - ); - - // In a real implementation, you would show a consent UI here - // For this example, we'll auto-approve the request - - // Complete the authorization - const { redirectTo } = await env.OAUTH_PROVIDER.completeAuthorization({ - request: authRequest, - userId: "user-123", - metadata: { - approvedAt: new Date().toISOString(), - deviceInfo: request.headers.get("User-Agent"), - }, - scope: authRequest.scope, - props: { - userId: "user-123", - username: "example-user", - permissions: ["read", "write"], - }, - }); - - return Response.redirect(redirectTo, 302); - } - - return new Response("Hello World", { - headers: { "Content-Type": "text/plain" }, - }); - }, -}; - -// Export the OAuth Provider as the Worker entrypoint -export default new OAuthProvider({ - apiRoute: "/api/", - apiHandler, - defaultHandler, - authorizeEndpoint: "/authorize", - tokenEndpoint: "/oauth/token", - clientRegistrationEndpoint: "/oauth/register", - scopesSupported: ["read", "write", "profile"], -}); -``` - -### 3. Register a Client - -Before clients can connect, you need to register at least one OAuth client. You can do this programmatically: - -```ts -// In your defaultHandler or during Worker initialization -const clientInfo = await env.OAUTH_PROVIDER.createClient({ - clientName: "Example MCP Client", - redirectUris: ["https://your-client-app.com/callback"], - // For confidential clients, a secret will be generated automatically - // For public clients (like browser apps), set tokenEndpointAuthMethod to "none" - tokenEndpointAuthMethod: "client_secret_basic", -}); - -// Store the clientId and clientSecret securely -console.log("Client registered:", clientInfo); -``` - -## API Reference - -### OAuthProvider Options - -When creating a new `OAuthProvider` instance, you can configure it with the following options: - -| Option | Type | Required | Description | -| ---------------------------------- | ------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------- | -| `apiRoute` | `string \| string[]` | Yes | URL(s) for API routes that require authentication. Can be full URLs or just paths. | -| `apiHandler` | `ExportedHandler \| WorkerEntrypoint` | Yes | Handler for API requests with valid access tokens. | -| `defaultHandler` | `ExportedHandler \| WorkerEntrypoint` | Yes | Handler for non-API requests or API requests without valid tokens. | -| `authorizeEndpoint` | `string` | Yes | URL of the OAuth authorization endpoint where users grant permissions. | -| `tokenEndpoint` | `string` | Yes | URL of the token endpoint for issuing, refreshing, and revoking tokens. | -| `clientRegistrationEndpoint` | `string` | No | Optional URL for dynamic client registration. | -| `accessTokenTTL` | `number` | No | Time-to-live for access tokens in seconds (default: 3600). | -| `scopesSupported` | `string[]` | No | List of scopes supported by this OAuth provider. | -| `allowImplicitFlow` | `boolean` | No | Controls whether the OAuth implicit flow is allowed (default: false). | -| `disallowPublicClientRegistration` | `boolean` | No | When true, only confidential clients can register via the dynamic registration endpoint (default: false). | - -### OAuthHelpers Interface - -The `OAuthHelpers` interface is available to your handlers via `env.OAUTH_PROVIDER` and provides the following methods: - -#### Authorization Flow Methods - -| Method | Description | Parameters | Return Value | -| -------------------------------- | ------------------------------------- | --------------------------------------- | --------------------------------- | -| `parseAuthRequest(request)` | Parses an OAuth authorization request | `request: Request` | `Promise` | -| `lookupClient(clientId)` | Looks up a client by ID | `clientId: string` | `Promise` | -| `completeAuthorization(options)` | Completes an authorization request | `options: CompleteAuthorizationOptions` | `Promise<{ redirectTo: string }>` | - -#### Client Management Methods - -| Method | Description | Parameters | Return Value | -| --------------------------------- | ---------------------------- | ------------------------------------------------ | --------------------------------- | -| `createClient(clientInfo)` | Creates a new OAuth client | `clientInfo: Partial` | `Promise` | -| `listClients(options?)` | Lists all registered clients | `options?: ListOptions` | `Promise>` | -| `updateClient(clientId, updates)` | Updates an existing client | `clientId: string, updates: Partial` | `Promise` | -| `deleteClient(clientId)` | Deletes a client | `clientId: string` | `Promise` | - -#### Grant Management Methods - -| Method | Description | Parameters | Return Value | -| ---------------------------------- | --------------------------- | --------------------------------------- | ----------------------------------- | -| `listUserGrants(userId, options?)` | Lists all grants for a user | `userId: string, options?: ListOptions` | `Promise>` | -| `revokeGrant(grantId, userId)` | Revokes a grant | `grantId: string, userId: string` | `Promise` | - -### Data Types - -#### AuthRequest - -Represents an OAuth authorization request: - -```ts -interface AuthRequest { - responseType: string; // OAuth response type (e.g., "code") - clientId: string; // Client identifier - redirectUri: string; // URL to redirect to after authorization - scope: string[]; // Array of requested permission scopes - state: string; // Client state value to be returned in the redirect - codeChallenge?: string; // PKCE code challenge - codeChallengeMethod?: string; // PKCE code challenge method (plain or S256) -} -``` - -#### ClientInfo - -Represents an OAuth client registration: - -```ts -interface ClientInfo { - clientId: string; // Unique identifier for the client - clientSecret?: string; // Secret for confidential clients (only returned during creation) - redirectUris: string[]; // List of allowed redirect URIs - clientName?: string; // Human-readable name of the client application - logoUri?: string; // URL to the client's logo - clientUri?: string; // URL to the client's homepage - policyUri?: string; // URL to the client's privacy policy - tosUri?: string; // URL to the client's terms of service - jwksUri?: string; // URL to the client's JSON Web Key Set - contacts?: string[]; // Email addresses for contacting client developers - grantTypes?: string[]; // List of grant types the client supports - responseTypes?: string[]; // List of response types the client supports - registrationDate?: number; // Unix timestamp when the client was registered - tokenEndpointAuthMethod: string; // Authentication method used by the client -} -``` - -#### CompleteAuthorizationOptions - -Options for completing an authorization request: - -```ts -interface CompleteAuthorizationOptions { - request: AuthRequest; // The original parsed authorization request - userId: string; // Identifier for the user granting the authorization - metadata: any; // Application-specific metadata for this grant - scope: string[]; // List of scopes that were actually granted - props: any; // Application-specific properties for API requests -} -``` - -#### GrantSummary - -Summary information about an authorization grant: - -```ts -interface GrantSummary { - id: string; // Unique identifier for the grant - clientId: string; // Client that received this grant - userId: string; // User who authorized this grant - scope: string[]; // List of scopes that were granted - metadata: any; // Application-specific metadata - createdAt: number; // Unix timestamp when the grant was created -} -``` - -#### ListOptions - -Options for pagination in list operations: - -```ts -interface ListOptions { - limit?: number; // Maximum number of items to return (max 1000) - cursor?: string; // Cursor for pagination -} -``` - -## Security Considerations - -The OAuth Provider library implements several security best practices: - -1. **No Plaintext Storage**: All sensitive values (tokens, secrets, codes) are stored as SHA-256 hashes. -2. **End-to-End Encryption**: Application-specific properties are encrypted using AES-GCM. -3. **PKCE Support**: Implements Proof Key for Code Exchange for enhanced security. -4. **Refresh Token Rotation**: Implements a compromise approach that balances security with reliability. -5. **TTL-based Expiration**: Access tokens automatically expire using KV's TTL feature. - -For more details on the storage schema and security implementation, refer to the [Storage Schema Documentation](/agents/model-context-protocol/mcp-server/authorization/storage-schema). - -## Advanced Usage - -For more advanced usage scenarios, including custom authorization flows, token validation, and integration with existing authentication systems, refer to the [OAuth SDK Documentation](/agents/model-context-protocol/mcp-server/authorization/oauth-sdk). diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/third-party-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/third-party-oauth-provider.mdx index 2fab9fc226d894d..72f765b04d11c0b 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/third-party-oauth-provider.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/third-party-oauth-provider.mdx @@ -9,6 +9,10 @@ import { Render, GitHubCode } from "~/components"; {/* TODO: Why doesn't GitHub Code Component work? */} +WIP + +Refer to the [GitHub OAuth Provider example](https://github.com/geelen/mcp-remote-examples/tree/main/04-oauth-pivot) for a complete example of how to use a third-party OAuth provider with the MCP Server SDK. + ```ts import OAuthProvider, { AuthRequest, diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/worker-as-oauth-provider.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/worker-as-oauth-provider.mdx index 8ff1fa38e620311..06e8aba76d835cd 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/worker-as-oauth-provider.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/worker-as-oauth-provider.mdx @@ -6,3 +6,9 @@ sidebar: --- import { Render } from "~/components"; + +WIP + +Take example from getting started + +And go deeper, showing someone how to replace the authentication layer with their own. diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/examples/github.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/examples/github.mdx new file mode 100644 index 000000000000000..d1e8d48b5dc7759 --- /dev/null +++ b/src/content/docs/agents/model-context-protocol/mcp-server/examples/github.mdx @@ -0,0 +1,8 @@ +--- +pcx_content_type: concept +title: GitHub as OAuth Provider +sidebar: + order: 3 +--- + +import { Render } from "~/components"; diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/examples/stytch.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/examples/stytch.mdx index 69e6ad4c719aac9..5a609619711ad92 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/examples/stytch.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/examples/stytch.mdx @@ -1,6 +1,6 @@ --- pcx_content_type: concept -title: Stytch as oAuth Provider +title: Stytch as OAuth Provider sidebar: order: 3 --- diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/getting-started.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/getting-started.mdx index d8ce96dcac786b4..1d64105f5ec7067 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/getting-started.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/getting-started.mdx @@ -32,6 +32,14 @@ The MCP standard supports two modes of operation: Cloudflare's MCP Server SDK, is designed to support remote MCP connections. Remote MCP connections allow MCP clients that run in web browsers, mobile apps, and other environments outside of the end-user's machine to connect to your MCP server, such as [Claude.ai](https://www.anthropic.com/claude), and other AI agents. +### Why deploy your MCP server to Cloudflare? + +- Define [tools](/agents/model-context-protocol/mcp-server/tools/) by just writing TypeScript methods, in the [same way you write RPC methods in Workers and Durable Objects](/workers/runtime-apis/rpc/). +- Authorization is [built-in](/agents/model-context-protocol/mcp-server/authorization/). The MCP Server SDK handles the hard parts of the OAuth flow for you. +- Transport over HTTP with Server-Sent Events (SSE) is [built-in](/agents/model-context-protocol/mcp-server/transport/), with automatic hibernation of idle connections to reduce costs +- You can create stateful MCP Servers with the [Agents SDK](/agents/) +- Your MCP server can be called by the [Agents SDK](/agents/), which is an MCP client + ## Deploy your first MCP server {/* TODO: Update deploy to Workers button */} diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx index e0a83e4ff8d59ed..caea8715d0a4ccf 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx @@ -2,7 +2,7 @@ pcx_content_type: concept title: Tools sidebar: - order: 4 + order: 2 --- import { Render } from "~/components"; @@ -15,7 +15,7 @@ For example, the following code defines a simple MCP server that adds two number {/* TODO: Reference code in Github, link to a runnable example, use Deploy to Workers button */} -```ts +```ts title="src/index.ts" import { WorkerEntrypoint, env } from "cloudflare:workers"; import { WorkersMCP, mcp } from "@cloudflare/model-context-protocol"; diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx index 931bd43e034eaee..3b2d9ea9dadba2b 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/transport.mdx @@ -6,3 +6,26 @@ sidebar: --- import { Render } from "~/components"; + +The Model Context Protocol (MCP) specification defines [two standard transport mechanisms](https://spec.modelcontextprotocol.io/specification/draft/basic/transport/): + +1. **stdio, communication over standard in and standard out** — designed for local MCP connections +2. **HTTP with Server-Sent Events (SSE)** — designed for remote MCP connections + +{/* TODO: Update link and make sure this gets merged into @modelcontextprotocol/typescript-sdk: https://github.com/modelcontextprotocol/typescript-sdk/pull/178 */} + +The MCP Server SDK supports remote MCP connections, using [HTTP with Server-Sent Events (SSE)](https://github.com/modelcontextprotocol/typescript-sdk/pull/178) as transport. SSE requires a persistent HTTP connection, which is supported by Cloudflare [Durable Objects](/durable-objects/). + +Transport is configured and handled automatically by the MCP Server SDK. You don't need to configure anything — it just works. + +## Automatic hibernation to reduce your costs + +SSE requires a persistent HTTP connection. The MCP Client opens a connection to the MCP Server and keeps it open while the application is running. For example, an MCP Client running in a browser will keep the connection open until the browser is closed. + +This means idle connections can be held open indefinately. On other serverless platforms, this results in high costs, because you are billed for the "wall clock" time while the connection is open, even if the connection is idle. + +When you build MCP Servers with the MCP Server SDK, the SDK automatically hibernates idle connections, waking them up only when new events are available. This means you are only billed for the time that the MCP Server is actively running, and not for the time that the connection is open but idle. + +This works by using the [WebSocket hibernation API](https://developers.cloudflare.com/durable-objects/best-practices/websockets/#websocket-hibernation-api) provided by Cloudflare Durable Objects. + +{/* TODO: Should we link to source code or explain more? */} From cb8010d415f12ae439cd96873f06a04362cf0b29 Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Sun, 16 Mar 2025 13:18:40 -0700 Subject: [PATCH 10/13] Scaffold out a few more things --- .../agents/model-context-protocol/mcp-client.mdx | 6 ++++++ .../model-context-protocol/mcp-server/tools.mdx | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/content/docs/agents/model-context-protocol/mcp-client.mdx b/src/content/docs/agents/model-context-protocol/mcp-client.mdx index 6e171ba3901c861..4553d418ba1dcbf 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-client.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-client.mdx @@ -6,3 +6,9 @@ sidebar: --- import { Render } from "~/components"; + +WIP + +- Explain use cases for Agent as an MCP Client, and the connection to this and using MCP Servers to provide tools +- Show example of using the Agents SDK to call an MCP Server +- Explain how this gets translated into the format of tools that people are used to from ai-sdk and from agents-sdk diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx index caea8715d0a4ccf..3d57e63cbc85b7f 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx @@ -39,3 +39,15 @@ In this example, the `add` method is decorated with the `@mcp.tool` decorator, w :::note Because decorators are a [Stage 3 TC39 proposed addition to the JavaScript language](https://github.com/tc39/proposal-decorators), to use decorators in your code, and to use the Cloudflare MCP Server SDK, you must use Wrangler v4.0.0 or later, or [`@cloudflare/vite-plugin`](https://www.npmjs.com/package/@cloudflare/vite-plugin). This ensures that decorators in your code are automatically transpiled into code that the [Cloudflare Workers runtime](/workers/reference/how-workers-works/) can understand. ::: + +### How it works + +WIP + +- Explain what is functionally happening here with decorators +- You add JSDOC to `@mcp.tool` to describe the tool +- The MCP Server SDK parses the JSDOC to extract the tool's description, input parameters, and return type +- The MCP Server SDK then uses the tool's description, input parameters, and return type to serialize and deserialize the tool's input and output +- The MCP Server SDK then uses the serialized input and output to call the tool + +- Show the equivalent before/after using the raw @modelcontextprotocol/typescript-sdk — and ideally move this up to the top so that the reader "gets it" — maybe use tabs? From 6579a2fe95f034c2fd1703066f21572e5817fd8c Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Mon, 17 Mar 2025 17:21:16 -0700 Subject: [PATCH 11/13] Move content to overview, link to workers-mcp instead --- .../mcp-server/index.mdx | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/index.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/index.mdx index 1ba57a2333a0e30..1054df1d171086e 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/index.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/index.mdx @@ -4,5 +4,38 @@ pcx_content_type: navigation sidebar: order: 1 group: - hideIndex: true + hideIndex: false --- + +# Deploy an MCP Server to Cloudflare + +You can build and deploy MCP servers on Cloudflare, using the [`workers-mcp` package](https://github.com/cloudflare/workers-mcp), which provides an SDK for [authorization](/agents/model-context-protocol/mcp-server/authorization/), [transport](/agents/model-context-protocol/mcp-server/transport/), and [tool definition and discovery](/agents/model-context-protocol/mcp-server/tools/). + +This guide and the accompanying [examples](/agents/model-context-protocol/mcp-server/examples/) will help you get started. + +### What is the Model Context Protocol (MCP)? + +[Model Context Protocol (MCP)](https://modelcontextprotocol.io) is an open standard that connects AI systems with external applications. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various accessories, MCP provides a standardized way to connect AI agents to different services. + +#### MCP Terminology + +- **MCP Hosts**: AI assistants (like [Claude](http://claude.ai) or [Cursor](http://cursor.com)), AI agents, or applications that need to access external capabilities. +- **MCP Clients**: Clients embedded within the MCP hosts that connect to MCP servers and invoke tools. Each MCP client instance has a single connection to an MCP server. +- **MCP Servers**: Applications that expose [tools](/agents/model-context-protocol/mcp-server/tools/), [prompts](https://modelcontextprotocol.io/docs/concepts/prompts), and [resources](https://modelcontextprotocol.io/docs/concepts/resources) that MCP clients can use. + +#### Remote vs. local MCP connections + +The MCP standard supports two modes of operation: + +- **Remote MCP connections**: MCP clients connect to MCP servers over the Internet, establishing a [long-lived connection using HTTP and Server-Sent Events (SSE)](/agents/model-context-protocol/mcp-server/transport/), and authorizing the MCP client access to resources on the user's account using [OAuth](/agents/model-context-protocol/mcp-server/authorization/). +- **Local MCP connections**: MCP clients connect to MCP servers on the same machine, using [stdio](https://spec.modelcontextprotocol.io/specification/draft/basic/transports/#stdio) as a local transport method. + +Cloudflare's MCP Server SDK, is designed to support remote MCP connections. Remote MCP connections allow MCP clients that run in web browsers, mobile apps, and other environments outside of the end-user's machine to connect to your MCP server, such as [Claude.ai](https://www.anthropic.com/claude), and other AI agents. + +### Why deploy your MCP server to Cloudflare? + +- Define [tools](/agents/model-context-protocol/mcp-server/tools/) by just writing TypeScript methods, in the [same way you write RPC methods in Workers and Durable Objects](/workers/runtime-apis/rpc/). +- Authorization is [built-in](/agents/model-context-protocol/mcp-server/authorization/). The MCP Server SDK handles the hard parts of the OAuth flow for you. +- Transport over HTTP with Server-Sent Events (SSE) is [built-in](/agents/model-context-protocol/mcp-server/transport/), with automatic hibernation of idle connections to reduce costs +- You can create stateful MCP Servers with the [Agents SDK](/agents/) +- Your MCP server can be called by the [Agents SDK](/agents/), which is an MCP client From e8a1ab7e38a38390b31bbb2db809a9e88e7270e7 Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Mon, 17 Mar 2025 22:44:54 -0700 Subject: [PATCH 12/13] Start adding next steps after initial getting started --- .../oauth-provider-api-reference.mdx | 2 + .../mcp-server/getting-started.mdx | 86 +++++++++---------- 2 files changed, 45 insertions(+), 43 deletions(-) diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference.mdx index 99b211d19406078..3538e7e829ab986 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/authorization/oauth-provider-api-reference.mdx @@ -7,3 +7,5 @@ sidebar: order: 5 head: [] --- + +{/* TODO: this page (or the linked docs) need to be really clear about what the defaultHandler must implement, and provide a really clear reference example */} diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/getting-started.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/getting-started.mdx index 1d64105f5ec7067..44156d0086533fa 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/getting-started.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/getting-started.mdx @@ -7,55 +7,17 @@ sidebar: import { Details, Render, PackageManagers } from "~/components"; -# Deploy an MCP Server to Cloudflare - -You can build and deploy MCP servers on Cloudflare, using the `@cloudflare/model-context-protocol` package, which provides an SDK for [authorization](/agents/model-context-protocol/mcp-server/authorization/), [transport](/agents/model-context-protocol/mcp-server/transport/), and [tool definition and discovery](/agents/model-context-protocol/mcp-server/tools/). - -This guide and the accompanying [examples](/agents/model-context-protocol/mcp-server/examples/) will help you get started. - -### What is the Model Context Protocol (MCP)? - -[Model Context Protocol (MCP)](https://modelcontextprotocol.io) is an open standard that connects AI systems with external applications. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various accessories, MCP provides a standardized way to connect AI agents to different services. - -#### MCP Terminology - -- **MCP Hosts**: AI assistants (like [Claude](http://claude.ai) or [Cursor](http://cursor.com)), AI agents, or applications that need to access external capabilities. -- **MCP Clients**: Clients embedded within the MCP hosts that connect to MCP servers and invoke tools. Each MCP client instance has a single connection to an MCP server. -- **MCP Servers**: Applications that expose [tools](/agents/model-context-protocol/mcp-server/tools/), [prompts](https://modelcontextprotocol.io/docs/concepts/prompts), and [resources](https://modelcontextprotocol.io/docs/concepts/resources) that MCP clients can use. - -#### Remote vs. local MCP connections - -The MCP standard supports two modes of operation: - -- **Remote MCP connections**: MCP clients connect to MCP servers over the Internet, establishing a [long-lived connection using HTTP and Server-Sent Events (SSE)](/agents/model-context-protocol/mcp-server/transport/), and authorizing the MCP client access to resources on the user's account using [OAuth](/agents/model-context-protocol/mcp-server/authorization/). -- **Local MCP connections**: MCP clients connect to MCP servers on the same machine, using [stdio](https://spec.modelcontextprotocol.io/specification/draft/basic/transports/#stdio) as a local transport method. - -Cloudflare's MCP Server SDK, is designed to support remote MCP connections. Remote MCP connections allow MCP clients that run in web browsers, mobile apps, and other environments outside of the end-user's machine to connect to your MCP server, such as [Claude.ai](https://www.anthropic.com/claude), and other AI agents. - -### Why deploy your MCP server to Cloudflare? - -- Define [tools](/agents/model-context-protocol/mcp-server/tools/) by just writing TypeScript methods, in the [same way you write RPC methods in Workers and Durable Objects](/workers/runtime-apis/rpc/). -- Authorization is [built-in](/agents/model-context-protocol/mcp-server/authorization/). The MCP Server SDK handles the hard parts of the OAuth flow for you. -- Transport over HTTP with Server-Sent Events (SSE) is [built-in](/agents/model-context-protocol/mcp-server/transport/), with automatic hibernation of idle connections to reduce costs -- You can create stateful MCP Servers with the [Agents SDK](/agents/) -- Your MCP server can be called by the [Agents SDK](/agents/), which is an MCP client - ## Deploy your first MCP server -{/* TODO: Update deploy to Workers button */} -The best way to get started is to deploy an [example MCP server](https://github.com/geelen/mcp-remote-examples/tree/main/02-user-password) to your Cloudflare account. You can then customize this example to suit your needs. - -### Option 1: Deploy your MCP server first, then develop locally +This guide will walk you through how to deploy an [example MCP server](https://github.com/geelen/mcp-remote-examples/tree/main/02-user-password) to your Cloudflare account. You will then customize this example to suit your needs. {/* TODO: Update link to example */} -The link below will guide you through everything you need to do to deploy an [example MCP server](https://github.com/geelen/mcp-remote-examples/tree/main/02-user-password) to your Cloudflare account: +The link below will guide you through everything you need to do to deploy this [example MCP server](https://github.com/geelen/mcp-remote-examples/tree/main/02-user-password) to your Cloudflare account: {/* TODO: Update deploy to Workers button */} -[![Deploy to Workers](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/mcp-server-example) +[![Deploy to Workers](https://deploy.workers.cloudflare.com/button)](https://dash.cloudflare.com/?to=/:account/workers-and-pages/create/deploy-to-workers&repository=https://github.com/cloudflare/mcp-server-example) -At the end of this process, you will have a new git repository on your GitHub or GitLab account for your MCP server that is configured to automatically deploy Cloudflare each time you push a change or merge a pull request to the main branch of the repository. You can then clone this repository, [develop locally](/agents/model-context-protocol/mcp-server/getting-started/#local-development), and customize the code to suit your needs. - -### Option 2: Create a new MCP Server via the CLI +At the end of this process, you will have a new git repository on your GitHub or GitLab account for your MCP server, configured to automatically deploy Cloudflare each time you push a change or merge a pull request to the main branch of the repository. You can then clone this repository, [develop locally](/agents/model-context-protocol/mcp-server/getting-started/#local-development), and start writing code and building. Alternatively, you can use the command line as shown below to create a new MCP Server on your local machine. @@ -117,7 +79,45 @@ npx wrangler@latest deploy If you have already [connected a git repository](/workers/ci-cd/builds/) to the Worker with your MCP server, you can deploy your MCP server by pushing a change or merging a pull request to the main branch of the repository. -### Next Steps +After deploying, take the URL of your deployed MCP server, and enter it in the MCP inspector running on `http://localhost:5173`. You now have a remote MCP server, deployed to Cloudflare, that MCP clients can connect to. + +## Add Authentication + +The example MCP server you just deployed above acts as an OAuth provider to MCP clients, handling authorization, but has a placeholder authentication flow. It lets you enter any username and password to log in, and doesn't actually authenticate you against any user database. + +In the next section, you will add a real authentication provider to your MCP server. Even if you already have an authentication provider in place, following these steps will show you more clearly how to integrate it with your MCP server. + +We'll use GitHub as the authentication provider here, but you can use any OAuth provider that supports the OAuth 2.0 specification, and we have examples for: + +- [Stytch](/agents/model-context-protocol/mcp-server/examples/stytch/) +- [Clerk](/agents/model-context-protocol/mcp-server/examples/clerk/) +- [Google](/agents/model-context-protocol/mcp-server/examples/google/) + +### Step 1 — Update the default handler + +In your example MCP server, open `src/index.ts`, and change the value of `defaultHandler` in to instead use the `GitHubHandler`: + +{/* TODO: GitHub Code Component */} + +```ts ins="OAuthProvider.GitHubHandler" +export default new OAuthProvider({ + apiRoute: "/sse", + apiHandler: MyMCP.Router, + defaultHandler: OAuthProvider.GitHubHandler, + authorizeEndpoint: "/authorize", + tokenEndpoint: "/token", + clientRegistrationEndpoint: "/register", +}); +``` + +{/* TODO: Update code link */} +This will ensure that your users are redirected to GitHub to authenticate. If you're curious to understand what the `GitHubHandler` does you can read the code [here](https://github.com/geelen/mcp-remote-examples/blob/main/04-oauth-pivot/src/index.ts#L48-L152). + +### Step 2 — Create a GitHub OAuth App + +{/* TODO: instructions */} + +## Next steps - Add [tools](/agents/model-context-protocol/mcp-server/tools/) to your MCP server. - Customize your MCP Server's [authentication and authorization](/agents/model-context-protocol/mcp-server/authorization/). From d5a94c13ffbfea4d691e6f4b7c8171a990d6b238 Mon Sep 17 00:00:00 2001 From: Brendan Irvine-Broque Date: Tue, 18 Mar 2025 09:28:37 -0700 Subject: [PATCH 13/13] Remove JSRPC tools, replace with standard sdk --- .../mcp-server/tools.mdx | 47 ++++++------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx index 3d57e63cbc85b7f..1f9848ea61c6a98 100644 --- a/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx +++ b/src/content/docs/agents/model-context-protocol/mcp-server/tools.mdx @@ -9,45 +9,26 @@ import { Render } from "~/components"; Model Context Protocol (MCP) tools are functions that a [MCP Server](/agents/model-context-protocol/mcp-server) provides and MCP clients can call. -When you build MCP Servers with the `@cloudflare/model-context-protocol` package, you can define tools by writing JavaScript or TypeScript methods and decorating them with the `@mcp.tool` [decorator](https://github.com/tc39/proposal-decorators). This removes the need to manually implement the tool discovery, serialization, and invocation logic. +When you build MCP Servers with the `@cloudflare/model-context-protocol` package, you can define tools using the `@modelcontextprotocol/typescript-sdk` package. For example, the following code defines a simple MCP server that adds two numbers together: {/* TODO: Reference code in Github, link to a runnable example, use Deploy to Workers button */} ```ts title="src/index.ts" -import { WorkerEntrypoint, env } from "cloudflare:workers"; -import { WorkersMCP, mcp } from "@cloudflare/model-context-protocol"; - -@mcp({ name: "My MCP Server", version: "1.0.0", route: "/mcp" }) -class McpEntrypoint extends WorkerEntrypoint { - @mcp.tool(` - Add two numbers the way only MCP can - - @param a {number} The first number - @param b {number} The second number - @returns {number} The sum of the two numbers - `) - add(a: number, b: number) { - return a + b; +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp"; +import { DurableMCP } from "@cloudflare/model-context-protocol"; + +export class MyMCP extends DurableMCP { + server = new McpServer({ name: "Demo", version: "1.0.0" }); + async init() { + this.server.tool( + "add", + { a: z.number(), b: z.number() }, + async ({ a, b }) => ({ + content: [{ type: "text", text: String(a + b) }], + }), + ); } } ``` - -In this example, the `add` method is decorated with the `@mcp.tool` decorator, which adds the tool to the MCP server and provides the tool's description, input parameters, and return type. - -:::note -Because decorators are a [Stage 3 TC39 proposed addition to the JavaScript language](https://github.com/tc39/proposal-decorators), to use decorators in your code, and to use the Cloudflare MCP Server SDK, you must use Wrangler v4.0.0 or later, or [`@cloudflare/vite-plugin`](https://www.npmjs.com/package/@cloudflare/vite-plugin). This ensures that decorators in your code are automatically transpiled into code that the [Cloudflare Workers runtime](/workers/reference/how-workers-works/) can understand. -::: - -### How it works - -WIP - -- Explain what is functionally happening here with decorators -- You add JSDOC to `@mcp.tool` to describe the tool -- The MCP Server SDK parses the JSDOC to extract the tool's description, input parameters, and return type -- The MCP Server SDK then uses the tool's description, input parameters, and return type to serialize and deserialize the tool's input and output -- The MCP Server SDK then uses the serialized input and output to call the tool - -- Show the equivalent before/after using the raw @modelcontextprotocol/typescript-sdk — and ideally move this up to the top so that the reader "gets it" — maybe use tabs?