Skip to main content
Glama

URLpipe

Server Details

Read any page with its JavaScript run: Markdown, screenshots, metadata, console errors, Lighthouse.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
URLpipe/mcp
GitHub Stars
0
Server Listing
URLpipe MCP server

TDQS

A4.6/5.0

Scored across 14 tools

Disambiguation5/5

Every tool maps to a distinct output or slice of the request lifecycle: rendered HTML, Markdown, screenshot, console errors, metadata, keywords, summary, Lighthouse, request metadata/result, usage, projects, and request history. The composite scrape_url is clearly framed as a batching wrapper rather than a competing operation, and descriptions cross-reference the others to prevent misselection.

Naming Consistency5/5

All 14 tool names use snake_case verb_noun and the verbs match the action: capture_*, extract_*, fetch_*, get_*, list_*, run_lighthouse_audit, scrape_url, summarize_page. The consistent pattern makes it easy to predict return types and select the right tool.

Tool Count5/5

14 tools is within the ideal 3–15 range and the server's scope justifies the count: eight page/analysis operations, one composite scraper, and five request/project/usage-management tools. None feel redundant or bolted on.

Completeness5/5

The surface covers the full workflow: discover projects, check previous requests, fetch pages in multiple representations, analyze content, batch operations, collect async results, debug failures, and monitor quota. Missing operations like project/webhook administration are outside the agent-facing URL consumption domain, so there are no obvious dead ends.

Available Tools

14 tools
capture_console_errorsCapture console errorsA
Idempotent
Inspect

Exposes POST /console. Loads the page in headless Chrome and returns what it reported through console.error and console.warn during load, plus uncaught exceptions and unhandled promise rejections (not console.log). 1 credit.

What you would open DevTools for: broken third-party scripts and client-side errors you cannot reproduce locally.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to fetch. Must be a public http(s) URL.
syncNoWait for the result and return it (default false). When false the call returns a token immediately and you collect the result with get_result.
labelsNoYour own keys to find this request by later, e.g. {"client": "acme"}: they come back with the result, in the webhook and in list_requests, which can filter by them. Up to 16 keys of up to 40 letters, digits, _ - or .; string values up to 256 characters.
max_ageNoHow fresh a stored result must be to be reused, e.g. "2 hours" or "3 days". Default 7 days, maximum 30. A reused result is free. Pass "0" to force a fresh fetch.
report_toNoAsync only: a webhook URL to deliver the result to. Defaults to the project's configured endpoint, if it has one.
project_idYesWhich project this request belongs to. From list_projects.
residentialNoFetch the page from a residential (home ISP) exit instead of a datacentre one. Costs a surcharge per page visit — see get_usage. Use it for sites that block datacentre traffic.
page_optionsNoWhat to do to the page before anything is read off it. Applies to the result itself: removed ads and banners are gone from html, markdown and summaries too.
idempotency_keyNoMakes the call safe to retry: sending it again with the same key within 24 hours returns the first call's token and result instead of starting (and charging for) new work, even with max_age "0". Up to 255 printable ASCII characters; a UUID is ideal.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds important behavior: it loads the page (a side effect), captures specific error types, explicitly excludes console.log, and mentions the 1-credit cost. It does not contradict the annotations and provides context beyond the structured hints, such as cost and the distinction from console.log.

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

Conciseness5/5

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

The description is exactly two sentences with no fluff. The core functionality is front-loaded in the first sentence, and the second sentence gives a practical use case. Every word earns its place, and it is not overly verbose despite the tool having 9 parameters.

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

Completeness4/5

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

An output schema exists, so return values are covered. The description explains what the tool does, what it captures, and when to use it. It does not explicitly mention the asynchronous behavior (sync=false returning a token) or the need to call get_result, but these are detailed in the parameter schema. Given the schema richness and the tool's complexity, the description is adequate and leaves the agent with enough to select and call the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are fully documented in the schema. The description adds no parameter-specific meaning beyond the schema, except the mention of '1 credit' which is cost-related but not tied to any parameter. The baseline of 3 applies because the schema carries the full parameter documentation and the description does not need to compensate.

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

Purpose5/5

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

The description states a specific verb and resource: it loads a page in headless Chrome and returns console.error/warn, uncaught exceptions, and unhandled promise rejections. It explicitly excludes console.log, which distinguishes it from generic page-fetch tools like fetch_html or scrape_url. The purpose is unambiguous and distinct from its siblings.

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

Usage Guidelines4/5

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

It provides a clear usage scenario: 'What you would open DevTools for: broken third-party scripts and client-side errors you cannot reproduce locally.' This gives the agent a concrete context for when to invoke it. However, it does not explicitly name alternatives or state when not to use it, only implying the condition via the DevTools analogy.

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

capture_screenshotTake a screenshotA
Idempotent
Inspect

Exposes POST /screenshot. Captures the whole rendered page as a PNG — JavaScript executed, web fonts and images included, exactly as a browser would draw it. 1 credit, whichever options you use.

Use it to see a page rather than read it: layout, visual regressions, link previews, or checking what an anti-bot page actually showed us. screenshot_options size it (viewport, scale, one element, the fold only), encode it (png, jpeg or webp) and restyle it (dark mode, hidden elements, your own CSS); page_options wait for the page and take ads and cookie banners out of it.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to fetch. Must be a public http(s) URL.
syncNoWait for the result and return it (default false). When false the call returns a token immediately and you collect the result with get_result.
labelsNoYour own keys to find this request by later, e.g. {"client": "acme"}: they come back with the result, in the webhook and in list_requests, which can filter by them. Up to 16 keys of up to 40 letters, digits, _ - or .; string values up to 256 characters.
max_ageNoHow fresh a stored result must be to be reused, e.g. "2 hours" or "3 days". Default 7 days, maximum 30. A reused result is free. Pass "0" to force a fresh fetch.
report_toNoAsync only: a webhook URL to deliver the result to. Defaults to the project's configured endpoint, if it has one.
project_idYesWhich project this request belongs to. From list_projects.
residentialNoFetch the page from a residential (home ISP) exit instead of a datacentre one. Costs a surcharge per page visit — see get_usage. Use it for sites that block datacentre traffic.
page_optionsNoWhat to do to the page before anything is read off it. Applies to the result itself: removed ads and banners are gone from html, markdown and summaries too.
idempotency_keyNoMakes the call safe to retry: sending it again with the same key within 24 hours returns the first call's token and result instead of starting (and charging for) new work, even with max_age "0". Up to 255 printable ASCII characters; a UUID is ideal.
screenshot_optionsNoHow to take the screenshot. Every key is optional; leave it out for a full-page PNG.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Beyond annotations, it discloses the 1-credit cost, the POST endpoint, and the rendering behavior (JavaScript, fonts, images). This adds meaningful operational context that annotations alone do not provide.

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

