Website Intelligence MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Website Intelligence MCPrun a full SEO and metadata analysis on https://example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 buildRelated MCP server: Fetch Crawl MCP
Scripts
Command | What it does |
| Runs the server from source with |
| Deletes |
| Runs the compiled server, |
| Type-checks the source, the tests, and |
| 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 tarballThe 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 the title tag of a webpage |
| Analyze the meta description of a webpage |
| Analyze the heading structure of a webpage |
| Analyze images and their alt attributes on a webpage |
| Analyze the links on a webpage |
| Analyze the canonical URL of a webpage |
| Analyze the robots meta directive of a webpage |
| Analyze Open Graph metadata of a webpage |
| Validate JSON-LD schema objects of a webpage and count valid and invalid schemas |
| Analyze the viewport meta tag of a webpage |
| Analyze the HTML lang attribute of a webpage |
| Analyze the favicon of a webpage |
| Analyze hreflang declarations of a webpage |
| Analyze the character encoding of a webpage |
| Analyze whether a webpage uses HTTPS |
| Analyze the sitemap availability of a webpage |
| Analyze the robots.txt file of a webpage |
| Analyze basic page performance metrics |
| Analyze basic HTTPS and security headers |
| Analyze Open Graph and Twitter Card metadata |
| Analyze mobile viewport and responsive configuration |
| Analyze basic technology and platform signals |
| Analyze basic accessibility issues |
| Analyze basic content quality and structure |
| Summarize JSON-LD structured data blocks of a webpage and flag empty or invalid blocks |
| Analyze basic technical SEO configuration |
| Run a complete website intelligence analysis |
Notes on specific tools:
analyze_sslonly inspects the URL's protocol and makes no request.analyze_sitemapsends a HEAD request for/sitemap.xmlat the page's origin.analyze_robots_txtfetches/robots.txtat the page's origin. A missing or unreadable file is reported asmissing, not as an error.analyze_performancetimes one request for the page and reports its status code, HTML size, and response time.analyze_securitychecks HTTPS and theContent-Security-Policy,X-Content-Type-Options,X-Frame-Options, andReferrer-Policyheaders.
Every analyzer result has the same common fields:
urlcomes first.The analyzer-specific fields follow.
It ends with
status,issues(an array of strings) andrecommendation(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 failedanalyze_websitesection.WebsiteAnalysisResult: the wholeanalyze_websiteresult.
analyze_website
analyze_website runs all 26 analyzers against one URL:
It validates the URL, including the DNS check, before any request is made. If the URL is rejected, the whole call fails.
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.
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
statusbecomescompleted_with_errors, and afailedAnalyzersarray 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 rejected by the security rules, or the request fails |
|
Some analyzers fail inside | A normal result with |
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 byanalyze_website's shared fetch, and it requires a2xxstatus and atext/htmlcontent 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 address169.254.169.254)172.16.0.0/12,192.0.0.0/24,192.168.0.0/16,198.18.0.0/15224.0.0.0/4and240.0.0.0/4
Blocked IPv6 ranges:
::,::1, and the IPv4-compatible::/96fc00::/7,fe80::/10,fec0::/10, andff00::/8NAT64
64:ff9b::/96and64:ff9b:1::/48
IPv4-mapped addresses such as
::ffff:127.0.0.1are checked against the IPv4 ranges. Encoded forms such as2130706433or0x7f000001are 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/httpsmodules with a DNSlookuphook. 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-Lengthover the limit is rejected before the body is read.The limit is enforced again while streaming, so a missing or misleading
Content-Lengthis still caught. That includes a small gzip body that decompresses to more than 5 MB.fetchPagereportsHTML response is too large, andsafeFetchreportsResponse is too large.safeFetchHEAD 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 testRuns 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 |
| URL, protocol, credential, localhost, IP-range, and DNS validation |
|
|
| The connect-time DNS check, for direct requests, redirects, analyzers, and |
| 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 |
| The shared result types (compile-time checks run by |
| 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 |
| 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.tsCalling 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.
safeFetchdoesn'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. OnlyfetchPagerequirestext/html.Sitemap detection:
analyze_sitemaponly checks/sitemap.xmlwith a HEAD request. It doesn't readSitemap:lines in robots.txt, and it reportsmissingif 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 testdoesn'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 toolsanalyze_accessibilityC
Analyze basic accessibility issues
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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_linksC
Analyze the links on a webpage
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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 disclose whether this is read-only, whether it fetches the page or uses a cached copy, whether it follows redirects, or what the analysis output contains (internal vs external, counts, broken links). Only the barest read implication is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler or redundancy. It is efficient, though its brevity comes at the cost of substance rather than being earned conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 should at minimum sketch what 'analyze' returns for links. As written, an agent knows the target but not the result shape or scope, leaving the definition under-specified for a tool whose only structured field is a bare URL.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there is a single required parameter whose semantics are undocumented. The phrase 'on a webpage' weakly implies the url targets an HTML page, but adds no format, protocol, or example 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Analyze) and resource (the links on a webpage), which cleanly separates it from siblings like analyze_images, analyze_meta, and analyze_headings. It does not explicitly name or contrast against those siblings, but the resource noun alone is enough for an agent to route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool versus the other analyze_* tools, no prerequisites, and no exclusions. The agent must infer that 'links' means anchor/href extraction rather than, say, link integrity or navigation structure.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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.
27 tool updates
v1.0.0- First observed
analyze_accessibility - First observed
analyze_canonical - First observed
analyze_charset - First observed
analyze_content - First observed
analyze_favicon - First observed
analyze_headings - First observed
analyze_hreflang - First observed
analyze_images - First observed
analyze_lang - First observed
analyze_links - First observed
analyze_meta - First observed
analyze_mobile - First observed
analyze_open_graph - First observed
analyze_performance - First observed
analyze_robots - First observed
analyze_robots_txt - First observed
analyze_schema - First observed
analyze_security - First observed
analyze_sitemap - First observed
analyze_social - First observed
analyze_ssl - First observed
analyze_structured_data - First observed
analyze_technical - First observed
analyze_technology - First observed
analyze_title - First observed
analyze_viewport - First observed
analyze_website
TDQS
Scored across 27 tools
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.
Every tool follows the same analyze_<noun> pattern with no deviations, making the set highly predictable. Verb choice and casing are uniform throughout.
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.
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
Free website analyzer: score any public URL 0-100 across 8 quality dimensions. No auth.
Turns any URL into SEO metadata, contacts, tech stack, and AI-ready Markdown, in one call.
Scan a web page for accessibility, security, privacy, quality and SEO issues, with fixes.
Scan any URL for on-page, technical & content SEO; 0-100 score with copy-paste fixes.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAnalyzes any webpage for SEO scores, issues, and actionable recommendations. Supports side-by-side comparison of two URLs.-
- FlicenseAqualityDmaintenanceEnables fetching, crawling, and analyzing web pages with 29 tools for SEO audits, content extraction, and more.29-
- AlicenseAqualityDmaintenanceAnalyzes websites for broken links, missing meta tags, and redirect chains, returning a health score and actionable suggestions.135 npm1MIT
- AlicenseAqualityDmaintenanceAnalyzes websites for broken links, missing meta tags, and redirect chains. Returns a structured report with a health score and fix suggestions.127 npmMIT