Scan a website for SEO, accessibility, performance and security issues, and read the report.
Runs on your machine from its package; the steps are below.
At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y @ascentws/sytecheck-mcp
MCP client config
{
"mcpServers": {
"sytecheck": {
"command": "npx",
"args": [
"-y",
"@ascentws/sytecheck-mcp"
]
}
}
}Run website audits from Claude, Cursor, or any other MCP client, and get the findings back as text you can act on.
SyteCheck scans a page across ten dimensions — HTML validity, SEO, broken links, accessibility (WCAG 2.2 AA via axe-core), performance (a real Lighthouse run), security headers, responsive layout, AI visibility, content freshness, and an AI critique of the visual design — and returns a scored, plain-language report.
A free account works. No card, no trial clock: the free tier includes three scans a month across three categories, which is enough to wire this up and see a real report before deciding whether to pay for more.
scans:read only if you want
the model to read existing scans but never spend quota. The secret is shown
once.claude mcp add sytecheck --env SYTECHECK_API_KEY=sck_your_key_here \
-- npx -y @ascentws/sytecheck-mcp
Edit claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"sytecheck": {
"command": "npx",
"args": ["-y", "@ascentws/sytecheck-mcp"],
"env": { "SYTECHECK_API_KEY": "sck_your_key_here" }
}
}
}
Add to .cursor/mcp.json in your project, or the global equivalent:
{
"mcpServers": {
"sytecheck": {
"command": "npx",
"args": ["-y", "@ascentws/sytecheck-mcp"],
"env": { "SYTECHECK_API_KEY": "sck_your_key_here" }
}
}
}
Add to ~/.gemini/settings.json (or the Antigravity equivalent):
{
"mcpServers": {
"sytecheck": {
"command": "npx",
"args": ["-y", "@ascentws/sytecheck-mcp"],
"env": { "SYTECHECK_API_KEY": "sck_your_key_here" }
}
}
}
from agents import Agent
from agents.mcp import MCPServerStdio
sytecheck = MCPServerStdio(
params={
"command": "npx",
"args": ["-y", "@ascentws/sytecheck-mcp"],
"env": {"SYTECHECK_API_KEY": "sck_your_key_here"},
}
)
agent = Agent(
name="Site auditor",
instructions="Audit sites with SyteCheck and explain what to fix.",
mcp_servers=[sytecheck],
)
Then ask: "Scan https://example.com and tell me what to fix first."
| Tool | What it does |
|---|---|
run_scan | Submit a URL and wait for the report. Spends quota. |
get_scan_report | Full findings for a scan id — the way to collect a scan run_scan left running |
list_scans | Scan history, newest first, with filters |
get_scan_trends | Score history per URL across repeat scans |
list_categories | What SyteCheck can check, and what your plan includes |
get_account_usage | Scans remaining this month, and when the quota resets |
There is also a scan-and-remediate prompt that scans a URL and turns the
findings into a prioritized fix plan.
run_scan is the only tool that spends anything, and it spends real money: a scan
opens a browser, runs Lighthouse, and calls a vision model. It is marked
non-read-only so your client asks before running it, and its description tells the
model to check remaining quota first and not to re-scan an unchanged page. On a
free account you have three scans a month — an agent looping over run_scan
would exhaust that in one turn.
If you are handing a key to something unattended, mint a scans:read key. It
cannot create scans at all.
| Variable | Default | Purpose |
|---|---|---|
SYTECHECK_API_KEY | (required) | Your sck_ API key |
SYTECHECK_API_URL | https://api.sytecheck.app | API base URL |
SYTECHECK_WAIT_TIMEOUT_MS | 60000 | How long run_scan waits before returning a scan id |
SYTECHECK_POLL_INTERVAL_MS | 3000 | Gap between status checks while waiting |
Note the API host is api.sytecheck.app, not sytecheck.app — the latter
serves the web app and answers API paths with its "page not found" screen.
The MCP server is a thin client over a plain HTTP API you can call yourself.
npm install
npm run build
npm test
npm run lint
To run against a local SyteCheck instance:
SYTECHECK_API_KEY=sck_… SYTECHECK_API_URL=http://localhost:8000 node dist/index.js
The server speaks JSON-RPC over stdin and stdout, so nothing may be written to
stdout except protocol messages — a stray console.log corrupts the stream and
the client disconnects with an unhelpful parse error. Diagnostics go to stderr.
See SECURITY.md for how the key is handled, what a leaked key can and cannot do, and how to report a vulnerability.
MIT — see LICENSE. The licence covers this code; the SyteCheck name and mark are trademarks of Ascent Web Solutions, and use of the service is governed by its Terms of Service. See TRADEMARK.md for the full terms.