Conciseness5/5

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

The description is well-structured and front-loaded: endpoint and core behavior first, then cost, then use cases, then a compact summary of options. Every sentence contributes useful information without redundancy.

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

Completeness5/5

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

The description, combined with a rich input schema and output schema, covers what the tool does, when to use it, what it costs, and how the option groups behave. Async behavior and detailed parameter constraints are already in the schema, so the description does not need to repeat them.

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

Parameters4/5

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

With 100% schema coverage, the baseline is 3, but the description adds a useful semantic grouping: screenshot_options size/encode/restyle, and page_options wait/clean the page. This helps an agent map intent to the right nested parameters beyond the schema's individual property descriptions.

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

Purpose5/5

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

The description clearly identifies the operation: capturing a rendered page as a PNG via POST /screenshot, with JavaScript, fonts, and images rendered as a browser would. It also distinguishes itself from text-reading siblings by framing the tool as 'see a page rather than read it.'

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

Usage Guidelines4/5

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

It gives concrete use cases: layout checks, visual regressions, link previews, and verifying anti-bot pages. It implies alternatives by contrasting with reading pages, though it does not explicitly name sibling tools or state when not to use it.

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

extract_keywordsExtract keywordsA
Idempotent
Inspect

Exposes POST /keywords. Returns the 5–15 terms and phrases that best represent the page, ordered by relevance — ranked by a language model, not by raw frequency. 15 credits.

As with summarize_page: if you are going to reason over the result yourself, fetch_markdown costs 1 credit and gives you everything.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to fetch. Must be a public http(s) URL.
syncNoWait for the result and return it (default false). When false the call returns a token immediately and you collect the result with get_result.
labelsNoYour own keys to find this request by later, e.g. {"client": "acme"}: they come back with the result, in the webhook and in list_requests, which can filter by them. Up to 16 keys of up to 40 letters, digits, _ - or .; string values up to 256 characters.
max_ageNoHow fresh a stored result must be to be reused, e.g. "2 hours" or "3 days". Default 7 days, maximum 30. A reused result is free. Pass "0" to force a fresh fetch.
report_toNoAsync only: a webhook URL to deliver the result to. Defaults to the project's configured endpoint, if it has one.
project_idYesWhich project this request belongs to. From list_projects.
residentialNoFetch the page from a residential (home ISP) exit instead of a datacentre one. Costs a surcharge per page visit — see get_usage. Use it for sites that block datacentre traffic.
page_optionsNoWhat to do to the page before anything is read off it. Applies to the result itself: removed ads and banners are gone from html, markdown and summaries too.
idempotency_keyNoMakes the call safe to retry: sending it again with the same key within 24 hours returns the first call's token and result instead of starting (and charging for) new work, even with max_age "0". Up to 255 printable ASCII characters; a UUID is ideal.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already cover safety and idempotency (readOnlyHint=false, idempotentHint=true, destructiveHint=false). The description adds valuable context beyond the schema: the 15-credit cost, the fact that results are ranked by a language model rather than raw frequency, and the POST endpoint. This meaningfully informs the agent about what the operation does and what it costs.

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

Conciseness5/5

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

The description is short and front-loaded: it states the endpoint, the result, the ranking method, and the cost in the first two sentences. The third sentence earns its place by giving a concrete cost-saving alternative. There is no filler or repetition of the schema.

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

Completeness4/5

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

Given the 9-parameter schema is fully documented, an output schema exists, and the annotations cover idempotency and destructiveness, the description is largely complete. It could add a bit more context about when keyword extraction is preferable to summarization or metadata extraction, but the provided guidance about fetch_markdown covers the most important decision point.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents all 9 parameters in detail. The description adds no additional parameter-level semantics beyond the schema; the cost and ranking notes are behavioral, not parameter-specific. This matches the baseline of 3 for fully covered schemas.

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

Purpose5/5

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

The description states a specific verb and resource: it exposes POST /keywords and returns the 5–15 terms and phrases that best represent the page, ordered by relevance. It also distinguishes the behavior from raw frequency counting by noting the ranking is done by a language model, so the agent knows exactly what kind of output to expect.

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

Usage Guidelines4/5

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

The description gives clear usage context: 'As with summarize_page: if you are going to reason over the result yourself, fetch_markdown costs 1 credit and gives you everything.' This explicitly names an alternative and the condition under which to choose it. It does not enumerate exclusions for all 13 siblings, but the main competing content-extraction path is addressed.

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

extract_metadataExtract page metadataA
Idempotent
Inspect

Exposes POST /meta. Reconciles Open Graph, Twitter card and standard page metadata into one clean object: title, description, language, main image, favicon, author, publication date and feed. Values injected by JavaScript are included, because the page is rendered first. 5 credits.

