Skip to main content
Glama
index.ts1.77 kB
import { OAuthProvider } from '@cloudflare/workers-oauth-provider' import { createRequestHandler } from 'react-router' import { DB } from './db' import { EpicMeMCP, type Props } from './mcp/index.ts' import { withCors } from './utils/misc.ts' const requestHandler = createRequestHandler( () => import('virtual:react-router/server-build'), import.meta.env.MODE, ) // Default handler for non-MCP routes const defaultHandler = { fetch: async (request: Request, env: Env, ctx: ExecutionContext<Props>) => { return requestHandler(request, { db: await DB.getInstance(env), cloudflare: { env, ctx }, }) }, } // Create OAuth provider instance const oauthProvider = new OAuthProvider({ apiRoute: ['/mcp'], apiHandler: { // @ts-expect-error fetch(request: Request, env: Env, ctx: ExecutionContext<Props>) { const url = new URL(request.url) if (url.pathname === '/mcp') { ctx.props.baseUrl = url.origin return EpicMeMCP.serve('/mcp', { binding: 'EPIC_ME_MCP_OBJECT', }).fetch(request, env, ctx) } return new Response('Not found', { status: 404 }) }, }, // @ts-expect-error defaultHandler, authorizeEndpoint: '/authorize', tokenEndpoint: '/oauth/token', clientRegistrationEndpoint: '/oauth/register', }) export default { fetch: withCors({ getCorsHeaders: (request) => { if (request.url.includes('/.well-known')) { return { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, HEAD, OPTIONS', 'Access-Control-Allow-Headers': 'mcp-protocol-version', 'Cross-Origin-Resource-Policy': 'cross-origin', } } }, handler: async (request: Request, env: Env, ctx: ExecutionContext) => { return oauthProvider.fetch(request, env, ctx) }, }), } export { EpicMeMCP }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/epicweb-dev/epic-me-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server