Skip to main content
Glama

Convert Document

convert_document
Read-onlyIdempotent

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 an HTTPS URL or a base64-encoded string (local file paths are not accepted over HTTP). Use render_document instead when you need data injection ({d.field} tags resolved), translations, or batch generation. Example: { "file": "https://example.com/report.docx", "convertTo": "pdf" }. 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

TableJSON Schema
NameRequiredDescriptionDefault
fileYesThe document to convert. Two input forms are accepted: (1) HTTPS URL — the file is downloaded automatically, e.g. "https://example.com/file.pptx". (2) Base64-encoded string — the raw file content encoded as base64. Local file paths are NOT accepted — this server is reached over HTTP, so a path would resolve on the server's disk rather than yours and is rejected. Upload the bytes as base64, or host the file at a URL. 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
outputPathNoNOT AVAILABLE on this server, which is reached over HTTP: the converted document would be written to the server's disk instead of yours, so passing outputPath is rejected. Use asAttachment to receive the bytes, or returnLink for a one-time download URL.
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. 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).
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 returned as an attachment. 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. Changed11 schema fields changed
    • 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 returned as an attachment. 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. Two input forms are accepted: (1) HTTPS URL — the file is downloaded automatically, e.g. \"https://example.com/file.pptx\". (2) Base64-encoded string — the raw file content encoded as base64. Local file paths are NOT accepted — this server is reached over HTTP, so a path would resolve on the server's disk rather than yours and is rejected. Upload the bytes as base64, or host the file at a URL. 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. Two input forms are accepted: (1) HTTPS URL — the file is downloaded automatically, e.g. \"https://example.com/file.pptx\". (2) Base64-encoded string — the raw file content encoded as base64. Local file paths are NOT accepted — this server is reached over HTTP, so a path would resolve on the server's disk rather than yours and is rejected. Upload the bytes as base64, or host the file at a URL. 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 / 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. 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)."
  2. Changed8 schema fields changed
    • 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. Two input forms are accepted: (1) HTTPS URL — the file is downloaded automatically, e.g. \"https://example.com/file.pptx\". (2) Base64-encoded string — the raw file content encoded as base64. Local file paths are NOT accepted — this server is reached over HTTP, so a path would resolve on the server's disk rather than yours and is rejected. Upload the bytes as base64, or host the file at a URL. 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: +"NOT AVAILABLE on this server, which is reached over HTTP: the converted document would be written to the server's disk instead of yours, so passing outputPath is rejected. Use asAttachment to receive the bytes, or returnLink for a one-time download URL."
    • 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 changed
    • 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. Changed1 schema field changed
    • 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"
  5. Changed2 schema fields changed
    • changedInput schema / properties / asAttachment / description
      Previous value: -"If true, return the document as a downloadable file attachment (base64 resource) instead of inline text/image. Use when the user wants to download or save the file rather than read its content inline — especially in HTTP mode where outputPath is unavailable. Default: false (text inline, images viewable, other binaries as resources). Ignored when outputPath 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 in stdio mode (path returned), or returned as an attachment in HTTP mode. Ignored when outputPath or returnLink is set."
    • 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"
      +}
  6. Changed3 schema fields changed
    • addedInput schema / properties / asAttachment
      Added value: +{
      +  "description": "If true, return the document as a downloadable file attachment (base64 resource) instead of inline text/image. Use when the user wants to download or save the file rather than read its content inline — especially in HTTP mode where outputPath is unavailable. Default: false (text inline, images viewable, other binaries as resources). Ignored when outputPath 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"
      +  }
      +]
    • 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"
      +}
  7. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so the safety profile is covered; the description adds non-obvious behavior beyond that — tags are preserved rather than resolved, no data is sent, and local paths are rejected because the server is remote. It does not restate the safety hints, but a few behavioral traits (delivery mode defaults, outbound auth) live only in the schema, so it is not fully self-contained.

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?

Front-loaded with the purpose and the exclusion in the first two sentences, followed by the example and conversion list. It is dense and long, but nearly every sentence carries usable information; the trailing 'Common conversions' list is the only part that borders on 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, no-output-schema tool, the description covers purpose, the key alternative, input-form constraints, and converter selection. Return/delivery semantics (asAttachment, returnLink, default inline vs attachment delivery) are delegated entirely to the schema, which is a reasonable but not complete handoff given no output schema exists.

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 description coverage is 100%, so the baseline is 3 and the schema carries most parameter meaning. The description still adds cross-parameter value the schema does not: the common-conversion mapping including per-format converter hints ('I' for fastest DOCX→PDF, 'C' for full CSS/JS HTML→PDF), which helps an agent pick values rather than just read their definitions.

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 qualifies the scope ('without storing a template', 'Pure conversion: no data is sent'). It directly names the sibling it is not — 'Use render_document instead when you need data injection' — so an agent can distinguish the two without opening a 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?

Explicitly routes the agent: use this for tag-preserving conversion/proofing, use render_document when you need {d.field} resolution, translations, or batch generation. It also names concrete use cases (DOCX→PDF, DOCX→ODT template proofing) and a JSON invocation example, leaving little to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.