This is the page's metadata, not a dump of its meta tags. If you only need the title, it is also in the Markdown — and that costs 1 credit.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to fetch. Must be a public http(s) URL.
syncNoWait for the result and return it (default false). When false the call returns a token immediately and you collect the result with get_result.
labelsNoYour own keys to find this request by later, e.g. {"client": "acme"}: they come back with the result, in the webhook and in list_requests, which can filter by them. Up to 16 keys of up to 40 letters, digits, _ - or .; string values up to 256 characters.
max_ageNoHow fresh a stored result must be to be reused, e.g. "2 hours" or "3 days". Default 7 days, maximum 30. A reused result is free. Pass "0" to force a fresh fetch.
report_toNoAsync only: a webhook URL to deliver the result to. Defaults to the project's configured endpoint, if it has one.
project_idYesWhich project this request belongs to. From list_projects.
residentialNoFetch the page from a residential (home ISP) exit instead of a datacentre one. Costs a surcharge per page visit — see get_usage. Use it for sites that block datacentre traffic.
page_optionsNoWhat to do to the page before anything is read off it. Applies to the result itself: removed ads and banners are gone from html, markdown and summaries too.
idempotency_keyNoMakes the call safe to retry: sending it again with the same key within 24 hours returns the first call's token and result instead of starting (and charging for) new work, even with max_age "0". Up to 255 printable ASCII characters; a UUID is ideal.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark this as non-read-only and idempotent, and the description adds meaningful behavior beyond them: JavaScript-injected values are included because the page is rendered first, and the operation costs 5 credits. It also clarifies that the result is a reconciled metadata object, not the page's raw tags. No contradiction with the annotations 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.

Conciseness5/5

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

Two tight paragraphs deliver the core behavior, the surprising rendering behavior, the cost, and the key alternative without redundancy. Every sentence earns its place, and the verb-resource statement is front-loaded.

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

Completeness4/5

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

Given 9 parameters, nested page_options, and an output schema, the description appropriately covers selection, cost, rendering behavior, and result shape. The remaining operational details (sync default, labels, max_age, residential) are fully covered by the schema, so nothing needed to invoke the tool correctly is missing. It could still add one sentence comparing it to extract_keywords/scrape_url, but that is optional.

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

Parameters3/5

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

Schema description coverage is 100%, so all 9 parameters are already documented in the input schema. The description does not add parameter-level detail, which is acceptable at the baseline 3; it only references the url indirectly by describing page rendering. No parameter ambiguity needs rescuing.

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

Purpose5/5

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

Description uses a specific verb and resource ('Exposes POST /meta. Reconciles Open Graph, Twitter card and standard page metadata into one clean object') and enumerates the returned fields. It also differentiates itself from a raw tag dump and from cheaper Markdown, so an agent can tell it apart from fetch_html, fetch_markdown and extract_keywords.

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

Usage Guidelines4/5

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

It gives one explicit routing rule: if the agent only needs the title, that is available in Markdown at lower cost. It also scopes the tool as reconciled page metadata rather than a raw meta-tag dump, which implies when it is appropriate. It does not spell out exclusions for extract_keywords, fetch_html, or scrape_url, so it stops short of a 5.

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

fetch_htmlGet the rendered HTMLA
Idempotent
Inspect

Exposes POST /html. Returns the page's HTML after JavaScript has run and redirects have been followed — the DOM a real browser sees, not the empty shell curl returns. 1 credit.

Use it when you need the markup itself: a specific attribute, a script tag, a structured-data block. If you want to read the page's content, fetch_markdown costs the same and returns a fraction of the text.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to fetch. Must be a public http(s) URL.
syncNoWait for the result and return it (default false). When false the call returns a token immediately and you collect the result with get_result.
labelsNoYour own keys to find this request by later, e.g. {"client": "acme"}: they come back with the result, in the webhook and in list_requests, which can filter by them. Up to 16 keys of up to 40 letters, digits, _ - or .; string values up to 256 characters.
max_ageNoHow fresh a stored result must be to be reused, e.g. "2 hours" or "3 days". Default 7 days, maximum 30. A reused result is free. Pass "0" to force a fresh fetch.
report_toNoAsync only: a webhook URL to deliver the result to. Defaults to the project's configured endpoint, if it has one.
project_idYesWhich project this request belongs to. From list_projects.
residentialNoFetch the page from a residential (home ISP) exit instead of a datacentre one. Costs a surcharge per page visit — see get_usage. Use it for sites that block datacentre traffic.
page_optionsNoWhat to do to the page before anything is read off it. Applies to the result itself: removed ads and banners are gone from html, markdown and summaries too.
idempotency_keyNoMakes the call safe to retry: sending it again with the same key within 24 hours returns the first call's token and result instead of starting (and charging for) new work, even with max_age "0". Up to 255 printable ASCII characters; a UUID is ideal.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description adds behavioral details beyond the annotations: it identifies the HTTP endpoint, states the 1-credit cost, and explains that the HTML reflects the post-JS, post-redirect DOM rather than the curl shell. Annotations already cover idempotency and non-destructiveness, so the description complements rather than repeats them.

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

Conciseness5/5

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

Two compact, information-dense paragraphs with no filler. The core behavior and cost are front-loaded, and the alternative tool is mentioned in the final sentence without unnecessary elaboration.

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

Completeness5/5

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

Given the 100% schema coverage, nested-object parameter details, output schema, and clear sibling-tool guidance, the description provides everything an agent needs to select and invoke this tool correctly. The behavioral context around pricing and rendering rounds out the available structured information.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents all nine parameters with detailed semantics. The description adds no parameter-level detail, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource: it exposes POST /html and returns the page's HTML after JavaScript and redirects. It also differentiates the result from the raw shell curl output and from fetch_markdown, making the tool's scope unmistakable.

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

Usage Guidelines5/5

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

Explicitly says 'Use it when you need the markup itself' and names fetch_markdown as the alternative when reading page content. This gives the agent a clear decision rule instead of leaving the choice to inference.

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

fetch_markdownRead a page as MarkdownA
Idempotent
Inspect

Exposes POST /markdown. Renders the page in headless Chrome and converts its main content to clean Markdown — headings, lists, links and code kept, navigation, sidebars and cookie banners dropped.

