com.squirrelscan/squirrelscan

squirrelscan

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

Endpointhttps://mcp.squirrelscan.com/mcp (streamable-http)
Registry version1.0.2
Now27 tools · grade F (33) · pin ts_8695b3fa44bbd6498149346f9fbdaccb · protocol 2025-06-18
First / last listed2026-11-02 01:36 UTC / 2026-11-02 01:36 UTC
Grade over time2026-11-02: F (33), 27 tools

Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.

Timeline

First listing · 2026-11-02 01:36 UTC
27 tools, grade F (33)

Tools: run_audit get_audit_status list_audits list_websites add_website delete_website delete_websites get_website_settings update_website_settings get_report compare_audits list_issues get_issue comment_on_issue list_entities get_entity get_entity_graph compare_entities get_entity_findings list_rules get_rule whoami get_credit_balance list_credit_transactions create_api_key send_feedback list_notifications

Current tools (27)

run_auditRun a cloud audit of a website (crawl + 300+ rule analysis + report). Only for sites the user owns or is authorized to test. 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 esti
params: url*, confirm, scope, max_credits, level, coverage, max_pages, render, external_links, internal_links, ephemeral, kind
get_audit_statusPoll 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 unkno
params: run_id*
list_auditsList 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 o
params: website_id, limit, offset
list_websitesList 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 wit
params: limit, offset, kind
add_websiteRegister 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. Calling it again for the same domain returns the existing website, and a kind or scope passed again replaces the stored one. Pass kind to classify it as owned or prospect up front. On a plan with scheduled audits, a NE
params: url*, kind, scope
delete_websiteDelete 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 delet
params: website_id*, confirm
delete_websitesDelete 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
params: website_ids*, confirm
get_website_settingsRead 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), whether the user confirmed the site is theirs (ownership_confirmed), and its re
params: website_id*
update_website_settingsChange 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), schedule (off, daily, weekly or monthly) for its recurring audits, and confirm_ownership, which records that the user owns the site or is authorized to audit it (s
params: website_id*, level, max_pages, render, external_links, max_depth, scope, include_patterns, exclude_patterns, internal_links, broken_link_alerts, schedule, confirm_ownership, confirm, confirmation_token
get_reportFetch 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 +
params: run_id*, format, top_issue_limit
compare_auditsCompare 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 eight 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
params: website_id*, base, head, include_unchanged, include_still_open, include_not_crawled, include_not_checked, limit
list_issuesList 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 diffe
params: website_id*, status, severity, category, limit, offset, include_recommendation
get_issueFetch 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
params: website_id*, issue_number*, occurrence_limit
comment_on_issuePost 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.
params: website_id*, issue_number*, body*
list_entitiesList 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 "#orga
params: run_id, type, page, problem, q, include_page_local, limit, offset, website_id
get_entityGet 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 i
params: run_id, website_id, key*
get_entity_graphGet 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 a
params: run_id, type, page, problem, q, include_page_local, format, website_id
compare_entitiesCompare 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; a
params: from_run_id, to_run_id, occurrence_threshold, website_id
get_entity_findingsGet 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 fi
params: run_id, website_id
list_rulesBrowse 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.
params: category, search, include_categories
get_ruleFetch 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.
params: rule_id*
whoamiIdentify 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.
params: none
get_credit_balanceGet 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 o
params: none
list_credit_transactionsAudit 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 e
params: limit, cursor
create_api_keyMint a new squirrelscan API key for this organization and return it. The result contains a secret, a live credential for the organization, returned exactly once and never retrievable again; it is meant to be saved as the SQUIRRELSCAN_API_KEY environment variable for the CLI, CI, and MCP. Requires credentials carrying the keys:write scope, which OAuth sign-in grants to organization owners and admin
params: name*, scopes, expires_in_days
send_feedbackSend 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.
params: category*, message*, run_id, website_id
list_notificationsRead 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 hum
params: limit, offset, after, unread_only, category

Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.