squirrelscan

com.squirrelscan由 squirrelscan.com 发布官方发布者v1.0.2更新于 Nov 2, 2026

Website QA for your coding agent: audit SEO, performance, security, accessibility over MCP.

已验证Streamable HTTP可网页运行开发者工具安全与监控数据与分析

概览

AI 生成的概览

云端网站质检服务,让助手审计网站的 SEO、性能、安全、无障碍与 AI 代理体验,并跟踪和比较审计结果。

可以做什么
  • 运行与监控审计:用 300 多条规则启动云端抓取、轮询状态、列出审计记录与网站、删除网站。
  • 读取与比较结果:获取报告、对比两次审计、浏览未解决问题、查看问题详情并发表评论。
  • 检查结构化数据:列出 JSON-LD 实体、查看单个实体或整张实体图(多种格式),并比较两次审计间的实体变化。
  • 查询规则与发现:浏览规则目录、查看单条规则、获取某次审计的 schema/实体问题。
  • 管理账户:查看身份与套餐、读取积分余额与流水、创建 API 密钥、读取通知并提交反馈。
适用场景
适合编码助手在开发网站时按 SEO、性能、安全、无障碍和 AI 可读性规则检查站点,再修复并重新审计。也适合需要定期审计、问题跟踪和可分享报告的团队。
运行要求
远程 MCP 端点 mcp.squirrelscan.com,使用 streamable HTTP,无需本地安装。认证方式为按用户 OAuth,或以 Bearer token 传入 squirrelscan API 密钥。云端审计需要 squirrelscan 组织和套餐,且审计会消耗积分。
安装前请注意
审计按用量扣积分(基础费用加每页、每条外链检查费用),会产生费用;开始前应查看预估和自动运行阈值。工具可创建和删除网站、修改审计设置与计划、发表评论,并可生成只显示一次的 API 密钥。CLI 默认开启遥测,可关闭。

安装

在 SourceWeft 中

  1. 打开 控制台中的 squirrelscan,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/com.squirrelscan%2Fsquirrelscan/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "squirrelscan": {
      "type": "http",
      "url": "https://mcp.squirrelscan.com/mcp"
    }
  }
}

README

[squirrelscan]

squirrelscan

The website QA tool for your coding agent

squirrelscan is an Open Source cli tool that audits websites for SEO, performance, security, accessibility, agent experience and other issues, and gives your coding agent exact fixes. Run it from the CLI, inside your coding agent, in the cloud, or over MCP.

Combine your coding agent with a deterministic and extensible audit tool.

[Add to Cursor] [Add to Claude Code] [Add to Codex] [Add to opencode] [MCP Registry]

[CI] [CodeQL] [npm] [License: MIT]

[Terminal demo: squirrel audit on a small test site reports 13 failed checks, the report is piped to Claude Code, which fixes the pages and re-audits from 32/100 (F) to 92/100 (A), then git status lists the files it changed]

A real run on a tiny test site, with the released CLI (signed out, so free) and Claude Code. We cut the two minutes the agent spent working, because nobody wants to watch an agent think.

Features

  • Built for coding agents - Skills for Claude Code, Cursor, Codex and any coding agent run the audit, fix and re-audit loop. Connect over the CLI, the hosted or local MCP server, or the API.
  • Enriched fixes for you and your coding agent - Every finding says how to fix it, in LLM-optimized output your agent can apply, and every rule has its own docs page. Signed in, the report adds an editor's summary of what to fix first and the technology stack the site runs on.
  • 300+ rules, 22 categories - Audit coverage across SEO, accessibility, performance, security, content and more.
  • Agent experience - Audit how well AI agents can read, discover and act on your site: llms.txt, AGENTS.md, Markdown responses, and what AI crawlers are served.
  • Link checking and monitoring - Perch, the cloud link checker, tells a broken link from a blocked one and confirms a failure before reporting it. On Pro and Team, scheduled audits email you when a link breaks.
  • Security and site integrity - Detect phishing kits, injected pages, leaked credentials and missing security headers.
  • Entity map - Your site's JSON-LD collapsed into one graph: one identity, or a new one on every page.
  • Browser rendering in the cloud - Signed in, pages are rendered in a real browser in the cloud, so single-page apps and JavaScript-heavy sites are audited as visitors see them, at no extra cost per page.
  • Cloud audits - AI page analysis, scheduled audits, a per-website issue tracker and shareable reports.
  • Smart crawling - Fast and memory efficient, incremental with ETag, Last-Modified and content hashing, and resumable from checkpoints.
  • Crawl history and changes - Track site evolution, compare crawls, spot regressions.
  • Developer-first CLI - Single binary, zero dependencies, shell completions, self-update.
  • Multiple output formats - Console, JSON, HTML, Markdown, Text, LLM, XML.