Start here when you want to READ a page. It is the cheapest operation we sell (1 credit) and by far the most compact thing to put in front of a model: fetch_html returns the whole DOM, which is usually many times larger and says nothing extra about what the page means.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to fetch. Must be a public http(s) URL.
syncNoWait for the result and return it (default false). When false the call returns a token immediately and you collect the result with get_result.
labelsNoYour own keys to find this request by later, e.g. {"client": "acme"}: they come back with the result, in the webhook and in list_requests, which can filter by them. Up to 16 keys of up to 40 letters, digits, _ - or .; string values up to 256 characters.
max_ageNoHow fresh a stored result must be to be reused, e.g. "2 hours" or "3 days". Default 7 days, maximum 30. A reused result is free. Pass "0" to force a fresh fetch.
report_toNoAsync only: a webhook URL to deliver the result to. Defaults to the project's configured endpoint, if it has one.
project_idYesWhich project this request belongs to. From list_projects.
residentialNoFetch the page from a residential (home ISP) exit instead of a datacentre one. Costs a surcharge per page visit — see get_usage. Use it for sites that block datacentre traffic.
page_optionsNoWhat to do to the page before anything is read off it. Applies to the result itself: removed ads and banners are gone from html, markdown and summaries too.
idempotency_keyNoMakes the call safe to retry: sending it again with the same key within 24 hours returns the first call's token and result instead of starting (and charging for) new work, even with max_age "0". Up to 255 printable ASCII characters; a UUID is ideal.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already provide safety and idempotency hints, and the description adds useful behavioral context: headless Chrome rendering, main-content extraction, dropping navigation/sidebars/cookie banners, and the 1-credit cost. It does not contradict the annotations, though it leaves async behavior details to the schema.

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

Conciseness5/5

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

The description is compact and front-loaded: the operation and output format come first, followed by a clear usage recommendation and cost rationale. Every sentence contributes value without repeating schema content.

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

Completeness4/5

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

For a tool with 9 parameters, nested page_options, a full output schema, and a rich sibling set, the description covers the essential decision: use this for readable Markdown and prefer it over heavier HTML fetching. It is slightly incomplete in not surfacing the default async behavior (sync=false), but that is fully specified in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are fully documented structurally. The description adds no parameter-specific meaning beyond the general Markdown-output context, which matches the baseline of 3 for high schema coverage.

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

Purpose5/5

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

The description clearly identifies the operation: "Exposes POST /markdown" and explains that it renders a page in headless Chrome and converts its main content to clean Markdown. It also distinguishes itself from fetch_html by emphasizing compactness, so an agent can tell siblings apart.

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

Usage Guidelines4/5

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

It gives explicit launch guidance: "Start here when you want to READ a page," and justifies it with cost and compactness. It names fetch_html as a key alternative, but does not explicitly state when-not-to-use the tool or discuss other sibling tools like scrape_url or summarize_page.

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

get_requestInspect a past requestA
Read-onlyIdempotent
Inspect

Everything about one past request except its result: what was asked for, how long each stage took, whether it came from the store, and how the webhook delivery went.

This is the metadata; get_result returns the page itself. Reach for this one when a call did not do what you expected — it says whether the result was reused, why an analysis failed, and whether the delivery to the project's endpoint succeeded.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesThe token the original call returned.
project_idYesFrom list_projects.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
metaNoWhat the HTTP response headers would say: cache, cost, quota, result_url.
asyncNo
tokenYes
labelsNo
statusYes
creditsNo
max_ageNo
outcomeNo
successNo
operationNo
report_toNo
created_atNo
operationsNo
duration_msNo
finished_atNo
webhook_errorNo
webhook_statusNo
request_optionsNo
served_from_cacheNo
webhook_delivered_atNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context by enumerating what the metadata contains: stage durations, store reuse, analysis failure reasons, and webhook delivery status. It does not contradict the annotations.

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

Conciseness5/5

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

The description is tight and well-structured: the first sentence states scope, and the second provides routing guidance and diagnostic value. Every sentence earns its place with no filler.

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

Completeness5/5

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

With a 2-parameter schema that is fully described, an output schema, and annotations covering safety and idempotency, the description gives the agent everything needed to correctly choose and use the tool. It even supplies diagnostic use cases that are not implied by the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters well. The description does not add significant parameter-level detail, but it doesn't need to because project_id and token are already explained ('From list_projects' and 'The token the original call returned').

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

Purpose5/5

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

The description clearly identifies the tool as inspecting metadata about a past request, explicitly excluding the result. It differentiates itself from get_result by saying 'This is the metadata; get_result returns the page itself.'

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

Usage Guidelines5/5

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

It tells the agent exactly when to use this tool: 'Reach for this one when a call did not do what you expected.' It also names the alternative (get_result) and explains the distinction, leaving no ambiguity about when to choose this over its sibling.

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

get_resultGet a resultA
Read-onlyIdempotent
Inspect

Exposes GET /result/:token. Returns the result of a past request, in the same form the call that made it would have returned — Markdown as Markdown, a structured operation as its object, a screenshot as an image, a scrape as its combined object.

This is how an async call is collected: any tool called without sync: true answers with a token, and this turns that token into the result. It also re-reads a result somebody already paid for, which is free — results are kept for 30 days.

A request that has not finished yet answers {"status": "processing"}; call again in a moment.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesThe token the original call returned.
project_idYesFrom list_projects.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description doesn't need to repeat that. It adds value by explaining the async collection mechanism, the 30-day retention, and the 'processing' status response — details not covered by annotations. This is useful context beyond the structured data.

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

Conciseness5/5

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

The description is well-structured: it opens with the core purpose and return format, then explains usage context and lifecycle. Every sentence earns its place, and the length is appropriate for the complexity. The front-loaded core purpose ensures quick comprehension.

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

Completeness5/5

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

Despite having an output schema (which explains the return structure), the description provides complete context for calling this tool correctly: how to obtain tokens, the free re-read behavior, retention period, and the processing response. With 2 parameters fully described in both schema and description, and clear usage guidance, nothing essential is missing.

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

Parameters5/5

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

The input schema already provides descriptions for both parameters (token and project_id), so the schema coverage is 100%. However, the description adds context about how the token is obtained ('any tool called without sync: true answers with a token') and how to get project_id ('From list_projects'), which enriches the parameter meaning beyond just the schema text.

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

Purpose5/5

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

