SEODesk MCP Server
SEODesk MCP Server
A Remote MCP (Model Context Protocol) server that exposes the SEODesk SEO toolset to ChatGPT Apps and any other MCP-compatible client (Claude, Cursor, Codex, etc.).
Transport: Streamable HTTP (spec 2025-06-18) at
POST /mcpAuth: OAuth 2.1 with PKCE + Dynamic Client Registration (RFC 7591)
SDK:
@modelcontextprotocol/sdkRuntime: Node.js 20+
The Lovable frontend is untouched. ChatGPT talks to this MCP server; the frontend keeps talking to the existing Supabase Edge Functions. This server calls the same Edge Functions internally to fulfil tool calls.
Tools exposed
Tool | Purpose |
| Full on-page SEO analysis for a URL |
| Technical site audit (findings by category) |
| Google PageSpeed Insights (mobile + desktop) |
| Keywords, questions, clusters from a seed |
| AI-generated SEO |
| AI-generated meta descriptions |
| JSON-LD schema (Article, Product, FAQPage, …) |
| Backlink profile summary (requires provider key) |
| Content brief vs. a target keyword |
Endpoints
Path | Description |
| MCP Streamable HTTP endpoint (requires |
| Liveness probe |
| Readiness probe |
| OAuth 2.0 AS metadata (RFC 8414) |
| MCP resource metadata (RFC 9728) |
| Dynamic Client Registration (RFC 7591) |
| Authorization endpoint (PKCE S256 required) |
| Token endpoint (auth code + refresh) |
Local development
cd mcp-server
cp .env.example .env # fill in values
npm install
npm run devSanity check:
curl http://localhost:3333/health
curl http://localhost:3333/.well-known/oauth-authorization-serverEnvironment variables
See .env.example. Required at minimum:
PUBLIC_BASE_URL— public HTTPS URL of this server (used as OAuth issuer).JWT_SECRET— long random string, signs access tokens.SUPABASE_URL,SUPABASE_ANON_KEY,SUPABASE_SERVICE_ROLE_KEY— to call SEODesk backend Edge Functions.LOVABLE_API_KEY— for AI-powered tools (meta/schema/optimizer).GOOGLE_PAGESPEED_API_KEY— optional (Edge Function can supply its own).
Deploy to Railway
Push this folder to a Git repo.
In Railway → New Project → Deploy from GitHub, pick the repo and set the root directory to
mcp-server.Add the env vars from
.env.exampleunder Variables.Railway auto-detects Node;
railway.tomlsets the healthcheck to/health.After deploy, set
PUBLIC_BASE_URLandOAUTH_ISSUERto the generated HTTPS domain (e.g.https://seodesk-mcp.up.railway.app) and redeploy.
Deploy to Cloudflare Workers
The MCP SDK targets Node's http module, so the simplest CF path is to deploy
this Node app to Cloudflare Containers (or Fly.io / Render) rather than a
plain Worker. If you want a pure Workers deployment, port the two files
src/index.js and src/oauth.js onto itty-router + @modelcontextprotocol/sdk's
Web-Standard transport — the tool definitions in src/tools.js transfer
unchanged.
Minimal Docker deploy (works on Fly.io, Render, CF Containers):
docker build -t seodesk-mcp .
docker run -p 3333:3333 --env-file .env seodesk-mcpConnect from ChatGPT
ChatGPT → Settings → Apps → Create App (or Connectors).
Server URL:
https://<your-domain>/mcpChatGPT auto-discovers
/.well-known/oauth-protected-resource, registers a client via/oauth/register, and walks the user through OAuth.Once approved, all nine tools appear in ChatGPT and can be invoked in chat.
Connect from Claude / Cursor / Codex
Any MCP client that supports Streamable HTTP + OAuth 2.1 works. Point it at
https://<your-domain>/mcp and it will complete DCR + PKCE the same way.
Production hardening checklist
Replace in-memory
clients/authCodes/refreshTokensstores insrc/oauth.jswith Redis or Postgres.Replace the auto-approve
/oauth/authorizehandler with a real consent page that authenticates the end user against SEODesk (Supabase Auth).Rotate
JWT_SECRETand pinALLOWED_REDIRECT_HOSTS.Put the server behind HTTPS (Railway / Fly / CF terminate TLS for you).
Add rate limiting (e.g.
express-rate-limit) on/mcpand/oauth/*.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/apurv00001/seodesk-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server