Rule categories

Ordered by how much a failure usually costs you, not by how many rules each one has.

CategoryRulesWhat it covers
Crawlability21Whether search engines and agents can reach and index you at all: robots.txt, sitemap validity and coverage, indexability conflicts, redirect and canonical chains, soft 404s
Core SEO14The per-page fundamentals: title, meta description, H1, canonical, charset, doctype, robots meta, Open Graph and Twitter cards, plus canonical form drift across the site
Agent Experience17How ready you are for AI agents to read, discover and act on the site: whether GPTBot and Claude-User get the same content a browser does, AGENTS.md, llms.txt, Markdown responses, API and MCP discovery, licensing and noai signals, pay-per-crawl, response token weight
Site Integrity9Signs the site has been compromised: injected doorway pages, phishing kit signatures, obfuscated scripts, brand impersonation, cloaking, known-malicious URLs
Security23Transport and header hygiene: HTTPS and HSTS, CSP, cookie flags, mixed content, subresource integrity, leaked secrets, tokens in web storage, unprotected and downgraded forms, open GraphQL introspection and mutations over GET
Links13Internal and external link health: broken and dead links, in-page anchors whose target is gone, redirect chains, anchor-text quality, orphan and dead-end pages, pages linked only from sitewide chrome, HTTPS downgrades
Content25Text quality and honesty: common misspellings, duplicate titles and descriptions, title-template consistency, readability, word count, freshness, heading hierarchy, keyword stuffing, hidden text, placeholder media and contact details, encoding damage
Performance32Core Web Vitals and delivery: LCP, CLS and INP hints, TTFB, compression, caching, render-blocking resources, DOM size, font delivery, legacy and unminified JS/CSS
Reliability5Scripts, stylesheets and fonts that fail to load (a first-party bundle that answers 404 or 500 after a deploy, third-party and font failures), and forms that lose submissions
Images16Alt text, modern formats, responsive srcset, intrinsic dimensions and aspect-ratio mismatches, lazy loading above versus below the fold, file weight
Structured Data26JSON-LD validity and rich-result eligibility for Article, Product, FAQ, Review, Breadcrumb, Organization, LocalBusiness, Video and site search, the markup a page's classified type should carry, plus thirteen site-wide checks on the entity map: whether the site declares one identity for itself or a new one on every page, and rating markup that is not about the page it sits on
Accessibility61WCAG coverage: ARIA roles and names, form labels and autocomplete tokens, colour contrast, heading order, landmarks, tables and lists, focus visibility, touch targets, captions
Mobile8Viewport configuration, tap-target size, legible font sizes, horizontal scroll, blocked zoom, form fields small enough to zoom the page on focus, intrusive interstitials, the web app manifest and its icons
Social Media5Open Graph and Twitter Card completeness, image dimensions, canonical URL match, social profile links, site-chrome assets that disagree across pages
URL Structure9Length, casing, hyphenation, stop words, query parameters, special characters, trailing-slash consistency, site-wide convention consistency
E-E-A-T15Experience, expertise, authority and trust signals: author bylines and credentials, about and contact pages, citations, editorial policy, disclaimers, YMYL detection
Legal Compliance4Privacy policy, terms of service, real cookie-consent machinery, subprocessor disclosure
Internationalization2hreflang correctness and the document language declaration
Local SEO3NAP (name, address, phone) consistency across every crawled page, geo metadata, service-area businesses
Video3VideoObject markup, captions and accessibility, thumbnails
Analytics2Google Tag Manager presence and consent-mode wiring
Blocking3Content, links and trackers that ad blockers and privacy filters strip for a large share of your visitors

Total: 300+ rules across 22 categories

See the rules reference for full details.

CLI

Installation

Paste into your coding agent (Claude Code, Codex, Cursor, opencode and friends):

text
Fetch and follow the setup instructions for squirrelscan at https://docs.squirrelscan.com/agent-setup/prompt.md

Your agent installs the CLI, connects MCP and runs a first audit. You can read exactly what it will follow first.

macOS / Linux:

bash
curl -fsSL https://install.squirrelscan.com | bash

Windows:

powershell
iwr -useb https://install.squirrelscan.com/install.ps1 | iex

Homebrew (macOS):

bash
brew install --cask squirrelscan/tap/squirrel

The cask installs a launcher that runs the regular installer on first use. The CLI then updates itself with squirrel self update; brew upgrade leaves it alone.

npm (all platforms):

bash
npm install -g squirrelscan

npx (run without installing):

bash
npx squirrelscan audit example.com

Quick start

