Skip to main content
Glama

seo-tools-mcp

CI npm license

Upgrading from an earlier package name: replace the package in your MCP client command with npx -y seo-tools-mcp@latest. Existing environment settings and saved data remain compatible.

An SEO MCP server — a stdio Model Context Protocol server that gives an AI host a set of SEO tools. The MVP is 100% free and keyless: on-page/technical audits, robots.txt, sitemaps, structured data, broken-link checks, and keyword ideas.

Built on the same proven scaffold as mcp-browser-extension: SDK Server → StdioServerTransport, a flat tool registry, and a never-throw dispatch firewall.

Tools (all free, no API key)

Tool

What it does

audit_page

Full on-page audit: title, meta description, canonical, robots, viewport, OG/Twitter, heading outline, word count, image alt coverage, link counts, structured-data presence → issues + 0–100 score. Pass pagespeed: true to also attach PageSpeed metrics

check_robots

Fetch & parse /robots.txt — UA groups, allow/disallow, declared sitemaps

check_sitemap

Discover & summarize a sitemap (index vs urlset, URL count, sample)

extract_schema

Pull JSON-LD structured data and list schema.org @types (+ microdata, parse errors)

find_broken_links

HEAD-check links on a page; report 4xx/5xx/unreachable

keyword_ideas

Related queries for a seed term via Google Suggest (no volume)

pagespeed

Google PageSpeed Insights (Lighthouse): perf score, lab Core Web Vitals + real-user CrUX field data + top opportunities. Keyless (rate-limited); set PAGESPEED_API_KEY to raise the quota

Related MCP server: gkb-seo-mcp-server

Use it as an MCP server

Requires Node 20.18.1+. Local Lighthouse audits require Node 22.19+; Node 24 is recommended for all features. There is nothing to clone, build, or configure — add this to your MCP host config (e.g. a project .mcp.json) and restart the host:

{
  "mcpServers": {
    "seo-tools-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "seo-tools-mcp@latest"]
    }
  }
}

Or with Claude Code: claude mcp add seo-tools-mcp -- npx -y seo-tools-mcp@latest

Or, after npm install -g seo-tools-mcp@latest, set "command": "seo-tools-mcp" with no args.

Windows

WSL2 is not required — native Windows works. One config change is, though: on Windows npx is npx.cmd, a batch shim, and MCP hosts spawn the server without a shell, which cannot execute a .cmd. So "command": "npx" fails to start. Wrap it in cmd /c:

{
  "mcpServers": {
    "seo-tools-mcp": {
      "type": "stdio",
      "command": "cmd",
      "args": ["/c", "npx", "-y", "seo-tools-mcp@latest"]
    }
  }
}

Or: claude mcp add seo-tools-mcp -- cmd /c npx -y seo-tools-mcp@latest

Develop

From a source checkout:

npm install
npm run build      # → dist/src/cli.js
npm test

Then point your host at the local build with "command": "node", "args": ["<abs-path>/dist/src/cli.js"].

Then ask things like "audit https://example.com for SEO" or "what does example.com's robots.txt block?".

Quick smoke test (no MCP host needed)

node -e "require('./dist/src/seo/audit').auditPage('https://example.com').then(r=>console.log(JSON.stringify(r,null,2)))"

Develop

npm run typecheck   # tsc --noEmit
npm run build       # → dist/
npm test            # node:test suite (no network — fetch is stubbed)

CI (.github/workflows/ci.yml) runs typecheck → build → test on Node 20/22. Node 20.18.1+ is required by Cheerio and Undici. The optional local Lighthouse engine requires Node 22.19+; hosted PageSpeed checks remain available on Node 20.18.1+.

Performance & output size

  • Request caching — identical GETs are de-duplicated by a short-TTL cache with in-flight coalescing, so a audit_page → export_audit_pdf pair (or a sitemap/robots.txt referenced during a crawl) hits the network once. Tune with SEO_MCP_CACHE_TTL_MS (milliseconds, default 15000); set 0 to disable.

  • Compact audit_site — by default the site audit returns a slim, worst-first per-page table (score + issue counts) plus the aggregates, to keep the response small inside an MCP host's context. Pass detail: true for the full per-page breakdown, or use export_site_pdf for a formatted report.

