import OAuthProvider from "@cloudflare/workers-oauth-provider";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { McpAgent } from "agents/mcp";
import { z } from "zod";
import { GoogleHandler } from "./google-handler";
// Context from the auth process, encrypted & stored in the auth token
// and provided to the MyMCP as this.props
type Props = {
name: string;
email: string;
accessToken: string;
};
export class MyMCP extends McpAgent<Env, Record<string, never>, Props> {
server = new McpServer({
name: "Google OAuth Proxy Demo",
version: "0.0.1",
});
async init() {
this.server.tool("add", { a: z.number(), b: z.number() }, async ({ a, b }) => ({
content: [{ text: String(a + b), type: "text" }],
}));
}
}
export default new OAuthProvider({
apiHandler: MyMCP.mount("/sse") as any,
apiRoute: "/sse",
authorizeEndpoint: "/authorize",
clientRegistrationEndpoint: "/register",
defaultHandler: GoogleHandler as any,
tokenEndpoint: "/token",
});