The description clearly states the tool exposes a GET endpoint and returns the result of a past request, with specific examples of return formats. It distinguishes itself from siblings like get_request and list_requests by focusing on async result collection and re-reading paid results, which is unique among the listed tools.

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

Usage Guidelines5/5

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

The description explicitly explains when to use this tool: when an async call returns a token, this tool turns it into the result. It also notes that re-reading is free and results are kept 30 days, and advises calling again if status is 'processing'. It implicitly excludes synchronous calls (sync: true) and provides clear lifecycle context.

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

get_usageCheck usage and pricesA
Read-onlyIdempotent
Inspect

What the organization's plan allows, how much of it is left this period, and what each operation costs.

Worth reading before a run of expensive calls: the operations differ by seventeen times in price, so the difference between fetch_markdown and summarize_page over a hundred pages is 100 credits against 1,700. It is also how to read a refusal — a call that comes back with quota_exceeded is telling you this number ran out.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
planYes
creditsYes
plan_nameNo
concurrency_limitNo
cost_per_operationYes
residential_surcharge_per_page_visitNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds valuable behavioral context: it reveals that operation prices differ by a factor of seventeen, and it explains that a quota_exceeded error indicates this number has run out. This goes beyond the annotations by tying the tool to rate-limit semantics and error interpretation, which is exactly the kind of context the dimension seeks.

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

Conciseness5/5

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

The description is two sentences: the first states the core purpose, the second provides a concrete usage scenario and an error-interpretation tip. It is front-loaded with the primary function and wastes no words. Every sentence earns its place, and the structure is efficient and scannable.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, an output schema exists), the description covers all essential aspects: what data it returns (plan allowance, remaining quota, operation costs), when to use it (before expensive calls), and how to interpret a specific error (quota_exceeded). It is fully sufficient for an agent to know when and why to invoke it.

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

Parameters4/5

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

The tool has zero parameters, so the schema coverage is trivially 100%. Per the rubric, a baseline of 4 is appropriate when there are no parameters to explain. The description does not need to elaborate on parameters, and it correctly avoids doing so.

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

Purpose5/5

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

The description clearly states what the tool does: it reports the organization's plan limits, remaining quota for the period, and the cost of each operation. This is specific and distinct from sibling tools like fetch_markdown or summarize_page, which are about fetching or summarizing content. It uses a concrete verb-resource pair ('get usage and prices') and leaves no ambiguity about its function.

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

Usage Guidelines5/5

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

The description explicitly advises using this tool before a run of expensive calls, gives a concrete example comparing fetch_markdown and summarize_page costs, and explains how to interpret a quota_exceeded refusal. This gives clear guidance on when to call it and how it relates to other operations, effectively routing the agent to the right context.

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

list_projectsList projectsA
Read-onlyIdempotent
Inspect

The projects this token can reach, each with how many requests it has made in the last 30 days and where its results are delivered.

Start here: every other tool takes a project_id from this list. A project is the unit a request is billed and recorded against — credits themselves belong to the organization, so which project you pick does not change what a call costs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
projectsYes
organizationYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already carry the safe, read-only, idempotent profile, so the description's job is to add context beyond that. It does by disclosing token-based scoping, the included usage statistics, and the relationship between projects, credits, and billing. This is meaningful behavioral context without contradicting the annotations.

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

Conciseness5/5

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

Both sentences earn their place: the first defines the output contents, and the second provides essential usage and billing orientation. The 'Start here' directive is front-loaded and there is no repetition of schema or annotation information.

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

Completeness5/5

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

For a parameterless list operation with an output schema, the description fully covers what an agent needs to invoke it correctly and why it should be the first call. It explains scope, output content, and downstream usage with no missing operational details.

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

Parameters4/5

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

The tool takes zero parameters, so the schema already fully documents the input surface. The description adds context about how the returned project_id will be used by other tools, which is the relevant semantic information here.

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

Purpose5/5

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

States a specific verb and resource: lists projects visible to the token. It also specifies what each project entry contains (request counts in last 30 days, result delivery location), which clearly differentiates it from the sibling action tools.

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

Usage Guidelines5/5

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

Explicitly says 'Start here' and explains that every other tool consumes a project_id from this list, giving the agent a clear invocation order. The billing clarification also prevents the agent from assuming project choice affects cost.

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

list_requestsList past requestsA
Read-onlyIdempotent
Inspect

A project's recent requests, newest first, with each one's token.

Look here before fetching a page: if somebody already pulled it, passing that token to get_result returns the same result for nothing. A /scrape appears as one entry — its per-operation children are internal, and the scrape's own token returns all of them.

Pass labels to see only the requests made with them — every key given must match its value exactly.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoOnly requests for this exact URL.
limitNoHow many to return. Default 25, maximum 100.
labelsNoOnly requests made with all of these labels, each value matched exactly.
offsetNoSkip this many, for paging.
operationNoOnly requests running this operation.
project_idYesFrom list_projects.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
offsetYes
requestsYes
project_idYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the description need not restate those. It adds useful behavioral nuance: /scrape appears as one entry with internal children, and the scrape token aggregates them. Also notes exact label matching. No contradictions.

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

Conciseness5/5

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

Three concise sentences front-load the core purpose and ordering, then add critical behavioral and filtering details without fluff. Every sentence earns its place.

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

Completeness5/5

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

For a list tool with 6 parameters, an output schema, and rich annotations, the description covers ordering, token reuse, scrape aggregation, and label matching. Pagination is handled by schema; return structure is in output schema. Nothing essential is missing.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are already described. The description reinforces the labels parameter ('every key given must match its value exactly') but adds little beyond schema. No additional syntax or edge cases beyond what's in the schema.

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

Purpose5/5

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

States a specific verb (list), resource (requests of a project), and ordering (newest first) with tokens. Clearly distinguishes from get_request and get_result by focusing on the listing of past requests and the token reuse.

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

Usage Guidelines5/5

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

Explicitly instructs to look here before fetching a page, explaining that passing a token to get_result reuses cached results. Also clarifies the /scrape entry behavior and label filtering, giving concrete when-to-use guidance.

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

