JWT Doctor
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., "@JWT Doctordecode this JWT: eyJhbGciOiJIUzI1NiJ9.eyJ0ZXN0IjoiZGF0YSJ9.5C6G2w"
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: Paid MCP Server Template
Make a new MCP from this template
Copy the folder:
cp -r _mcp-template-gated <new-name>.Replace placeholders across the repo:
JWT Doctor→ human name, e.g.dns-doctorjwt-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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/jwt-doctor'
If you have feedback or need assistance with the MCP directory API, please join our Discord server