# io.speedvault/mcp (npm · @speedvault/mcp)

Run web performance audits, get code-level fixes, crawl for SEO, and read real-user Core Web Vitals.

- Trust score: 66/100 (medium)
- Change this week: +19
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@speedvault/mcp`: 66/100 (this document), [markdown](https://verifymcp.io/servers/io-speedvault-mcp/speedvault-mcp.md), [page](https://verifymcp.io/servers/io-speedvault-mcp/speedvault-mcp)

## Channel facts

- Registry: `npm`
- Package: `@speedvault/mcp`
- Version: `1.0.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 55 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 88/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 1950 tokens (~97/item across 20 items; 18 tools + 2 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add io-speedvault-mcp -- npx -y @speedvault/mcp
```

### Codex

```bash
codex mcp add io-speedvault-mcp -- npx -y @speedvault/mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-speedvault-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@speedvault/mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-speedvault-mcp --command npx --arg -y --arg @speedvault/mcp
```

### Hermes

```yaml
mcp_servers:
  io-speedvault-mcp:
    command: "npx"
    args: ["-y", "@speedvault/mcp"]
```

### Other

```json
{
  "mcpServers": {
    "io-speedvault-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@speedvault/mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 66, +15)

- [security regression] Known CVEs: partial → unverified
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Dependency health: partial → unverified
- [functional improvement] Stability: unverified → 0.20

### 2026-08-01 (score 51, +22)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 29, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 47)

First indexed and scored.

## MCP tools (18)

### `run_audit` (~211 tokens)

Run a performance audit (SpeedVault Metrix)

Run a single-page Lighthouse performance audit on a URL and (by default) wait for it to complete, returning scores (performance/structure), Core Web Vitals (LCP/FCP/TBT/CLS/SI), page weight, and the top prioritized opportunities. Use this on the page you just built or changed. Costs 1 credit. After this, call get_fix_suggestions with the returned auditId for concrete code fixes.

Input parameters:

- `connection` (string): Connection throttling preset. Omit to use the device default.
- `device` (string): Emulated device (default desktop).
- `location` (string): Test region: eu-west (Ireland, default), us-east (Virginia), ap-southeast (Singapore).
- `timeout` (integer): Max seconds to wait when wait=true (default 120).
- `url` (string, required): The absolute URL to audit, e.g. https://example.com/pricing
- `wait` (boolean): Block until the audit finishes (default true).

Output parameters:

- `auditId` (string): The audit id; pass to get_fix_suggestions / get_audit / compare_runs.
- `cls` (number|null): Cumulative Layout Shift (unitless).
- `fcpMs` (number|null): First Contentful Paint in milliseconds.
- `lcpMs` (number|null): Largest Contentful Paint in milliseconds.
- `pageBytes` (number|null): Total page weight in bytes.
- `performanceScore` (number|null): Lighthouse performance score 0–100.
- `requests` (number|null): Total number of network requests.
- `speedIndexMs` (number|null): Speed Index in milliseconds.
- `state` (string): Audit state: queued, running, complete, or error.
- `structureScore` (number|null): Structure (best-practices) score 0–100.
- `tbtMs` (number|null): Total Blocking Time in milliseconds.
- `timedOut` (boolean): True if the wait window elapsed before completion.
- `topOpportunities` (array): Top prioritized improvement opportunities.
- `url` (string): The URL that was audited.

### `get_audit` (~78 tokens)

Get an audit

Fetch a previously-started audit by id. Set wait=true to block until it completes.

Input parameters:

- `auditId` (string, required): The audit id returned by run_audit.
- `timeout` (integer): Max seconds to wait when wait=true (default 120).
- `wait` (boolean): Block until the audit completes before returning (default false).

Output parameters:

- `auditId` (string): The audit id.
- `cls` (number|null): Cumulative Layout Shift (unitless).
- `fcpMs` (number|null): First Contentful Paint in milliseconds.
- `lcpMs` (number|null): Largest Contentful Paint in milliseconds.
- `pageBytes` (number|null): Total page weight in bytes.
- `performanceScore` (number|null): Lighthouse performance score 0–100.
- `requests` (number|null): Total number of network requests.
- `speedIndexMs` (number|null): Speed Index in milliseconds.
- `state` (string): Audit state: queued, running, complete, or error.
- `structureScore` (number|null): Structure (best-practices) score 0–100.
- `tbtMs` (number|null): Total Blocking Time in milliseconds.
- `topOpportunities` (array): Top prioritized improvement opportunities.
- `url` (string): The URL that was audited.

### `list_audits` (~38 tokens)

List recent audits

List the most recent audits run via the API for this account.

Input parameters:

- `limit` (integer): How many to return (default 25).

Output parameters:

- `audits` (array): Recent audits with id, URL, state, and performance score.
- `count` (number): Number of audits returned.

### `get_fix_suggestions` (~223 tokens)

Get fix suggestions (performance, SEO, or media)

Return prioritized, ACTIONABLE fixes. Two modes:
• Performance: pass auditId (a completed run_audit). Each fix has the issue, impact, how to fix it, a code snippet where useful, and estimated savings.
• SEO/media: pass crawlId (a completed crawl_site), optionally narrowed with issue_type (e.g. "description-missing", "next-gen-images", "image-alt-missing"). Each fix reports how many pages are affected, example URLs, how to fix it, and a ready-to-apply snippet (e.g. <picture>/WebP, <meta name="description">, alt="", unique <title>).
This is what you apply to improve scores. Cached perf fixes are free; a fresh AI generation may cost credits.

Input parameters:

- `auditId` (string): A completed audit id (performance fixes).
- `crawlId` (string): A completed crawl id (site-wide SEO + media fixes).
- `issue_type` (string): With crawlId: target one issue group, e.g. "next-gen-images".

Output parameters:

- `auditId` (string): The audit id (performance mode).
- `count` (number): Number of fixes returned.
- `crawlId` (string): The crawl id (SEO/media mode).
- `fixes` (array): The actionable fixes to apply.
- `issueType` (string): The issue_type filter that was applied (SEO mode).
- `mode` (string): Which fix mode produced these results.
- `note` (string): An optional note when no fixes are available.
- `source` (string): Where the fixes came from (e.g. cache or ai).

### `crawl_site` (~159 tokens)

Crawl a whole site (SpeedVault Audit)

Start a full-site crawl that aggregates SEO + structure issues across pages (grouped by category/template) and computes a site score. Costs 1 credit. Returns a crawlId; poll with get_crawl (wait=true) to get the grouped issues once it finishes. NOTE: the domain must be verified first — use list_domains / add_domain / verify_domain.

Input parameters:

- `maxPages` (integer): Cap pages crawled (clamped to your plan).
- `timeout` (integer): Max seconds to wait when wait=true (default 120).
- `url` (string, required): The site root or any page on the site to crawl from.
- `wait` (boolean): Wait for completion and return grouped issues (default false; crawls can be long).

Output parameters:

- `crawlId` (string): The crawl id; poll with get_crawl.
- `issues` (object): Issue counts by severity.
- `pagesCrawled` (number): Number of pages crawled.
- `score` (number|null): Aggregate site score 0–100.
- `status` (string): Crawl status: crawling, done, or error.
- `templates` (array): Per-template issue breakdown (most-affected first).
- `url` (string): The site/page the crawl started from.

### `get_crawl` (~82 tokens)

Get a site crawl

Fetch a crawl by id with its score and grouped issues. wait=true blocks until done.

Input parameters:

- `crawlId` (string, required): The crawl id returned by crawl_site (or recheck_template).
- `timeout` (integer): Max seconds to wait when wait=true (default 120).
- `wait` (boolean): Block until the crawl completes before returning (default false).

Output parameters:

- `crawlId` (string): The crawl id; poll with get_crawl.
- `issues` (object): Issue counts by severity.
- `pagesCrawled` (number): Number of pages crawled.
- `score` (number|null): Aggregate site score 0–100.
- `status` (string): Crawl status: crawling, done, or error.
- `templates` (array): Per-template issue breakdown (most-affected first).
- `url` (string): The site/page the crawl started from.

### `get_rum` (~116 tokens)

Get real-user Core Web Vitals (RUM)

Return field (real-user) Core Web Vitals for a registered RUM site: p75 LCP/INP/CLS/FCP/TTFB with ratings, sample counts, and trends. Use list of sites from account first if you do not know the siteKey (call get_rum with no siteKey to list sites).

Input parameters:

- `days` (integer): Look-back window in days (default 7).
- `siteKey` (string): The RUM site key. Omit to list your RUM sites instead.

Output parameters:

- `metrics` (object): Field Core Web Vitals keyed by metric (lcp, inp, cls, fcp, ttfb) with p75 + sample count.
- `mode` (string): Whether a site list or a single-site summary was returned.
- `siteKey` (string): The RUM site key (summary mode).
- `sites` (array): Registered RUM sites (list mode).
- `totalSamples` (number): Total real-user samples in the window.
- `windowDays` (number): Look-back window in days (summary mode).

### `get_rum_embed` (~66 tokens)

Get the RUM beacon install snippet

Return the <script> beacon snippet to install SpeedVault RUM on a site, so an agent building an app can wire up real-user Core Web Vitals collection. Paste it into the <head>.

Input parameters:

- `siteKey` (string, required): The RUM site key to install.

Output parameters:

- `instructions` (string): Human-readable install instructions.
- `siteKey` (string): The RUM site key the snippet is for.
- `snippet` (string): The <script> beacon snippet to paste into <head>.

### `list_monitors` (~25 tokens)

List scheduled monitors

List the URLs under scheduled monitoring (SpeedVault Monitor) with their latest score.

Output parameters:

- `count` (number): Number of monitors returned.
- `monitors` (array): Scheduled monitors with id, URL, cadence, and latest score.

### `create_monitor` (~172 tokens)

Create a scheduled monitor

Add a URL to scheduled monitoring so SpeedVault re-audits it on a cadence and tracks regressions. Slot-limited by plan. NOTE: the domain must be verified first — use list_domains / add_domain / verify_domain.

Input parameters:

- `checkFrequency` (string): How often to re-audit the URL (default daily).
- `device` (string): Emulated device for the scheduled audit (default desktop).
- `label` (string): An optional human-friendly label for this monitor (e.g. "Pricing page").
- `location` (string): Test region for the scheduled audit, e.g. "eu-west", "us-east", "ap-southeast".
- `url` (string, required): The absolute URL to monitor, e.g. https://example.com/pricing. Its domain must be verified first.

Output parameters:

- `checkFrequency` (string): The cadence the monitor runs at.
- `monitorId` (string): The id of the newly created monitor.
- `url` (string): The URL now under monitoring.

### `compare_runs` (~94 tokens)

Compare two audit runs

Return a structured diff of two completed audits: delta per metric (perf_score, LCP, FCP, TBT, CLS, SI, page_bytes, total_requests) with improved/regressed flags. Use this to see how a change affected performance before and after.

Input parameters:

- `auditId1` (string, required): The first (before) audit id.
- `auditId2` (string, required): The second (after) audit id.

Output parameters:

- `auditId1` (string): The first (before) audit id.
- `auditId2` (string): The second (after) audit id.
- `metrics` (object): Per-metric diff (perf_score, lcp, fcp, tbt, cls, speed_index, page_bytes, total_requests, …).
- `urlA` (string): URL of the first audit.
- `urlB` (string): URL of the second audit.

### `get_seo_issues` (~93 tokens)

Get per-template SEO issues from a crawl

Return the per-template issue breakdown from a completed site crawl. Shows each template (e.g. /products/:slug) with its page count and the SEO issues affecting it, including prevalence ("142 of 312 product pages have missing meta description") and priority scores. Use this after crawl_site to understand which templates need the most work.

Input parameters:

- `crawlId` (string, required): A completed crawl id from crawl_site.

Output parameters:

- `count` (number): Number of templates returned.
- `crawlId` (string): The crawl id these templates belong to.
- `templates` (array): Per-template issue breakdown.

### `get_seo_fixes` (~97 tokens)

Get SEO fix recipes for a crawl

Return actionable fix recipes for a completed site crawl. Each fix includes the issue, impact, how to fix it, a code snippet, and before/after showing the exact code change. Optionally narrow to one issue_type (e.g. "description-missing", "next-gen-images").

Input parameters:

- `crawlId` (string, required): A completed crawl id from crawl_site.
- `issue_type` (string): Narrow to one issue type.

Output parameters:

- `count` (number): Number of fixes returned.
- `crawlId` (string): The crawl id these fixes belong to.
- `fixes` (array): The SEO fix recipes (with before/after where available).
- `issueType` (string): The issue_type filter that was applied, if any.

### `recheck_template` (~102 tokens)

Re-crawl a site (recheck after fixes)

Trigger a re-crawl of a site that was previously crawled. Use this after applying SEO fixes from get_seo_fixes to verify improvements. Returns a new crawlId. Costs 1 credit.

Input parameters:

- `crawlId` (string, required): The original crawl id to re-crawl.
- `timeout` (integer): Max seconds to wait when wait=true (default 120).
- `wait` (boolean): Wait for the re-crawl to complete (default false).

Output parameters:

- `crawlId` (string): The NEW crawl id created by the re-crawl.
- `pagesCrawled` (number): Number of pages crawled (once done).
- `score` (number|null): Aggregate site score 0–100 (once done).
- `status` (string): Crawl status: crawling, done, or error.
- `templates` (array): Per-template issue breakdown (once done).
- `url` (string): The site/page being re-crawled.

### `list_domains` (~46 tokens)

List verified domains

List your domains with their verification status and linked product counts (RUM sites, monitors, analyses). Domains must be verified before you can crawl, monitor, or add RUM to them.

Output parameters:

- `count` (number): Number of domains returned.
- `domains` (array): Domains with verification status and linked product counts.

### `add_domain` (~85 tokens)

Add a domain

Register a new domain. Returns a verification token and instructions (meta tag or DNS TXT record). After adding, call verify_domain to prove ownership. A verified domain is required before you can crawl, monitor, or add RUM.

Input parameters:

- `domain` (string, required): The domain to add, e.g. "example.com".
- `label` (string): An optional label for the domain.

Output parameters:

- `domain` (string): The registered domain.
- `domainId` (string): The id of the registered domain; pass to verify_domain.
- `instructions` (object): Ownership-proof options: a meta tag and a DNS TXT record.
- `status` (string): Verification status (e.g. pending).

### `verify_domain` (~61 tokens)

Verify a domain

Verify ownership of a registered domain by checking for the meta tag or DNS TXT record. On success the domain becomes "active" and you can use it with all SpeedVault products.

Input parameters:

- `domainId` (string, required): The domain id from list_domains or add_domain.

Output parameters:

- `instructions` (object): Ownership-proof options to retry with if verification failed.
- `method` (string): The method that verified ownership (meta_tag or dns_txt).
- `status` (string): Resulting domain status (active when verified).
- `verified` (boolean): True if ownership was confirmed.

### `account_status` (~25 tokens)

Account status

Show your plan, remaining API credits, rate limit, and per-product entitlements.

Output parameters:

- `apiCreditsRemaining` (number|null): Remaining API credits.
- `entitlements` (object): Per-product entitlements (Metrix, AI Fixes, Audit/Crawl, RUM, Monitor).
- `plan` (string): The account plan name.
- `rateLimit` (object): Rate limit: requests per window.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/io-speedvault-mcp/speedvault-mcp#diagnostics

## Score history

- 2026-08-03: 66
- 2026-08-02: 66
- 2026-08-01: 51
- 2026-07-31: 29
- 2026-07-30: 47
- 2026-07-28: 47
- 2026-07-27: 47

## Links

- npm package: https://www.npmjs.com/package/@speedvault/mcp
- Socket report: https://socket.dev/npm/package/@speedvault/mcp
- Website: https://speedvault.io/products/mcp
- Changelog RSS feed: https://verifymcp.io/servers/io-speedvault-mcp/speedvault-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-speedvault-mcp/speedvault-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/io-speedvault-mcp/speedvault-mcp
