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- YouFind and fix the biggest SEO problems on yoursite.com with clickd
mttr_brief72 of 100. First: put the text in the HTML, 9 pages- Your agentEdited 3 files and deployed
mttr_rescanRead again, 100 pagesmttr_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.
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 withmttr_signup.
First put the key in your shell, where no file you commit can hold it.
export CLICKD_KEY=mk_your_keyRun this once, from any folder. Claude Code keeps it for every project.
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.
export CLICKD_KEY=mk_your_keyAdd this to Codex’s settings. It reads the key from your shell when it starts.
[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.
{
"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.
"Authorization": "Bearer mk_your_key"Cursor reads the key from the shell it was opened from.
export CLICKD_KEY=mk_your_keyAdd this in the site’s repository, then turn clickd on under MCP in Cursor’s settings.
{
"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.
{
"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.
"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.
{
"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.
Your clickd key: mk_your_keyAdd this to Windsurf’s MCP settings, then refresh its list of servers.
{
"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.
"Authorization": "Bearer mk_your_key"Any client that speaks MCP over HTTP connects with these three things.
Address https://clickd.com/mcp
Transport Streamable HTTP
Header Authorization: Bearer mk_your_keyEvery request carries the key as a bearer token.
Authorization: Bearer mk_your_keyIn words. Your agent picks the call.
What should I fix first on example.com?
mttr_briefFix the top issue, then have clickd read the site again.
mttr_rescanNo key needed. Run this once from your site’s repository, then ask the same way.
npx skills add subinternal/clickdThe loop your agent runs
Five steps a fix, each checked on the live site.
- Brief
mttr_briefclickd says what to fix, in order, how, and on which pages.
- ChangeIn your repository
Your agent edits the site’s source, the way it does any task.
- DeployYour usual way
Your agent ships it, or proposes it first on a site set to approve.
- Rescan
mttr_rescanclickd reads the live site again;
mttr_jobsays when it is done. - Changes
mttr_changesclickd 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.
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.
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.
Every agent has its own page
Its setup alone, what to ask it and the loop, to link from a post.
- Claude CodeIn the terminal
Terminal - CodexIn the terminal
~/.codex/config.toml - CursorIn the editor
.cursor/mcp.json - Gemini CLIIn the terminal
~/.gemini/settings.json - VS CodeWith Copilot
.vscode/mcp.json - WindsurfIn the editor
~/.codeium/windsurf/mcp_config.json - AntigravityGoogle’s agent IDE
~/.gemini/config/mcp_config.json - Any agentOver MCP
Settings
Ground rules
The same for an agent as for a person.
- 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.