Overview
Pages are rendered with Poppler, the PDF engine used by most Linux desktops, so text, vector graphics, images and page rotation come out as a PDF viewer shows them. Very large pages are rendered at a lower dpi so no image exceeds 25 megapixels, and each image reports the dpi it was rendered at. Encrypted PDFs are rejected.
Live Test PDF to Image Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as PDFtoImage. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "PDFtoImage",
"arguments": {}
}Connecting
One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervekit": {
"url": "https://api.vervekit.com/v1/mcp"
}
}
}https://api.vervekit.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
pdfOptional | string | The PDF file to render (up to 10 MB), or a public PDF URL |
pagesOptional | string | Pages to render, as numbers and ranges such as 1-3,5; at most 10 per call on paid plans, 1 on the Free plan default 1 · length 0–100 |
formatOptional | string | Image formatpngjpgjpegdefault png |
qualityOptional | integer | JPG quality from 1 to 100; ignored for PNG default 90 · range 1–100 |
dpiOptionalPremium | integer | Resolution in dots per inch, from 72 to 300 default 150 · range 72–300 |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"pageCount": 14,
"format": "png",
"dpi": 150,
"imageCount": 2,
"expires": 1792400000000,
"images": [
{
"page": 1,
"imageName": "3b7e9d21-4c5a-4f80-a1d6-9e2c8b7f5a34-1.png",
"width": 1275,
"height": 1650,
"dpi": 150,
"size": 214533,
"downloadURL": "https://storage.googleapis.com/apiverve/APIData/pdftoimage/3b7e9d21-4c5a-4f80-a1d6-9e2c8b7f5a34-1.png?GoogleAccessId=635500398038-compute%40developer.gserviceaccount.com&Expires=1792400000&Signature=SAMPLE"
},
{
"page": 2,
"imageName": "3b7e9d21-4c5a-4f80-a1d6-9e2c8b7f5a34-2.png",
"width": 1275,
"height": 1650,
"dpi": 150,
"size": 198207,
"downloadURL": "https://storage.googleapis.com/apiverve/APIData/pdftoimage/3b7e9d21-4c5a-4f80-a1d6-9e2c8b7f5a34-2.png?GoogleAccessId=635500398038-compute%40developer.gserviceaccount.com&Expires=1792400000&Signature=SAMPLE"
}
]
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
pageCount | number | 14 | Total pages in the PDF |
format | string | png | Image format (png or jpg) |
dpi | number | 150 | Requested resolution in dots per inch |
imageCount | number | 2 | Number of pages rendered |
expires | number | 1792400000000 | When the download links expire (Unix time in milliseconds) |
images | array[2] | One entry per rendered page, in the order requested | |
images.0.page | number | 1 | Page number |
images.0.imageName | string | 3b7e9d21-4c5a-4f80-a1d6-9e2c8b7f5a34-1.png | File name of the image |
images.0.width | number | 1275 | Image width in pixels |
images.0.height | number | 1650 | Image height in pixels |
images.0.dpi | number | 150 | Resolution the page was rendered at; lower than requested only for very large pages |
images.0.size | number | 214533 | Image size in bytes |
images.0.downloadURL | string | https://storage.googleapis.com/apiverve/APIData/pdftoimage/3b7e9d21-4c5a-4f80-a1d6-9e2c8b7f5a34-1.pn… | Signed link to download the image, valid for 2 days |
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This skill is not part of VerveKit. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 10 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Document Thumbnails
- Show a preview image of the first page of uploaded PDFs in file lists and search results.
- Page Previews
- Display individual pages of a contract or report as images where a PDF viewer is not available.
- OCR Pipelines
- Turn scanned PDF pages into images for the Image to Text API or another OCR step.
- Social and Email Images
- Use a page of a brochure, menu or flyer PDF as an image in posts and newsletters.
Other ways to use PDF to Image
Set up PDF to Image on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.
Related
More in Documents: