The SEO MCP server for your agentIt fixes your site. clickd checks every change.

clickd reads a site the way search engines and AI assistants do and hands your agent the fixes worth the most. Your agent changes your code, and clickd reads the live site again to say what each change fixed. Fully automated, or with your approval by email before each change ships.

https://clickd.com/mcp62 toolsStreamable HTTPFree key with an email

~/code/your-siteSample
  1. YouFind and fix the biggest SEO problems on yoursite.com with clickd
  2. mttr_brief72 of 100. First: put the text in the HTML, 9 pages
  3. Your agentEdited 3 files and deployed
  4. mttr_rescanRead again, 100 pages
  5. mttr_changes72 to 84. 3 rules now pass, none newly fail

Set it up in a minute

Pick where your agent runs. One key, one setting, then ask it something.

API reference
Key

Free with an email. It reads any site’s public report; claim your own site to add its private parts.

Or connect without one, and your agent signs you up itself with mttr_signup.
Setting

First put the key in your shell, where no file you commit can hold it.

Terminal
export CLICKD_KEY=mk_your_key

Run this once, from any folder. Claude Code keeps it for every project.

Terminal
claude mcp add --transport http clickd https://clickd.com/mcp \
  --header "Authorization: Bearer $CLICKD_KEY"

First put the key in your shell, where no file you commit can hold it.

Terminal
export CLICKD_KEY=mk_your_key

Add this to Codex’s settings. It reads the key from your shell when it starts.

~/.codex/config.toml
[mcp_servers.clickd]
url = "https://clickd.com/mcp"
bearer_token_env_var = "CLICKD_KEY"

Add this to Gemini CLI’s settings, then start it again and run /mcp to see clickd’s tools.

~/.gemini/settings.json
{
  "mcpServers": {
    "clickd": {
      "httpUrl": "https://clickd.com/mcp",
      "headers": { "Authorization": "Bearer mk_your_key" }
    }
  }
}

The key sits in the settings file above. Keep that file to yourself.

settings.json
"Authorization": "Bearer mk_your_key"

Cursor reads the key from the shell it was opened from.

Terminal
export CLICKD_KEY=mk_your_key

Add this in the site’s repository, then turn clickd on under MCP in Cursor’s settings.

.cursor/mcp.json
{
  "mcpServers": {
    "clickd": {
      "url": "https://clickd.com/mcp",
      "headers": { "Authorization": "Bearer ${env:CLICKD_KEY}" }
    }
  }
}

Add this under Settings, Customizations, MCP servers, or in this file; then refresh the list of servers. In one project only, use .agents/mcp_config.json instead.

~/.gemini/config/mcp_config.json
{
  "mcpServers": {
    "clickd": {
      "serverUrl": "https://clickd.com/mcp",
      "headers": { "Authorization": "Bearer mk_your_key" }
    }
  }
}

The key sits in the settings file above. Keep that file to yourself, and out of any repository.

mcp_config.json
"Authorization": "Bearer mk_your_key"

Add this in the site’s repository. VS Code asks for the key the first time and keeps it safe.

.vscode/mcp.json
{
  "servers": {
    "clickd": {
      "type": "http",
      "url": "https://clickd.com/mcp",
      "headers": { "Authorization": "Bearer ${input:clickd-key}" }
    }
  },
  "inputs": [
    { "id": "clickd-key", "type": "promptString", "description": "Your clickd key", "password": true }
  ]
}

Nothing to set by hand: paste the key when VS Code asks for it.

VS Code
Your clickd key: mk_your_key

Add this to Windsurf’s MCP settings, then refresh its list of servers.

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "clickd": {
      "serverUrl": "https://clickd.com/mcp",
      "headers": { "Authorization": "Bearer mk_your_key" }
    }
  }
}

The key sits in the settings file above. Keep that file to yourself.

mcp_config.json
"Authorization": "Bearer mk_your_key"

Any client that speaks MCP over HTTP connects with these three things.

Settings
Address    https://clickd.com/mcp
Transport  Streamable HTTP
Header     Authorization: Bearer mk_your_key

Every request carries the key as a bearer token.

Header
Authorization: Bearer mk_your_key
Ask

In words. Your agent picks the call.

What should I fix first on example.com?mttr_brief
Fix the top issue, then have clickd read the site again.mttr_rescan
Or skills

No key needed. Run this once from your site’s repository, then ask the same way.

Terminal
npx skills add subinternal/clickd

The loop your agent runs

Five steps a fix, each checked on the live site.

All 62 tools
  1. Briefmttr_brief

    clickd says what to fix, in order, how, and on which pages.

  2. ChangeIn your repository

    Your agent edits the site’s source, the way it does any task.

  3. DeployYour usual way

    Your agent ships it, or proposes it first on a site set to approve.

  4. Rescanmttr_rescan

    clickd reads the live site again; mttr_job says when it is done.

  5. Changesmttr_changes

    clickd says which rules now pass, any that newly fail, and the score.

Then the next fix, until the list is empty.A site is read at most once every ten minutes.

Your agent’s changeSample
app/services/[slug]/page.tsx- 'use client';- const body = useServiceText(slug);+ const body = await serviceText(slug);  return <main>    <h1>{body.title}</h1>+   <p>{body.lead}</p>

The services pages now send their words in the HTML. Two more files changed for the next two fixes.

What mttr_changes answersSample
Score
84from 72
Now passing
3rules
Newly failing
0
  • Put the text in the HTML9 of 9 pages
  • Use one main heading4 of 4 pages
  • Add a way to get in touch6 of 6 pages

Checked on the live site, page by page. What is left needs a person.

Approve each change first

Set a site to approve, and your agent asks you by email before it deploys.

mttr_approvals_set
Sets a claimed site to approve, or back to automatic. Turning approve off is emailed to you.
mttr_propose
Before each deploy: what the change is, the rule, the pages and the diff.
mttr_proposal
Your agent checks every few minutes and deploys only once it says approved. Declined or expired means it does not.
mttr_log_work
Names the proposal when the change ships, so clickd records who approved what.

clickd can’t stop an agent that ignores you: approval is a promise the agent keeps. Approval by text message is not built yet.

The email you getSample
From clickd to [email protected]Approve a change to example.com?
Change
Answer each guide’s first question right under it
Rule
answer-first
Pages
/blog/furnace-tips, /blog/ac-motor and 12 more
Your agent’s wordsEach guide opens on a story before it answers. I moved a 40 to 60 word answer under each first question and kept the rest as it was. The diff is attached.
ApproveDeclineEach link works once and lapses after 72 hours.

Every agent has its own page

Its setup alone, what to ask it and the loop, to link from a post.

Ground rules

The same for an agent as for a person.

Methodology
Your agent stays yours
Anything a site’s pages say comes back as quoted text, so instructions hidden on a page can’t steer your agent.
Unsure is never a pass
A verdict that is unsure, malformed or cut off comes back as needing a person.
It says where it stopped
A read that hit its limit says so in every answer, and reports no orphans or gaps.
Public pages, robots.txt obeyed
clickd reads public addresses only, under its own name, and needs no access to your site.
A score is not a citation
A score says pages are well formed, not that an assistant cites the site.