Skip to main content
Glama

Convert Document

convert_document
Read-onlyIdempotent

Converts documents between 100+ formats (Office, PDF, images, HTML) while preserving Carbone template tags. Supports PDF options like watermarks, passwords, or page ranges.

Instructions

Convert any document to another format without storing a template. Supports 100+ input/output format combinations: Office documents, PDFs, images, web pages, spreadsheets, and more. The source file can be a local path, a URL, or a base64 string. Carbone tags are PRESERVED, not resolved: converting a template keeps every {d.field} intact, so this is also how you proof a template in another format (DOCX template → PDF, or DOCX → ODT while it stays a template). Use render_document instead when you need data injection ({d.field} tags resolved), translations, or batch generation. Common conversions: DOCX → PDF (file: "report.docx", convertTo: "pdf"; add converter: "I" for the fastest DOCX→PDF path), XLSX → PDF (file: "data.xlsx", convertTo: "pdf"), PPTX → PDF (file: "slides.pptx", convertTo: "pdf", converter: "O" for best fidelity), HTML → PDF (file: "page.html", convertTo: "pdf", converter: "C" for full CSS/JS rendering), DOCX → HTML (file: "doc.docx", convertTo: "html"), XLSX → CSV (file: "sheet.xlsx", convertTo: "csv"), PDF → PNG (file: "doc.pdf", convertTo: "png"), PPTX → PNG (first slide as image), MD → PDF (file: "readme.md", convertTo: "pdf").

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fileYesThe 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
convertToYesTarget 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" } }.
converterNoConverter 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.
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.
reportNameNoFilename (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.
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.
hardRefreshNoForces 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.
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 in stdio mode (path returned), or returned as an attachment in HTTP mode. 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 512 characters.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 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"
      +}
  2. 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"
      +}
  3. 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"
      +}
  4. First observedv1.1.2

TDQS

A5/5.0
Behavior5/5

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

Annotations already set readOnlyHint, openWorldHint, and idempotentHint. The description adds significant behavioral detail: it clarifies that tags are NOT resolved, describes the ICE engine's limitations (e.g., silently ignoring password options), explains returnLink's short-lived one-time nature, and notes outputPath behavior. This goes well beyond the annotations and is transparent about side effects and caveats.

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

Conciseness5/5

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

Although lengthy, every sentence carries unique value. The structure is logical: general purpose → input forms → format lists → converter details → parameter walkthrough. It front-loads the core intent and uses bullet-like formatting within prose to keep information scannable. No redundancy or filler is present.

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

Completeness5/5

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

Given the tool's complexity (9 parameters including nested objects and enums), the description covers all necessary aspects: supported input/output formats, converter engine trade-offs, security warnings, edge cases (like ICE ignoring PDF options), and delivery mechanisms. It even points to a full conversion matrix URL. There is no missing information a user would need to call the tool correctly.

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

Parameters5/5

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

Schema coverage is 100% with each parameter having a detailed description. The description adds depth: it explains the three input forms for 'file' (path, URL, base64), the meaning of each converter enum value, the formatOptions examples for PDF and images, and the reportName extension pitfall. This substantially enriches the schema's basic field descriptions.

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?

The description clearly states the tool's function: 'Convert any document to another format without storing a template.' It specifies the verb (convert), the resource (document), and the scope (format transformation). It also distinguishes itself from the sibling render_document by noting that Carbone tags are preserved, not resolved, which makes the purpose unmistakable.

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?

The description explicitly contrasts with render_document: 'Use render_document instead when you need data injection, translations, or batch generation.' It also provides guidance on converter engine selection (L, O, C, I) and notes when hardRefresh is needed (PDF→PDF with formatOptions). This leaves no ambiguity about when to choose this tool versus alternatives.

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/carboneio/carbone-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server