run_lighthouse_auditRun a Lighthouse auditA
Idempotent
Inspect

Exposes POST /lighthouse. Runs a real Google Lighthouse audit against the live page: performance, accessibility, best-practices and SEO scores plus Core Web Vitals. 2 credits — dearer than a page fetch because the audit runs in its own limited lane, so it also takes longer than anything else here.

It fetches the page itself rather than sharing a visit, so asking for it inside scrape_url costs two page visits, not one.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to fetch. Must be a public http(s) URL.
syncNoWait for the result and return it (default false). When false the call returns a token immediately and you collect the result with get_result.
deviceNoWhich profile to audit under. Default mobile.
labelsNoYour own keys to find this request by later, e.g. {"client": "acme"}: they come back with the result, in the webhook and in list_requests, which can filter by them. Up to 16 keys of up to 40 letters, digits, _ - or .; string values up to 256 characters.
max_ageNoHow fresh a stored result must be to be reused, e.g. "2 hours" or "3 days". Default 7 days, maximum 30. A reused result is free. Pass "0" to force a fresh fetch.
report_toNoAsync only: a webhook URL to deliver the result to. Defaults to the project's configured endpoint, if it has one.
project_idYesWhich project this request belongs to. From list_projects.
residentialNoFetch the page from a residential (home ISP) exit instead of a datacentre one. Costs a surcharge per page visit — see get_usage. Use it for sites that block datacentre traffic.
include_auditsNoInclude the full per-audit detail, not just scores and metrics. Much larger; default false.
idempotency_keyNoMakes the call safe to retry: sending it again with the same key within 24 hours returns the first call's token and result instead of starting (and charging for) new work, even with max_age "0". Up to 255 printable ASCII characters; a UUID is ideal.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

The description goes well beyond annotations. It discloses that the tool makes a network request (openWorldHint true), is not read-only (readOnlyHint false) because it runs a computation and charges credits, supports idempotency (idempotentHint true) via idempotency_key, and is non-destructive (destructiveHint false). It adds unique behavior: it fetches the page independently, caches results (max_age), supports async delivery, and has a residential exit option. No contradiction with annotations.

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

Conciseness4/5

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

The description is two paragraphs, but every sentence carries useful information: purpose, cost, latency, fetch behavior, and a note about interaction with scrape_url. It is front-loaded with the core purpose. Slightly longer than necessary but justified by the tool's complexity.

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

Completeness5/5

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

Given the tool's complexity (10 parameters, async modes, caching, cost), the description is thorough. It explains cost, caching, async vs sync, residential fetching, and idempotency. An output schema exists (not shown here), so return-value details are covered. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

The input schema covers 100% of parameters with detailed descriptions, so the baseline is 3. The description does not add parameter-specific semantics beyond what the schema already provides; it adds context on cost and behavior, but that's not tied to individual parameters. It doesn't compensate for any gaps because there are none.

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

Purpose5/5

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

The description states a specific verb ('Runs a real Google Lighthouse audit') and resource ('against the live page'), and enumerates the exact outputs (performance, accessibility, best-practices, SEO scores, Core Web Vitals). This clearly distinguishes it from siblings like fetch_html or capture_screenshot, which serve different purposes.

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

Usage Guidelines4/5

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

The description provides contextual guidance on when to use the tool: it mentions higher cost (2 credits) and longer runtime than other tools, and clarifies that it fetches the page itself, affecting cost when used inside scrape_url. However, it doesn't explicitly state 'use this when you need Lighthouse scores' or name alternative tools for comparison, so the guidance is implicit rather than prescriptive.

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

scrape_urlSeveral results from one page visitA
Idempotent
Inspect

Exposes POST /scrape. Runs any subset of the other operations in one request, served from a single page visit where possible. Each operation is billed and stored exactly as the individual call would be, so this is not a discount — with one exception, and it is the reason to use it: a residential exit is charged per page VISIT, so several results off one visit pay the surcharge once.

Answers with one object keyed by operation, each entry carrying its own success and result, so a partial failure still returns everything that worked.

lighthouse does not share the visit — it runs its own audit on its own engine — so including it means two page fetches, and two surcharges when residential is on. So does a screenshot whose screenshot_options set viewport_width, viewport_height, device_scale_factor, dark_mode or block_ads: those change how the page loads, so the screenshot gets a visit of its own.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to fetch. Must be a public http(s) URL.
syncNoWait for the result and return it (default false). When false the call returns a token immediately and you collect the result with get_result.
deviceNoLighthouse only, when it is among the operations. Default mobile.
labelsNoYour own keys to find this request by later, e.g. {"client": "acme"}: they come back with the result, in the webhook and in list_requests, which can filter by them. Up to 16 keys of up to 40 letters, digits, _ - or .; string values up to 256 characters.
max_ageNoHow fresh a stored result must be to be reused, e.g. "2 hours" or "3 days". Default 7 days, maximum 30. A reused result is free. Pass "0" to force a fresh fetch.
report_toNoAsync only: a webhook URL to deliver the result to. Defaults to the project's configured endpoint, if it has one.
operationsYesWhich operations to run off this page.
project_idYesWhich project this request belongs to. From list_projects.
residentialNoFetch the page from a residential (home ISP) exit instead of a datacentre one. Costs a surcharge per page visit — see get_usage. Use it for sites that block datacentre traffic.
page_optionsNoWhat to do to the page before anything is read off it. Applies to the result itself: removed ads and banners are gone from html, markdown and summaries too.
include_auditsNoLighthouse only: include the full per-audit detail. Default false.
idempotency_keyNoMakes the call safe to retry: sending it again with the same key within 24 hours returns the first call's token and result instead of starting (and charging for) new work, even with max_age "0". Up to 255 printable ASCII characters; a UUID is ideal.
screenshot_optionsNoScreenshot only, when it is among the operations: how to take it, exactly as capture_screenshot takes it.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond annotations. Discloses billing semantics (each operation billed exactly as individual; no discount), per-visit surcharge sharing, partial-failure response shape ('object keyed by operation, each entry carrying its own success'), and edge cases that cause extra page fetches (lighthouse, specific screenshot_options). These are behaviors an agent would otherwise discover only by executing the tool.

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

