CORS Doctor MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CORS Doctor MCP Servercheck CORS headers for https://example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
_mcp-template-gated — MCP server template WITH the paywall gate baked in
This is the reusable factory template for every NEW MCP in the fleet. It is born with the server-side paywall gate already wired, so a new MCP can never again ship the premium tier for free (the bug that made conversion impossible on the first 10 servers).
The gate (the whole point)
src/mcpServer.ts— the locally-installed package. The FREE tier (deep=false) runs here. The PREMIUM tier (deep=true) does NOT run here: it is forwarded to the hosted/pro/runendpoint withAuthorization: Bearer <KEY>. No key → an upsell (the premium is never executed for free).src/server.ts— the hosted side./pro/runis gated by two coexisting payment lanes:x402 (USDC per call, for AI agents) via
x402-express.Stripe prepaid API key (for humans) — a valid
Bearerkey skips x402. The 402 body always shows BOTH lanes (pay_with_card_stripe+ x402accepts).
src/stripeLane.ts— Stripe Checkout → webhook mints an API key into KV.src/kv.ts— Cloudflare KV (key store + funnel counters), degrades gracefully.src/engine.ts— EXAMPLE engine. Replacerun(input,{deep})with the real logic. Keep the contract:deep=falsecheap/local,deep=truepremium/server-only.
Related MCP server: Browser Runtime MCP
Make a new MCP from this template
Copy the folder:
cp -r _mcp-template-gated <new-name>.Replace placeholders across the repo:
CORS Doctor→ human name, e.g.dns-doctorcors-doctor→ npm/url slug, e.g.dns-doctorSERVICE_KEY→ the buyer's env var, e.g.DNS_DOCTOR_KEY(PowerShell one-liner is in the comment block ofscripts/rename.txt.)
In
package.json/server.json/stripeLane.tsenv defaults set:STRIPE_KEY_PREFIX(e.g.dns_),STRIPE_PLAN_NAME,SERVICE_KEY_ENV,SERVICE_PRO_URL,homepage/PUBLIC_BASE_URL= the Vercel URL.
Write the real
engine.tsand the real tool schema/description inmcpServer.ts.npm install && npx tsc— must build clean.
Verify the gate (regla 7 — not done until this passes)
FORCE_LISTEN=true PORT=8899 PRO_API_KEYS=test_key X402_ENABLED=true node dist/server.js &
curl -s -o /dev/null -w "%{http_code}\n" "http://127.0.0.1:8899/run?target=x" # 200 (free)
curl -s -o /dev/null -w "%{http_code}\n" "http://127.0.0.1:8899/pro/run?target=x" # 402 (no key)
curl -s -o /dev/null -w "%{http_code}\n" -H "Authorization: Bearer test_key" "http://127.0.0.1:8899/pro/run?target=x" # 200 (paid key)
curl -s -o /dev/null -w "%{http_code}\n" -H "Authorization: Bearer wrong" "http://127.0.0.1:8899/pro/run?target=x" # 402 (bad key)MCP stdio: deep=true without a key must print the UPSELL (never run premium); deep=false returns the local free result.
Production env (set in Vercel, sourced from config/)
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, CLOUDFLARE_ACCOUNT_ID/API_TOKEN/KV_NAMESPACE_ID,
optionally SERVICE_KEY. Everything degrades gracefully if a lane is unconfigured —
the x402 gate + 402 always work even with no Stripe/KV. Never set the deep engine
to run client-side.
This server cannot be installed
Maintenance
Latest Blog Posts
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/Baneado98/cors-doctor'
If you have feedback or need assistance with the MCP directory API, please join our Discord server