Skip to main content
Glama
sandipprajapatiinic

Website Intelligence MCP

Website Intelligence MCP

An MCP server that analyzes a public webpage for SEO, metadata, and technical signals. It runs over stdio and exposes 27 tools: 26 single-purpose analyzers, plus analyze_website, which runs all 26 in one call.

Source code and issues: github.com/sandipprajapatiinic/website-intelligence-mcp.

Every tool takes one required input, url (an HTTP or HTTPS URL), and returns its result as JSON in a single text content item.

Installation

Requires Node.js 22 or later (engines: >=22; tested on 22.17).

git clone https://github.com/sandipprajapatiinic/website-intelligence-mcp.git
cd website-intelligence-mcp
npm install
npm run build

Related MCP server: Fetch Crawl MCP

Scripts

Command

What it does

npm run dev

Runs the server from source with tsx src/server.ts

npm run build

Deletes dist/, then compiles src/ to dist/ with tsc

npm run start

Runs the compiled server, node dist/server.js (run npm run build first)

npm run typecheck

Type-checks the source, the tests, and src/test-client.ts without emitting files

npm test

Runs the automated test suite (see Testing)

npm pack and npm publish build first (prepack), and npm publish also runs the typecheck and tests (prepublishOnly). The package contains only dist/, README.md, LICENSE, and package.json. It installs a website-intelligence-mcp command that starts the compiled server.

main also points to dist/server.js. The package is a command-line server, not a library: importing it starts the server, and it exports nothing.

Using it from an MCP client

The server uses the stdio transport. stdout carries only MCP protocol messages, and all logging (the startup message and per-analyzer progress) goes to stderr.

Register it as a stdio server. From a checkout, after npm run build:

{
  "mcpServers": {
    "website-intelligence": {
      "command": "node",
      "args": ["/absolute/path/to/website-intelligence-mcp/dist/server.js"]
    }
  }
}

If the package is installed, use "command": "website-intelligence-mcp" with no arguments. It can be installed globally from a checkout or from a tarball made by npm pack:

npm install -g /path/to/website-intelligence-mcp          # a checkout (run npm run build first)
npm install -g ./website-intelligence-mcp-1.0.0.tgz       # a tarball

The package isn't on the npm registry yet. Once it's published, npm install -g website-intelligence-mcp will install the same command.

To run from source instead, use "command": "npx" with "args": ["tsx", "/absolute/path/to/website-intelligence-mcp/src/server.ts"].

Don't launch it through npm start or npm run dev: npm prints its own banner to stdout before the server starts, which breaks the MCP protocol stream.

Tools

Descriptions are the ones the server registers.

Tool

Description

analyze_title

Analyze the title tag of a webpage

analyze_meta

Analyze the meta description of a webpage

analyze_headings

Analyze the heading structure of a webpage

analyze_images

Analyze images and their alt attributes on a webpage

analyze_links

Analyze the links on a webpage

analyze_canonical

Analyze the canonical URL of a webpage

analyze_robots

Analyze the robots meta directive of a webpage

analyze_open_graph

Analyze Open Graph metadata of a webpage

analyze_schema

Validate JSON-LD schema objects of a webpage and count valid and invalid schemas

analyze_viewport

Analyze the viewport meta tag of a webpage

analyze_lang

Analyze the HTML lang attribute of a webpage

analyze_favicon

Analyze the favicon of a webpage

analyze_hreflang

Analyze hreflang declarations of a webpage

analyze_charset

Analyze the character encoding of a webpage

analyze_ssl

Analyze whether a webpage uses HTTPS

analyze_sitemap

Analyze the sitemap availability of a webpage

analyze_robots_txt

Analyze the robots.txt file of a webpage

analyze_performance

Analyze basic page performance metrics

analyze_security

Analyze basic HTTPS and security headers

analyze_social

Analyze Open Graph and Twitter Card metadata

analyze_mobile

Analyze mobile viewport and responsive configuration

analyze_technology

Analyze basic technology and platform signals

analyze_accessibility

Analyze basic accessibility issues

analyze_content

Analyze basic content quality and structure

analyze_structured_data

Summarize JSON-LD structured data blocks of a webpage and flag empty or invalid blocks

analyze_technical

Analyze basic technical SEO configuration

analyze_website

Run a complete website intelligence analysis

Notes on specific tools:

  • analyze_ssl only inspects the URL's protocol and makes no request.

  • analyze_sitemap sends a HEAD request for /sitemap.xml at the page's origin.

  • analyze_robots_txt fetches /robots.txt at the page's origin. A missing or unreadable file is reported as missing, not as an error.

  • analyze_performance times one request for the page and reports its status code, HTML size, and response time.

  • analyze_security checks HTTPS and the Content-Security-Policy, X-Content-Type-Options, X-Frame-Options, and Referrer-Policy headers.

Every analyzer result has the same common fields:

  • url comes first.

  • The analyzer-specific fields follow.

  • It ends with status, issues (an array of strings) and recommendation (a string).

status values are specific to each analyzer, for example good, needs_improvement, missing, poor, critical or invalid. error is never used by an analyzer; it only marks a failed section in analyze_website.

The TypeScript types for these results are in src/types/analyzer-result.ts:

  • AnalyzerResultBase: the common fields.

  • AnalyzerResult<Analysis>: the common fields plus one analyzer's own fields and status values.

  • AnalyzerErrorResult: a failed analyze_website section.

  • WebsiteAnalysisResult: the whole analyze_website result.

analyze_website

analyze_website runs all 26 analyzers against one URL:

  1. It validates the URL, including the DNS check, before any request is made. If the URL is rejected, the whole call fails.

  2. It fetches the page once for this call and shares it:

    • the HTML goes to the 21 analyzers that only read HTML

    • the final response's timing and status go to performance

    • its headers go to security

    • its HTML and headers go to technology

    Nothing is cached or shared between calls.

  3. The analyzers then run concurrently.

A full run makes 3 requests: the page, /robots.txt, and a HEAD request for /sitemap.xml. robots.txt and the sitemap are separate resources, so they always need their own requests. When a tool is called on its own, it fetches what it needs itself.

