A remote MCP server to convert HTML documents (URL or raw source) to PDF or screenshots
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.
Convert an HTML document or a URL to a PDF, PNG, JPEG or WEBP file. Returns a temporary download URL (valid ~2 days).
A URL (http/https) or a raw HTML string to convert.
Extra CSS to inject, as a URL or raw string.
Milliseconds to wait before capture (max 10000).
Output format: pdf (default), png, jpeg or webp.
Generate a free, watermarked document that does not consume credits. Useful for testing.
A JS variable/function or CSS selector to wait for before capturing.
Landscape orientation instead of portrait (PDF only).
Use the print CSS media type instead of screen.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http pdfshift https://api.pdfshift.io/mcp
Convert an HTML document or a URL to a PDF, PNG, JPEG or WEBP file. Returns a temporary download URL (valid ~2 days).
| Argument | Type | Description |
|---|---|---|
| css | string | Extra CSS to inject, as a URL or raw string. |
| delay | integer | Milliseconds to wait before capture (max 10000). |
| format | string | Output format: pdf (default), png, jpeg or webp. |
| source* | string | A URL (http/https) or a raw HTML string to convert. |
| sandbox | boolean | Generate a free, watermarked document that does not consume credits. Useful for testing. |
| wait_for | string | A JS variable/function or CSS selector to wait for before capturing. |
| landscape | boolean | Landscape orientation instead of portrait (PDF only). |
| use_print | boolean | Use the print CSS media type instead of screen. |
{
"type": "object",
"required": [
"source"
],
"properties": {
"css": {
"type": "string",
"description": "Extra CSS to inject, as a URL or raw string."
},
"delay": {
"type": "integer",
"description": "Milliseconds to wait before capture (max 10000)."
},
"format": {
"enum": [
"pdf",
"png",
"jpeg",
"webp"
],
"type": "string",
"description": "Output format: pdf (default), png, jpeg or webp."
},
"source": {
"type": "string",
"description": "A URL (http/https) or a raw HTML string to convert."
},
"sandbox": {
"type": "boolean",
"description": "Generate a free, watermarked document that does not consume credits. Useful for testing."
},
"wait_for": {
"type": "string",
"description": "A JS variable/function or CSS selector to wait for before capturing."
},
"landscape": {
"type": "boolean",
"description": "Landscape orientation instead of portrait (PDF only)."
},
"use_print": {
"type": "boolean",
"description": "Use the print CSS media type instead of screen."
}
},
"additionalProperties": true
}Create a new reusable HTML template.
| Argument | Type | Description |
|---|---|---|
| name* | string | Human-readable name. |
| slug* | string | Unique identifier for the template. |
| content* | string | HTML content of the template. |
{
"type": "object",
"required": [
"slug",
"name",
"content"
],
"properties": {
"name": {
"type": "string",
"description": "Human-readable name."
},
"slug": {
"type": "string",
"description": "Unique identifier for the template."
},
"content": {
"type": "string",
"description": "HTML content of the template."
}
},
"additionalProperties": false
}Get the current credit usage for the account (remaining, total, used).
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Delete a template by its slug.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The template slug to delete. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "The template slug to delete."
}
},
"additionalProperties": false
}Render a saved template to HTML, PDF, PNG, JPEG or WEBP. Document formats return a temporary download URL; html returns the rendered markup. Pass template variables and any conversion option as extra properties.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The template slug to render. |
| format | string | Output: html, pdf (default), png, jpeg or webp. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "The template slug to render."
},
"format": {
"enum": [
"html",
"pdf",
"png",
"jpeg",
"webp"
],
"type": "string",
"description": "Output: html, pdf (default), png, jpeg or webp."
}
},
"additionalProperties": true
}Get a single conversion log by its request id.
| Argument | Type | Description |
|---|---|---|
| request_id* | string | The request id of the conversion. |
{
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string",
"description": "The request id of the conversion."
}
},
"additionalProperties": false
}Get the raw HTML content of a template by its slug.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The template slug. |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "The template slug."
}
},
"additionalProperties": false
}List recent conversion logs for the account.
| Argument | Type | Description |
|---|---|---|
| key | string | Filter to a specific API key (public id). Default: all keys. |
| limit | integer | Number of items to return (5-100, default 20). |
| cursor | string | Pagination cursor from a previous response. |
| status | string | Filter by status. |
{
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Filter to a specific API key (public id). Default: all keys."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 5,
"description": "Number of items to return (5-100, default 20)."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous response."
},
"status": {
"enum": [
"error",
"success",
"all"
],
"type": "string",
"description": "Filter by status."
}
},
"additionalProperties": false
}List all saved HTML templates for the account.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}List the available PDFShift plans and their pricing (credits, price, overage, monthly/yearly). Custom plans specific to the account are included when authenticated.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Update the name and/or HTML content of an existing template.
| Argument | Type | Description |
|---|---|---|
| name | string | New name. |
| slug* | string | The template slug to update. |
| content* | string | New HTML content. |
{
"type": "object",
"required": [
"slug",
"content"
],
"properties": {
"name": {
"type": "string",
"description": "New name."
},
"slug": {
"type": "string",
"description": "The template slug to update."
},
"content": {
"type": "string",
"description": "New HTML content."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 5, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.