PageSpeed (optional key)

The pagespeed tool works keyless but Google rate-limits anonymous requests. To raise the quota, grab a free PageSpeed Insights API key and set it in your MCP host config:

{
  "mcpServers": {
    "seo-tools-mcp": {
      "type": "stdio",
      "command": "node",
      "args": ["<absolute-path>/seo-tools-mcp/dist/src/cli.js"],
      "env": { "PAGESPEED_API_KEY": "your-key-here" }
    }
  }
}

Roadmap (needs a key — not in the free MVP)

  • serp_rank — real SERP position checks (drive a browser, or a paid SERP API)

  • domain_authority — OpenPageRank (free key) for an authority score

  • backlinks — real backlink profiles (paid: Ahrefs / SEMrush / DataForSEO)

License

MIT

Available Tools

10 tools
audit_pageA

Full on-page SEO audit of a URL: title, meta description, canonical, indexability (meta robots, X-Robots-Tag header, and robots.txt), redirect chain, viewport, Open Graph/Twitter, heading outline and hierarchy, word count, image alt coverage, internal/external link counts, structured-data presence, plus a list of issues and a 0–100 score. Free, no API key. Set pagespeed=true to also attach PageSpeed Insights performance metrics. After presenting the results, ASK THE USER whether they want a professionally formatted PDF report; if they say yes, call export_audit_pdf with the same url (and same pagespeed/strategy).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPage URL (https:// optional)
localNoWhen pagespeed=true, force the local Lighthouse engine instead of Google PSI (no API key/quota; requires Chrome installed). Default false — PSI is used first and falls back to local automatically when it is over quota.
detailNoWhen pagespeed=true, also attach the full GTmetrix-style detail layer under pagespeed.detail (all category scores, diagnostics, resource breakdown, suggestions, passed checks). Default false.
strategyNoPageSpeed strategy when pagespeed=true: "mobile" (default) or "desktop"
pagespeedNoAlso run PageSpeed Insights and attach performance metrics (default false)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it enumerates the full returned payload, notes the no-API-key/free constraint, and explains that pagespeed=true attaches PSI metrics with a local-engine fallback. It stops short of documenting error/rate-limit behavior or how the URL is fetched, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and keeps the critical workflow instruction (ask the user, then call export_audit_pdf) as the final sentence. The long enumerative middle sentence is dense but each listed check conveys real capability, so waste is minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema or annotations exist, yet the description fully describes the return contents, the free/no-key constraint, the optional performance layer, and the downstream PDF handoff. An agent has everything needed to call it and to act on the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters, including local/detail/strategy. The description only reinforces the pagespeed flag and carries it forward into the PDF step ('same pagespeed/strategy'), adding workflow meaning but no syntax beyond the schema — the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Full on-page SEO audit of a URL') and enumerates exactly what is checked (title, meta, canonical, indexability, redirect chain, headings, links, structured data, issues, score). This clearly separates it from siblings like audit_site (site-level), pagespeed (performance-only), and check_robots (single concern).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context ('Free, no API key'), explains the pagespeed=true option to add PSI metrics, and prescribes a concrete follow-up workflow with export_audit_pdf. It does not, however, state when to prefer this over the sibling pagespeed tool or audit_site for whole-site scans, so exclusions are missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audit_siteA

Site-wide on-page SEO audit: discovers the site's URLs from its sitemap (resolving a sitemap index into child sitemaps), runs the on-page audit on each page (keyless, concurrency-limited), and returns site-level aggregates — average/min/max score, pages with errors, site-wide gaps (missing titles/meta/H1/schema), a rollup of the most common issues, and a per-page table. By DEFAULT the response is compact: per-page rows carry score and issue counts only (sorted worst-first) to keep the payload small; set detail=true to get full per-page metadata and each page's specific issues. PageSpeed is NOT run per page (too slow across many URLs). Use audit_page or pagespeed for deep per-page performance, or export_site_pdf for a formatted report.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoMaximum number of pages to audit (default 50)
urlYesAny URL on the site (https:// optional)
detailNoReturn the full per-page breakdown (metadata, headings, and each page's issue list) instead of the compact score/counts table. Default false — keep it off unless the full detail is needed, as it is far larger.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses that the operation is keyless (no auth), concurrency-limited (rate control), driven by sitemap discovery including sitemap-index resolution, and that PageSpeed is deliberately NOT run. It also describes the default response shape (compact, worst-first) and the cost tradeoff of detail=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core verb and scope, and every sentence carries information an agent needs (pipeline, defaults, exclusions, alternatives). It is a single dense paragraph with long clauses, which is slightly heavy but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must describe returns, and it does: site-level aggregates, min/max/average score, pages with errors, site-wide gaps, issue rollup, and the per-page table. Combined with the default/detail distinction, an agent has everything needed to call and interpret this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3. The description adds real value beyond the schema for detail by explaining the payload-size rationale for keeping it false, though it says nothing about the 'max' parameter (default 50) beyond the schema's own text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb+resource+scope: 'Site-wide on-page SEO audit' and then spells out the exact pipeline (sitemap discovery, per-page audit, site-level aggregates). It explicitly contrasts itself with audit_page, pagespeed, and export_site_pdf, so an agent can distinguish it from every relevant sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names alternatives and the conditions that select them: 'Use audit_page or pagespeed for deep per-page performance, or export_site_pdf for a formatted report,' and it states when to set detail=true versus leaving it off. Both the routing decision and the parameter tradeoff are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_robotsA

Fetch and parse a site's /robots.txt — user-agent groups, allow/disallow rules, and declared sitemaps.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAny URL on the site

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral burden. It discloses the output shape (user-agent groups, rules, sitemaps) but says nothing about failure modes (missing robots.txt), rate limits, redirect handling, or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One efficient sentence that front-loads the action and lists the returned fields without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple single-parameter read tool, but with no annotations and no output schema, the description should disclose more about what happens when robots.txt is absent or how the response is structured.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter 'url' is documented as 'Any URL on the site'. The description adds no parameter-level detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch and parse) and resource (/robots.txt) and enumerates the returned content (user-agent groups, allow/disallow rules, sitemaps). Clearly distinguishable from siblings like check_sitemap and audit_page.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the tool's nature (robots.txt retrieval) but there is no explicit when-to-use guidance or comparison to alternatives such as check_sitemap. The agent must infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_sitemapA

Discover and summarize a sitemap (via /sitemap.xml or robots.txt): index vs urlset, URL count, and a sample of URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAny URL on the site

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the output shape (index vs urlset, URL count, sample URLs), which is useful behavioral context, but says nothing about network behavior, fallback order when /sitemap.xml is absent, error cases, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states the action and immediately enumerates the returned artifacts, with no filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the work of explaining what comes back, which is the key need for this read tool. It stops short of covering failure modes (missing sitemap, robots.txt fallback behavior) or the size/format of the URL sample, leaving minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter and schema description coverage is 100%, with the schema already explaining it accepts 'Any URL on the site'. The description adds no parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Discover and summarize') plus the resource ('sitemap') and enumerates what is returned: index vs urlset, URL count, and sample URLs. It is clearly distinguishable from most siblings, though it does not explicitly contrast itself with the closely related check_robots, which it only mentions as a discovery route.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the context of the sibling audit tools (an agent would infer this is for inspecting a site's sitemap), but there is no explicit statement of when to call this versus check_robots or audit_site, and no preconditions such as what happens when no sitemap exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_audit_pdfA

Generate a professionally laid-out PDF report of an on-page SEO audit (score badge, summary cards, severity-colored issue list, metadata, content/structure, social tags, and optional PageSpeed metrics). Re-runs the audit for the URL and writes a .pdf to disk, returning the file path. Use this after audit_page when the user asks for a PDF report.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPage URL to audit and export (https:// optional)
pathNoOutput file path (default: ./seo-audit-<host>-<date>.pdf in the current directory). ".pdf" is appended if missing.
detailNoInclude the full GTmetrix-style detail in the PDF (category scores, diagnostics, resource weight, prioritized suggestions, passed checks). Defaults to true when pagespeed=true.
strategyNoLimit the PageSpeed section to one strategy: "mobile" or "desktop". Omit to include BOTH in the same file (default).
pagespeedNoAlso run PageSpeed and include performance metrics in the report (default false). When true, BOTH Mobile and Desktop are included in the same PDF unless a single "strategy" is specified.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the key side effects: it re-runs the audit (fresh network work) and writes a .pdf to disk, returning the file path. It omits overwrite behavior, latency expectations, and failure modes, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by side effects and then usage, so the agent can stop reading early. The parenthetical inventory of report sections is long but earns its place by telling the agent what the artifact contains.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description states the return value (file path) and the write-to-disk behavior, and all five parameters are covered by the schema. A note on whether an existing file is overwritten would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (url, path, detail, strategy, pagespeed) is already documented, and the enum on strategy is self-explanatory. The description adds report-content context that loosely maps to pagespeed/detail but no format or constraint detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Generate) and resource (PDF report of an on-page SEO audit) and enumerates the report contents, so the agent knows exactly what artifact comes back. It also distinguishes scope from the sibling export_site_pdf by tying itself to a single URL audit.Page

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this after audit_page when the user asks for a PDF report" gives an explicit precondition and trigger. It does not, however, draw an exclusion against the sibling export_site_pdf, leaving the single-page vs site-wide routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_site_pdfB

Run a site-wide audit and write a professionally formatted multi-page PDF report (overall average-score badge, summary cards, coverage, common-issues rollup, a per-page results table sorted worst-first, and a full per-page details section — metadata, structure, and each page's specific issues). Returns the file path.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoMaximum number of pages to audit (default 50)
urlYesAny URL on the site (https:// optional)
pathNoOutput file path (default: ./seo-site-audit-<host>-<date>.pdf). ".pdf" appended if missing.
detailsNoInclude the full per-page details section (one card per page with metadata, structure, and issues). Default true; set false for a summary-only report.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden, and it does convey useful traits: this performs a site-wide crawl (implied network cost and latency, bounded by max), writes a file to disk (a side effect), and returns the path. It does not mention whether an existing file is overwritten, permission requirements, or how failures during the audit are surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action, with the rest spent enumerating the report contents. The long parenthetical list is dense but each item is informative for judging the output; slightly overloaded for a single sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing both the artifact (PDF sections) and the return value (file path). Report contents and the primary return are covered; only failure/overwrite behavior is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (url, max, path, details) is already documented in the schema; baseline 3 applies. The description adds only indirect context — the details flag maps to the 'full per-page details section' and the table ordering is 'worst-first' — without explaining parameter syntax beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource — run a site-wide audit and write a multi-page PDF report — and enumerates the report's contents, so the agent knows exactly what artifact is produced. It does not, however, distinguish itself from the sibling export_audit_pdf, whose name implies a very similar operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, when-not-to-use, or prerequisite guidance. The presence of a closely named sibling (export_audit_pdf) makes the missing differentiation a real gap — the agent must open both schemas to decide which export tool to call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_schemaA

Extract JSON-LD structured data from a page and list the schema.org @types found (plus any microdata itemtypes and JSON-LD parse errors).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPage URL

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose meaningful behavior: it reports microdata itemtypes in addition to JSON-LD, and surfaces JSON-LD parse errors rather than failing on malformed markup. However, it says nothing about network fetching, read-only/safe nature, permissions, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the core action, with the enumerations placed in a parenthetical rather than padding the main clause. Every element earns its place and nothing is repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema and no annotations, the description adequately conveys what comes back (types, itemtypes, errors). It stops just short of complete by not clarifying whether the page is fetched live or read from an existing audit result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and schema description coverage is 100% ('Page URL'), so the schema fully documents it. The description adds no format, scope, or fetch-behavior detail beyond what the schema already states, making the baseline of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb ('Extract') and resource ('JSON-LD structured data from a page'), then enumerates the concrete outputs (schema.org @types, microdata itemtypes, parse errors). None of the siblings (audit_page, check_robots, pagespeed, etc.) touch structured data, so the agent can place it immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus audit_page or the other audit siblings, and no prerequisites or exclusions are given. Usage is only inferable from the purpose itself, not from any routing guidance in the text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keyword_ideasA

Get related keyword/query ideas for a seed term via Google Suggest (free; related queries only, no search volume).

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoLanguage code, e.g. "en" (default)
seedYesSeed keyword or phrase

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does meaningfully discharge part of it: it discloses the underlying source (Google Suggest), the cost profile (free), and a hard output limitation (no search volume, related queries only). It omits rate limits, authentication needs, and result-set size, which are the remaining behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and resource, with the clarifying constraints tucked into a compact parenthetical. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, no-output-schema tool this covers purpose, source, cost, and the key output caveat. The main omission is any hint about the shape or volume of returned ideas and whether 'lang' materially changes results, but nothing critical to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented there, so the description needn't restate them. It references the seed concept implicitly but adds no format or syntax detail (e.g., how to handle multi-word phrases), so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (related keyword/query ideas) plus the data source (Google Suggest), which is exactly what an agent needs to know. It is unmistakably distinct from the sibling audit/robots/sitemap tools, so no sibling disambiguation is required.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical 'free; related queries only, no search volume' tells the agent when this is the right pick (a no-cost, related-term expansion) and implicitly when it is not (when search volume is needed). It stops short of naming an alternative tool for volume-bearing keyword data, so it is clear context rather than a full when/when-not routing rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pagespeedA

Run Lighthouse for performance score (0–100), lab Core Web Vitals (LCP, CLS, TBT, FCP, Speed Index, TTI), and top improvement opportunities. Default engine is Google PageSpeed Insights (hosted; adds real-user CrUX field data when available; keyless but rate-limited — set PAGESPEED_API_KEY to raise the quota), and it auto-falls-back to a LOCAL Lighthouse run if PSI is over quota. Set local=true to force the local engine (no key, no quota; needs Chrome on the host; no CrUX field data; runs headless Chrome silently).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPage URL
localNoForce the local Lighthouse engine instead of Google PSI (no API key/quota; requires Chrome installed; lab metrics only). Default false.
detailNoReturn the full GTmetrix-style detail: all four category scores (Performance, Accessibility, Best Practices, SEO), diagnostics (server response, DOM size, page weight, request count), resource breakdown, prioritized suggestions with descriptions, and passed best-practice checks. Default false.
strategyNo"mobile" (default) or "desktop"

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well: it discloses rate limiting, API-key requirements, automatic fallback behavior on quota exhaustion, that the local path requires Chrome on the host, that local runs headless Chrome silently, and that field (CrUX) data is only available via PSI. These are exactly the operational facts an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Outputs are front-loaded in the first sentence, followed by engine behavior and the local override, so the reader gets the what before the how. It is dense but every clause carries distinct information; the long parenthetical lists add bulk without much waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does useful work by naming the metrics returned and noting that detail=true expands to full category scores, diagnostics, and prioritized suggestions. Minor gap: it never states whether results are a single snapshot or if auditing multiple URLs requires the sibling audit_site.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema, including the local flag's requirement for Chrome and its lab-only nature. The description largely restates that schema text, adding only the engine-selection framing rather than new parameter semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run Lighthouse') plus the exact outputs it produces: performance score 0-100, lab Core Web Vitals (LCP, CLS, TBT, FCP, Speed Index, TTI), and improvement opportunities. This distinguishes it from siblings like audit_page and audit_site, which are not described as Lighthouse/PSI runs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for the engine decision: default PSI adds CrUX field data but is rate-limited, set PAGESPEED_API_KEY to raise quota, auto-fallback to local on quota exhaustion, and set local=true to force local (no key/quota, needs Chrome, no field data). It does not, however, explain when to choose this tool over sibling audit_page/audit_site, so it stops short of full when/when-not/alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.1.9
    • Changedaudit_page4 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "When pagespeed=true, also attach the full GTmetrix-style detail layer under pagespeed.detail (all category scores, diagnostics, resource breakdown, suggestions, passed checks). Default false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / local
        Added value: +{
        +  "description": "When pagespeed=true, force the local Lighthouse engine instead of Google PSI (no API key/quota; requires Chrome installed). Default false — PSI is used first and falls back to local automatically when it is over quota.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / strategy / enum
        Added value: +[
        +  "mobile",
        +  "desktop"
        +]
    • Addedaudit_site
    • Changedcheck_robots1 field changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
    • Changedcheck_sitemap1 field changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
    • Changedexport_audit_pdf5 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "Include the full GTmetrix-style detail in the PDF (category scores, diagnostics, resource weight, prioritized suggestions, passed checks). Defaults to true when pagespeed=true.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / pagespeed / description
        Previous value: -"Also run PageSpeed Insights and include performance metrics in the report (default false)"New value: +"Also run PageSpeed and include performance metrics in the report (default false). When true, BOTH Mobile and Desktop are included in the same PDF unless a single \"strategy\" is specified."
      • changedInput schema / properties / strategy / description
        Previous value: -"PageSpeed strategy when pagespeed=true: \"mobile\" (default) or \"desktop\""New value: +"Limit the PageSpeed section to one strategy: \"mobile\" or \"desktop\". Omit to include BOTH in the same file (default)."
      • addedInput schema / properties / strategy / enum
        Added value: +[
        +  "mobile",
        +  "desktop"
        +]
    • Addedexport_site_pdf
    • Changedextract_schema1 field changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
    • Changedfind_broken_links1 field changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
    • Changedkeyword_ideas1 field changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
    • Changedpagespeed4 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "Return the full GTmetrix-style detail: all four category scores (Performance, Accessibility, Best Practices, SEO), diagnostics (server response, DOM size, page weight, request count), resource breakdown, prioritized suggestions with descriptions, and passed best-practice checks. Default false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / local
        Added value: +{
        +  "description": "Force the local Lighthouse engine instead of Google PSI (no API key/quota; requires Chrome installed; lab metrics only). Default false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / strategy / enum
        Added value: +[
        +  "mobile",
        +  "desktop"
        +]
  2. 8 tool updatesv0.1.0
    • First observedaudit_page
    • First observedcheck_robots
    • First observedcheck_sitemap
    • First observedexport_audit_pdf
    • First observedextract_schema
    • First observedfind_broken_links
    • First observedkeyword_ideas
    • First observedpagespeed

TDQS

A3.8/5.0

Scored across 10 tools

Disambiguation4/5

Tools target mostly distinct SEO subtasks, but audit_page and pagespeed overlap because audit_page can optionally attach PageSpeed metrics. Similarly, check_robots/check_sitemap partially overlap with audit_page's indexability checks, though descriptions usually clarify intended use.

Naming Consistency4/5

Nearly all names use snake_case and mostly follow a verb_noun pattern, such as audit_page, check_robots, and export_site_pdf. However, keyword_ideas and pagespeed are noun-only exceptions, so it is not a strict verb_noun pattern throughout.

Tool Count5/5

Ten tools is well-scoped for an SEO audit server. Each tool covers a clear, non-trivial function: page/site audits, technical checks, PDF exports, performance, and keyword ideas.

Completeness4/5

The core technical and on-page SEO audit lifecycle is covered, including page audits, site-wide audits, robots.txt, sitemaps, structured data, broken links, performance, keyword ideas, and PDF reporting. Broader SEO capabilities like backlink analysis, rank tracking, or keyword search volume are missing, but common audit workflows are workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server for on-page SEO auditing and JSON-LD schema validation, providing tools for full SEO audit, schema validation, heading hierarchy, and image audit without requiring API keys.
    4
    535 npm
    2
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    An MCP server providing 20 SEO tools including coverage reports, supporting both stdio and HTTP modes for data-driven SEO analysis.
    20
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides SEO analysis tools including backlink analysis, keyword research, and traffic estimation using Ahrefs data, with CAPTCHA solving and caching.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that provides a suite of SEO analysis tools for auditing meta tags, headings, links, keyword density, page speed, and sitemaps without requiring external API keys.
    6
    33 npm
    1
    MIT