Skip to main content
Glama

Convert Document

convert_document

Convert a document to PDF, DOCX, PNG, CSV or other formats without storing a template or injecting data. Carbone tags stay as written, so it also proofs a template in another format.

Instructions

Convert a document to another format without storing a template. Pure conversion: no data is sent, so Carbone tags such as {d.name} are kept as written; this is also how you proof a template in another format (DOCX template → PDF, or DOCX → ODT while it stays a template). The source file can be a local file path, an HTTPS URL, or a base64-encoded string. Use render_document instead when you need data injection ({d.field} tags resolved), translations, or batch generation. Example: { "file": "/Users/me/report.docx", "convertTo": "pdf" } (a bare file name such as "report.docx" is not a path). Common conversions: DOCX → PDF (add converter: "I" for the fastest conversion), XLSX → PDF, PPTX → PDF, HTML → PDF (converter: "C" for full CSS/JS rendering), DOCX → HTML, XLSX → CSV, PDF → PNG, PPTX → PNG (first slide as image), MD → PDF.

Input Schema

NameRequiredDescriptionDefault
fileYesThe document to convert. Three input forms are accepted: (1) Local file path — absolute, e.g. "/Users/me/report.docx" (or "C:\Users\me\report.docx" on Windows), or under the home directory, e.g. "~/report.docx". A relative path must start with "./" or "../" and resolves against the server process's working directory, which is rarely yours: prefer an absolute path. A bare file name such as "report.docx" is NOT a path: it would be sent as base64 content. (2) HTTPS URL — the file is downloaded automatically, e.g. "https://example.com/file.pptx". (3) Base64-encoded string — the raw file content encoded as base64. Supported input formats: DOCX, XLSX, PPTX, ODT, ODS, ODP, ODG, HTML, XHTML, XML, SVG, IDML, MD, TXT, CSV, RTF, PDF. Carbone reads XML-based and text-based documents (plus PDF): the legacy binary Office formats DOC, XLS and PPT are rejected as input, although they are valid outputs. Re-save such a file as DOCX, XLSX or PPTX first. Full conversion matrix: https://carbone.io/documentation/developer/http-api/generate-reports.html#output-file-type
convertToYesTarget output format. Valid outputs depend on the input format (e.g. HTML converts to pdf, docx or png, but not xlsx); see the conversion matrix: https://carbone.io/documentation/developer/http-api/generate-reports.html#output-file-type. "doc", "xls" and "ppt" are output formats; as input, use DOCX, XLSX or PPTX. Simple usage: "pdf". With options: { "formatName": "pdf", "formatOptions": { ... } }.
converterNoConverter engine, used whenever the format changes (not only for PDF). If omitted, "L" is used. "L" LibreOffice: DOCX, XLSX, PPTX, ODT, ODS, ODP, ODG, MD, PDF; the only converter supporting all PDF options. "I" Carbone ICE: DOCX and ODT to PDF; Carbone's own engine, 3x to 300x faster, recommended over "O" for DOCX from v5.15.0. It converts all content except WEBP and EMF/WMF images, SmartArt and complex charts (bar, line, area, pie and doughnut charts are drawn), comments, tracked changes, form fields and equations: keep the default "L" for documents with those. A missing font is replaced by Noto Sans (https://carbone.io/documentation/developer/http-api/generate-reports.html#converters-carbone-ice-limitations). "O" OnlyOffice: DOCX, XLSX, PPTX to PDF. "C" Chromium: HTML to PDF, JPG, PNG, WEBP with full CSS/JS; 100 MB max. PDF options: "L" supports all of them; "O", "C" and "I" apply Security (passwords, permissions) and Watermarks. Docs: https://carbone.io/documentation/developer/http-api/generate-reports.html#converters
outputPathNoOptional local file path to save the converted document to (e.g. "/home/user/out.pdf" or "~/out.pdf"). When set, the file is written to disk and the tool returns the saved path + size instead of embedding the document inline — ideal for large files. The path must not exist yet: an existing file is never overwritten (the call fails and asks for a new file name).
reportNameNoName of the delivered file, WITHOUT extension (e.g. "contract", "2026-invoice"). The document is delivered as "<reportName>.<ext>", with the extension of convertTo, used as the attachment name and the default saved file name. This server names the file itself: a conversion has no templating pass, which is where Carbone resolves reportName. Used literally: Carbone tags such as {d.id} are not resolved here. Ignored with returnLink (a download URL, not a named file) and with outputPath (which sets the path itself).
returnLinkNoIf true, generate the document and return a public download URL instead of the file contents. The link is SHORT-LIVED and ONE-TIME — Carbone deletes the file after the first download — so it is meant for the end user to download once (do not fetch it programmatically). Works in stdio and HTTP. Mutually exclusive with outputPath and asAttachment.
hardRefreshNoIf true, Carbone runs the converter even when the output format equals the input format, and recomputes pagination and the table of contents at the end of the conversion. Needed for PDF → PDF: without it Carbone returns the PDF unchanged and formatOptions (password, permissions, watermarks, PDF/A, …) are NOT applied. This server sets it automatically when the input is a PDF, convertTo is "pdf" and formatOptions are given; pass false to opt out. Example (PDF → PDF/A-4): { "hardRefresh": true, "convertTo": { "formatName": "pdf", "formatOptions": { "SelectPdfVersion": 4 } } }.
asAttachmentNoIf true, return the document as a downloadable file attachment (a base64 EmbeddedResource), for any format. Default delivery: text and png/jpg/gif/webp are returned inline; other binary outputs (PDF, Office, …) are saved to a temp file (path returned). Ignored when outputPath or returnLink is set.
egressAuthorizationNoValue for the Authorization header Carbone adds to its OUTBOUND (egress) requests during conversion — e.g. when a Chromium HTML→PDF conversion fetches a protected external image or stylesheet. For example "Bearer abc123" makes Carbone send `authorization: Bearer abc123` to those hosts. Only the authorization header can be customised; max 511 characters.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changedv2.0.0
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedInput schema / properties / asAttachment / description
      Previous value: -"If true, return the document as a downloadable file attachment (a base64 EmbeddedResource), for any format. Default delivery: text and png/jpg/gif/webp are returned inline; other binary outputs (PDF, Office, …) are saved to a temp file in stdio mode (path returned), or returned as an attachment in HTTP mode. Ignored when outputPath or returnLink is set."New value: +"If true, return the document as a downloadable file attachment (a base64 EmbeddedResource), for any format. Default delivery: text and png/jpg/gif/webp are returned inline; other binary outputs (PDF, Office, …) are saved to a temp file (path returned). Ignored when outputPath or returnLink is set."
    • changedInput schema / properties / convertTo / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "pdf",
      -      "docx",
      -      "doc",
      -      "xlsx",
      -      "xls",
      -      "pptx",
      -      "ppt",
      -      "odt",
      -      "ods",
      -      "odp",
      -      "odg",
      -      "html",
      -      "xhtml",
      -      "txt",
      -      "csv",
      -      "md",
      -      "xml",
      -      "rtf",
      -      "png",
      -      "jpg",
      -      "jpeg",
      -      "webp",
      -      "svg",
      -      "tiff",
      -      "bmp",
      -      "gif",
      -      "zip",
      -      "idml",
      -      "epub",
      -      "cdr"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "properties": {
      -      "formatName": {
      -        "description": "Target format name.",
      -        "enum": [
      -          "pdf",
      -          "docx",
      -          "doc",
      -          "xlsx",
      -          "xls",
      -          "pptx",
      -          "ppt",
      -          "odt",
      -          "ods",
      -          "odp",
      -          "odg",
      -          "html",
      -          "xhtml",
      -          "txt",
      -          "csv",
      -          "md",
      -          "xml",
      -          "rtf",
      -          "png",
      -          "jpg",
      -          "jpeg",
      -          "webp",
      -          "svg",
      -          "tiff",
      -          "bmp",
      -          "gif",
      -          "zip",
      -          "idml",
      -          "epub",
      -          "cdr"
      -        ],
      -        "type": "string"
      -      },
      -      "formatOptions": {
      -        "additionalProperties": {},
      -        "description": "Advanced format options object. Examples by format: PDF — { \"EncryptFile\": true, \"DocumentOpenPassword\": \"secret\", \"DocumentPermissionPassword\": \"owner\" } password-protect; PDF — { \"Watermarks\": [{ \"text\": \"DRAFT\", \"opacity\": 0.2, \"rotation\": -45, \"fontsize\": 60 }] } up to 5 watermarks; PDF — { \"SelectPdfVersion\": 1 } PDF/A-1b compliance (use 2 for PDF/A-2, 3 for PDF/A-3); PDF — { \"PageRange\": \"1-3,5\" } export specific pages only; PDF — { \"ConvertSlideshow\": true } convert each slide to a separate PDF page; Images (PNG/JPG/WEBP) — { \"Quality\": 90 } set compression quality 0-100; Images — { \"density\": 150 } set DPI for rasterisation (default 96); CSV — { \"fieldSeparator\": \";\" } custom column separator.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "formatName"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "pdf",
      +      "docx",
      +      "doc",
      +      "odt",
      +      "ott",
      +      "rtf",
      +      "epub",
      +      "xlsx",
      +      "xls",
      +      "ods",
      +      "ots",
      +      "csv",
      +      "dbf",
      +      "dif",
      +      "pptx",
      +      "ppt",
      +      "odp",
      +      "otp",
      +      "odg",
      +      "html",
      +      "xhtml",
      +      "txt",
      +      "md",
      +      "xml",
      +      "idml",
      +      "png",
      +      "jpg",
      +      "jpeg",
      +      "webp",
      +      "gif",
      +      "tiff",
      +      "bmp",
      +      "svg",
      +      "emf",
      +      "wmf",
      +      "eps"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "properties": {
      +      "formatName": {
      +        "description": "Target format name.",
      +        "enum": [
      +          "pdf",
      +          "docx",
      +          "doc",
      +          "odt",
      +          "ott",
      +          "rtf",
      +          "epub",
      +          "xlsx",
      +          "xls",
      +          "ods",
      +          "ots",
      +          "csv",
      +          "dbf",
      +          "dif",
      +          "pptx",
      +          "ppt",
      +          "odp",
      +          "otp",
      +          "odg",
      +          "html",
      +          "xhtml",
      +          "txt",
      +          "md",
      +          "xml",
      +          "idml",
      +          "png",
      +          "jpg",
      +          "jpeg",
      +          "webp",
      +          "gif",
      +          "tiff",
      +          "bmp",
      +          "svg",
      +          "emf",
      +          "wmf",
      +          "eps"
      +        ],
      +        "type": "string"
      +      },
      +      "formatOptions": {
      +        "additionalProperties": {},
      +        "description": "Format-specific options. Examples: PDF password: { \"EncryptFile\": true, \"DocumentOpenPassword\": \"s3cr3t\" }; PDF permissions: { \"RestrictPermissions\": true, \"PermissionPassword\": \"owner\" }; PDF watermarks (max 4): { \"Watermarks\": [{ \"text\": \"DRAFT\", \"size\": 60, \"opacity\": 0.2, \"rotation\": -45 }] }; PDF/A (L only): { \"SelectPdfVersion\": 2 } (2 = PDF/A-2b, 3 = PDF/A-3b, 4 = PDF/A-4); page selection (L only): { \"PageRange\": \"1-5\" }; accessibility (L only): { \"UseTaggedPDF\": true, \"PDFUACompliance\": true }; JPG/PNG: { \"PixelWidth\": 1200, \"PixelHeight\": 630 }, JPG quality: { \"Quality\": 80 } (1-100); CSV: { \"fieldSeparator\": \";\" }. All options: https://carbone.io/documentation/developer/http-api/generate-reports.html#pdf-options",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "formatName"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / convertTo / description
      Previous value: -"Target output format. Documents : \"pdf\", \"docx\", \"xlsx\", \"pptx\", \"odt\", \"ods\", \"odp\", \"odg\", \"rtf\", \"epub\", plus the legacy \"doc\", \"xls\", \"ppt\" (output only — Carbone writes them but cannot read them back). Web/text  : \"html\", \"xhtml\", \"txt\", \"csv\", \"md\", \"xml\", \"idml\". Images    : \"png\", \"jpg\", \"jpeg\", \"webp\", \"svg\", \"tiff\", \"bmp\", \"gif\". Archive   : \"zip\" (batch output). Simple usage: \"pdf\". Advanced usage: { \"formatName\": \"pdf\", \"formatOptions\": { \"EncryptFile\": true, \"DocumentOpenPassword\": \"secret\" } }."New value: +"Target output format. Valid outputs depend on the input format (e.g. HTML converts to pdf, docx or png, but not xlsx); see the conversion matrix: https://carbone.io/documentation/developer/http-api/generate-reports.html#output-file-type. \"doc\", \"xls\" and \"ppt\" are output formats; as input, use DOCX, XLSX or PPTX. Simple usage: \"pdf\". With options: { \"formatName\": \"pdf\", \"formatOptions\": { ... } }."
    • changedInput schema / properties / converter / description
      Previous value: -"Converter engine. Only relevant when convertTo is \"pdf\" (or an image format rasterised from a document). \"L\" — LibreOffice (default): best all-round engine for DOCX, XLSX, PPTX, ODT, ODS, ODP. \"O\" — OnlyOffice: highest fidelity rendering for Microsoft Office formats (DOCX, XLSX, PPTX). \"C\" — Chromium: best for HTML, CSS, JavaScript — full browser rendering. \"I\" — Carbone ICE (Instant Converter Engine, Carbone 5.14.0+): DOCX → PDF ONLY, no third-party converter — up to 60x faster than LibreOffice on a 1000-page DOCX (3x on a one-page document). Any other input or output format is REJECTED — use another converter for those. PDF options: only Watermarks are applied. EncryptFile, DocumentOpenPassword, RestrictPermissions and the other security options are SILENTLY IGNORED — the PDF comes back readable by anyone, with no error — so NEVER pick \"I\" when the request needs a password or restricted permissions; use \"L\" for those. Also unsupported: WEBP and EMF/WMF images, table of contents, SmartArt, complex charts, footnotes/endnotes, comments, tracked changes, form fields, equations, bookmarks and links; a missing font falls back to Noto Sans. If omitted, LibreOffice is used by default."New value: +"Converter engine, used whenever the format changes (not only for PDF). If omitted, \"L\" is used. \"L\" LibreOffice: DOCX, XLSX, PPTX, ODT, ODS, ODP, ODG, MD, PDF; the only converter supporting all PDF options. \"I\" Carbone ICE: DOCX and ODT to PDF; Carbone's own engine, 3x to 300x faster, recommended over \"O\" for DOCX from v5.15.0. It converts all content except WEBP and EMF/WMF images, SmartArt and complex charts (bar, line, area, pie and doughnut charts are drawn), comments, tracked changes, form fields and equations: keep the default \"L\" for documents with those. A missing font is replaced by Noto Sans (https://carbone.io/documentation/developer/http-api/generate-reports.html#converters-carbone-ice-limitations). \"O\" OnlyOffice: DOCX, XLSX, PPTX to PDF. \"C\" Chromium: HTML to PDF, JPG, PNG, WEBP with full CSS/JS; 100 MB max. PDF options: \"L\" supports all of them; \"O\", \"C\" and \"I\" apply Security (passwords, permissions) and Watermarks. Docs: https://carbone.io/documentation/developer/http-api/generate-reports.html#converters"
    • changedInput schema / properties / converter / enum
      Previous value: -[
      -  "L",
      -  "C",
      -  "O",
      -  "I"
      -]New value: +[
      +  "L",
      +  "O",
      +  "C",
      +  "I"
      +]
    • changedInput schema / properties / egressAuthorization / description
      Previous value: -"Value for the Authorization header Carbone adds to its OUTBOUND (egress) requests during conversion — e.g. when a Chromium HTML→PDF conversion fetches a protected external image or stylesheet. For example \"Bearer abc123\" makes Carbone send `authorization: Bearer abc123` to those hosts. Only the authorization header can be customised; max 512 characters."New value: +"Value for the Authorization header Carbone adds to its OUTBOUND (egress) requests during conversion — e.g. when a Chromium HTML→PDF conversion fetches a protected external image or stylesheet. For example \"Bearer abc123\" makes Carbone send `authorization: Bearer abc123` to those hosts. Only the authorization header can be customised; max 511 characters."
    • changedInput schema / properties / egressAuthorization / maxLength
      Previous value: -512New value: +511
    • changedInput schema / properties / file / description
      Previous value: -"The document to convert. Three input forms are accepted: (1) Local file path — absolute or relative, e.g. \"/home/user/report.docx\" or \"./invoice.xlsx\". (2) HTTPS URL — the file is downloaded automatically, e.g. \"https://example.com/file.pptx\". (3) Base64-encoded string — the raw file content encoded as base64. Supported input formats: DOCX, XLSX, PPTX, ODT, ODS, ODP, ODG, HTML, XHTML, XML, SVG, IDML, Markdown (MD), TXT, CSV, RTF, PDF, PNG and JPG. Carbone reads XML-based and text-based documents only, so the legacy BINARY Office formats DOC, XLS and PPT are REJECTED as input — Carbone can produce them as output but cannot read them. Re-save such a file as DOCX/XLSX/PPTX first. Full conversion matrix: https://carbone.io/documentation/developer/http-api/generate-reports.md"New value: +"The document to convert. Three input forms are accepted: (1) Local file path — absolute, e.g. \"/Users/me/report.docx\" (or \"C:\\Users\\me\\report.docx\" on Windows), or under the home directory, e.g. \"~/report.docx\". A relative path must start with \"./\" or \"../\" and resolves against the server process's working directory, which is rarely yours: prefer an absolute path. A bare file name such as \"report.docx\" is NOT a path: it would be sent as base64 content. (2) HTTPS URL — the file is downloaded automatically, e.g. \"https://example.com/file.pptx\". (3) Base64-encoded string — the raw file content encoded as base64. Supported input formats: DOCX, XLSX, PPTX, ODT, ODS, ODP, ODG, HTML, XHTML, XML, SVG, IDML, MD, TXT, CSV, RTF, PDF. Carbone reads XML-based and text-based documents (plus PDF): the legacy binary Office formats DOC, XLS and PPT are rejected as input, although they are valid outputs. Re-save such a file as DOCX, XLSX or PPTX first. Full conversion matrix: https://carbone.io/documentation/developer/http-api/generate-reports.html#output-file-type"
    • changedInput schema / properties / hardRefresh / description
      Previous value: -"Forces Carbone to run the converter even when the output format already matches the input format. Only useful for PDF: converting PDF → PDF to APPLY formatOptions (watermark, password, PDF/A, page range). Without it Carbone may pass the file straight through and none of those options take effect. Leave unset for any format-changing conversion (DOCX → PDF, XLSX → CSV, …), where the converter runs anyway."New value: +"If true, Carbone runs the converter even when the output format equals the input format, and recomputes pagination and the table of contents at the end of the conversion. Needed for PDF → PDF: without it Carbone returns the PDF unchanged and formatOptions (password, permissions, watermarks, PDF/A, …) are NOT applied. This server sets it automatically when the input is a PDF, convertTo is \"pdf\" and formatOptions are given; pass false to opt out. Example (PDF → PDF/A-4): { \"hardRefresh\": true, \"convertTo\": { \"formatName\": \"pdf\", \"formatOptions\": { \"SelectPdfVersion\": 4 } } }."
    • changedInput schema / properties / outputPath / description
      Previous value: -"Optional local file path to save the converted document to (e.g. \"/home/user/out.pdf\" or \"~/out.pdf\"). When set, the file is written to disk and the tool returns the saved path + size instead of embedding the document inline — ideal for large files."New value: +"Optional local file path to save the converted document to (e.g. \"/home/user/out.pdf\" or \"~/out.pdf\"). When set, the file is written to disk and the tool returns the saved path + size instead of embedding the document inline — ideal for large files. The path must not exist yet: an existing file is never overwritten (the call fails and asks for a new file name)."
    • changedInput schema / properties / reportName / description
      Previous value: -"Filename (WITHOUT extension) for the converted document, returned in the Content-Disposition header. Carbone appends the extension matching convertTo, so do not include one — \"report.pdf\" yields \"report.pdf.pdf\". Examples: \"contract\", \"2026-invoice\". Unlike render_document, Carbone tags are NOT resolved here (conversion does not run templating), so pass a literal name rather than a pattern like \"{d.id}\" — a pattern would come back verbatim. Ignored when returnLink is set, which returns a download URL rather than a named file."New value: +"Name of the delivered file, WITHOUT extension (e.g. \"contract\", \"2026-invoice\"). The document is delivered as \"<reportName>.<ext>\", with the extension of convertTo, used as the attachment name and the default saved file name. This server names the file itself: a conversion has no templating pass, which is where Carbone resolves reportName. Used literally: Carbone tags such as {d.id} are not resolved here. Ignored with returnLink (a download URL, not a named file) and with outputPath (which sets the path itself)."
  2. Changed8 schema fields changedv1.6.0
    • changedInput schema / properties / convertTo / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "pdf",
      -      "docx",
      -      "xlsx",
      -      "pptx",
      -      "odt",
      -      "ods",
      -      "odp",
      -      "odg",
      -      "html",
      -      "xhtml",
      -      "txt",
      -      "csv",
      -      "md",
      -      "xml",
      -      "rtf",
      -      "png",
      -      "jpg",
      -      "jpeg",
      -      "webp",
      -      "svg",
      -      "tiff",
      -      "bmp",
      -      "gif",
      -      "zip",
      -      "idml",
      -      "epub",
      -      "cdr"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "properties": {
      -      "formatName": {
      -        "description": "Target format name.",
      -        "enum": [
      -          "pdf",
      -          "docx",
      -          "xlsx",
      -          "pptx",
      -          "odt",
      -          "ods",
      -          "odp",
      -          "odg",
      -          "html",
      -          "xhtml",
      -          "txt",
      -          "csv",
      -          "md",
      -          "xml",
      -          "rtf",
      -          "png",
      -          "jpg",
      -          "jpeg",
      -          "webp",
      -          "svg",
      -          "tiff",
      -          "bmp",
      -          "gif",
      -          "zip",
      -          "idml",
      -          "epub",
      -          "cdr"
      -        ],
      -        "type": "string"
      -      },
      -      "formatOptions": {
      -        "additionalProperties": {},
      -        "description": "Advanced format options object. Examples by format: PDF — { \"EncryptFile\": true, \"DocumentOpenPassword\": \"secret\", \"DocumentPermissionPassword\": \"owner\" } password-protect; PDF — { \"Watermarks\": [{ \"text\": \"DRAFT\", \"opacity\": 0.2, \"rotation\": -45, \"fontsize\": 60 }] } up to 5 watermarks; PDF — { \"SelectPdfVersion\": 1 } PDF/A-1b compliance (use 2 for PDF/A-2, 3 for PDF/A-3); PDF — { \"PageRange\": \"1-3,5\" } export specific pages only; PDF — { \"ConvertSlideshow\": true } convert each slide to a separate PDF page; Images (PNG/JPG/WEBP) — { \"Quality\": 90 } set compression quality 0-100; Images — { \"density\": 150 } set DPI for rasterisation (default 96); CSV — { \"fieldSeparator\": \";\" } custom column separator.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "formatName"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "pdf",
      +      "docx",
      +      "doc",
      +      "xlsx",
      +      "xls",
      +      "pptx",
      +      "ppt",
      +      "odt",
      +      "ods",
      +      "odp",
      +      "odg",
      +      "html",
      +      "xhtml",
      +      "txt",
      +      "csv",
      +      "md",
      +      "xml",
      +      "rtf",
      +      "png",
      +      "jpg",
      +      "jpeg",
      +      "webp",
      +      "svg",
      +      "tiff",
      +      "bmp",
      +      "gif",
      +      "zip",
      +      "idml",
      +      "epub",
      +      "cdr"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "properties": {
      +      "formatName": {
      +        "description": "Target format name.",
      +        "enum": [
      +          "pdf",
      +          "docx",
      +          "doc",
      +          "xlsx",
      +          "xls",
      +          "pptx",
      +          "ppt",
      +          "odt",
      +          "ods",
      +          "odp",
      +          "odg",
      +          "html",
      +          "xhtml",
      +          "txt",
      +          "csv",
      +          "md",
      +          "xml",
      +          "rtf",
      +          "png",
      +          "jpg",
      +          "jpeg",
      +          "webp",
      +          "svg",
      +          "tiff",
      +          "bmp",
      +          "gif",
      +          "zip",
      +          "idml",
      +          "epub",
      +          "cdr"
      +        ],
      +        "type": "string"
      +      },
      +      "formatOptions": {
      +        "additionalProperties": {},
      +        "description": "Advanced format options object. Examples by format: PDF — { \"EncryptFile\": true, \"DocumentOpenPassword\": \"secret\", \"DocumentPermissionPassword\": \"owner\" } password-protect; PDF — { \"Watermarks\": [{ \"text\": \"DRAFT\", \"opacity\": 0.2, \"rotation\": -45, \"fontsize\": 60 }] } up to 5 watermarks; PDF — { \"SelectPdfVersion\": 1 } PDF/A-1b compliance (use 2 for PDF/A-2, 3 for PDF/A-3); PDF — { \"PageRange\": \"1-3,5\" } export specific pages only; PDF — { \"ConvertSlideshow\": true } convert each slide to a separate PDF page; Images (PNG/JPG/WEBP) — { \"Quality\": 90 } set compression quality 0-100; Images — { \"density\": 150 } set DPI for rasterisation (default 96); CSV — { \"fieldSeparator\": \";\" } custom column separator.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "formatName"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / convertTo / description
      Previous value: -"Target output format. Documents : \"pdf\", \"docx\", \"xlsx\", \"pptx\", \"odt\", \"ods\", \"odp\", \"odg\", \"rtf\", \"epub\". Web/text  : \"html\", \"xhtml\", \"txt\", \"csv\", \"md\", \"xml\", \"idml\". Images    : \"png\", \"jpg\", \"jpeg\", \"webp\", \"svg\", \"tiff\", \"bmp\", \"gif\". Archive   : \"zip\" (batch output). Simple usage: \"pdf\". Advanced usage: { \"formatName\": \"pdf\", \"formatOptions\": { \"EncryptFile\": true, \"DocumentOpenPassword\": \"secret\" } }."New value: +"Target output format. Documents : \"pdf\", \"docx\", \"xlsx\", \"pptx\", \"odt\", \"ods\", \"odp\", \"odg\", \"rtf\", \"epub\", plus the legacy \"doc\", \"xls\", \"ppt\" (output only — Carbone writes them but cannot read them back). Web/text  : \"html\", \"xhtml\", \"txt\", \"csv\", \"md\", \"xml\", \"idml\". Images    : \"png\", \"jpg\", \"jpeg\", \"webp\", \"svg\", \"tiff\", \"bmp\", \"gif\". Archive   : \"zip\" (batch output). Simple usage: \"pdf\". Advanced usage: { \"formatName\": \"pdf\", \"formatOptions\": { \"EncryptFile\": true, \"DocumentOpenPassword\": \"secret\" } }."
    • changedInput schema / properties / converter / description
      Previous value: -"Converter engine. Only relevant when convertTo is \"pdf\" (or an image format rasterised from a document). \"L\" — LibreOffice (default): best all-round engine for DOCX, XLSX, PPTX, ODT, ODS, ODP. \"O\" — OnlyOffice: highest fidelity rendering for Microsoft Office formats (DOCX, XLSX, PPTX). \"C\" — Chromium: best for HTML, CSS, JavaScript — full browser rendering. If omitted, LibreOffice is used by default."New value: +"Converter engine. Only relevant when convertTo is \"pdf\" (or an image format rasterised from a document). \"L\" — LibreOffice (default): best all-round engine for DOCX, XLSX, PPTX, ODT, ODS, ODP. \"O\" — OnlyOffice: highest fidelity rendering for Microsoft Office formats (DOCX, XLSX, PPTX). \"C\" — Chromium: best for HTML, CSS, JavaScript — full browser rendering. \"I\" — Carbone ICE (Instant Converter Engine, Carbone 5.14.0+): DOCX → PDF ONLY, no third-party converter — up to 60x faster than LibreOffice on a 1000-page DOCX (3x on a one-page document). Any other input or output format is REJECTED — use another converter for those. PDF options: only Watermarks are applied. EncryptFile, DocumentOpenPassword, RestrictPermissions and the other security options are SILENTLY IGNORED — the PDF comes back readable by anyone, with no error — so NEVER pick \"I\" when the request needs a password or restricted permissions; use \"L\" for those. Also unsupported: WEBP and EMF/WMF images, table of contents, SmartArt, complex charts, footnotes/endnotes, comments, tracked changes, form fields, equations, bookmarks and links; a missing font falls back to Noto Sans. If omitted, LibreOffice is used by default."
    • changedInput schema / properties / converter / enum
      Previous value: -[
      -  "L",
      -  "C",
      -  "O"
      -]New value: +[
      +  "L",
      +  "C",
      +  "O",
      +  "I"
      +]
    • changedInput schema / properties / file / description
      Previous value: -"The document to convert. Three input forms are accepted: (1) Local file path — absolute or relative, e.g. \"/home/user/report.docx\" or \"./invoice.xlsx\". (2) HTTPS URL — the file is downloaded automatically, e.g. \"https://example.com/file.pptx\". (3) Base64-encoded string — the raw file content encoded as base64. Supported input formats include: DOCX, XLSX, PPTX, ODT, ODS, ODP, ODG, HTML, XHTML, XML, IDML, Markdown (MD), PDF, TXT, CSV, PNG, JPG, SVG, and more. Full conversion matrix: https://carbone.io/documentation/developer/http-api/generate-reports.md"New value: +"The document to convert. Three input forms are accepted: (1) Local file path — absolute or relative, e.g. \"/home/user/report.docx\" or \"./invoice.xlsx\". (2) HTTPS URL — the file is downloaded automatically, e.g. \"https://example.com/file.pptx\". (3) Base64-encoded string — the raw file content encoded as base64. Supported input formats: DOCX, XLSX, PPTX, ODT, ODS, ODP, ODG, HTML, XHTML, XML, SVG, IDML, Markdown (MD), TXT, CSV, RTF, PDF, PNG and JPG. Carbone reads XML-based and text-based documents only, so the legacy BINARY Office formats DOC, XLS and PPT are REJECTED as input — Carbone can produce them as output but cannot read them. Re-save such a file as DOCX/XLSX/PPTX first. Full conversion matrix: https://carbone.io/documentation/developer/http-api/generate-reports.md"
    • addedInput schema / properties / hardRefresh
      Added value: +{
      +  "description": "Forces Carbone to run the converter even when the output format already matches the input format. Only useful for PDF: converting PDF → PDF to APPLY formatOptions (watermark, password, PDF/A, page range). Without it Carbone may pass the file straight through and none of those options take effect. Leave unset for any format-changing conversion (DOCX → PDF, XLSX → CSV, …), where the converter runs anyway.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / outputPath / description
      Previous value: -"Optional local file path to save the converted document to (e.g. \"/home/user/out.pdf\" or \"~/out.pdf\"). When set, the file is written to disk and the tool returns the saved path + size instead of embedding the document inline — ideal for large files. Local (stdio) mode only; rejected in HTTP mode."New value: +"Optional local file path to save the converted document to (e.g. \"/home/user/out.pdf\" or \"~/out.pdf\"). When set, the file is written to disk and the tool returns the saved path + size instead of embedding the document inline — ideal for large files."
    • addedInput schema / properties / reportName
      Added value: +{
      +  "description": "Filename (WITHOUT extension) for the converted document, returned in the Content-Disposition header. Carbone appends the extension matching convertTo, so do not include one — \"report.pdf\" yields \"report.pdf.pdf\". Examples: \"contract\", \"2026-invoice\". Unlike render_document, Carbone tags are NOT resolved here (conversion does not run templating), so pass a literal name rather than a pattern like \"{d.id}\" — a pattern would come back verbatim. Ignored when returnLink is set, which returns a download URL rather than a named file.",
      +  "type": "string"
      +}
  3. Changed1 schema field changedv1.4.0
    • addedInput schema / properties / egressAuthorization
      Added value: +{
      +  "description": "Value for the Authorization header Carbone adds to its OUTBOUND (egress) requests during conversion — e.g. when a Chromium HTML→PDF conversion fetches a protected external image or stylesheet. For example \"Bearer abc123\" makes Carbone send `authorization: Bearer abc123` to those hosts. Only the authorization header can be customised; max 512 characters.",
      +  "maxLength": 512,
      +  "type": "string"
      +}
  4. Changed5 schema fields changedv1.2.2
    • addedInput schema / properties / asAttachment
      Added value: +{
      +  "description": "If true, return the document as a downloadable file attachment (a base64 EmbeddedResource), for any format. Default delivery: text and png/jpg/gif/webp are returned inline; other binary outputs (PDF, Office, …) are saved to a temp file in stdio mode (path returned), or returned as an attachment in HTTP mode. Ignored when outputPath or returnLink is set.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / convertTo / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "pdf",
      -      "docx",
      -      "xlsx",
      -      "pptx",
      -      "odt",
      -      "ods",
      -      "odp",
      -      "odg",
      -      "html",
      -      "xhtml",
      -      "txt",
      -      "csv",
      -      "md",
      -      "xml",
      -      "rtf",
      -      "png",
      -      "jpg",
      -      "jpeg",
      -      "webp",
      -      "svg",
      -      "tiff",
      -      "bmp",
      -      "gif",
      -      "zip",
      -      "idml",
      -      "epub"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "properties": {
      -      "formatName": {
      -        "description": "Target format name.",
      -        "enum": [
      -          "pdf",
      -          "docx",
      -          "xlsx",
      -          "pptx",
      -          "odt",
      -          "ods",
      -          "odp",
      -          "odg",
      -          "html",
      -          "xhtml",
      -          "txt",
      -          "csv",
      -          "md",
      -          "xml",
      -          "rtf",
      -          "png",
      -          "jpg",
      -          "jpeg",
      -          "webp",
      -          "svg",
      -          "tiff",
      -          "bmp",
      -          "gif",
      -          "zip",
      -          "idml",
      -          "epub"
      -        ],
      -        "type": "string"
      -      },
      -      "formatOptions": {
      -        "additionalProperties": {},
      -        "description": "Advanced format options object. Examples by format: PDF — { \"EncryptFile\": true, \"DocumentOpenPassword\": \"secret\", \"DocumentPermissionPassword\": \"owner\" } password-protect; PDF — { \"Watermarks\": [{ \"text\": \"DRAFT\", \"opacity\": 0.2, \"rotation\": -45, \"fontsize\": 60 }] } up to 5 watermarks; PDF — { \"SelectPdfVersion\": 1 } PDF/A-1b compliance (use 2 for PDF/A-2, 3 for PDF/A-3); PDF — { \"PageRange\": \"1-3,5\" } export specific pages only; PDF — { \"ConvertSlideshow\": true } convert each slide to a separate PDF page; Images (PNG/JPG/WEBP) — { \"Quality\": 90 } set compression quality 0-100; Images — { \"density\": 150 } set DPI for rasterisation (default 96); CSV — { \"fieldSeparator\": \";\" } custom column separator.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "formatName"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "pdf",
      +      "docx",
      +      "xlsx",
      +      "pptx",
      +      "odt",
      +      "ods",
      +      "odp",
      +      "odg",
      +      "html",
      +      "xhtml",
      +      "txt",
      +      "csv",
      +      "md",
      +      "xml",
      +      "rtf",
      +      "png",
      +      "jpg",
      +      "jpeg",
      +      "webp",
      +      "svg",
      +      "tiff",
      +      "bmp",
      +      "gif",
      +      "zip",
      +      "idml",
      +      "epub",
      +      "cdr"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "properties": {
      +      "formatName": {
      +        "description": "Target format name.",
      +        "enum": [
      +          "pdf",
      +          "docx",
      +          "xlsx",
      +          "pptx",
      +          "odt",
      +          "ods",
      +          "odp",
      +          "odg",
      +          "html",
      +          "xhtml",
      +          "txt",
      +          "csv",
      +          "md",
      +          "xml",
      +          "rtf",
      +          "png",
      +          "jpg",
      +          "jpeg",
      +          "webp",
      +          "svg",
      +          "tiff",
      +          "bmp",
      +          "gif",
      +          "zip",
      +          "idml",
      +          "epub",
      +          "cdr"
      +        ],
      +        "type": "string"
      +      },
      +      "formatOptions": {
      +        "additionalProperties": {},
      +        "description": "Advanced format options object. Examples by format: PDF — { \"EncryptFile\": true, \"DocumentOpenPassword\": \"secret\", \"DocumentPermissionPassword\": \"owner\" } password-protect; PDF — { \"Watermarks\": [{ \"text\": \"DRAFT\", \"opacity\": 0.2, \"rotation\": -45, \"fontsize\": 60 }] } up to 5 watermarks; PDF — { \"SelectPdfVersion\": 1 } PDF/A-1b compliance (use 2 for PDF/A-2, 3 for PDF/A-3); PDF — { \"PageRange\": \"1-3,5\" } export specific pages only; PDF — { \"ConvertSlideshow\": true } convert each slide to a separate PDF page; Images (PNG/JPG/WEBP) — { \"Quality\": 90 } set compression quality 0-100; Images — { \"density\": 150 } set DPI for rasterisation (default 96); CSV — { \"fieldSeparator\": \";\" } custom column separator.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "formatName"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / file / description
      Previous value: -"The document to convert. Three input forms are accepted: (1) Local file path — absolute or relative, e.g. \"/home/user/report.docx\" or \"./invoice.xlsx\". (2) HTTPS URL — the file is downloaded automatically, e.g. \"https://example.com/file.pptx\". (3) Base64-encoded string — the raw file content encoded as base64. Supported input formats include: DOCX, XLSX, PPTX, ODT, ODS, ODP, ODG, HTML, XHTML, XML, IDML, Markdown (MD), PDF, TXT, CSV, PNG, JPG, SVG, and more. Full conversion matrix: https://carbone.io/documentation/developer/http-api/generate-reports.html#output-file-type"New value: +"The document to convert. Three input forms are accepted: (1) Local file path — absolute or relative, e.g. \"/home/user/report.docx\" or \"./invoice.xlsx\". (2) HTTPS URL — the file is downloaded automatically, e.g. \"https://example.com/file.pptx\". (3) Base64-encoded string — the raw file content encoded as base64. Supported input formats include: DOCX, XLSX, PPTX, ODT, ODS, ODP, ODG, HTML, XHTML, XML, IDML, Markdown (MD), PDF, TXT, CSV, PNG, JPG, SVG, and more. Full conversion matrix: https://carbone.io/documentation/developer/http-api/generate-reports.md"
    • addedInput schema / properties / outputPath
      Added value: +{
      +  "description": "Optional local file path to save the converted document to (e.g. \"/home/user/out.pdf\" or \"~/out.pdf\"). When set, the file is written to disk and the tool returns the saved path + size instead of embedding the document inline — ideal for large files. Local (stdio) mode only; rejected in HTTP mode.",
      +  "type": "string"
      +}
    • addedInput schema / properties / returnLink
      Added value: +{
      +  "description": "If true, generate the document and return a public download URL instead of the file contents. The link is SHORT-LIVED and ONE-TIME — Carbone deletes the file after the first download — so it is meant for the end user to download once (do not fetch it programmatically). Works in stdio and HTTP. Mutually exclusive with outputPath and asAttachment.",
      +  "type": "boolean"
      +}
  5. First observedv1.1.2

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the bar is lower. The description still adds real behavioral context: no data is injected so Carbone tags are kept literal, and no template is stored. It does not itself cover delivery side effects like one-time links or non-overwriting paths, but those live in the parameter docs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Core purpose, tag-preservation semantics, input forms, the alternative tool, an example, and common conversions are all front-loaded in a logical order. It is dense but nearly every sentence carries information; the trailing conversions list is the only borderline padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with no output schema, the description covers purpose, alternative routing, examples, and typical conversion paths, while the rich schema documents delivery (outputPath/returnLink/asAttachment) and options. It is nearly complete, though it never states the default return/delivery behavior itself.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by pairing conversion examples with practical converter choices ('I' for fastest DOCX→PDF, 'C' for full CSS/JS HTML→PDF) and by showing a concrete invocation example, which meaningfully aids correct parameter selection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Convert a document to another format') and immediately distinguishes scope with 'without storing a template' and 'no data is sent'. The sibling render_document is explicitly named as the tool to use for a different job, so an agent can differentiate without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use-this ('pure conversion', proofing a template in another format) and an explicit when-to-use-something-else ('Use render_document instead when you need data injection, translations, or batch generation'). The common-conversion list further anchors the intended scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.