Conciseness5/5

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

The description is long but every sentence carries unique information. Core purpose and the 'reason to use' appear first, then the response format, then the cost exceptions. No filler or repetition of schema content; the structure mirrors an agent's decision flow: what, why, what happens, when not to.

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

Completeness5/5

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

For a complex tool with 13 params and nested objects, this description addresses all decision-critical aspects: composite batching, billing behavior, partial failures, and the specific conditions that break the single-visit optimization. The output schema exists beSilencing; the description does not need to enumerate return fields. Nothing an agent requires to invoke correctly is missing.

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

Parameters4/5

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

Schema already provides 100% description coverage for all parameters. The description adds meaningful interplay semantics not present in the schema: that operations like lighthouse don't share the visit)Skip; screenshot_options with certain fields cause an independent visit. This contextualizes the `operations` and `screenshot_options` parameters without repeating schema details, which is exactly what is needed.

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

Purpose5/5

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

The description clearly states a specific verb ('runs any subset of the other operations in one request') and resource (POST /scrape), and distinguishes itself from siblings by being a composite operation. It makes the tool's aggregation purpose immediately obvious, unlike what any sibling description likely does.

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

Usage Guidelines5/5

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

Explicitly explains when to prefer this tool: 'it is the reason to use it' – residential surcharge paid once per visit. It also lists exceptions where it would not save money (lighthouse, certain screenshot_options) and thereby tells the agent when not to use it or when to expect extra charges. No other tool description among the siblings provides such direct routing guidance.

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

summarize_pageSummarize a pageA
Idempotent
Inspect

Exposes POST /summarize. Returns a concise Markdown summary of the page's main content, with the navigation, ads and boilerplate left out.

The most expensive operation we sell, at 17 credits, because it runs a language model over the page. If YOU are the model that will read it, fetch_markdown gives you the whole page for 1 credit and you can summarize it yourself — this tool is for when the summary is the artefact being produced, not a step on the way to one.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to fetch. Must be a public http(s) URL.
syncNoWait for the result and return it (default false). When false the call returns a token immediately and you collect the result with get_result.
labelsNoYour own keys to find this request by later, e.g. {"client": "acme"}: they come back with the result, in the webhook and in list_requests, which can filter by them. Up to 16 keys of up to 40 letters, digits, _ - or .; string values up to 256 characters.
max_ageNoHow fresh a stored result must be to be reused, e.g. "2 hours" or "3 days". Default 7 days, maximum 30. A reused result is free. Pass "0" to force a fresh fetch.
report_toNoAsync only: a webhook URL to deliver the result to. Defaults to the project's configured endpoint, if it has one.
project_idYesWhich project this request belongs to. From list_projects.
residentialNoFetch the page from a residential (home ISP) exit instead of a datacentre one. Costs a surcharge per page visit — see get_usage. Use it for sites that block datacentre traffic.
page_optionsNoWhat to do to the page before anything is read off it. Applies to the result itself: removed ads and banners are gone from html, markdown and summaries too.
idempotency_keyNoMakes the call safe to retry: sending it again with the same key within 24 hours returns the first call's token and result instead of starting (and charging for) new work, even with max_age "0". Up to 255 printable ASCII characters; a UUID is ideal.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the annotations, the description adds valuable behavioral context: the 17-credit cost, the fact that it 'runs a language model over the page,' and the content filtering behavior. It slightly oversimplifies the async default by saying it 'Returns a concise Markdown summary' when sync=false actually returns a token immediately, but the sync parameter description covers that detail.

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

Conciseness5/5

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

Two tight paragraphs with no filler. The first sentence states the endpoint and output; the second paragraph's cost and routing guidance earns its place by preventing expensive misuse. Every sentence adds value.

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

Completeness4/5

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

With a rich, fully documented schema and an output schema present, the description need not enumerate parameters or return fields. It supplies the missing high-level context: cost, content filtering, and when to prefer fetch_markdown. The only notable gap is not explicitly signalling the async default, though the sync parameter description handles that.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all nine parameters. The description adds no parameter-specific semantics beyond general context, which matches the baseline for high schema coverage.

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

Purpose5/5

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

The description names a specific resource and action: 'Exposes POST /summarize' and 'Returns a concise Markdown summary of the page's main content, with the navigation, ads and boilerplate left out.' This clearly separates it from siblings like fetch_markdown and fetch_html.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use this tool versus an alternative: it is 'the most expensive operation we sell, at 17 credits,' and fetch_markdown is recommended instead if the agent will read the page itself. It states the tool is for when 'the summary is the artefact being produced, not a step on the way to one.'

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

