/*
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
*/
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { McpAgent } from "agents/mcp";
import type { Env } from "../../worker-configuration.js";
import { SDKCore } from "../core.js";
import { createConsoleLogger } from "../mcp-server/console-logger.js";
import { createMCPServer } from "../mcp-server/server.js";
import { landingPage } from "./landing-page.js";
interface State {}
type Props = Record<string, string>;
export class McpMCP extends McpAgent<Env, State, Props> {
server!: McpServer;
async init() {
this.server = createMCPServer({
logger: createConsoleLogger("debug"),
getSDK: () => this.getSDK(),
});
}
getSDK() {
const getHeader = (name: string) => this.props[name] || "";
const sdk = new SDKCore({
debugLogger: {
log: (...args) => console.log(...args),
group: (...args) => console.group(...args),
groupEnd: (...args) => console.groupEnd(...args),
},
security: async () => {
return {
cloudinaryAuth: JSON.parse(getHeader("x-cloudinary-auth")),
oauth2: getHeader("x-oauth2"),
};
},
});
return sdk;
}
}
export default {
async fetch(request: Request, env: Env, ctx: any) {
const url = new URL(request.url);
// Pass auth headers through to the MCP agent
const headers: Record<string, string> = {};
for (const [key, value] of request.headers.entries()) {
headers[key.toLowerCase()] = value;
}
ctx.props = headers;
if (url.pathname === "/sse" || url.pathname.startsWith("/sse/")) {
return McpMCP.serveSSE("/sse", { binding: "MCP_MCP" }).fetch(
request,
env,
ctx,
);
}
if (url.pathname === "/mcp") {
return McpMCP.serve("/mcp", { binding: "MCP_MCP" }).fetch(
request,
env,
ctx,
);
}
// Landing page
if (url.pathname === "/") {
return landingPage();
}
// Fallback to serving static assets
const response = await env.ASSETS.fetch(request);
// Only modify headers if asset was found successfully
if (response.ok) {
// Clone the response to modify headers
return new Response(response.body, {
headers: {
"Content-Type": "application/octet-stream",
"Content-Disposition": "attachment; filename=\"mcp-server.dxt\"",
"Cache-Control": "public, max-age=3600",
},
});
}
// Return the original response (including 404s) as-is
return response;
},
};