x402-paid tools: render a web page to markdown/PNG/PDF, host a file at a URL, call a URL later
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Hosts a file: upload up to 10 MB as base64 with its content type and get back a public download URL that serves the bytes with that content type for 1 to 168 hours (default 24). Downloads are free, readable at once where uploaded and everywhere within about a minute. Executables are refused; HTML and SVG are served as attachments. A failed upload is not charged. Price: $0.01 per call in USDC (x402).
The file, base64 (standard or URL-safe alphabet). Up to 10485760 bytes decoded.
MIME type the file is served with, e.g. image/png or application/pdf. Executable types are refused; text/html and image/svg+xml are served as attachments.
Suggested download name. Never used as the storage key.
Hours the download URL keeps working, default 24.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Hosts a file: upload up to 10 MB as base64 with its content type and get back a public download URL that serves the bytes with that content type for 1 to 168 hours (default 24). Downloads are free, readable at once where uploaded and everywhere within about a minute. Executables are refused; HTML and SVG are served as attachments. A failed upload is not charged. Price: $0.01 per call in USDC (x402).
| Argument | Type | Description |
|---|---|---|
| data* | string | The file, base64 (standard or URL-safe alphabet). Up to 10485760 bytes decoded. |
| filename | string | Suggested download name. Never used as the storage key. |
| ttlHours | integer | Hours the download URL keeps working, default 24. |
| contentType* | string | MIME type the file is served with, e.g. image/png or application/pdf. Executable types are refused; text/html and image/svg+xml are served as attachments. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data",
"contentType"
],
"properties": {
"data": {
"type": "string",
"minLength": 1,
"description": "The file, base64 (standard or URL-safe alphabet). Up to 10485760 bytes decoded."
},
"filename": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Suggested download name. Never used as the storage key."
},
"ttlHours": {
"type": "integer",
"maximum": 168,
"minimum": 1,
"description": "Hours the download URL keeps working, default 24."
},
"contentType": {
"type": "string",
"pattern": "^[A-Za-z0-9!#$&^_.+-]+\\/[A-Za-z0-9!#$&^_.+-]+",
"maxLength": 128,
"description": "MIME type the file is served with, e.g. image/png or application/pdf. Executable types are refused; text/html and image/svg+xml are served as attachments."
}
},
"additionalProperties": false
}Renders a public web page in a real headless browser (JavaScript runs, redirects are followed) and returns it as clean markdown, a PNG screenshot or a PDF. One call, one payment, no account. A render that fails is not charged. Price: $0.01 per call in USDC (x402).
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) page to render. Private, local and cloud-metadata addresses are refused. |
| width | integer | Viewport width in px, default 1280. |
| format | string | markdown: the page's main content as text. screenshot: a PNG image. pdf: a PDF document. |
| height | integer | Viewport height in px, default 800. |
| fullPage | boolean | screenshot: capture the whole page, up to 8000px tall. |
| selector | string | CSS selector. markdown: convert only that element. screenshot: capture only that element. |
| pdfFormat | string | pdf: paper size, default A4. |
| timeoutMs | integer | Navigation timeout, default 15000. |
Schedules a delayed HTTP callback: give a public URL, an optional JSON body, optional headers and a delay of 60 seconds to 7 days (or an absolute time), and the URL is called at that time (POST when a body was given, otherwise GET), with one retry and a 10-second timeout. The answer carries a free status URL that reports whether it fired and what the callee answered. A request that is refused is not charged. Price: $0.005 per call in USDC (x402).
| Argument | Type | Description |
|---|---|---|
| at | string | Absolute time with a timezone, e.g. 2026-10-28T15:00:00Z, 60 seconds to 7 days ahead. Give this or delaySeconds, not both. |
| url* | string | Public http(s) URL to call. Private, local and cloud-metadata addresses are refused, when scheduled and again when fired. Redirects are reported, not followed. |
| body | any | Any JSON value. Present: the callback is a POST with this as its JSON body (up to 65536 bytes). Absent: a GET. |
| headers | object | Extra request headers, up to 16, printable ASCII values up to 1024 characters. host, content-length and connection-level headers are refused. |
| delaySeconds | integer | Seconds from now, 60 to 604800. Give this or at, not both. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"at": {
"type": "string",
"description": "Absolute time with a timezone, e.g. 2026-10-28T15:00:00Z, 60 seconds to 7 days ahead. Give this or delaySeconds, not both."
},
"url": {
"type": "string",
"format": "uri",
"description": "Public http(s) URL to call. Private, local and cloud-metadata addresses are refused, when scheduled and again when fired. Redirects are reported, not followed."
},
"body": {
"description": "Any JSON value. Present: the callback is a POST with this as its JSON body (up to 65536 bytes). Absent: a GET."
},
"headers": {
"type": "object",
"description": "Extra request headers, up to 16, printable ASCII values up to 1024 characters. host, content-length and connection-level headers are refused.",
"additionalProperties": {
"type": "string"
}
},
"delaySeconds": {
"type": "integer",
"maximum": 604800,
"minimum": 60,
"description": "Seconds from now, 60 to 604800. Give this or at, not both."
}
},
"additionalProperties": false
}| waitUntil | string | When the page counts as loaded, default networkidle2. |
| waitForSelector | string | Wait until this CSS selector exists before capturing. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Public http(s) page to render. Private, local and cloud-metadata addresses are refused."
},
"width": {
"type": "integer",
"maximum": 1920,
"minimum": 320,
"description": "Viewport width in px, default 1280."
},
"format": {
"enum": [
"markdown",
"screenshot",
"pdf"
],
"type": "string",
"default": "markdown",
"description": "markdown: the page's main content as text. screenshot: a PNG image. pdf: a PDF document."
},
"height": {
"type": "integer",
"maximum": 1920,
"minimum": 320,
"description": "Viewport height in px, default 800."
},
"fullPage": {
"type": "boolean",
"description": "screenshot: capture the whole page, up to 8000px tall."
},
"selector": {
"type": "string",
"maxLength": 256,
"description": "CSS selector. markdown: convert only that element. screenshot: capture only that element."
},
"pdfFormat": {
"enum": [
"A4",
"Letter"
],
"type": "string",
"description": "pdf: paper size, default A4."
},
"timeoutMs": {
"type": "integer",
"maximum": 25000,
"minimum": 1000,
"description": "Navigation timeout, default 15000."
},
"waitUntil": {
"enum": [
"load",
"domcontentloaded",
"networkidle0",
"networkidle2"
],
"type": "string",
"description": "When the page counts as loaded, default networkidle2."
},
"waitForSelector": {
"type": "string",
"maxLength": 256,
"description": "Wait until this CSS selector exists before capturing."
}
},
"additionalProperties": false
}