Skip to content

Sebora MCP

Connect Claude (web or Desktop), ChatGPT, and other MCP clients to the Sebora Partner API — run SEO/GEO audits, wait for results, and pull markdown reports from chat.

Two setups:

ModeBest forHow
Remote MCP (recommended for web)Claude.ai, ChatGPT ConnectorsPublic HTTPS URL on your Sebora app
Local MCP (stdio)Claude Desktop on your machineNode process in packages/sebora-mcp

Both use the same tools (sebora_create_audit, sebora_get_audit_report, etc.) and your Partner API key.

What you can do

  • Run a full SEO/GEO audit on any domain from natural language
  • Wait until the audit completes, then read a markdown report
  • List audits and check credits before starting

WARNING

Each audit consumes partner credits. Check usage before large batches.

Before you start

RequirementDetails
Partner accountPartner Portal
API keyPartner Portal → API Keys
Sebora deployedProduction with HTTPS, or local npm run dev for testing

Remote MCP (Claude web & ChatGPT)

Remote MCP is served from your Sebora app at:

text
https://<your-app-domain>/api/v1/mcp

Claude and ChatGPT connect from their cloud to that URL (not from your laptop). Your server must be publicly reachable over HTTPS.

1. Enable on the server

Set in .env (or hosting env vars):

bash
MCP_REMOTE_ENABLED=true
APP_URL=https://your-production-domain   # public HTTPS issuer, no trailing slash

Redeploy or restart the app. You should see two log lines: [MCP OAuth] Authorization server endpoints registered (/oauth/*, /.well-known/*) and [MCP Remote] Streamable HTTP MCP at /api/v1/mcp.

Local testing

localhost is not reachable from Claude/ChatGPT clouds. Use a tunnel (e.g. ngrok) to expose https://….ngrok.io and set APP_URL to that tunnel URL, or test with Claude Desktop (local MCP below).

2. Authentication — OAuth (no API key to paste)

Claude.ai and ChatGPT do not offer a field to paste a static partner API key. They drive an OAuth 2.1 handshake against your Sebora app:

  1. Client fetches /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server (auto-discovered).
  2. Client self-registers (Dynamic Client Registration, POST /oauth/register).
  3. You're sent to /oauth/authorize — enter your Sebora partner email (same as the Partner Portal) and approve. Sebora emails you a secure sign-in link (passwordless magic link, like Partner Portal login).
  4. Open the link from your inbox — it confirms your identity and finishes the grant, returning an authorization code to the client.
  5. The client exchanges the code at /oauth/token (authorization code + PKCE) for an access token scoped to your partner. No keys are copied by hand.

The magic link is single-use and expires in 15 minutes. Access tokens are short-lived and refreshed automatically. (Static X-API-Key / Bearer <partner_api_key> still works for Claude Desktop / Code / curl — see Local MCP below.)

3. Claude.ai (web)

  1. Open claude.aiSettingsConnectors
  2. Add custom connector (Developer mode may be required on your plan)
  3. Server URL: https://your-production-domain/api/v1/mcp
  4. Click Connect → Claude opens the Sebora authorize page → enter your partner email → open the emailed sign-in link to finish
  5. Enable the connector on a new chat

Anthropic connects from their infrastructure; the URL must be public HTTPS. See Anthropic: remote MCP connectors.

4. ChatGPT

  1. SettingsApps & Connectors → enable Developer mode (paid plans)
  2. Create connector
  3. Server URL: https://your-production-domain/api/v1/mcp
  4. Authentication: OAuth → enter your partner email and open the emailed sign-in link to authorize
  5. Trust the application and enable the connector in chat

ChatGPT also requires a public HTTPS MCP endpoint. Tool availability depends on plan and developer mode.

5. Confirm it works

In a new chat with the connector enabled:

  • “What Sebora tools do you have?”
  • “Check my Sebora partner credits.”
  • “Run a full SEO audit on example.com and summarize the top issues.”

Remote troubleshooting

IssueWhat to check
Connector won’t connectMCP_REMOTE_ENABLED=true, valid public HTTPS APP_URL, firewall allows inbound
Discovery failsGET /.well-known/oauth-authorization-server returns JSON with your APP_URL as issuer
No sign-in emailEmail must match an active Partner Portal account; check spam; RESEND_API_KEY set
Sign-in link rejectedLink is single-use and expires in 15 min — restart the connection to get a fresh one
401 after connectingAccess token expired and refresh failed — reconnect the connector
Tools missingFull app restart after env change; check server logs
Audits stucknpm run dev locally; Redis worker if REDIS_URL is set

Server logs (macOS): Claude may log MCP client errors locally; Sebora logs appear in your app process.


Local MCP (Claude Desktop)

For Claude Desktop only — runs a local Node MCP process (stdio). Not used on claude.ai.

Install

bash
cd packages/sebora-mcp
npm install
npm run build

Or from repo root: npm run mcp:sebora:build

Entrypoint: packages/sebora-mcp/dist/index.js (use an absolute path in config).

Configure Claude Desktop

  1. SettingsDeveloperEdit Config
  2. Add under mcpServers:
json
{
  "mcpServers": {
    "sebora": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/sebora-agentic/packages/sebora-mcp/dist/index.js"],
      "env": {
        "SEBORA_API_URL": "https://your-production-url",
        "SEBORA_API_KEY": "your_partner_api_key"
      }
    }
  }
}

Example file: packages/sebora-mcp/claude_desktop_config.example.json

  1. Fully quit and reopen Claude Desktop.

Config paths:

OSFile
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json

Cursor (optional)

Copy .cursor/mcp.json.example.cursor/mcp.json, set SEBORA_API_KEY, restart Cursor, enable sebora under Settings → MCP.


Environment variables

Remote (on Sebora server)

VariableRequiredDescription
MCP_REMOTE_ENABLEDYes (true)Enables /api/v1/mcp and the OAuth server (/oauth/*, /.well-known/*)
APP_URLYesPublic HTTPS base URL / OAuth issuer (no trailing slash)
PARTNER_JWT_SECRETNoSigns OAuth access tokens (falls back to SESSION_SECRET)

Local stdio (packages/sebora-mcp)

VariableRequiredDefaultDescription
SEBORA_API_KEYYesPartner API key
SEBORA_API_URLNohttp://localhost:5000Sebora API base URL

Never commit API keys to git.


Tools reference

ToolDescription
sebora_get_usageCredits and audit counts
sebora_create_auditStart audit (domain, audit_tier, locale)
sebora_get_audit_statusStatus and progress_log
sebora_list_auditsList with filters
sebora_wait_for_auditPoll until done/failed
sebora_get_audit_reportMarkdown (default) or JSON
  1. sebora_get_usage
  2. sebora_create_audit{ "domain": "example.com" }
  3. sebora_wait_for_audit{ "audit_id": "..." }
  4. sebora_get_audit_report{ "format": "markdown" }

Or sebora_get_audit_report with "wait_if_running": true.

Audit tiers

TierUse
quick_scanFast, lowest credits
technicalTechnical SEO
full_seoDefault balanced audit
deepDeeper analysis
expertHighest tier

Development

bash
# Build MCP package
npm run mcp:sebora:build

# Run Sebora with remote MCP
MCP_REMOTE_ENABLED=true APP_URL=http://localhost:5000 npm run dev

Package source: packages/sebora-mcp/README.md

  • Partner API: /api/v1 (same backend as MCP tools)
  • Partner Portal: /partner

Built with VitePress