bash
# Audit a websitesquirrel audit example.com
# Generate HTML reportsquirrel audit example.com -f html -o report.html
# Pipe to Claude for AI analysissquirrel audit example.com --format llm | claude
# Quick audit for a fast first look (other levels: surface, full)squirrel audit example.com --level quick
# run only agent experience and performance rulessquirrel audit example.com --rule-include ax,performance
# login for cloud audits and cloud renderingsquirrel auth login

Reports

A health score and grade, group scores for SEO, performance, security and Agent Experience (AX) colored by score, a ranked list of issues, and a copy fix prompt for each one that you can paste into your coding agent. Publish reports to the web to share with team members or coding agents (fix instructions are embedded).

[A squirrelscan report for squirrelscan.com. The header shows the site, 220 of 220 pages scanned, the Full audit level and a health score of 79 (C). A notice says 912 of 1412 external links were not checked. Four group cards show SEO 86 (B), Performance 59 (F), Security 95 (A) and Agents 42 (F), each with its error and warning counts. Below are pass, warning and fail totals, an auto-generated summary, and the first three ranked issues, each with a Copy fix prompt button.]

See an example report, or read how to read your report.

Add to your coding agent

squirrelscan ships as an MCP server (hosted at mcp.squirrelscan.com), skills (autonomous audit + fix workflows), and a plugin for Claude Code and Cursor. Cursor installs in one click from the badge above; the rest are a single copy-paste.

Cursor

Click the Add to Cursor badge above, or add it manually to ~/.cursor/mcp.json:

json
{  "mcpServers": {    "squirrelscan": { "url": "https://mcp.squirrelscan.com/mcp" }  }}

Skills: squirrel skills install

Claude Code

Install the plugin (bundles skills + the MCP server):

/plugin marketplace add squirrelscan/skills/plugin install squirrelscan@squirrelscan

Or add just the MCP server:

bash
claude mcp add --transport http squirrelscan https://mcp.squirrelscan.com/mcp

OpenAI Codex

Add the server to ~/.codex/config.toml:

toml
[mcp_servers.squirrelscan]url = "https://mcp.squirrelscan.com/mcp"

Codex reads Agent Skills from ~/.agents/skills, so skills work too: squirrel skills install

opencode

Add the server to opencode.json:

json
{  "$schema": "https://opencode.ai/config.json",  "mcp": {    "squirrelscan": {      "type": "remote",      "url": "https://mcp.squirrelscan.com/mcp",      "enabled": true    }  }}

Any MCP client

squirrelscan is in the MCP Registry as com.squirrelscan/squirrelscan. Point any client at the remote server:

https://mcp.squirrelscan.com/mcp

Authentication is per-user OAuth (or pass a squirrelscan API key as a Bearer token). Skills follow the Agent Skills standard: squirrel skills install puts them in ~/.agents/skills/ and ~/.claude/skills/.

Skills

Two skills drive agent workflows. They live in squirrelscan/skills, along with the Claude Code, Cursor and Agent Plugins packages that bundle them with the MCP server. squirrel skills install downloads and verifies them itself, and from v0.0.99 squirrel's auto-update keeps them current. Installs made earlier with npx skills are taken over.

  • squirrelscan - operating the CLI: install, login, keys, credits, running audits, publishing reports, the entity map, MCP setup, config, troubleshooting.
  • audit-website - the full fix loop: audit, map issues to source files, fix in batches, re-audit until the site scores well.
bash
squirrel skills install

Then, in your agent:

Use the audit-website skill to audit this site and fix all issues but only crawl 10 pages

Output formats

FormatFlagUse Case
Console(default)Human-readable terminal output
JSON-f jsonCI/CD, programmatic processing
HTML-f htmlVisual reports for sharing
Markdown-f markdownDocumentation, GitHub
Text-f textClean output for piping to LLMs
LLM-f llmLLM optimized output
XML-f xmlXML output

Source and development

The complete local CLI, crawler, audit engine, rules, report generators, CLI-facing cloud clients, and documentation site are open source in this repository. The hosted API, website, dashboard, and cloud worker implementations are separate private services.

Prerequisites: Bun 1.4.4 and Git.

bash
git clone https://github.com/squirrelscan/squirrelscan.gitcd squirrelscanbun install --frozen-lockfilebun run dev -- audit https://example.com --max-pages 10

Run the same checks used in pull requests:

bash
bun run format:checkbun run lintbun run typecheckbun testbun run buildbun run docs:checkbun run docs:build

See CONTRIBUTING.md before opening a pull request. Contributions require a Developer Certificate of Origin sign-off (git commit -s).

Telemetry

Telemetry is enabled by default and is deliberately minimal: event name, CLI version, a random install ID, and bounded error categories. It does not send API keys, URLs, report contents, or raw error messages. After squirrel auth login, telemetry requests carry your login session (the 90-day sign-in token from login, never an API key) so events tie to your account; signed out, they are anonymous. Nothing is sent when telemetry is off.

