APITemplate.io MCP by usefulapi
Generate PDFs and images with APITemplate.io from templates, HTML, Markdown or a URL.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (8)
- HIGH
- MEDIUMen apitemplate_create_pdf_from_html
- MEDIUMen apitemplate_create_pdf_from_markdown
- LOWen apitemplate_create_pdf_from_html
- LOWen apitemplate_create_pdf_from_markdown
- LOWen apitemplate_create_pdf_from_url
- INFOen apitemplate_create_pdf_from_html
- INFOen apitemplate_create_pdf_from_markdown
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"apitemplate": {
"url": "https://apitemplate.usefulapi.io/mcp"
}
}
}Puntos de conexión remotos
https://apitemplate.usefulapi.io/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (10)
🟢apitemplate_get_account
The APITemplate.io account behind this key: plan, subscription status and period, and the quota: api_quota, api_used, api_remaining (generations), plus the template quota and count. Check api_remaining before generating. GET /v2/account-information.
Esquema de entrada
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apitemplate_list_templates(limit, offset, format, group_name, template_id)
List the templates of the account (PDF and image): template_id, name, format (PDF or JPEG), status, group and dates. Use the template_id with the create tools. Read-only; templates are never changed. GET /v2/list-templates.
Esquema de entrada
{
"type": "object",
"properties": {
"limit": {
"description": "Number of records, 1-500 (default 50).",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"offset": {
"description": "Records to skip (default 0). Next page: offset + limit.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"format": {
"description": "Only PDF or only image (JPEG) templates.",
"type": "string",
"enum": [
"PDF",
"JPEG"
]
},
"group_name": {
"description": "Only templates of this group.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"template_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$",
"description": "The template id (apitemplate_list_templates, or the web console, Manage Templates)."
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apitemplate_get_template(template_id)
One PDF template's HTML body, CSS and print settings (the vendor marks this endpoint experimental, so it can answer with an error for some accounts or image templates). Read-only. GET /v2/get-template.
Esquema de entrada
{
"type": "object",
"properties": {
"template_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$",
"description": "The template id (apitemplate_list_templates, or the web console, Manage Templates)."
}
},
"required": [
"template_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢apitemplate_list_objects(limit, offset, template_id, transaction_type)
List the PDFs and images generated so far, newest first: transaction_ref, template_id, type (PDF, JPEG or MERGE), your meta reference, the hosted file URLs (primary_url, secondary_url for the PNG) and dates. Files already deleted or expired have deletion_status set. Read-only. GET /v2/list-objects.
Esquema de entrada
{
"type": "object",
"properties": {
"limit": {
"description": "Number of records, 1-500 (default 50).",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"offset": {
"description": "Records to skip (default 0). Next page: offset + limit.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"template_id": {
"description": "Only files generated from this template.",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$"
},
"transaction_type": {
"description": "Only this kind of file.",
"type": "string",
"enum": [
"PDF",
"JPEG",
"MERGE"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡apitemplate_create_pdf(template_id, data, filename, expiration, meta, ...)
WRITE: renders one PDF from a saved PDF template and your JSON data (the keys the template uses, e.g. invoice_number, items), and returns the hosted download_url (never the file bytes). Synchronous. COST: uses 1 generation of your APITemplate.io plan quota per call (see apitemplate_get_account). Do not retry or repeat it unless needed; every call is counted. POST /v2/create-pdf (export_type=json).
Esquema de entrada
{
"type": "object",
"properties": {
"template_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$",
"description": "The template id (apitemplate_list_templates, or the web console, Manage Templates)."
},
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "JSON data merged into the template, e.g. {\"invoice_number\":\"INV-1\",\"total\":42}. Keys depend on the template."
},
"filename": {
"description": "Custom file name ending in .pdf (default: a random UUID).",
"type": "string",
"minLength": 1,
"maxLength": 150,
"pattern": "^[\\w .()-]+\\.pdf$"
},
"expiration": {
"description": "Minutes until the hosted file expires: 0 = keep permanently (default), or 1-10080.",
"type": "integer",
"minimum": 0,
"maximum": 10080
},
"meta": {
"description": "Your own reference id for this file; it shows up in apitemplate_list_objects.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"output_html": {
"description": "Also return html_url, the rendered HTML.",
"type": "boolean"
},
"generation_delay": {
"description": "Milliseconds to wait before rendering (0-30000), for pages that load content late.",
"type": "integer",
"minimum": 0,
"maximum": 30000
}
},
"required": [
"template_id",
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡apitemplate_create_image(template_id, overrides, output_image_type, expiration, meta, ...)
WRITE: renders one image (JPEG and PNG) from a saved image template, changing the named layers with overrides (e.g. [{"name":"text_1","text":"Hello"},{"name":"image_1","src":"https://..."}]), and returns the hosted download URLs (never the file bytes). COST: uses 1 generation of your APITemplate.io plan quota per call (see apitemplate_get_account). Do not retry or repeat it unless needed; every call is counted. POST /v2/create-image.
Esquema de entrada
{
"type": "object",
"properties": {
"template_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{4,64}$",
"description": "The template id (apitemplate_list_templates, or the web console, Manage Templates)."
},
"overrides": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Layer name in the template, e.g. text_1."
}
},
"required": [
"name"
],
"additionalProperties": {}
},
"description": "Layer changes: each item has the layer 'name' and the properties to set (text, src, color, textBackgroundColor ...)."
},
"output_image_type": {
"description": "Which formats to render (default all).",
"type": "string",
"enum": [
"all",
"jpegOnly",
"pngOnly"
]
},
"expiration": {
"description": "Minutes until the hosted file expires: 0 = keep permanently (default), or 1-10080.",
"type": "integer",
"minimum": 0,
"maximum": 10080
},
"meta": {
"description": "Your own reference id for this file; it shows up in apitemplate_list_objects.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"generation_delay": {
"description": "Milliseconds to wait before rendering (0-30000), for pages that load content late.",
"type": "integer",
"minimum": 0,
"maximum": 30000
}
},
"required": [
"template_id",
"overrides"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡apitemplate_create_pdf_from_html(body, css, data, settings, filename, ...)
WRITE: renders one PDF from HTML (Jinja2 placeholders like {{name}} are filled from data), without a saved template, and returns the hosted download_url (never the file bytes). COST: uses 1 generation of your APITemplate.io plan quota per call (see apitemplate_get_account). Do not retry or repeat it unless needed; every call is counted. POST /v2/create-pdf-from-html (export_type=json).
Esquema de entrada
{
"type": "object",
"properties": {
"body": {
"type": "string",
"minLength": 1,
"maxLength": 1000000,
"description": "HTML body; may use Jinja2 syntax such as {{name}}."
},
"css": {
"description": "CSS including the <style> tag.",
"type": "string",
"maxLength": 200000
},
"data": {
"description": "Values for the placeholders in body, e.g. {\"name\":\"Jo\"}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"settings": {
"description": "PDF print settings.",
"type": "object",
"properties": {
"paper_size": {
"description": "Paper size; 'custom' needs custom_width and custom_height.",
"type": "string",
"enum": [
"Letter",
"Legal",
"Tabloid",
"Ledger",
"A0",
"A1",
"A2",
"A3",
"A4",
"A5",
"A6",
"custom"
]
},
"custom_width": {
"description": "Width for paper_size custom, with a unit (mm, px or cm), e.g. 210mm.",
"type": "string",
"maxLength": 20
},
"custom_height": {
"description": "Height for paper_size custom, with a unit (mm, px or cm), e.g. 297mm.",
"type": "string",
"maxLength": 20
},
"orientation": {
"description": "1 = portrait, 2 = landscape.",
"type": "string",
"enum": [
"1",
"2"
]
},
"margin_top": {
"description": "Top margin, e.g. '40' (the vendor reference says mm).",
"type": "string",
"maxLength": 10
},
"margin_right": {
"description": "Right margin.",
"type": "string",
"maxLength": 10
},
"margin_bottom": {
"description": "Bottom margin.",
"type": "string",
"maxLength": 10
},
"margin_left": {
"description": "Left margin.",
"type": "string",
"maxLength": 10
},
"print_background": {
"description": "1 = print background colors and images.",
"type": "string",
"enum": [
"0",
"1"
]
},
"displayHeaderFooter": {
"description": "Show the header and footer.",
"type": "boolean"
},
"custom_header": {
"description": "Header HTML (with its CSS).",
"type": "string",
"maxLength": 20000
},
"custom_footer": {
"description": "Footer HTML (with its CSS).",
"type": "string",
"maxLength": 20000
},
"header_font_size": {
"description": "Header font size, e.g. '9px'.",
"type": "string",
"maxLength": 10
},
"rendering_engine_version": {
"description": "Rendering engine: 153 (default) or 97 (legacy).",
"type": "string",
"enum": [
"97",
"153"
]
},
"preferCSSPageSize": {
"description": "Let the CSS @page rule set page size and orientation (engine 153 only).",
"type": "boolean"
}
}
},
"filename": {
"description": "Custom file name ending in .pdf (default: a random UUID).",
"type": "string",
"minLength": 1,
"maxLength": 150,
"pattern": "^[\\w .()-]+\\.pdf$"
},
"expiration": {
"description": "Minutes until the hosted file expires: 0 = keep permanently (default), or 1-10080.",
"type": "integer",
"minimum": 0,
"maximum": 10080
},
"meta": {
"description": "Your own reference id for this file; it shows up in apitemplate_list_objects.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"generation_delay": {
"description": "Milliseconds to wait before rendering (0-30000), for pages that load content late.",
"type": "integer",
"minimum": 0,
"maximum": 30000
}
},
"required": [
"body"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡apitemplate_create_pdf_from_markdown(body, css, data, settings, filename, ...)
WRITE: renders one PDF from Markdown (Jinja2 placeholders like {{lang}} are filled from data) and returns the hosted download_url (never the file bytes). COST: uses 1 generation of your APITemplate.io plan quota per call (see apitemplate_get_account). Do not retry or repeat it unless needed; every call is counted. POST /v2/create-pdf-from-markdown (export_type=json).
Esquema de entrada
{
"type": "object",
"properties": {
"body": {
"type": "string",
"minLength": 1,
"maxLength": 1000000,
"description": "Markdown text; may use Jinja2 syntax such as {{lang}}."
},
"css": {
"description": "CSS including the <style> tag.",
"type": "string",
"maxLength": 200000
},
"data": {
"description": "Values for the placeholders in body.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"settings": {
"description": "PDF print settings.",
"type": "object",
"properties": {
"paper_size": {
"description": "Paper size; 'custom' needs custom_width and custom_height.",
"type": "string",
"enum": [
"Letter",
"Legal",
"Tabloid",
"Ledger",
"A0",
"A1",
"A2",
"A3",
"A4",
"A5",
"A6",
"custom"
]
},
"custom_width": {
"description": "Width for paper_size custom, with a unit (mm, px or cm), e.g. 210mm.",
"type": "string",
"maxLength": 20
},
"custom_height": {
"description": "Height for paper_size custom, with a unit (mm, px or cm), e.g. 297mm.",
"type": "string",
"maxLength": 20
},
"orientation": {
"description": "1 = portrait, 2 = landscape.",
"type": "string",
"enum": [
"1",
"2"
]
},
"margin_top": {
"description": "Top margin, e.g. '40' (the vendor reference says mm).",
"type": "string",
"maxLength": 10
},
"margin_right": {
"description": "Right margin.",
"type": "string",
"maxLength": 10
},
"margin_bottom": {
"description": "Bottom margin.",
"type": "string",
"maxLength": 10
},
"margin_left": {
"description": "Left margin.",
"type": "string",
"maxLength": 10
},
"print_background": {
"description": "1 = print background colors and images.",
"type": "string",
"enum": [
"0",
"1"
]
},
"displayHeaderFooter": {
"description": "Show the header and footer.",
"type": "boolean"
},
"custom_header": {
"description": "Header HTML (with its CSS).",
"type": "string",
"maxLength": 20000
},
"custom_footer": {
"description": "Footer HTML (with its CSS).",
"type": "string",
"maxLength": 20000
},
"header_font_size": {
"description": "Header font size, e.g. '9px'.",
"type": "string",
"maxLength": 10
},
"rendering_engine_version": {
"description": "Rendering engine: 153 (default) or 97 (legacy).",
"type": "string",
"enum": [
"97",
"153"
]
},
"preferCSSPageSize": {
"description": "Let the CSS @page rule set page size and orientation (engine 153 only).",
"type": "boolean"
}
}
},
"filename": {
"description": "Custom file name ending in .pdf (default: a random UUID).",
"type": "string",
"minLength": 1,
"maxLength": 150,
"pattern": "^[\\w .()-]+\\.pdf$"
},
"expiration": {
"description": "Minutes until the hosted file expires: 0 = keep permanently (default), or 1-10080.",
"type": "integer",
"minimum": 0,
"maximum": 10080
},
"meta": {
"description": "Your own reference id for this file; it shows up in apitemplate_list_objects.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"generation_delay": {
"description": "Milliseconds to wait before rendering (0-30000), for pages that load content late.",
"type": "integer",
"minimum": 0,
"maximum": 30000
}
},
"required": [
"body"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡apitemplate_create_pdf_from_url(url, settings, filename, expiration, meta, ...)
WRITE: APITemplate.io opens one public web page URL and prints it to a PDF, and returns the hosted download_url (never the file bytes). The page is fetched by APITemplate.io, not by this server; pages that need a login cannot be printed. COST: uses 1 generation of your APITemplate.io plan quota per call (see apitemplate_get_account). Do not retry or repeat it unless needed; every call is counted. POST /v2/create-pdf-from-url (export_type=json).
Esquema de entrada
{
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"description": "The public http(s) URL of the page to print."
},
"settings": {
"description": "PDF print settings.",
"type": "object",
"properties": {
"paper_size": {
"description": "Paper size; 'custom' needs custom_width and custom_height.",
"type": "string",
"enum": [
"Letter",
"Legal",
"Tabloid",
"Ledger",
"A0",
"A1",
"A2",
"A3",
"A4",
"A5",
"A6",
"custom"
]
},
"custom_width": {
"description": "Width for paper_size custom, with a unit (mm, px or cm), e.g. 210mm.",
"type": "string",
"maxLength": 20
},
"custom_height": {
"description": "Height for paper_size custom, with a unit (mm, px or cm), e.g. 297mm.",
"type": "string",
"maxLength": 20
},
"orientation": {
"description": "1 = portrait, 2 = landscape.",
"type": "string",
"enum": [
"1",
"2"
]
},
"margin_top": {
"description": "Top margin, e.g. '40' (the vendor reference says mm).",
"type": "string",
"maxLength": 10
},
"margin_right": {
"description": "Right margin.",
"type": "string",
"maxLength": 10
},
"margin_bottom": {
"description": "Bottom margin.",
"type": "string",
"maxLength": 10
},
"margin_left": {
"description": "Left margin.",
"type": "string",
"maxLength": 10
},
"print_background": {
"description": "1 = print background colors and images.",
"type": "string",
"enum": [
"0",
"1"
]
},
"displayHeaderFooter": {
"description": "Show the header and footer.",
"type": "boolean"
},
"custom_header": {
"description": "Header HTML (with its CSS).",
"type": "string",
"maxLength": 20000
},
"custom_footer": {
"description": "Footer HTML (with its CSS).",
"type": "string",
"maxLength": 20000
},
"header_font_size": {
"description": "Header font size, e.g. '9px'.",
"type": "string",
"maxLength": 10
},
"rendering_engine_version": {
"description": "Rendering engine: 153 (default) or 97 (legacy).",
"type": "string",
"enum": [
"97",
"153"
]
},
"preferCSSPageSize": {
"description": "Let the CSS @page rule set page size and orientation (engine 153 only).",
"type": "boolean"
}
}
},
"filename": {
"description": "Custom file name ending in .pdf (default: a random UUID).",
"type": "string",
"minLength": 1,
"maxLength": 150,
"pattern": "^[\\w .()-]+\\.pdf$"
},
"expiration": {
"description": "Minutes until the hosted file expires: 0 = keep permanently (default), or 1-10080.",
"type": "integer",
"minimum": 0,
"maximum": 10080
},
"meta": {
"description": "Your own reference id for this file; it shows up in apitemplate_list_objects.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"generation_delay": {
"description": "Milliseconds to wait before rendering (0-30000), for pages that load content late.",
"type": "integer",
"minimum": 0,
"maximum": 30000
}
},
"required": [
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡apitemplate_merge_pdfs(urls, expiration, meta)
WRITE: joins 2-20 PDFs (public http(s) URLs, in the given order, e.g. earlier download_url values) into one PDF and returns the hosted primary_url (never the file bytes). The source files are not changed or deleted. COST: uses 1 generation of your APITemplate.io plan quota per call (see apitemplate_get_account). Do not retry or repeat it unless needed; every call is counted. POST /v2/merge-pdfs (export_type=json).
Esquema de entrada
{
"type": "object",
"properties": {
"urls": {
"minItems": 2,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 2048
},
"description": "The PDF URLs to join, in order."
},
"expiration": {
"description": "Minutes until the hosted file expires: 0 = keep permanently (default), or 1-43200.",
"type": "integer",
"minimum": 0,
"maximum": 43200
},
"meta": {
"description": "Your own reference id for this file; it shows up in apitemplate_list_objects.",
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"urls"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Comunidad
Evidencia