MCP endpoint
Guardr answers the Model Context Protocol at https://api.guardr.io/mcp. An agent such
as Claude Code or Cursor connects once with your API key, then calls Guardr as tools rather than as
raw HTTP requests. Every tool runs as the holder of that key, so an agent reads exactly what the
REST API returns for the same account.
1 - What the endpoint is
One address answers the protocol. It takes POST requests carrying the same X-API-Key
header the REST API takes. Nothing else is needed: the endpoint mints no session identifier, keeps
no state of its own and reads nothing the REST API does not already read.
- Address -
https://api.guardr.io/mcp - Transport - streamable HTTP. A GET or a DELETE answers 405.
- Key - the
X-API-Keyheader, the same key the REST API takes - Tools -
check_site,list_sitesandget_site
2 - Connect your agent
Claude Code
One command registers the endpoint. Run it in any project:
claude mcp add --transport http guardr https://api.guardr.io/mcp --header "X-API-Key: your-key-here"
Cursor
Cursor reads %USERPROFILE%/.cursor/mcp.json on Windows or ~/.cursor/mcp.json on macOS and Linux. Add the block below, then open
the MCP settings panel and refresh the server list.
{"mcpServers":{"guardr":{"url":"https://api.guardr.io/mcp","headers":{"X-API-Key":"your-key-here"}}}}
Replace your-key-here with a key from Dashboard → API Access. Treat
that key the way you treat a password: anything holding it can read your account.
3 - The three tools
Each tool returns the body an existing Guardr surface already returns, field for field. The endpoint adds no field of its own and takes none away.
| Tool | What it returns | Matching route |
|---|---|---|
check_site | A fresh check of one domain | POST /v1/scan |
list_sites | The sites your account watches | GET /v1/sites |
get_site | One watched site in detail | None. See below |
check_site
Takes one domain and runs a fresh check of it.
check_site returns the same fields as POST /v1/scan: the grade, the
score, the five category scores, the findings with their severity and any API keys or tokens the
check read out of JavaScript bundles. The values match that route field for field. The whitespace
does not, because the REST API prints its JSON indented while a tool result is compact, so compare
the parsed values rather than the bytes.
Any public domain may be checked, which is the rule POST /v1/scan already follows. The
result for a domain another account watches is the result anybody checking that domain would get.
list_sites
Returns the sites your account watches, the same fields as GET /v1/sites, one row
per site. The values match that route field for field. The whitespace does not, because the REST
API prints its JSON indented while a tool result is compact, so compare the parsed values rather
than the bytes. A key reads its own account only, so a row belonging to another account never
appears. A key bound to a single site returns that one site.
get_site
Takes one domain your account watches. No REST route answers this one, so its body is assembled
from three things Guardr already emits elsewhere: the list_sites row for that domain,
the monitoring summary of its latest check and its uptime summary.
A domain your account does not watch answers exactly the way an unknown domain answers, so the tool cannot be used to learn which domains other accounts watch.
4 - Keys and limits
Every POST to the endpoint counts once against the same burst allowance a REST call counts against,
whether it lists the tools or calls one. Every tool result carries the allowance it was served
under in its _meta.rate_limit field: limit, remaining,
reset and retry_after. Listing the tools is the exception: that call
spends the allowance without reporting it, so its result carries no
_meta.rate_limit. The REST API reports the allowance only on its scan responses, so
GET /v1/sites tells you nothing about it either.
When that allowance is spent the endpoint answers 429 with a JSON-RPC error whose
message is rate_limited, carrying those same four values. A missing key or an unknown
key answers exactly as the REST API answers it.
The allowance itself, the key format and the error codes are documented once, on the API reference page. The endpoint reads them from the same place.
The story behind the endpoint, written for the developer rather than for the reference, is on the Guardr for agents page.
Try it on your site - free
Free scan, no signup required. Upgrade when you need alerts, history or PDF reports.
Scan your site →