Disable it permanently with:

bash
squirrel self settings set telemetry false

Or disable all telemetry and install registration for any invocation by defining NO_TELEMETRY (any defined value works, including an empty value, 0, or false) or DO_NOT_TRACK=1 (or true). A project can opt out with "telemetry": false in .squirrel/settings.json:

bash
NO_TELEMETRY=1 squirrel audit https://example.com

Links

If squirrelscan caught something your agent missed, a star on GitHub helps other developers find it.

License

The CLI and the repository contents are licensed under the MIT License. squirrelscan names and logos are covered by TRADEMARKS.md.

来源:README.md,提交 e86767f

工具

27

run_audit

Run a cloud audit

Run a cloud audit of a website (crawl + 300+ rule analysis + report). Credits are spent as the audit runs (pay-as-you-go). The dry run is optional: pass confirm: true on the first call to start straight away. Without confirm, an audit whose estimate is over the org's auto-run threshold comes back as status "confirmation_required" with the estimate to show the user; one at or under the threshold just starts. That response carries "sufficient": true means the organization can pay, so show the estimate and call again with confirm: true; false means it cannot, and the response then carries the cost, the balance, the credit reset date and an upgrade_url for that organization. Relay those, and do NOT retry with confirm: true, which is refused. Pick the audit with level: quick (25 pages from the seed and sitemaps with external link checks, without the cloud checks), surface (100 pages, one per URL pattern, with the cloud checks and external link checks) or full (500 pages, every page it can reach; Pro and Team only: on the Free plan a full request crawls one page per URL pattern instead, up to the plan's page ceiling, and says so in level_notice). Without level the website's own level applies (a new website starts on surface). Every level checks external links, quick included, unless the website's external link setting or this run's external_links turns them off; each distinct external link the cloud verifies costs 1 credit (a link it cannot verify costs nothing), at most one per page of the page budget, and the estimate includes it. Use max_pages to size the crawl (max_pages: 1 audits just the entry URL, the cheapest run). Audits are asynchronous and take minutes: poll get_audit_status with the returned run_id, then fetch results with get_report. The website is registered automatically on first audit. A started run carries a schedule field describing the site's recurring audits: when state is active say so, since each of those runs costs credits, and settings_url is where

输入参数url必填kindlevelscoperenderconfirmcoverageephemeralmax_pagesmax_creditsexternal_linksinternal_links

get_audit_status

Get audit status

Poll a running audit by run_id (from run_audit or list_audits). Status queued/pending/running means keep polling (every 15-30 seconds): the response includes a progress field (phase, message, page/link counts) when available. Status queued means cloud audits are busy and the run is waiting for a slot: it starts by itself, and its queue field gives its position, a rough eta_minutes (null when unknown) and a message to pass on. Do not start the audit again. Status completed means the report is ready: call get_report with the same run_id. Status failed/cancelled includes the error and completion reason. A failed run also carries failure_reason_code (one of dns, tls, connection, timeout, http_4xx, http_5xx, redirect, robots, audit_timeout, stalled, unknown) and failure_next_step, so you can act on the cause rather than parsing the error sentence, plus failure_diagnostics: attribution (target_site, squirrelscan, mixed or unknown; never guess past it), category, stage, the observations that support it, what remains uncertain, and the bounded list of fetch attempts; legacy is true when the run predates recorded evidence. A cancelled run has none of these, because it was stopped rather than defeated by the site. Once the run has a report, health_score and issues_found are read from that published report, so they equal get_report's summary.healthScore and its failed+warnings (#1700). health_score is null for a blocked or unreachable site: that audit has no meaningful grade. A completed run also carries a schedule field describing the website's recurring audits: state is off, active, capped, unschedulable or paused, cadence_label reads as a sentence, settings_url is where the user changes the cadence or turns it off, and cap says how many scheduled sites the plan funds and how many are spent. estimated_cost is the most those runs spend per run, week and month. Recurring audits turn on by themselves after a site's first successful audit and each run costs credits, so pass that

输入参数run_id必填

list_audits

List audits

