Read, fix, and check your own work
mttr tells an agent what to fix on a site, the agent makes the change, and mttr reads the site again and says what it did. Fully automated, or with your approval by email before each change ships.
- Score
- 94+13 vs 81
- Place
- #336up 7,658 of 23,659
- Rules passing
- 38 of 40+8 vs 30
- Add a way to get in touch94
- Put figures in tables38
- Answer the first question right under it37
- Phrase headings as questions37
- Fix title lengths31
Pick your agent
Each has a page of its own: its setup, what to ask it, and what it does with mttr.
Connect once, keep it fixed
One key and one setting. After that your agent asks mttr what to fix, and mttr checks every change it makes.
Answeringhttps://mttr.si/mcp62 toolsStreamable HTTPJSON API at /api/v1
- 1Get a key
Free, with an email. It reads any site's public report; claim your own site to add its private parts.
Or connect with no key, and your agent signs you up itself withmttr_signup. - 2Connect where your agent runs
First put the key in your shell, where no file you commit can hold it.
Terminal export MTTR_KEY=mk_your_keyRun this once, from any folder. Claude Code keeps it for every project.
Terminal claude mcp add --transport http mttr https://mttr.si/mcp \ --header "Authorization: Bearer $MTTR_KEY"First put the key in your shell, where no file you commit can hold it.
Terminal export MTTR_KEY=mk_your_keyAdd this to Codex’s settings. It reads the key from your shell when it starts.
~/.codex/config.toml [mcp_servers.mttr] url = "https://mttr.si/mcp" bearer_token_env_var = "MTTR_KEY"Add this to Gemini CLI’s settings, then start it again and run /mcp to see mttr’s tools.
~/.gemini/settings.json { "mcpServers": { "mttr": { "httpUrl": "https://mttr.si/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 MTTR_KEY=mk_your_keyAdd this in the site’s repository, then turn mttr on under MCP in Cursor’s settings.
.cursor/mcp.json { "mcpServers": { "mttr": { "url": "https://mttr.si/mcp", "headers": { "Authorization": "Bearer ${env:MTTR_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": { "mttr": { "serverUrl": "https://mttr.si/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": { "mttr": { "type": "http", "url": "https://mttr.si/mcp", "headers": { "Authorization": "Bearer ${input:mttr-key}" } } }, "inputs": [ { "id": "mttr-key", "type": "promptString", "description": "Your mttr key", "password": true } ] }Nothing to set by hand: paste the key when VS Code asks for it.
VS Code Your mttr key: mk_your_keyAdd this to Windsurf’s MCP settings, then refresh its list of servers.
~/.codeium/windsurf/mcp_config.json { "mcpServers": { "mttr": { "serverUrl": "https://mttr.si/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://mttr.si/mcp Transport Streamable HTTP Header Authorization: Bearer mk_your_keyEvery request carries the key as a bearer token.
Header Authorization: Bearer mk_your_key - 3Ask it something
In words. Your agent picks the call, and the answer is the one a person sees on the report.
- What should I fix first on example.com?
mttr_brief({ site: "example.com" }) - Fix the top issue, then have mttr read the site again.
mttr_rescan({ site: "example.com" }) - Who am I up against, and what do they cover that I don’t?
mttr_competitors({ site: "example.com" })
What comes backThe start of a brief, a sample
What mttr_brief answersThe start of one, a sample # Fix list for example.com mttr read 64 pages of https://example.com on 2026-10-15 and scored them 72 of 100. A score says pages are well formed. It does not say an assistant cites the site. ## 1. Put the text in the HTML - **Failing:** 9 pages - **What to do:** Put the page text in the HTML the server sends. Most AI crawlers do not run scripts. - **Pages:** - `/services/drainage` - `/pricing` - and 7 more
- What should I fix first on example.com?
Three calls, until the list is empty
- 1
mttr_briefWhat to fix, in order, how, and on which pages. Your agent edits the code.
- 2
mttr_rescanOnce you ship it, mttr reads the live site again.
- 3
mttr_changesWhich rules now pass, which newly fail, and how the score moved. What is left needs a person.
$ cd ~/code/your-site && claude> Use mttr to read yoursite.com, then fix the three things worth the most. 1mttr_brief({ site: "yoursite.com" }) 72 of 100. First: put the text in the HTML, on 9 pagesEdited app/services/[slug]/page.tsx: the text renders on the serverEdited app/about/page.tsx: one main headingEdited app/layout.tsx: a contact link in every footer > Deployed. Have mttr read it again and tell me what changed. 2mttr_rescan({ site: "yoursite.com" })mttr_job({ id: 4242 }) done, 100 pages read3mttr_changes({ site: "yoursite.com" }) 72 to 84. 3 rules now pass, none newly fail
Run your agent in the site's own project, so it can change what mttr finds. mttr reads public addresses only: a site not live yet is read at its preview address.
Want to sign off on each change first? Set the site to approve on your account page, or with mttr_approvals_set. Your agent proposes each change, you get an email with Approve and Decline, and it ships only once you approve. mttr can’t stop an agent that ignores you: approval is a promise the agent keeps, and mttr records who approved what. Approval by text message is not built yet.
62 tools, by what they are for
Ask in plain words and your agent picks the tool. Open a group to see what each one does.
Read and fix8
Find what to fix first, read the site again once it’s fixed, and see what changed.
Check any page6
Check one page on the spot, no full read needed: how an agent sees it, its share card, product data and certificate, a brand’s locations together, and the structured data it should have.
Inside a site8
Every page from a read: its links, how the site fits together, what it covers, pages that overlap, and signs of generated text.
Rivals and markets11
How a site stacks up against others: rule by rule, by topic, by location, and what they cover that it doesn’t.
Search and assistants5
What people searched, what they clicked, who visited, and which sites assistants cite.
Work and approvals14
Your agent’s to-do list, each change sent to you for approval by email, and a progress page to follow along.
- Your work board
mttr_todo - Your site’s content brain
mttr_content_brain - The next page to write
mttr_content_next - Say where a page went
mttr_content_done - Drop a brief
mttr_content_drop - Posts about a new page
mttr_content_posts - Tasks queued for you
mttr_queue - Mark a task done
mttr_queue_done - Log what you did
mttr_log_work - Approvals on or off
mttr_approvals_set - Propose a change
mttr_propose - Where a proposal stands
mttr_proposal - Every proposal
mttr_proposals - A link to your progress page
mttr_progress_link
Rulebook and crawl3
The rules every page is checked against, findings waiting on a person, and how the crawl is going.
Account and sites7
Sign up, prove a site is yours, list your sites, and group them into a portfolio.
Ground rules
- 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
- mttr reads public addresses only, under its own name.
- A score is not a citation
- A score says pages are well formed, not that an assistant cites the site.
Read your site now
A list of what to fix first, for you or your agent.