Tool Schema Changelog

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

  1. 10 tool updates
    • Changedcapture_console_errors1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "entries": {
        +          "items": {
        +            "properties": {
        +              "text": {
        +                "type": "string"
        +              },
        +              "type": {
        +                "enum": [
        +                  "error",
        +                  "warning",
        +                  "exception"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "entries"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "labels": {
        +          "type": "object"
        +        },
        +        "status": {
        +          "const": "accepted",
        +          "type": "string"
        +        },
        +        "token": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "token",
        +        "status"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "type": "object"
        +}
    • Changedcapture_screenshot1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "mime_type": {
        +          "description": "The image's type. The image itself is the image content block.",
        +          "type": "string"
        +        },
        +        "result_url": {
        +          "description": "A link to the image that needs no key.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "mime_type"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "labels": {
        +          "type": "object"
        +        },
        +        "status": {
        +          "const": "accepted",
        +          "type": "string"
        +        },
        +        "token": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "token",
        +        "status"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "type": "object"
        +}
    • Changedextract_keywords1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "keywords": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "keywords"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "labels": {
        +          "type": "object"
        +        },
        +        "status": {
        +          "const": "accepted",
        +          "type": "string"
        +        },
        +        "token": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "token",
        +        "status"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "type": "object"
        +}
    • Changedextract_metadata1 field changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "additional_author_information": {
        -        "type": [
        -          "object",
        -          "null"
        -        ]
        -      },
        -      "author_name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "description": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "favicon_url": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "feed_url": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "language": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "main_image_url": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "publication_date": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "title": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "labels": {
        -        "type": "object"
        -      },
        -      "status": {
        -        "const": "accepted",
        -        "type": "string"
        -      },
        -      "token": {
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "additional_author_information": {
        +        "type": [
        +          "object",
        +          "null"
        +        ]
        +      },
        +      "author_name": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "description": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "favicon_url": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "feed_url": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "language": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "main_image_url": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "publication_date": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "title": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "labels": {
        +        "type": "object"
        +      },
        +      "status": {
        +        "const": "accepted",
        +        "type": "string"
        +      },
        +      "token": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "token",
        +      "status"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedfetch_html1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "html": {
        +          "description": "The rendered HTML.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "html"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "labels": {
        +          "type": "object"
        +        },
        +        "status": {
        +          "const": "accepted",
        +          "type": "string"
        +        },
        +        "token": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "token",
        +        "status"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "type": "object"
        +}
    • Changedfetch_markdown1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "markdown": {
        +          "description": "The page's main content as Markdown.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "markdown"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "labels": {
        +          "type": "object"
        +        },
        +        "status": {
        +          "const": "accepted",
        +          "type": "string"
        +        },
        +        "token": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "token",
        +        "status"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "type": "object"
        +}
    • Changedget_result1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "markdown": {
        +          "description": "The page's main content as Markdown.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "markdown"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "html": {
        +          "description": "The rendered HTML.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "html"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "summary": {
        +          "description": "A Markdown summary of the page.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "summary"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "keywords": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "keywords"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "entries": {
        +          "items": {
        +            "properties": {
        +              "text": {
        +                "type": "string"
        +              },
        +              "type": {
        +                "enum": [
        +                  "error",
        +                  "warning",
        +                  "exception"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "entries"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "mime_type": {
        +          "description": "The image's type. The image itself is the image content block.",
        +          "type": "string"
        +        },
        +        "result_url": {
        +          "description": "A link to the image that needs no key.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "mime_type"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "additional_author_information": {
        +          "type": [
        +            "object",
        +            "null"
        +          ]
        +        },
        +        "author_name": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "description": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "favicon_url": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "feed_url": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "language": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "main_image_url": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "publication_date": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "title": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "audits": {
        +          "type": "object"
        +        },
        +        "categories": {
        +          "type": "object"
        +        },
        +        "device": {
        +          "type": "string"
        +        },
        +        "fetchTime": {
        +          "type": "string"
        +        },
        +        "metrics": {
        +          "type": "object"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "operations": {
        +          "additionalProperties": {
        +            "properties": {
        +              "cached": {
        +                "type": "boolean"
        +              },
        +              "error": {
        +                "type": "string"
        +              },
        +              "result": {},
        +              "success": {
        +                "type": "boolean"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "description": "One key per operation requested, in the order asked for.",
        +          "type": "object"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "labels": {
        +          "type": "object"
        +        },
        +        "status": {
        +          "const": "processing",
        +          "type": "string"
        +        },
        +        "token": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "token",
        +        "status"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "type": "object"
        +}
    • Changedrun_lighthouse_audit1 field changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "audits": {
        -        "type": "object"
        -      },
        -      "categories": {
        -        "type": "object"
        -      },
        -      "device": {
        -        "type": "string"
        -      },
        -      "fetchTime": {
        -        "type": "string"
        -      },
        -      "metrics": {
        -        "type": "object"
        -      },
        -      "url": {
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "labels": {
        -        "type": "object"
        -      },
        -      "status": {
        -        "const": "accepted",
        -        "type": "string"
        -      },
        -      "token": {
        -        "type": "string"
        -      }
        -    },
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "audits": {
        +        "type": "object"
        +      },
        +      "categories": {
        +        "type": "object"
        +      },
        +      "device": {
        +        "type": "string"
        +      },
        +      "fetchTime": {
        +        "type": "string"
        +      },
        +      "metrics": {
        +        "type": "object"
        +      },
        +      "url": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "labels": {
        +        "type": "object"
        +      },
        +      "status": {
        +        "const": "accepted",
        +        "type": "string"
        +      },
        +      "token": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "token",
        +      "status"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedscrape_url1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "operations": {
        +          "additionalProperties": {
        +            "properties": {
        +              "cached": {
        +                "type": "boolean"
        +              },
        +              "error": {
        +                "type": "string"
        +              },
        +              "result": {},
        +              "success": {
        +                "type": "boolean"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "description": "One key per operation requested, in the order asked for.",
        +          "type": "object"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "labels": {
        +          "type": "object"
        +        },
        +        "status": {
        +          "const": "accepted",
        +          "type": "string"
        +        },
        +        "token": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "token",
        +        "status"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "type": "object"
        +}
    • Changedsummarize_page1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "anyOf": [
        +    {
        +      "properties": {
        +        "summary": {
        +          "description": "A Markdown summary of the page.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "summary"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "properties": {
        +        "labels": {
        +          "type": "object"
        +        },
        +        "status": {
        +          "const": "accepted",
        +          "type": "string"
        +        },
        +        "token": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "token",
        +        "status"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "type": "object"
        +}
  2. 14 tool updates
    • First observedcapture_console_errors
    • First observedcapture_screenshot
    • First observedextract_keywords
    • First observedextract_metadata
    • First observedfetch_html
    • First observedfetch_markdown
    • First observedget_request
    • First observedget_result
    • First observedget_usage
    • First observedlist_projects
    • First observedlist_requests
    • First observedrun_lighthouse_audit
    • First observedscrape_url
    • First observedsummarize_page

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Fetches and renders web pages using a headless Chromium browser, returning clean Markdown or HTML content even for JavaScript-heavy single-page applications.
    272 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Converts any webpage into clean, LLM-ready Markdown, removing noise and supporting JavaScript rendering.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to read web pages reliably, returning clean markdown content, hyperlinks, and metadata without navigation or ad noise.
    3
    6 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.