List the organization's audit runs: currently active (queued/pending/running; queued means waiting for a free cloud slot, and it starts by itself) plus recent runs of any status. Pass website_id (from list_websites) to get one website's full audit history, oldest runs included, and page through it with limit/offset using the returned total/has_more. This is the way to reach the preserved reports of a soft-deleted website: its runs still list under its old website_id. total/has_more describe the `recent` array only, and `recent` already includes any queued/pending/running run, so `active` is a live view of those same runs and not extra items to add to the count. Use the run ids with get_audit_status or get_report, and website ids with list_issues. Numbers on a recent run come from its published report (#1700): health_score is that report's overall score (the same value as get_report's summary.healthScore; null when the site was blocked or down, which earns no grade) and issues_found is the report's failing + warning checks (its summary.failed + summary.warnings). health_score is the metric to compare run over run: it is the only one rescored consistently across the whole site. Do NOT compare issues_found with the `open` count from list_issues: the issue tracker folds a rule failing on many pages into one open issue and carries issues forward until they are re-checked, so its count is legitimately much smaller and moves independently.

输入参数limitoffsetwebsite_id

list_websites

List websites

List websites the organization has audited, with their latest run status, health score, and owned/prospect kind. Each row carries last_run_id (the latest run, any status) and last_report_run_id / last_report_id (the latest completed run whose report has not been deleted). Pass last_report_run_id to get_report to read a website's newest report without knowing a run id in advance, or list_audits with website_id for its full history. Use the website_id with list_issues/get_issue. Websites registered but never audited do not appear; run_audit or add_website registers a new one. Ephemeral one-shot audits never appear. Returns total/has_more for pagination. Filter by kind to separate sites the user runs from one-off prospect audits: kind: "prospect" returns ONLY sites explicitly marked as such, so it is the safe way to build a bulk-delete list.

输入参数kindlimitoffset

add_website

Add a website

Register a website with the organization without running an audit (run_audit registers automatically, so this is only needed to set a site up ahead of time). Returns the website_id; idempotent per domain, so calling it again returns the existing website. Pass kind to classify it as owned or prospect up front. On a plan with scheduled audits, a NEW site is registered with recurring weekly audits already on, and each of those runs costs credits: tell the user before calling this; update_website_settings with schedule "off" turns them off. The result's scheduled_audits field reports what was actually set.

输入参数url必填kindscope

delete_website

Delete a website

Delete a website from the organization (soft delete: past audits, reports, and issues are preserved, and published report links keep working). Frees a slot under the plan's website limit. Re-adding the same domain later registers a fresh website with a new website_id. Call once without confirm to see what will happen; call again with confirm: true to delete. To remove many sites at once, use delete_websites.

输入参数confirmwebsite_id必填

delete_websites

Delete websites in bulk

Delete up to 50 websites in one call, for cleaning up a dashboard that has filled with one-off or prospect audits. Same soft delete as delete_website (past audits, reports, and issues are preserved, published report links keep working, slots are freed) and the same two-step confirm: call once without confirm to see the domain behind every id, then again with confirm: true. EVERY result echoes the domain, so read them back to the user before and after: an id is not a name, and this is the tool most likely to be pointed at the wrong list. The preview also shows each site's kind and an owned_count: unclassified sites read as owned, so an 'owned' entry in a list you built from prospects is the clearest sign the wrong ids were assembled. Ids that do not resolve are reported per-id, never as a whole-call failure. To pick the ids, list_websites with kind: "prospect" returns only sites explicitly marked disposable.

输入参数confirmwebsite_ids必填

get_website_settings

Get website settings

Read one website's stored audit settings: its audit level (quick, surface, full or custom) with the page cap, crawl strategy, rendering and external link checks it sets, the crawl depth, crawl scope, include/exclude patterns and internal link checks, whether broken link alerts are on (broken_link_alerts, Pro and Team), and its recurring-audit schedule. runs_as is how the next audit runs on the organization's plan (a level or page cap the plan does not run is held to the plan there, with a notice) and credits_per_run_max is the most one audit of it can cost. schedule says whether recurring audits are on; pending_first_audit: true means they switch on by themselves after the site's first successful audit, and estimated_cost is the most they spend per run, week and month.

输入参数website_id必填

update_website_settings

Update website settings

Change one website's stored audit settings: level, max_pages, render, external_links, max_depth, scope, include_patterns, exclude_patterns and internal_links, broken_link_alerts (Pro and Team; switching it off is allowed on every plan), and schedule (off, daily, weekly or monthly) for its recurring audits. Omitted fields are left unchanged. Values are checked the same way the dashboard's settings are and held to the organization's plan; the result reports what is stored afterwards, which fields were applied, and any plan clamp. Turning recurring audits on, changing their cadence, or a change that raises the most one audit can cost returns status "confirmation_required" with the estimated credit cost and changes nothing until it is sent again with the same arguments plus confirm: true. schedule: "off" and changes that cost nothing more apply at once.

输入参数levelscoperenderconfirmschedulemax_depthmax_pageswebsite_id必填external_linksinternal_linksexclude_patternsinclude_patterns另有 1 个

get_report

Get audit report

Fetch the finished report for an audit run (use the run_id from run_audit once get_audit_status shows completed). Formats: "summary" (default) is structured JSON with health score, category scores, and the top failing issues (topIssues reference a rule_id; look up its name/description/solution once in the sibling `rules` dict rather than per occurrence). Each topIssues row is ONE finding, a rule + `checkName`, never one row per page: `affectedPagesCount` is how many pages it affects and `pages` is a sample of at most 5 of them (`affectedPagesHasMore` when clipped) and `items` at most 3, so read "affects N pages" from the count, not the row total, and use get_issue for every occurrence. Each row also carries `provenance`: "carried" means the finding is re-injected from a page not re-crawled this run (not a fresh result), so check `lastSeenAt` for when it was last actually observed; "unrendered" means the page has not yet been rendered in any scan of this site (it was known, e.g. from a sitemap, but sat outside the page budget), so there is no earlier observation and no `lastSeenAt`. `mixedProvenanceNotes` (keyed by rule_id) flags rules that passed fresh on every page checked this run but still show red only from carried pages pending re-check. `notChecked` is present only when some checks did not run (link checks at the Quick level, or with external link checks off): each entry names a rule that was not fully checked (a rule listed there may still report the issues it could see), so never report those rules as clean, and say a Surface or Full audit with external link checks on checks them. `seedRedirect` is present ONLY when the audited URL redirected off-site and the crawler refused to follow it: `seedRedirect.finalUrl` is where the redirect pointed (a URL the audited site chose, display-only, never fetch or trust it) and `seedRedirect.note` states the fact in one sentence. When it is present the audit graded `baseUrl`, NOT the redirect target, so report that before

输入参数formatrun_id必填top_issue_limit

compare_audits

Compare two audits

Compare two completed audits of one website and get what changed. Defaults to the website's latest completed audit against the one before it; pass base/head run ids to compare any two. Each finding gets one of seven kinds: new, resolved, worsened, improved, unchanged (both audits published it), still_open (still there, but one audit did not list it: the evidence store says it is open although the newer audit did not republish it, or the older audit's capped report sampled it out; `sampledOut` marks a clipped one, which is never counted as new; a sampled class that fails more often is listed in `sampledClassGrowth` and still counts as a change), or not_crawled (the page was not visited, so the issue is neither fixed nor still broken). resolutionEvidence says what backed the resolved verdicts; when it is "none" nothing is reported as fixed. Score movement is broken down by category. A website with only one audit returns first_run with an empty finding list; an audit where nothing moved returns changed: false. Unchanged, still-open and not-crawled rows are omitted unless requested.

