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
- 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.
- Download the client
One file, no package to trust. It imports only
httpxand 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
- 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
| Tool | Cost | What it does |
|---|---|---|
| list_audits | free | Recent audits on the account. Check here before paying to re-read a page. |
| get_audit | free | Every finding with the measurement behind it, plus the refusals. |
| audit_page | 2 credits | Fetch a page once and run every published check over it. |
| get_fixes | 3 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:
- What we refuse to score, and why. Authority needs a backlink index we do not operate, so we do not put a number on it.
- Which inputs were missing, and whose limit that was — ours or the site’s.
- How the score was worked out, including that it stops at 0.
- The standing rule: a check whose input was missing did not run — it did not pass.
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