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.

Site t7txivpr climbed from 81 to 94 in 2 hours4 reads its agent asked for, each checked by mttr, Oct 17
Real site
Score
94+13 vs 81
Place
#336up 7,658 of 23,659
Rules passing
38 of 40+8 vs 30
Score, read by readIts agent askedBefore
7085100 +11, 3 fixes proved 4:27 pm8:56 pm
Fixes mttr provedPages each was failing on
  • Add a way to get in touch
    94
  • Put figures in tables
    38
  • Answer the first question right under it
    37
  • Phrase headings as questions
    37
  • Fix title lengths
    31
A real site, shown by its code: who owns it is theirs to tell. A score says pages are well formed, not that an assistant cites the site.

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

  1. 1
    Get 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 with mttr_signup.
  2. 2
    Connect 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_key

    Run 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_key

    Add 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_key

    Add 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_key

    Add 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_key

    Every request carries the key as a bearer token.

    Header
    Authorization: Bearer mk_your_key
  3. 3
    Ask 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

Three calls, until the list is empty

  1. 1
    mttr_brief

    What to fix, in order, how, and on which pages. Your agent edits the code.

  2. 2
    mttr_rescan

    Once you ship it, mttr reads the live site again.

  3. 3
    mttr_changes

    Which rules now pass, which newly fail, and how the score moved. What is left needs a person.

~/code/your-siteA sample session
$ 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.

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.

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.

What to ask your agentFull API reference

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.

Free, no sign-upScore, place and fixesAbout a minute

Free, no sign-up. About a minute.