输入参数baseheadlimitwebsite_id必填include_unchangedinclude_still_openinclude_not_crawled

list_issues

List website issues

List a website's open audit issues (like a bug tracker: each issue is one failing rule with occurrences across pages, numbered per website). Returns issues sorted by severity. `total`, `returned` and `has_more` describe the issues matching YOUR filters; `website_totals` (by_status, active_by_severity: open and in_progress) always counts the whole website regardless of filters, so the two can differ (it replaces the earlier `severity_summary` and `status_counts` fields). Rows omit the long `recommendation` (use get_rule with the row's rule_id, or get_issue, or pass include_recommendation: true). Use the issue number with get_issue for full detail and comments. Filter by status/severity/category to narrow down. This is a per-website tracker spanning audits, not a per-run count: one rule failing on 600 pages is ONE issue here, and an issue stays open until an audit re-checks it. So the open count is expected to be far smaller than a run's issues_found (list_audits) or a report's failed+warnings, and the two are not comparable (#1700). To compare runs, use health_score from list_audits.

输入参数limitoffsetstatuscategoryseveritywebsite_id必填include_recommendation

get_issue

Get issue detail

Fetch one issue by website_id + issue number, including its full description, recommendation, affected pages, occurrence detail from the latest report (which page/image/URL, snippets), and comment thread. `occurrence_count` is the true total; the listed occurrences are a sample when `occurrences_truncated` is true, and on a capped report `full_detail` says where every occurrence is. Use comment_on_issue to add analysis or a fix note to the thread.

输入参数website_id必填issue_number必填occurrence_limit

comment_on_issue

Comment on an issue

Post a comment on a website issue to record analysis, a proposed fix, or what you changed, so the team sees it in the dashboard issue thread. Markdown is supported.

输入参数body必填website_id必填issue_number必填

list_entities

List declared entities

List the entities a site declares in its JSON-LD, collapsed across every crawled page into one graph, so an Organization declared identically on 60 pages is one row rather than 60. Declarations collapse by resolved @id, or by type and name when there is no @id, so the SAME real-world thing can still occupy several rows when its declared identity differs between pages: a relative @id such as "#organization" resolves against each page and yields one row per page. That is the split-identity problem, not a quirk of this tool. Filter by @type, by declaring page, by problem class, or by a text match on the name. Page-local entities (a page's own WebPage, BreadcrumbList and unnamed images) usually outnumber the site's actual subject matter and are hidden unless include_page_local is true. Returns the site-wide summary (it does not change with the filters), a filtered block with the node and edge counts that survived them, a page of nodes, total, and hasMore; keep requesting pages while hasMore is true rather than describing a site from one page. Fix-and-verify loop: call list_entities with problem="no-id" to find entities declared on several pages with nothing to tie them together, give each one an absolute @id, re-run the audit with run_audit, then call compare_entities and check that gainedId contains the keys you fixed. gainedId is the only confirmation that the fix landed: an entity that gained an @id changes key, so it would otherwise look like one removal plus one addition. Check each entry's coverage field before calling it done: "proven" means the newer audit visited every page that declared the broken version AND found the replacement on all of them, "partial" means one of those could not be established.

输入参数qpagetypelimitoffsetrun_idproblemwebsite_idinclude_page_local

get_entity

Get one declared entity

Get one entity as the map recorded it: the properties the map keeps (name, url, logo, image, sameAs, telephone, email, address, description), the pages that declare it, the properties whose values disagree between those pages, and the references in and out of it. The map keeps those nine and @type and nothing else, so a property missing here may still be in the page's JSON-LD, and a disagreement in a property outside that set is not detected. Accepts the entity key, its @id, or its name. Use this after list_entities to see why an entity was flagged, before deciding what to change. Edges and declaring pages are capped; the counts tell you when. Fix-and-verify loop: call list_entities with problem="no-id" to find entities declared on several pages with nothing to tie them together, give each one an absolute @id, re-run the audit with run_audit, then call compare_entities and check that gainedId contains the keys you fixed. gainedId is the only confirmation that the fix landed: an entity that gained an @id changes key, so it would otherwise look like one removal plus one addition. Check each entry's coverage field before calling it done: "proven" means the newer audit visited every page that declared the broken version AND found the replacement on all of them, "partial" means one of those could not be established.

输入参数key必填run_idwebsite_id

get_entity_graph

Export the entity graph

Get the whole entity graph, or a filtered part of it, in a chosen format: json for the canonical document, jsonld for a validator, mermaid or markdown to read in a conversation, dot or graphml for a graph tool. Defaults to json. Takes the same filters as list_entities. mermaid caps declared entities at 150 and markdown caps rows at 50, and both say so in truncation; json, jsonld, dot and graphml apply no node cap. No cap is not the same as complete: every format renders the stored map, and on the local server that map carries no per-edge page list and no per-page reference list, so those arrays are empty because they were never stored rather than because nothing matched. mermaid's cap bounds declared entities only, so one entity referencing thousands of undeclared ids still renders thousands of placeholder nodes. Not every server implements every format: one that does not will say so rather than return an empty or partial graph, so read the error rather than treating a refusal as a site with nothing to draw. Fix-and-verify loop: call list_entities with problem="no-id" to find entities declared on several pages with nothing to tie them together, give each one an absolute @id, re-run the audit with run_audit, then call compare_entities and check that gainedId contains the keys you fixed. gainedId is the only confirmation that the fix landed: an entity that gained an @id changes key, so it would otherwise look like one removal plus one addition. Check each entry's coverage field before calling it done: "proven" means the newer audit visited every page that declared the broken version AND found the replacement on all of them, "partial" means one of those could not be established.

输入参数qpagetypeformatrun_idproblemwebsite_idinclude_page_local

compare_entities

Compare two audits' entities

Compare two audits of a site and get the change set: entities added and removed, entities that gained or lost an @id, occurrence changes, new and resolved conflicts and dangling references, summary deltas, and the pages each audit saw that the other did not. Defaults to the previous audit versus the latest. An entity is only reported as removed when every page that declared it was crawled again; anything unproven is reported separately as not crawled, so a smaller crawl never reads as a site that deleted its structured data. Each gainedId and lostId entry carries a coverage field saying whether the newer audit visited every page that declared the old version and found the replacement there. Absence of a gainedId entry is not proof a fix failed: the match needs the type and the name to be unchanged, so changing the @id and the name in one edit appears as a removal plus an addition instead. Fix-and-verify loop: call list_entities with problem="no-id" to find entities declared on several pages with nothing to tie them together, give each one an absolute @id, re-run the audit with run_audit, then call compare_entities and check that gainedId contains the keys you fixed. gainedId is the only confirmation that the fix landed: an entity that gained an @id changes key, so it would otherwise look like one removal plus one addition. Check each entry's coverage field before calling it done: "proven" means the newer audit visited every page that declared the broken version AND found the replacement on all of them, "partial" means one of those could not be established.

输入参数to_run_idwebsite_idfrom_run_idoccurrence_threshold

get_entity_findings

Get the entity rule findings

Get the schema/entity-* rule verdicts for an audit: what is wrong with the site's entity graph, which entity keys and pages each finding affects, and the fix text for each. Use this instead of re-deriving the problems from the graph yourself. Each finding names one problem across the whole site rather than one per entity, so a count of 1 can still mean hundreds of pages. The keys and pages on a finding are a SAMPLE: the rule that produced it clipped its own lists before this tool saw them, so the pages listed are never the complete affected set and no field reports how many were left out. Use list_entities with the matching problem filter for the full set. analyzed says whether the rules ran at all: false means this audit was never analyzed, so empty findings are an absence of evidence rather than a clean result. Fix-and-verify loop: call list_entities with problem="no-id" to find entities declared on several pages with nothing to tie them together, give each one an absolute @id, re-run the audit with run_audit, then call compare_entities and check that gainedId contains the keys you fixed. gainedId is the only confirmation that the fix landed: an entity that gained an @id changes key, so it would otherwise look like one removal plus one addition. Check each entry's coverage field before calling it done: "proven" means the newer audit visited every page that declared the broken version AND found the replacement on all of them, "partial" means one of those could not be established.

输入参数run_idwebsite_id

list_rules

List audit rules

Browse the catalog of 300+ audit rules that run during an audit, grouped into categories (crawlability, meta tags, performance, security, accessibility, content, and more). Filter by category code or search by keyword to find what a specific rule checks. Use get_rule for one rule's full detail.

输入参数searchcategoryinclude_categories

get_rule

Get rule detail

Fetch one audit rule by id (e.g. "core/meta-title"), including what it checks, how to fix it (recommendation), its severity and score weight, a docs link, and whether it is a cloud (credit-billed) rule. Rule ids appear in report topIssues and issue rule_id fields.

输入参数rule_id必填

whoami

Who am I

Identify the current credentials: how you are authenticated, which organization you act for, the plan, and the current credit balance. Useful at the start of a session, to see which organization the other tools act for.

无需输入参数。

get_credit_balance

Get credit balance

Get the organization's credit balance: monthly credits (reset each billing period) and pack credits (purchased, never expire). Audits spend credits pay-as-you-go while they run; run_audit shows an upper-bound estimate before starting. An audit costs 50 credits plus 2 per audited page, however the page is fetched, plus 1 per distinct external link the cloud verifies when external link checking is on (a link it cannot verify costs nothing). A balance under 52 (a one-page audit) cannot start one, and a balance that covers fewer pages than requested starts a smaller audit. Read-only.

无需输入参数。

list_credit_transactions

List credit transactions

Audit the organization's credit accounting log: grants (signup/monthly/pack/promo), debits (audit_base 50cr + audit_page 2cr per audited page + external_link 1cr per checked link + folded 0-cost services; older audits carry render rows instead of audit_page), refunds, and adjustments, newest first, paginated. Each debit/refund carries `run_id` so you can group a single audit's spend. Use this to explain why an audit cost what it cost or to reconcile a balance. For one audit's per-feature breakdown, use get_report (its `cost` field). Read-only.

输入参数limitcursor

create_api_key

Create an API key

Mint a new squirrelscan API key for this organization (requires credentials carrying the keys:write scope, which OAuth sign-in grants). The key is returned EXACTLY ONCE: show it to the user immediately and suggest saving it as the SQUIRRELSCAN_API_KEY environment variable for the CLI, CI, and MCP. Minted keys cannot themselves mint keys.

输入参数name必填scopesexpires_in_days

send_feedback

Send feedback

Send feedback to the squirrelscan team: a bug, a missing feature, what worked, what was confusing, missing report data, or tool ergonomics. Use it when the user wants to report something or share their experience. Works with any authenticated credentials, including read-only API keys.

输入参数run_idmessage必填category必填website_id

list_notifications

List notifications

Read the organization's notification feed, newest first: what finished, what broke, and what changed since you last looked. Categories include audit_complete, issues_detected, audit_failed, broken_links, schedule_paused. Use this to catch up at the start of a session ("did last night's scheduled audit run?", "what failed?") instead of polling every website. Each entry carries the category, the human-readable title and body, a data payload with the ids involved (website_id, run_id, report_id), and whether a human has read it in the dashboard. Filter with category, or unread_only to see just what nobody has looked at yet. Paginated with limit/offset, or poll for new events: every response carries next_cursor, and passing it back as after returns only notifications created since, oldest first (offset is ignored). Read-only: this never marks anything read.

输入参数afterlimitoffsetcategoryunread_only

版本历史

1
  1. v1.0.2最新Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分