Your agent applies the fix.
We never touch your site.

For Claude Code and any other MCP client

Quinndatum speaks MCP, so an audit stops being a document somebody has to read and retype. Your coding agent calls Quinndatum directly, reads the findings with the measurements behind them, and writes the patches into your repository as a diff you review like any other.

We still hold nothing. No account access, no write access, no script on your site. Your agent runs on your machine, with your key, in your codebase. The fix lands in your git history and stays there — including after you stop paying us.

That is the opposite of a tool that injects a script into your pages and takes the improvements back with it when the subscription lapses.

Set it up

  1. Create a key

    Sign in, open Account, and find Keys for your coding agent. The key is shown once — we store only a SHA-256 of it, so we cannot show it again and cannot recover it. Lost one? Revoke it and make another.

  2. Download the client

    One file, no package to trust. It imports only httpx and the MCP SDK, so you can read every line that will hold your key before you run it.

    curl -O https://quinndatum.com/quinndatum_mcp.py
    pip install "mcp[cli]" httpx
  3. Point your agent at it

    In Claude Code, add this to .mcp.json. The key comes from the environment on purpose: an argument lands in your shell history.

    {
      "mcpServers": {
        "quinndatum": {
          "command": "python",
          "args": ["/path/to/quinndatum_mcp.py"],
          "env": {
            "QUINNDATUM_API_KEY": "qd_your_key_here",
            "QUINNDATUM_MAX_CREDITS": "20"
          }
        }
      }
    }

The four tools

ToolCostWhat it does
list_auditsfree Recent audits on the account. Check here before paying to re-read a page.
get_auditfree Every finding with the measurement behind it, plus the refusals.
audit_page2 credits Fetch a page once and run every published check over it.
get_fixes3 credits The patches, and what we refuse to write. Charged once per audit, free every time after.

There is no separate price for this. It spends the credits your plan already includes, at the same rates the app charges. A complete cycle — read a page, then take its patches — is 5 credits, and your plan’s monthly audit allowance applies too. On Free that is 5 complete cycles a month: the plan includes 200 credits and 5 audits a month, and the audits run out first. When the allowance is used, the next audit is refused until the 1st of the month, with the date in the message.

What a key can reach

Four routes, and nothing else:

GET  /api/v1/app/audits
GET  /api/v1/app/audits/{id}
GET  /api/v1/app/audits/{id}/fixes
POST /api/v1/app/audits

Your account, your credits, your plan, your watched pages, sending anything, running an outbound agent, making another key — all answer 401 to a key. Not forbidden by a check somebody could forget to write: unreachable, because those routes never offer the dependency that accepts a key. A guard prints that list of four on every deploy, so a fifth appearing is something a person has to notice.

Revoke a key in Account and it stops working on the next request.

The part that matters: it is told what not to invent

Everything honest this product does normally lives on a screen a person reads — the denominators, what we refuse to score, which inputs were missing and whose limit that was. Through MCP the agent is the reader, and it will act on whatever it is handed.

So every result carries those refusals with it, assembled from the reading itself rather than written out once and left to drift:

get_fixes also returns needs_a_person: the changes we will not write because they need a judgement about your business rather than a fact about your markup — a title, a meta description, an H1. An agent handed only findings will confidently write all three. This one is handed the refusals too, so it brings them to you instead.

A page we could not read has no score

If a page could not be read, the tools return no score for it — not a zero. A zero is a measurement, and we did not take one.

Spend control

An agent loops; a person does not. QUINNDATUM_MAX_CREDITS caps what one process may spend, and the check runs before the call rather than after the credits are gone.

Create an account — free, 5 audits a month Read the client source