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 分