The result has 26 sections under analyses, in this order: title, meta, headings, images, links, canonical, robots, openGraph, schema, viewport, lang, favicon, hreflang, charset, ssl, sitemap, robotsTxt, performance, security, social, mobile, technology, accessibility, content, structuredData, technical. Each section is the same result the matching individual tool returns (apart from timing values such as responseTimeMs).

{
  "url": "https://example.com",
  "status": "completed",
  "analyses": {
    "title": { "...": "..." },
    "meta": { "...": "..." }
  }
}

If an analyzer fails, the others still complete:

  • The failed analyzer's section becomes { "url": "<url>", "status": "error", "error": "<message>" }.

  • The top-level status becomes completed_with_errors, and a failedAnalyzers array lists the failed section names.

If the shared page fetch fails (for example, the page isn't HTML), the 21 sections that need the HTML each report Page could not be fetched: <reason>. ssl and robotsTxt still run. performance, security, and technology fall back to their own page request, which accepts any status and content type, just as when they're called on their own.

Error handling

Situation

What the MCP client receives

Success

The JSON result as text

url missing or not a URL

isError: true, text Input validation error: Invalid arguments for tool <name>: url: Invalid URL

URL rejected by the security rules, or the request fails

isError: true, with the error message as plain text (for example Localhost URLs are not allowed)

Some analyzers fail inside analyze_website

A normal result with status: "completed_with_errors" (see above)

A failed call doesn't stop the server.

Security / SSRF protections

All outbound requests go through src/utils/fetch-page.ts; nothing calls fetch() directly. It has two entry points:

  • fetchPage(url) returns a page's HTML. It is used by the HTML analyzers and by analyze_website's shared fetch, and it requires a 2xx status and a text/html content type.

  • safeFetch(url, init) returns the raw response (status, headers, body). It is used where the status, headers, or timing matter (performance, security, technology), for robots.txt and the sitemap check, and by the HTML analyzers that read the page directly. It accepts any content type, because robots.txt is plain text and the sitemap check is a HEAD request for an XML file.

Both apply the same rules:

  • HTTP and HTTPS only: other protocols (ftp:, file:, data:, javascript:, …) are rejected.

  • No credentials: URLs containing a username or password are rejected.

  • No localhost: localhost, localhost., *.localhost, localhost.localdomain, 0.0.0.0, and [::1] are rejected.

  • Blocked IPv4 ranges:

    • 0.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16 (including the cloud metadata address 169.254.169.254)

    • 172.16.0.0/12, 192.0.0.0/24, 192.168.0.0/16, 198.18.0.0/15

    • 224.0.0.0/4 and 240.0.0.0/4

  • Blocked IPv6 ranges:

    • ::, ::1, and the IPv4-compatible ::/96

    • fc00::/7, fe80::/10, fec0::/10, and ff00::/8

    • NAT64 64:ff9b::/96 and 64:ff9b:1::/48

    IPv4-mapped addresses such as ::ffff:127.0.0.1 are checked against the IPv4 ranges. Encoded forms such as 2130706433 or 0x7f000001 are normalized by the URL parser and caught.

  • DNS check: before a request, the hostname is resolved, and it is rejected if any address it resolves to is blocked.

  • DNS rebinding protection: requests use Node's built-in http/https modules with a DNS lookup hook. The hook resolves the hostname again when the socket connects and refuses to connect if any address is blocked. The connection can only use addresses that passed that check, so a hostname that resolves to a public address during validation and a private one at connect time is refused.

  • Redirects: followed manually, at most 5, and every hop gets the full URL, DNS, and connect-time checks. A redirect to a blocked address is refused before any request is sent to it.

  • Timeout: each call is aborted after 10 seconds, covering redirects and reading the body. A request that gets no response reports Website request timed out after 10 seconds.

  • Size limit: 5 MB, meaning 5,000,000 bytes of decoded body.

    • A declared Content-Length over the limit is rejected before the body is read.

    • The limit is enforced again while streaming, so a missing or misleading Content-Length is still caught. That includes a small gzip body that decompresses to more than 5 MB.

    • fetchPage reports HTML response is too large, and safeFetch reports Response is too large.

    • safeFetch HEAD requests are exempt because no body is read.

  • Unread bodies: when a response is rejected, or only its headers are needed, its body is discarded right away, so the connection closes instead of staying open.

Testing

npm test

Runs 199 tests with Node's built-in test runner (node:test), in about 11 seconds. Most of that is one check of the 10-second timeout.

The suite is deterministic and doesn't need internet access:

  • Stub server: a local HTTP server serves the test pages, redirects, oversized bodies, stalled responses, and gzip responses.

  • Local DNS: every DNS lookup is answered locally. That includes hostnames whose answer changes after the first lookup, which are used to test DNS rebinding.

  • Routing: connections are routed to the stub only after the production connect-time DNS check has approved them. A connection to any other host, a connection without that check, or a fetch() call fails the test.

The production URL, DNS, redirect, timeout, size, and content-type checks run unchanged.

File

Covers

test/url-validation.test.ts

URL, protocol, credential, localhost, IP-range, and DNS validation

test/fetch-page.test.ts

fetchPage, fetchPageDetails, and safeFetch: success, redirects, content type, status codes, size limits, gzip, closing connections for unread bodies, timeouts

test/dns-rebinding.test.ts

The connect-time DNS check, for direct requests, redirects, analyzers, and analyze_website

test/analyzers.test.ts

All 26 analyzers on a fully populated page and on a bare page, the common result fields, each analyzer's field names and order, and network usage

test/analyzer-result.test.ts

The shared result types (compile-time checks run by npm run typecheck)

test/analyze-website.test.ts

The combined result and its 26 sections (compared with direct analyzer calls), the single page fetch and 3-request budget, no sharing between calls, and partial errors

test/mcp-server.test.ts

Starts the real stdio server: registration of all 27 tools, their input schemas, tool calls, and rejection of unsafe URLs

Example usage

src/test-client.ts starts the server from source, lists its tools, and calls analyze_website on https://example.com. It needs internet access, and it isn't part of the build.

npx tsx src/test-client.ts

Calling analyze_title with { "url": "https://example.com" } returns:

{
  "url": "https://example.com",
  "title": "Example Domain",
  "length": 14,
  "hasTitle": true,
  "status": "needs_improvement",
  "issues": ["Title is very short"],
  "recommendation": "Make the title more descriptive and useful to searchers."
}

Known limitations

  • No JavaScript rendering: analyzers read the HTML the server returns, so content added by client-side JavaScript isn't seen.

  • safeFetch doesn't check content type: analyzers that read the page through it (performance, security, technology, and the HTML analyzers that fetch the page themselves) accept any content type. Only fetchPage requires text/html.

  • Sitemap detection: analyze_sitemap only checks /sitemap.xml with a HEAD request. It doesn't read Sitemap: lines in robots.txt, and it reports missing if the server rejects HEAD requests.

  • Responses over 5 MB: analyzers report an error instead of analyzing a partial page. An oversized robots.txt is reported as missing.

  • HTTPS in the test suite: the stub server is plain HTTP, so npm test doesn't exercise real TLS connections.

  • Ports and concurrency: any port on a public host is allowed (for example :8080), and there's no limit on how many tool calls or requests run at once.

License

MIT © 2026 Sandip Prajapati

Available Tools

27 tools
analyze_accessibilityC

Analyze basic accessibility issues

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.4/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 the full disclosure burden. It implies a read-only analysis and hints at shallowness via "basic", but says nothing about required permissions, fetch behavior, rate limits, or what is inspected.

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

Conciseness3/5

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

A single short phrase with no padding, so nothing is wasted. The tradeoff is under-specification rather than verbosity.

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

Completeness2/5

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

For a one-parameter tool with no output schema and no annotations, the description leaves critical gaps: what counts as an "accessibility issue", which rules or standard are applied, and what the result contains. A couple of sentences would close this.

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

Parameters2/5

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

One parameter (url) with 0% schema description coverage, so the description must compensate and does not. It never confirms the parameter is the target page URL or whether it must be absolute, though the uri format hints at that.

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

Purpose3/5

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

States a verb (analyze) and a resource (accessibility issues), which separates it from the many analyze_* siblings by topic. However, "basic" is undefined and no scope, standard, or depth is given, so the agent cannot tell how this differs from a deeper accessibility check.

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?

No when-to-use context, no prerequisites, and no routing to or away from any of the ~27 sibling analyze_* tools. The agent must infer that this applies when the task is accessibility rather than title, meta, headings, etc.

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

analyze_canonicalC

Analyze the canonical URL of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations provided, so the description carries the full burden. It doesn't specify what the analysis returns, whether the tool fetches the page or just parses the URL, what error conditions exist (e.g., missing canonical tag), or any behavioral traits.

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?

Single short sentence, front-loaded and efficient. No wasted words, but also very sparse.

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

Completeness2/5

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

For a tool with no annotations, no output schema, and no parameter descriptions, the description is too thin. It leaves the agent guessing about the analysis output and the exact semantics of the 'url' parameter.

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

Parameters2/5

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

Schema coverage is 0% and the description adds no meaning beyond the parameter name 'url'. It doesn't clarify whether the URL is the page to check or the canonical URL itself, nor any format expectations beyond the schema's 'uri' type.

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 specific verb (Analyze) and resource (canonical URL of a webpage). Distinguishable from siblings like analyze_title or analyze_meta, though the verb 'analyze' is shared across all siblings, so the distinguishing factor is the 'canonical URL' resource.

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?

No guidance on when to use this tool versus alternatives. It doesn't explain what analyzing the canonical URL entails or when an agent should invoke it.

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

analyze_charsetC

Analyze the character encoding of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/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 the full burden of behavioral disclosure. It implies a remote fetch of the URL but says nothing about what the analysis produces, whether it detects declared vs. actual encoding, whether it is read-only, or how failures are surfaced. For a network-dependent tool with zero annotation coverage, this is a notable gap.

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?

A single, front-loaded sentence with no filler or redundancy. It is appropriately terse, though the brevity borders on under-specification rather than disciplined conciseness.

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

Completeness2/5

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

With no annotations and no output schema, the description is the only source of behavioral detail, and it provides almost none: no return format, no encoding-detection semantics, no error behavior. Given the complexity of charset detection, an agent cannot predict what it will get back.

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 0%, but the single parameter is a self-evident 'url' with format uri. The description's phrase 'of a webpage' adds only marginal meaning beyond the parameter name, so the tool is not meaningfully documented at the parameter level but also suffers little from the omission.

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 specific verb (Analyze) plus a specific resource (character encoding of a webpage), which is clear and distinct from sibling resources like analyze_title or analyze_meta. It does not, however, differentiate itself beyond the resource noun, relying on the sibling naming convention to carry that load.

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?

No guidance on when to use this tool versus alternatives such as analyze_technical or analyze_content, which likely overlap in scope. No prerequisites, no exclusions, no mention of when charset analysis matters (e.g., mojibake debugging).

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

analyze_contentC

Analyze basic content quality and structure

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.1/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 the full burden. It discloses nothing about what "quality" is measured, what "structure" is inspected, whether it fetches the page, what permissions or rate limits apply, or what the result contains. "Basic" implies a limited scope but is not a behavioral fact.

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

Conciseness3/5

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

One short, front-loaded phrase with no padding, but the terseness reflects under-specification rather than disciplined conciseness. Nothing extraneous, yet nothing that earns the reader's attention either.

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

Completeness2/5

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

With no annotations, no output schema, and 0% schema coverage, the description must supply all context, and it does not. An agent does not learn what is analyzed, what is returned, or how this differs from the overlapping analyze_headings/analyze_technical siblings.

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

Parameters2/5

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

Schema description coverage is 0% and the description never mentions the url parameter — its format expectations, whether it must be absolute/accessible, or what happens on unreachable URLs. Even though the single uri parameter is largely self-evident, the description adds no meaning beyond the schema.

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

Purpose2/5

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

"Analyze basic content quality and structure" gives a verb and a loose resource, but "content quality and structure" is vague and does not distinguish this tool from siblings like analyze_headings, analyze_title, or analyze_accessibility, which all plausibly cover content structure. An agent cannot tell what this tool uniquely does.

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 guidance on when to use this tool versus the 27 other analyze_* siblings, and no prerequisites or exclusions. The word "basic" hints at a shallow pass but does not route the agent to an alternative for deeper analysis.

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

analyze_faviconC

Analyze the favicon of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/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 the full behavioral burden. 'Analyze' implies a read-only inspection, but it does not disclose what is analyzed, what the output contains, or any limitations, permissions, or side effects.

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?

The description is a single, front-loaded sentence with no wasted words. It is appropriately sized in terms of brevity, even though it is sparse in content.

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

Completeness2/5

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

For an analysis tool with no annotations and no output schema, the description is too sparse. It does not explain what the analysis returns, such as favicon URL, type, sizes, or errors, leaving the agent without enough context to set expectations.

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 0%, with only a basic URI-typed 'url' parameter. The description adds minor semantic context by indicating the URL should point to a webpage, but it does not explain format expectations or parameter behavior 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?

The description states a specific verb and resource: 'Analyze the favicon of a webpage.' It clearly identifies what the tool operates on, though it does not differentiate itself from the many sibling analyze_* tools beyond the resource name.

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 guidance, no exclusions, and no mention of alternatives among the many sibling tools. An agent must infer usage solely from the tool name and one-line description.

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

analyze_headingsC

Analyze the heading structure of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.7/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 the full behavioral burden. It only repeats the tool's analytical purpose and says nothing about whether it fetches the page, requires authentication, handles errors, or what it returns. Implicitly read-only, but no explicit behavioral disclosure.

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 short, front-loaded sentence with no filler. It is efficiently structured and easy to parse, though its extreme brevity is inseparable from the other gaps noted above. A 4 rather than 5 because there is no additional structural aid.

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

Completeness2/5

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

For a tool with no annotations and no output schema, the description should convey enough context to invoke and interpret it. It omits usage context, sibling differentiation, and return expectations, leaving an agent with little beyond the bare purpose. Incomplete for a simple but ambiguous member of a large analyze_* family.

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

Parameters2/5

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

Schema description coverage is 0%, and the single required url parameter gets no description in the text. 'of a webpage' faintly implies the URL points to a webpage, but format, requiredness, and examples are left to the schema's minimal uri format. Adds almost nothing 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 specific verb ('Analyze') and resource ('heading structure of a webpage'), so the function is clear. However, it does not differentiate itself from the many sibling analyze_* tools (e.g., analyze_content, analyze_accessibility), which also operate on a webpage. A clear 4, not 5, because sibling differentiation is absent.

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?

No when-to-use or when-not-to-use guidance. With 27 sibling analyze_* tools, an agent gets no help deciding between this and analyze_content or analyze_accessibility. Absence of alternatives or context earns a 2.

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

analyze_hreflangC

Analyze hreflang declarations of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.7/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 the full behavioral burden. 'Analyze' implies a non-destructive read of a remote page, but the description says nothing about network fetching, authentication, rate limits, or what the analysis reports. Only the minimal read-only implication is conveyed.

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?

A single short sentence with no waste, and the resource is front-loaded. It is concise to the point of under-specification rather than bloated.

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

Completeness2/5

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

With no annotations, no output schema, and zero parameter description coverage, the description leaves the agent guessing about inputs' meaning and results. For a tool whose only argument is a URL and whose purpose is analysis, more detail about what is checked and returned is warranted.

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

Parameters2/5

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

Schema description coverage is 0%, and the single required 'url' parameter is undocumented in both the schema and the description. The phrase 'of a webpage' hints that the URL targets an HTML page, but it adds no syntax, format, or constraint detail beyond the schema's format: uri.

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 specific resource ('hreflang declarations of a webpage') with a generic but adequate verb, so it distinguishes this tool from siblings like analyze_canonical or analyze_lang within the analyze_* family. It is not a tautology, but it does not describe scope, depth, or what output the analysis yields.

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?

No explicit when-to-use, when-not-to-use, or alternative routing is given. Usage is only inferable from the shared analyze_* naming convention, which is weak guidance for an agent choosing among ~27 siblings.

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

analyze_imagesC

Analyze images and their alt attributes on a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/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 the full behavioral burden. It says nothing about what the analysis produces, whether it fetches the page live, whether it requires the URL to be reachable, or any rate/time constraints.

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?

A single, front-loaded sentence with no filler. It is efficient, though the terseness contributes to the gaps elsewhere.

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

Completeness2/5

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

With no output schema and no annotations, the description leaves the agent guessing about the return shape and scope of the analysis (e.g., missing-alt detection, counts, severity). For an analyzer tool in a large family, this is under-specified.

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?

One parameter (url) with format: uri is largely self-documenting, and the description adds no format or constraint detail beyond the schema. Adequate by the low-parameter baseline, but no added value.

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 specific verb (analyze) and resource (images and their alt attributes on a webpage), which cleanly separates it from siblings like analyze_links or analyze_meta. It does not explicitly name a sibling, so it falls short of 5.

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?

No statement of when to use this tool versus alternatives, no prerequisites, no exclusions. The sibling naming convention (analyze_*) implies the context, but the description itself gives no guidance.

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

analyze_langC

Analyze the HTML lang attribute of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.7/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 the full burden. It does not disclose whether the tool is read-only, what output format to expect, error behavior, or any other behavioral trait beyond the basic purpose.

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 with no wasted words. It efficiently communicates the tool's scope within one line.

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

Completeness2/5

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

Given the lack of output schema and annotations, the description should explain what the analysis returns (e.g., the lang value, an error if missing). It omits this, leaving an agent unsure of the result format and how to interpret the response.

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

Parameters1/5

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

The single 'url' parameter has no description in the schema (0% coverage) and is never mentioned in the description. The schema provides only type and format, so the description adds no meaning about the parameter's role or expected format beyond what is already structured.

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 specific verb ('Analyze') and resource ('the HTML lang attribute'), which distinguishes it from siblings like analyze_hreflang or analyze_charset that target other attributes. However, 'Analyze' is generic and the description does not specify what aspect of the lang attribute is analyzed (presence, value, validity), leaving the scope slightly ambiguous.

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?

No explicit guidance on when to use this tool versus alternatives. An agent must infer from the name alone that it checks the lang attribute, with no exclusions or conditions provided.

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

analyze_metaC

Analyze the meta description of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations at all, the description carries the full burden, yet it does not disclose what 'analyze' actually does — whether it fetches the URL live, what properties it evaluates (length, presence, duplicates), or whether any auth/rate limits apply. It adds nothing beyond the name.

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?

A single short sentence, front-loaded with the verb and resource. It is efficient, though arguably too terse to be informative rather than genuinely optimal.

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

Completeness2/5

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

For a tool with no annotations, no output schema, and an undocumented parameter, the description should explain what the analysis returns or which aspects are evaluated. It leaves the agent unable to predict the result shape or behavior.

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

Parameters2/5

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

There is one required parameter with 0% schema description coverage; the schema only declares 'url' as a uri format. The description's phrase 'of a webpage' loosely implies the url target, but adds no syntax, format, or constraint detail 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 specific verb ('Analyze') and resource ('meta description of a webpage'), which is clearer than a bare tautology. It does not explicitly distinguish itself from siblings like analyze_title or analyze_open_graph, but the resource noun is specific enough that an agent can differentiate it.

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 guidance, no stated prerequisites (e.g., whether the page must be fetched first), and no mention of alternatives among the many analyze_* siblings. Usage must be inferred entirely from the name.

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

analyze_mobileC

Analyze mobile viewport and responsive configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden of behavioral disclosure. It says only that the tool analyzes mobile viewport and responsive configuration, but does not state whether it is read-only, what checks it performs, whether it requires JavaScript rendering, or what side effects (if any) exist.

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?

The single sentence is front-loaded, focused, and free of filler. However, it is arguably too terse for a tool whose siblings and behavioral profile are otherwise undocumented.

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

Completeness2/5

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

For a simple one-parameter analysis tool with no output schema and no annotations, the description should at least clarify scope, output, and relation to similar tools. It states only a high-level purpose and leaves sibling ambiguity, parameter semantics, and behavioral details unaddressed.

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

Parameters1/5

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

There is one required parameter, 'url', but schema description coverage is 0% and the description does not mention the parameter at all. It therefore adds no meaning beyond the bare schema type and format, failing to compensate for the missing schema documentation.

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 states a clear verb and resource: 'Analyze mobile viewport and responsive configuration.' It identifies what the tool does, but does not distinguish it from the sibling analyze_viewport, leaving ambiguity about which viewport-related analyzer to choose.

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?

No when-to-use, when-not-to-use, or alternative guidance is provided. With many sibling analyzers including analyze_viewport, analyze_accessibility, and analyze_technical, the description gives no criteria for selecting this tool over others.

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

analyze_open_graphC

Analyze Open Graph metadata of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/5.0
Behavior2/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 it discloses almost nothing: not whether it fetches the live page or requires network access, what happens when a page has no Open Graph tags, or what shape the result takes. 'Analyze' is a black box.

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?

A single tight sentence with the resource front-loaded and no filler. It is efficient, though its brevity comes at the cost of the content the other dimensions flag as missing.

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

Completeness2/5

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

For a tool with no annotations, no output schema, and no parameter documentation, the description should at minimum sketch what is returned and how missing/malformed Open Graph data is handled. It does none of this.

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 0%, but there is only one parameter and 'url' with format uri is self-explanatory, so the semantic gap is small. The description adds no information about whether the URL is fetched server-side or what forms are accepted.

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 specific verb ('Analyze') and a specific resource ('Open Graph metadata'), which is enough to distinguish it from the broader analyze_meta or analyze_social siblings. However, it does not explicitly name those siblings, so the differentiation is implied rather than stated.

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?

The description gives no indication of when to reach for this tool versus analyze_meta, analyze_social, or analyze_structured_data. No prerequisites, no exclusions, no alternative routing information.

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

analyze_performanceC

Analyze basic page performance metrics

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.6/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 the full burden. It reveals only that metrics are 'basic,' with no disclosure of what is measured (load time, Core Web Vitals, page weight), whether the target must be publicly reachable, or any auth/rate-limit behavior.

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

Conciseness3/5

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

A single short sentence with no wasted words, but it is under-specified rather than genuinely concise. There is room to add scope and usage detail without bloat.

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

Completeness2/5

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

With no annotations, no output schema, and no parameter documentation, the description is too thin for a tool whose output and scope ('basic' vs comprehensive performance data) are undefined. An agent cannot predict what it gets back or when it applies.

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

Parameters2/5

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

One parameter at 0% schema description coverage, and the description adds nothing about the url beyond what the schema's 'format: uri' already conveys. It should clarify expectations such as a publicly reachable URL or whether redirects are followed.

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 specific verb (Analyze) and resource (page performance metrics), which distinguishes it from most siblings like analyze_title or analyze_meta. However, it does not differentiate from adjacent ambiguous siblings such as analyze_technical, analyze_mobile, or analyze_website, and 'basic' is vague about scope.

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?

No indication of when to use this tool versus the many sibling analyzers. An agent must infer that performance is a distinct concern from technical/mobile/accessibility analyses, with no explicit routing or prerequisites given.

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

analyze_robotsC

Analyze the robots meta directive of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/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 the full behavioral burden, and it discloses almost nothing: no indication of what the analysis produces, whether it distinguishes index/noindex/nofollow directives, or how it behaves on pages lacking a robots meta tag.

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?

A single tight sentence with no filler, front-loaded with the verb and resource. It is efficient, though its brevity is partly under-specification rather than disciplined concision.

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

Completeness2/5

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

With no annotations, no output schema, and no parameter documentation, the description is the only source of context and it is insufficient: an agent cannot predict what the tool returns or how to interpret a null/absent 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 0%, so the description would ideally explain the url parameter, which it does not. The single parameter is a self-evident URI, which keeps this at a minimum-viable level rather than a failing one.

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 specific verb (Analyze) and resource (the robots meta directive of a webpage), which is clear enough to distinguish from the near-named sibling analyze_robots_txt. However, it never clarifies the distinction explicitly, so an agent could still confuse the two.

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?

No guidance on when to use this versus analyze_robots_txt, analyze_meta, or the many other analyze_* siblings. The agent must infer the trigger condition (page contains a robots meta tag) entirely on its own.

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

analyze_robots_txtC

Analyze the robots.txt file of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/5.0
Behavior2/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 discloses nothing beyond the bare action. It does not say whether it fetches the file remotely, how it handles a missing or malformed robots.txt, what it returns, or whether any auth/rate limits apply.

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?

A single short sentence with no waste and the key noun front-loaded. It is efficient, though so terse that it omits useful substance rather than being over-long.

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

Completeness2/5

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

No output schema, no annotations, and zero parameter description coverage means the description must supply everything, yet it supplies only a one-line purpose. An agent lacks enough context about behavior and results to invoke this confidently.

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 0% and there is one parameter, so the description must compensate. It does add mild meaning by implying 'url' refers to a webpage whose robots.txt is fetched (rather than a direct robots.txt URL), but gives no format or edge-case detail beyond what the schema's uri format already implies.

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 specific verb (Analyze) and resource (the robots.txt file of a webpage), so the action is immediately clear. It does not differentiate itself from the near-identical sibling analyze_robots, leaving an agent to guess which of the two to call.

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 guidance on when to use this tool versus the many sibling analyzers, nor any note about the near-duplicate analyze_robots. Usage must be entirely inferred from the name.

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

analyze_schemaC

Validate JSON-LD schema objects of a webpage and count valid and invalid schemas

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations exist, so the description carries the full behavioral burden, and it discloses little: it does not say the tool fetches the page over the network, whether invalid pages error or return counts, how validation rules are chosen, or any rate/permission behavior. Only the validation-plus-count outcome is stated.

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?

A single front-loaded sentence with no filler. It is efficiently sized, though the phrase 'count valid and invalid schemas' slightly blurs validation rules and result reporting in the same clause.

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?

With no output schema and no annotations, the description is the only source of behavioral and result information, and it only hints at the return (valid/invalid counts). For a page-fetching validation tool, an agent still lacks enough to know error modes or result shape.

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 0% for the single url parameter, but the parameter is self-evident (a URI) and the phrase 'of a webpage' adds the useful implication that the URL must resolve to an HTML page. This is marginal added meaning over the uri-format schema entry.

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 specific verb (validate) plus resource (JSON-LD schema objects of a webpage) and even the output intent (count valid/invalid). However, it draws no boundary against the sibling analyze_structured_data, which an agent would reasonably confuse with this tool.

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 guidance, no prerequisites, and no mention of alternatives such as analyze_structured_data or analyze_content. The agent must infer selection from the name alone.

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

analyze_securityC

Analyze basic HTTPS and security headers

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/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 the full behavioral burden, yet it discloses almost nothing: no indication of what 'security headers' are inspected, whether the target is fetched live, what happens on failure, or what the response contains. 'Basic' hints at a scope limit but does not define it.

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?

A single front-loaded sentence with zero filler, which is structurally sound. It is arguably terse to the point of under-specification, but nothing in it is wasted.

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?

For a simple one-parameter read-only analysis tool this is minimally viable, and no output schema exists that would need explaining. The real gap is the unresolved overlap with analyze_ssl and the absence of any statement about what the analysis returns or checks.

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 0%, so the description would need to compensate, and it does not mention the url parameter at all. The parameter is nonetheless self-evident from its name and format:uri constraint, so the gap is minor rather than crippling.

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 resource scope — HTTPS and security headers — which is more specific than a bare 'analyze' tautology. However, it does not differentiate itself from the sibling analyze_ssl, and the qualifier 'basic' leaves the exact scope of the checks ambiguous.

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?

The description gives no when-to-use guidance, no prerequisites, and no indication of when to prefer it over analyze_ssl or analyze_technical. The agent must infer its place in the 27-tool sibling set on its own.

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

analyze_sitemapC

Analyze the sitemap availability of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations and no output schema, the description carries the full behavioral burden yet says nothing about what it does under the hood: whether it fetches /sitemap.xml, follows robots.txt Sitemap directives, resolves nested sitemap indexes, or how it reports 'availability'. 'Analyze availability' is an opaque outcome claim rather than a disclosed behavior.

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 compact sentence with the resource and scope front-loaded; nothing is wasted, though the extreme brevity reflects under-specification rather than disciplined conciseness.

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

Completeness2/5

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

For a network-fetching analysis tool with no annotations, no output schema, and an undocumented parameter, the description is far too thin. An agent cannot tell what 'availability' means (existence, validity, fetch success) or what it will receive back, so key information needed to invoke and interpret the tool 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 coverage is 0%, so the description is the only source of parameter meaning. It does clarify that 'url' refers to the webpage (not the sitemap URL itself), which is genuinely useful, but it adds no format, protocol, or protocol-edge details beyond the schema's uri format.

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 specific verb ('Analyze') and resource ('sitemap availability of a webpage'), which is enough to separate it from siblings like analyze_robots_txt or analyze_canonical. It does not explicitly name any sibling or boundary, so it lands at clear-but-undifferentiated rather than fully distinguishing.

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 guidance on when to use this tool versus the many sibling analyze_* crawl tools, no prerequisites, and no exclusions. The agent must infer usage entirely from the tool name.

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

analyze_socialC

Analyze Open Graph and Twitter Card metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.6/5.0
Behavior1/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states only what is analyzed, not how the analysis behaves (e.g., whether it fetches the URL, what it returns, or any error conditions). This is inadequate for a tool with no annotation coverage.

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?

The description is a single, front-loaded sentence of seven words with no filler. Every word earns its place by naming the verb and the metadata types.

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

Completeness2/5

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

Given the absence of annotations, output schema, and parameter descriptions, the definition is incomplete for an agent to use confidently. It omits when to choose this tool over sibling analyzers and provides no behavioral or parameter context to compensate for the sparse structured metadata.

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

Parameters2/5

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

The input schema defines a single required 'url' parameter with URI format but no description, and schema description coverage is 0%. The tool description does not mention the parameter or add any meaning about what URL should be supplied, so it fails to compensate for the low coverage, though the parameter name itself is somewhat self-explanatory.

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 states a specific verb ('Analyze') and resource ('Open Graph and Twitter Card metadata'), making the tool's purpose clear. However, it does not differentiate itself from the overlapping sibling 'analyze_open_graph' or explain the added scope of social metadata beyond Open Graph.

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?

No guidance is given about when to use this tool versus alternatives such as 'analyze_open_graph' or 'analyze_meta'. The context is only implied by the tool name and description, leaving the agent to infer usage from siblings.

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

analyze_sslC

Analyze whether a webpage uses HTTPS

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations and no output schema, so the description carries the full burden and does not meet it. It says nothing about what is actually checked (redirects, certificate validity, TLS version, mixed content) or whether the page is fetched, leaving the agent unable to anticipate results or side effects.

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

Conciseness3/5

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

A single short sentence with no waste, so it is structurally clean. However, the brevity is under-specification rather than economy – the one available sentence does not carry enough information for the agent.

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

Completeness2/5

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

For a tool with no annotations, no output schema, and 0% parameter coverage, the description should explain the return shape (Is this a boolean? A certificate report?) and the network behavior. It leaves both entirely unspecified, though the single-parameter surface keeps the failure from being catastrophic.

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

Parameters2/5

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

Schema description coverage is 0% and the single 'url' parameter is undocumented in both schema and description. The tool's whole premise is checking a URL over the network, yet the description says nothing about whether the URL must be absolute, whether redirects are followed, or what form it takes.

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 specific verb (analyze) plus the resource and dimension (whether a webpage uses HTTPS), which is sharper than the vague sibling names like analyze_website or analyze_technical. It does not, however, explicitly distinguish itself from analyze_security, which plausibly covers HTTPS as part of a broader check.

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?

The description gives no when-to-use guidance, prerequisites, or alternatives. With siblings such as analyze_security present, an agent has to infer from the name alone whether this is the HTTPS-specific check or a subset of the security tool.

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

analyze_structured_dataB

Summarize JSON-LD structured data blocks of a webpage and flag empty or invalid blocks

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose output behavior (summarizes, flags empty/invalid blocks), which is useful, but it says nothing about whether the tool fetches the URL live, permission requirements, 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 and resource, with zero filler. Both the summarize and flag behaviors are packed into a compact clause.

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?

With no annotations and no output schema, the description must carry more weight. It covers the purpose adequately but leaves return-value shape, fetch semantics, and sibling differentiation (analyze_schema) unaddressed.

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 0% and the single 'url' parameter is not described at all. The name is largely self-explanatory (page to analyze), so the ambiguity is low, but the description adds no format or scoping detail beyond the obvious.

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 specific verbs (summarize, flag) and a specific resource (JSON-LD structured data blocks of a webpage). It does not differentiate itself from the sibling analyze_schema, which likely covers the same schema.org/JSON-LD territory, so an agent cannot fully disambiguate from the name alone.

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?

No when-to-use guidance, no exclusions, and no mention of alternatives such as analyze_schema, which is the obvious overlapping sibling. The agent must infer usage context entirely.

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

analyze_technicalC

Analyze basic technical SEO configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.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 the full behavioral burden. It does not say what 'technical configuration' comprises (robots, canonicals, SSL, performance?), whether it is read-only or fetches the live page, or whether results are aggregated. For a tool with zero annotation coverage, this is thin.

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

Conciseness3/5

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

One short sentence with no wasted words and the resource front-loaded. However, brevity here reflects under-specification rather than efficient conciseness, so it earns only a middling score.

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

Completeness2/5

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

No output schema and no annotations, so the description must carry all context, but it says almost nothing about scope, checks performed, or return shape. Against a crowded sibling set, an agent lacks enough to invoke it confidently.

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 (url, format uri), and schema description coverage is 0%. The parameter is self-evident, but the description adds no meaning beyond the schema (e.g., does it fetch the live URL, follow redirects, require a fully qualified URL?). Baseline is a 3 for a trivial single-parameter tool where the schema does most of the work.

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

Purpose3/5

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

The description gives a verb (Analyze) and a resource (technical SEO configuration), but 'basic technical' is vague and does not distinguish this tool from siblings like analyze_performance, analyze_ssl, analyze_website, or analyze_technology. An agent cannot tell which checks this tool actually performs versus those granular siblings.

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 guidance on when to use this tool, when not to, or how it relates to the many sibling analyze_* tools. With 27 siblings, the absence of any routing or scoping guidance is a real gap.

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

analyze_technologyC

Analyze basic technology and platform signals

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.6/5.0
Behavior2/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 not meet it. It never says what signals are returned (CMS, frameworks, analytics, server), whether detection is best-effort, or what the output looks like. "Basic" hints at a limited scope but nothing more.

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?

A single short, front-loaded sentence with no filler. It is efficiently written, though the brevity comes at the cost of substance rather than being genuinely economical.

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

Completeness2/5

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

No annotations, no output schema, no parameter documentation, and unresolved overlap with analyze_technical. For a tool in a large sibling family where disambiguation matters most, this is under-specified.

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?

The schema has 0% description coverage, so the description must compensate, and it does not mention the required url parameter at all. The single url (format: uri) is largely self-evident, which keeps this from being a 2, but no added meaning is provided.

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

Purpose3/5

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

The description gives a verb (analyze) and a loose resource ("technology and platform signals"), which is more than a restatement of the name. However, "basic technology and platform signals" is vague about what is actually detected, and it does nothing to distinguish this from close siblings like analyze_technical, analyze_performance, or analyze_security.

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 any of the ~27 analyze_* siblings, particularly the near-identical analyze_technical. The agent must guess based on the name alone.

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

analyze_titleC

Analyze the title tag of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/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 the full burden and it discloses almost nothing beyond the read-only nature implied by 'analyze'. It does not mention that the URL is fetched over the network, whether auth or rate limits apply, or what the analysis output contains.

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?

A single short sentence with the resource front-loaded and zero wasted words. Its brevity is efficient, though it borders on under-specification rather than tight information density.

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

Completeness2/5

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

With no annotations and no output schema, the description is the only source of behavioral and return-value context, and it omits both. An agent cannot tell whether the result is a length check, a presence flag, a rendered title, or a set of issues.

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 0% for the single url parameter, so the description must compensate. The phrase 'of a webpage' does imply the url identifies the page whose title is fetched, but it adds no detail on absolute URL format, scheme requirements, or failure behavior for unreachable pages.

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 states a specific resource (the title tag) and a clear action (analyze), which cleanly distinguishes it from siblings like analyze_meta, analyze_headings, and analyze_canonical. The verb 'analyze' is generic and doesn't say what dimension of the title is examined, but the resource scope makes selection unambiguous.

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 the many sibling analyzers, no prerequisites, and no exclusions. Usage is only weakly implied by the SEO-audit family context.

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

analyze_viewportC

Analyze the viewport meta tag of a webpage

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.7/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 the full burden of behavioral disclosure. It does not state whether the tool performs a network fetch, what it returns, or any safety or rate-limit considerations, leaving significant 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.

Conciseness4/5

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

The description is a single concise sentence with no wasted words and is front-loaded with the purpose. It is appropriately brief, though its terseness contributes to other gaps.

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

Completeness2/5

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

For a simple analysis tool with one required parameter and no output schema or annotations, the description is too sparse. It lacks parameter details, return value hints, and any routing guidance relative to the many sibling analysis tools.

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

Parameters2/5

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

The schema description coverage is 0%, and the single 'url' parameter is undocumented. The description only implies a webpage input but does not explicitly explain the URL parameter, its format, or its role.

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 states a specific verb ('Analyze') and resource ('viewport meta tag of a webpage'), making the tool's purpose clear. It does not explicitly distinguish itself from sibling analysis tools such as analyze_meta or analyze_mobile, so it falls short of a 5.

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 guidance on when to use this tool versus alternatives like analyze_meta, analyze_mobile, or analyze_website. The only implied usage is that it analyzes a viewport meta tag, but no context or exclusions are provided.

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

analyze_websiteC

Run a complete website intelligence analysis

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations, so the description carries the full burden, and it discloses nothing behavioral: no indication that it fetches the site over the network, whether it aggregates the sibling analyses, whether it is read-only or slow, or whether results are cached.

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

Conciseness3/5

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

A single short sentence with no filler, which is structurally clean, but its brevity comes from under-specification rather than economy of expression.

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

Completeness2/5

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

For a tool sitting among 26 granular analyzers, with no output schema and no annotations, the description should clarify the aggregate-vs-specific relationship and the shape of the result. Neither is addressed, leaving the agent to guess.

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

Parameters2/5

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

Schema coverage is 0% and the description says nothing about the single required 'url' parameter — no format, scoping, or whether redirects/subpages are followed. The uri format in the schema is the only signal, and the description adds none.

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

Purpose3/5

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

Names a verb ('Run') and a resource ('website intelligence analysis'), but 'complete ... intelligence analysis' is vague about what is actually inspected or returned. Against siblings like analyze_title and analyze_meta, it hints at being an umbrella/aggregate tool but never says so explicitly.

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?

No when-to-use guidance and no mention of alternatives, despite 26 sibling analyzers covering specific facets. An agent cannot tell from this text whether to call this instead of, or in addition to, the granular tools.

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. 27 tool updatesv1.0.0
    • First observedanalyze_accessibility
    • First observedanalyze_canonical
    • First observedanalyze_charset
    • First observedanalyze_content
    • First observedanalyze_favicon
    • First observedanalyze_headings
    • First observedanalyze_hreflang
    • First observedanalyze_images
    • First observedanalyze_lang
    • First observedanalyze_links
    • First observedanalyze_meta
    • First observedanalyze_mobile
    • First observedanalyze_open_graph
    • First observedanalyze_performance
    • First observedanalyze_robots
    • First observedanalyze_robots_txt
    • First observedanalyze_schema
    • First observedanalyze_security
    • First observedanalyze_sitemap
    • First observedanalyze_social
    • First observedanalyze_ssl
    • First observedanalyze_structured_data
    • First observedanalyze_technical
    • First observedanalyze_technology
    • First observedanalyze_title
    • First observedanalyze_viewport
    • First observedanalyze_website

TDQS

C2.8/5.0

Scored across 27 tools

Disambiguation3/5

Most tools target a distinct HTML element or file, but several pairs overlap significantly: analyze_open_graph vs analyze_social (social includes Open Graph), analyze_schema vs analyze_structured_data (both validate/summarize JSON-LD), analyze_ssl vs analyze_security (security includes HTTPS), and analyze_mobile vs analyze_viewport. Descriptions help clarify the boundaries, but an agent could still misselect when only a general audit is needed.

Naming Consistency5/5

Every tool follows the same analyze_<noun> pattern with no deviations, making the set highly predictable. Verb choice and casing are uniform throughout.

Tool Count2/5

At 27 tools, the server exceeds the 25-tool threshold for 'too many' and is roughly double the typical well-scoped range. Many granular analyzers (title, meta, headings, lang, charset, etc.) could reasonably be grouped, making the surface feel over-fragmented despite the aggregate analyze_website tool.

Completeness4/5

The set covers a wide SEO/intelligence surface: metadata, headings, images, links, canonical, robots, hreflang, schema, performance, security, accessibility, and an aggregate analysis tool. Minor gaps remain (e.g., redirects, broken-link crawling, backlink data), but core lifecycle coverage for website auditing is strong.

Related MCP Connectors

Related MCP Servers