Generate PDFs and images from CraftMyPDF templates; read templates, versions and usage.
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.
WRITE: uses the CraftMyPDF account's own quota (credits; a successful generation is a billable transaction, typically 1 credit per document, and every call counts even with identical data). Generate ONE image (JPEG or PNG) from a template and your JSON data. Returns a hosted file URL (never file bytes) that expires after `expiration` minutes. POST /create-image with export_type=json.
The JSON object that fills the template's {{placeholders}}, e.g. {"invoice_number":"INV38379","total_amount":82542.56}. The whole request must stay under about 3.8 MB.
CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates).
Template version number (from craftmypdf_list_template_versions). Latest version when omitted.
Minutes until the hosted file is deleted from CraftMyPDF's CDN, 1-10080 (default 60; the vendor default is 5).
File name of the output (default output.jpg).
Image type (default jpeg).
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
WRITE: uses the CraftMyPDF account's own quota (credits; a successful generation is a billable transaction, typically 1 credit per document, and every call counts even with identical data). Generate ONE image (JPEG or PNG) from a template and your JSON data. Returns a hosted file URL (never file bytes) that expires after `expiration` minutes. POST /create-image with export_type=json.
| Argument | Type | Description |
|---|---|---|
| data* | object | The JSON object that fills the template's {{placeholders}}, e.g. {"invoice_number":"INV38379","total_amount":82542.56}. The whole request must stay under about 3.8 MB. |
| version | string | Template version number (from craftmypdf_list_template_versions). Latest version when omitted. |
| expiration | integer | Minutes until the hosted file is deleted from CraftMyPDF's CDN, 1-10080 (default 60; the vendor default is 5). |
| output_file | string | File name of the output (default output.jpg). |
| output_type | string | Image type (default jpeg). |
| template_id* | string | CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"template_id",
"data"
],
"properties": {
"data": {
"type": "object",
"description": "The JSON object that fills the template's {{placeholders}}, e.g. {\"invoice_number\":\"INV38379\",\"total_amount\":82542.56}. The whole request must stay under about 3.8 MB.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"version": {
"type": "string",
"pattern": "^\\d{1,6}$",
"description": "Template version number (from craftmypdf_list_template_versions). Latest version when omitted."
},
"expiration": {
"type": "integer",
"maximum": 10080,
"minimum": 1,
"description": "Minutes until the hosted file is deleted from CraftMyPDF's CDN, 1-10080 (default 60; the vendor default is 5)."
},
"output_file": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9 _.-]{0,98}$",
"description": "File name of the output (default output.jpg)."
},
"output_type": {
"enum": [
"jpeg",
"png"
],
"type": "string",
"description": "Image type (default jpeg)."
},
"template_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$",
"description": "CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates)."
}
}
}WRITE: uses the CraftMyPDF account's own quota (credits; a successful generation is a billable transaction, typically 1 credit per document, and every call counts even with identical data). Generate ONE PDF from a template and your JSON data. Returns a hosted file URL (never file bytes) that expires after `expiration` minutes, plus the transaction reference and any anchors (page numbers for a table of contents). Look the template up with craftmypdf_list_templates / craftmypdf_get_template first. POST /create with export_type=json.
| Argument | Type | Description |
|---|---|---|
| data* | object | The JSON object that fills the template's {{placeholders}}, e.g. {"invoice_number":"INV38379","total_amount":82542.56}. The whole request must stay under about 3.8 MB. |
| version | string | Template version number (from craftmypdf_list_template_versions). Latest version when omitted. |
| expiration | integer | Minutes until the hosted file is deleted from CraftMyPDF's CDN, 1-10080 (default 60; the vendor default is 5). |
| output_file | string | File name of the output (default output.pdf). |
| template_id* | string | CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates). |
| image_resample_res | integer |
WRITE: uses the CraftMyPDF account's own quota (credits; a successful generation is a billable transaction, typically 1 credit per document, and every call counts even with identical data). Generate ONE combined PDF from 2-10 templates, each with its own data (or the shared `data`). Costs credits for each template rendered. Returns a hosted file URL that expires after `expiration` minutes. Uses the latest template versions. POST /create-merge with export_type=json.
| Argument | Type | Description |
|---|---|---|
| data | object | Shared data for entries without their own. |
| paging | string | Page numbering across the templates: reset (default) restarts at each template, continuous carries on. |
| templates* | array | 2-10 entries, rendered in order. |
| expiration | integer | Minutes until the hosted file is deleted from CraftMyPDF's CDN, 1-10080 (default 60; the vendor default is 5). |
| output_file | string | File name of the output (default output.pdf). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"templates"
],
"properties": {
"data": {
"type": "object",
"description": "Shared data for entries without their own.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"paging": {
"enum": [
"continuous",
"reset"
],
"type": "string",
"description": "Page numbering across the templates: reset (default) restarts at each template, continuous carries on."
},
"templates": {
"type": "array",
"items": {
"type": "object",
"required": [
"template_id"
],
"properties": {
"data": {
"type": "object",
"description": "Data for this template; falls back to the shared data.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"template_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$",
"description": "CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates)."
}
}
},
"maxItems": 10,
"minItems": 2,
"description": "2-10 entries, rendered in order."
},
"expiration": {
"type": "integer",
"maximum": 10080,
"minimum": 1,
"description": "Minutes until the hosted file is deleted from CraftMyPDF's CDN, 1-10080 (default 60; the vendor default is 5)."
},
"output_file": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9 _.-]{0,98}$",
"description": "File name of the output (default output.pdf)."
}
}
}The CraftMyPDF account behind the API key: username, quota used (quota_counter) and quota total (quota_max), template count and limit, creation date. Check the quota before generating many documents. GET /get-account-info.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Metadata of a PDF that CraftMyPDF downloads from a public https URL: page count, title, author, creator, producer, dates. May count against the account's rate limit. GET /get-pdf-info.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public https URL of a PDF file. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2000,
"description": "Public https URL of a PDF file."
}
}
}One template: its name and the sample JSON data it expects (the placeholders to fill when generating). The full layout body is only returned with include_body (it can be very large and is cut). GET /get-template.
| Argument | Type | Description |
|---|---|---|
| version | string | Template version number (from craftmypdf_list_template_versions). Latest version when omitted. |
| template_id* | string | CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates). |
| include_body | boolean | Also return the template layout JSON (default false; cut at 40000 characters). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"template_id"
],
"properties": {
"version": {
"type": "string",
"pattern": "^\\d{1,6}$",
"description": "Template version number (from craftmypdf_list_template_versions). Latest version when omitted."
},
"template_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$",
"description": "CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates)."
},
"include_body": {
"type": "boolean",
"description": "Also return the template layout JSON (default false; cut at 40000 characters)."
}
}
}The saved versions of a template (version number, description, time, whether it is retained). Use a version number when generating to pin the layout. GET /list-template-versions.
| Argument | Type | Description |
|---|---|---|
| template_id* | string | CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"template_id"
],
"properties": {
"template_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$",
"description": "CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates)."
}
}
}List the PDF/image templates of the account: template_id, name, status, group, created and updated time. The template_id is what the generation tools need. Read only; templates cannot be edited here. GET /list-templates.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records to return, 1-300 (default 50). |
| offset | integer | Records to skip (default 0). Use next_offset from the previous reply. |
| group_name | string | Only templates of this group. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 300,
"minimum": 1,
"description": "Records to return, 1-300 (default 50)."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Records to skip (default 0). Use next_offset from the previous reply."
},
"group_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Only templates of this group."
}
}
}Recent generation transactions of the account, newest first: transaction_ref, type (PDFGEN, PDFPREVIEW, ...), execution time, credits used, time, file size and result status. Use it to see what was billed. GET /list-transactions.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records to return, 1-300 (default 50). |
| offset | integer | Records to skip (default 0). Use next_offset from the previous reply. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 300,
"minimum": 1,
"description": "Records to return, 1-300 (default 50)."
},
"offset": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Records to skip (default 0). Use next_offset from the previous reply."
}
}
}WRITE: uses the CraftMyPDF account's own quota (credits; a successful generation is a billable transaction, typically 1 credit per document, and every call counts even with identical data). Merge 2-10 existing PDFs, given as public https URLs, into ONE PDF. CraftMyPDF downloads the files from your URLs. Returns a hosted file URL that expires after `expiration` minutes. POST /merge-pdfs.
| Argument | Type | Description |
|---|---|---|
| urls* | array | 2-10 public https URLs of PDF files, merged in this order. |
| expiration | integer | Minutes until the hosted file is deleted from CraftMyPDF's CDN, 1-10080 (default 60; the vendor default is 5). |
| output_file | string | File name of the output (default output.pdf). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2000
},
"maxItems": 10,
"minItems": 2,
"description": "2-10 public https URLs of PDF files, merged in this order."
},
"expiration": {
"type": "integer",
"maximum": 10080,
"minimum": 1,
"description": "Minutes until the hosted file is deleted from CraftMyPDF's CDN, 1-10080 (default 60; the vendor default is 5)."
},
"output_file": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9 _.-]{0,98}$",
"description": "File name of the output (default output.pdf)."
}
}
}Usage statistics (how many generations) of up to 20 templates within an optional date range. Dates are ISO 8601 UTC date-times such as 2026-10-01T00:00:00Z. GET /query-template-usage.
| Argument | Type | Description |
|---|---|---|
| end_date | string | End, ISO 8601 UTC. |
| start_date | string | Start, ISO 8601 UTC, e.g. 2026-10-01T00:00:00Z. |
| template_ids* | array | 1-20 template ids. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"template_ids"
],
"properties": {
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,3})?)?Z$",
"maxLength": 40,
"description": "End, ISO 8601 UTC."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,3})?)?Z$",
"maxLength": 40,
"description": "Start, ISO 8601 UTC, e.g. 2026-10-01T00:00:00Z."
},
"template_ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$",
"description": "CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates)."
},
"maxItems": 20,
"minItems": 1,
"description": "1-20 template ids."
}
}
}| Downsample images to this DPI to shrink the PDF: 72, 150, 300, 600 or 1200. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"template_id",
"data"
],
"properties": {
"data": {
"type": "object",
"description": "The JSON object that fills the template's {{placeholders}}, e.g. {\"invoice_number\":\"INV38379\",\"total_amount\":82542.56}. The whole request must stay under about 3.8 MB.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"version": {
"type": "string",
"pattern": "^\\d{1,6}$",
"description": "Template version number (from craftmypdf_list_template_versions). Latest version when omitted."
},
"expiration": {
"type": "integer",
"maximum": 10080,
"minimum": 1,
"description": "Minutes until the hosted file is deleted from CraftMyPDF's CDN, 1-10080 (default 60; the vendor default is 5)."
},
"output_file": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9 _.-]{0,98}$",
"description": "File name of the output (default output.pdf)."
},
"template_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$",
"description": "CraftMyPDF template id, e.g. 05f77b2b18ad809a (from craftmypdf_list_templates)."
},
"image_resample_res": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Downsample images to this DPI to shrink the PDF: 72, 150, 300, 600 or 1200."
}
}
}