api2pdf
Server Details
MCP server for Api2Pdf — generate PDFs & images from HTML, URLs or office files; merge, barcodes.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
Available Tools
16 toolsapi2pdf_add_passwordPassword-protect PDF (PDFSharp)ADestructiveInspect
Encrypt an existing PDF (given as a URL) with a user password (required to open) and an optional owner password (controls permissions). Returns a { FileUrl } (valid ~24h). BILLED. Api2Pdf API: POST /pdfsharp/password.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the PDF to protect. | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| userpassword | Yes | Password required to OPEN the resulting PDF. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| ownerpassword | No | Optional owner password controlling permissions (printing, editing, etc.). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that the operation is billed, returns a FileUrl, and that the link is only valid for ~24 hours. It also identifies the exact API endpoint and engine. These are meaningful behavioral facts not present in the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences plus an endpoint identifier. It front-loads the action with 'Encrypt', then states required vs optional passwords, the output, the validity window, and the billing implication. Every clause earns its place; there is no padding or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core behavior, the required and optional inputs, the return value, the link expiration, and the cost implication. Combined with the fully self-documenting input schema and the destructiveHint annotation, an agent has enough context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter. The description restates the key semantics of userpassword and ownerpassword but adds no per-parameter detail beyond what the schema provides. This matches the baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Encrypt') and resource ('existing PDF (given as a URL)') and clearly distinguishes the tool from siblings like api2pdf_compress_pdf or api2pdf_extract_pages. It also names the two key password concepts and the PDFSharp API endpoint, leaving no ambiguity about what operation is performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is clearly implied: apply password protection to an already-existing PDF available at a URL. It does not explicitly name alternatives or say 'use this instead of X', but the sibling set contains no directly competing password tool, and the description's precise wording supplies enough context. It also flags 'BILLED', which helps an agent weigh when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_compress_pdfCompress PDF (PDFSharp)ADestructiveInspect
Compress an existing PDF (given as a URL) to reduce its file size. Returns a { FileUrl } (valid ~24h). BILLED. Api2Pdf API: POST /pdfsharp/compress.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the PDF to compress. | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the safety/impact profile is partially provided. The description adds meaningful behavioral context beyond this: the operation is BILLED, returns a FileUrl valid for ~24h, and maps to a specific API endpoint. It does not contradict the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences carry all essential information: what the tool does, the input format, the output shape, the time limit, billing, and the API endpoint. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description plus the fully-documented schema covers the required URL parameter, the returned FileUrl, its 24h validity, and billing implications. Given the rich schema and no output schema, this is sufficient for an agent to invoke the tool correctly. It could add error/edge-case detail, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter already has a clear description in the schema. The tool description adds only the URL-as-input context and FileUrl output, but does not need to compensate for missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Compress') with a clear resource ('an existing PDF (given as a URL)') and outcome ('reduce its file size'). It is immediately distinguishable from sibling tools like merge_pdfs, extract_pages, and delete_file, and the title adds the PDFSharp engine context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: when an existing PDF is available via URL and the goal is size reduction. It does not explicitly state when not to use it or name alternatives, but the context is unambiguous enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_convert_to_markdownConvert document to Markdown (MarkItDown)ADestructiveInspect
Convert a document or file (given as a URL — PDF, Office docs, and more) to Markdown text via MarkItDown. Great for feeding a document's contents back to an agent. Returns a { FileUrl } (valid ~24h). BILLED. Api2Pdf API: POST /markitdown.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the document/file to convert to Markdown. | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already carry destructiveHint=true; the description adds valuable behavioral context beyond that by disclosing that the operation is BILLED, that the returned FileUrl is valid only ~24h, and by giving the exact API endpoint. It does not elaborate on what destructive behavior might occur, which prevents a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The main action is front-loaded, followed by the use case, return behavior, billing flag, and API endpoint—each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with nested objects and no output schema, the description covers the essential invocation facts: input URL, output as FileUrl with 24h expiry, billing, and API endpoint. It leaves minor gaps around alternatives and the exact response shape, but the schema covers parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description adds format guidance ('PDF, Office docs, and more') for the url parameter that goes beyond the schema's generic 'document/file' wording, giving agents useful selection context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific conversion direction ('Convert a document or file ... to Markdown text'), names the engine (MarkItDown), and scopes the input as a URL covering PDF and Office docs. This makes it easy to distinguish from sibling conversion tools like api2pdf_markdown_to_pdf or api2pdf_office_to_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use case ('Great for feeding a document's contents back to an agent') and notes the URL-based input. It does not explicitly name alternatives or state when not to use the tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_delete_fileDelete a generated fileADestructiveInspect
Delete a previously generated file by its ResponseId (the ResponseId returned in a generation response). Api2Pdf API: DELETE /file/{ResponseId}.
| Name | Required | Description | Default |
|---|---|---|---|
| responseId | Yes | The ResponseId of the generated file to delete (from a prior generation response). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, lowering the burden on the description. The description adds useful behavioral context by clarifying that deletion targets files created by prior generation operations and that the HTTP method is DELETE, reinforcing the irreversible nature of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. The core action and required identifier are front-loaded, and the endpoint reference is a compact addition that supports correctness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter destructive operation, the description, schema, and annotations together provide everything needed: what is deleted, which identifier to use, and the safety profile. No output schema is required for a deletion call, and no critical details are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains that responseId is 'The ResponseId of the generated file to delete (from a prior generation response).' The description adds only minimal value by repeating this and mentioning the endpoint placeholder, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and resource ('a previously generated file') and identifies the exact identifier required (ResponseId). It also mentions the underlying DELETE endpoint, which clearly differentiates this from the generation, conversion, and status-checking sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly specifies when to use it: to delete a file that was generated previously using its ResponseId. While it does not explicitly list when-not-to-use or alternatives, no other sibling tool performs deletion, so the guidance is functionally complete for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_extract_pagesExtract PDF pages (PDFSharp)ADestructiveInspect
Extract a range of pages from an existing PDF (given as a URL) into a new PDF. start/end are 0-based page indices; omit end to extract a single page. Returns a { FileUrl } (valid ~24h). BILLED. Api2Pdf API: POST /pdfsharp/extract-pages.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | 0-based index of the last page to extract. Omit for a single page (just `start`). | |
| url | Yes | URL of the source PDF. | |
| start | No | 0-based index of the first page to extract. Default 0. | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given the destructiveHint annotation, the description adds valuable behavioral context: the operation is BILLED, returns a FileUrl valid for roughly 24 hours, and hits a specific Api2Pdf endpoint. It does not elaborate on the destructive hint, but 'into a new PDF' implies the source is not modified. This adds meaningful detail beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose, page-index semantics, output format, expiry, billing, and API endpoint are all conveyed in three sentences. Every sentence contributes information needed to call the tool correctly, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no output schema, the description covers the essential return shape—a FileUrl valid ~24h—and flags that the call is billed. The remaining parameters are fully described in the schema, including nested objects and the output_binary alternative. Minor gaps such as not explaining rate limits or side effects are acceptable given the schema's completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the structured schema already documents all parameters. The description does reinforce the most important parameter semantics—0-based `start`/`end` and the single-page behavior when `end` is omitted—but does not add material new information for the other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Extract a range of pages from an existing PDF... into a new PDF.' This clearly separates it from sibling operations such as merge, compress, and convert, and it names the underlying API endpoint for further disambiguation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool's use case is clear and self-identifying: it extracts a page range from an existing PDF. It also gives concrete usage guidance about `start`/`end` being 0-based and omitting `end` for a single page. However, it does not explicitly contrast itself with any sibling tool or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_generate_barcodeGenerate barcode / QR code (Zebra)ADestructiveInspect
Generate a barcode or QR code image. format is the symbology (e.g. 'QRCode', 'Code128', 'PDF417', 'DataMatrix') and value is the string to encode. Returns a { FileUrl } (valid ~24h) by default, or base64 with output_binary:true. BILLED. Api2Pdf API: GET /zebra.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | The string to encode in the barcode/QR code. | |
| width | No | Image width in pixels. | |
| format | Yes | Barcode/QR symbology, e.g. 'QRCode', 'Code128', 'PDF417', 'DataMatrix'. | |
| height | No | Image height in pixels. | |
| showlabel | No | If true, render the encoded value as a human-readable label under the barcode. | |
| output_binary | No | If true, return the raw image bytes as base64 instead of a FileUrl. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it warns 'BILLED', explains the default FileUrl return with ~24h validity, and documents the output_binary switch to base64. It does not directly contradict the destructiveHint annotation, though that annotation seems surprising for a generation tool and is not clarified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences with no filler: purpose first, parameter clarification second, and response/billing context last. Every sentence contributes operational information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description covers the return type, FileUrl validity, billing implication, and the API endpoint, while the schema covers individual parameters. It is sufficient for correct invocation, though it does not address potential error or size constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the baseline is 3. The description adds value by clarifying that `format` is the symbology, `value` is the encoded string, and by specifying exactly what output_binary:true does (returns base64 instead of FileUrl).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Generate a barcode or QR code image.' It also names concrete symbologies such as QRCode, Code128, PDF417, and DataMatrix, which clearly distinguishes it from the sibling PDF/image conversion tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case through the purpose statement and unique tool name, but it does not explicitly say when to use this tool versus alternatives or mention any exclusions. Sibling differentiation is only incidental because no other sibling generates barcodes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_get_balanceGet account balanceARead-onlyInspect
Return the remaining balance / usage for the configured Api2Pdf account. Api2Pdf API: GET /balance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this as a safe read operation, so the description need not belabor that. It adds the 'GET /balance' endpoint and the concept of a 'configured' account, but it does not disclose output format, units, or potential error conditions; these are minor given the simplicity and annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler, front-loads the core purpose, and includes a useful API reference. Every word contributes essential meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool, the description is nearly complete: it names the return concept (remaining balance/usage) and the underlying endpoint. It does not specify format, currency, or units, but these are not critical for invoking the tool correctly and no output schema is present to fill the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers input requirements and the description need not add parameter detail. The description's mention of a 'configured account' clarifies that no account identifier needs to be supplied, which is useful context beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Return the remaining balance / usage') and the resource ('configured Api2Pdf account'), and it is unmistakably distinct from the sibling tools, which all perform conversion, compression, merging, or file operations. The specific endpoint reference also reinforces the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied rather than explicit: an agent can infer this tool is for checking account credit/usage, and no alternative or exclusion criteria are mentioned. While the role is clear given the sibling list, the description does not state when to prefer this over, for example, api2pdf_get_status, which also queries account/job information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_get_statusGet service statusARead-onlyInspect
Return the current Api2Pdf service / health status. Api2Pdf API: GET /status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true, so the description does not need to explain the read-only nature. It adds that this returns service/health status, but provides no further behavioral details like response format or rate limits. With annotations covering the key trait, the description adds modest context but not rich behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the purpose, followed by the precise API endpoint. It contains no superfluous words and is perfectly sized for such a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only status check with no output schema, the description is fully sufficient. It tells the agent exactly what the tool does and even provides the REST endpoint for reference. No additional information is needed for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema confirms 100% coverage with no properties. Per the rubric, with 0 parameters the baseline is 4. The description does not need to explain parameters, and it does not attempt to, so this is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'current Api2Pdf service / health status'. It also references the underlying GET /status endpoint, making the purpose unmistakable and distinct from all sibling tools, which perform conversions or file operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you need the current service health), but it does not explicitly state when to use it over alternatives or provide any exclusions. Since there are many sibling tools, none covering status, the usage is intuitively clear but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_html_to_imageHTML to image (Chrome)ADestructiveInspect
Render an HTML string to an image using headless Chrome. Returns a { FileUrl } (valid ~24h) by default, or base64 bytes with output_binary:true. BILLED. Api2Pdf API: POST /chrome/image/html.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | The HTML source to render into an image. | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds valuable context: the operation is BILLED, the default return is a FileUrl valid for ~24h, and output_binary:true switches to base64 bytes. This informs cost and result-handling expectations, exceeding what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no fluff: the purpose, key output modes, billing, and API endpoint are all essential. The action is front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers input, output encoding, URL validity, cost, and endpoint, which is sufficient for a basic invocation. It omits guidance on advanced parameters (storage, headers) and alternative selection, but the schema is detailed enough to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description adds the 'valid ~24h' detail and clarifies the output_binary behavior, but this largely mirrors the schema's parameter descriptions and does not significantly deepen parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Render an HTML string to an image using headless Chrome.' This clearly distinguishes it from siblings like api2pdf_url_to_image (URL source) and api2pdf_html_to_pdf (PDF output).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for HTML-string-to-image conversion but never explicitly contrasts it with alternatives or states when not to use it. An agent can infer the niche, but no exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_html_to_pdfHTML to PDF (Chrome)ADestructiveInspect
Render an HTML string to a PDF using the headless-Chrome engine. Returns a { FileUrl } link (valid ~24h) by default. Great for invoices, reports, and letters produced as HTML. BILLED per document. Api2Pdf API: POST /chrome/pdf/html.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | The HTML source to render into a PDF. | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide destructiveHint, so the description adds valuable behavioral context: the returned FileUrl is valid only ~24h, and the operation is BILLED per document. This alerts agents to cost and link-expiry implications beyond what annotations or schema express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, each contributing distinct information: input type, output format and validity, use cases, billing, and API endpoint. The description is front-loaded with the core behavior and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately complex 8-parameter tool with no output schema, the description communicates the key return artifact (FileUrl), its lifetime, billing, and rendering engine. Since all parameters are fully described in the schema, the missing pieces are mainly explicit sibling routing guidance, which would push it to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all 8 parameters already documented, including nested objects and output_binary behavior. The description adds no parameter-specific meaning, but it does not need to since the schema fully carries that burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Render an HTML string to a PDF') and explicitly identifies the engine ('headless-Chrome'), making the tool's operation and scope clear. The API endpoint 'POST /chrome/pdf/html' further pins down the exact functionality and helps distinguish it from URL-based or wkhtml-based siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear intended use cases ('invoices, reports, and letters produced as HTML') and specifies that the input is an HTML string. It does not explicitly name alternatives or exclusions (e.g., 'if you have a URL, use api2pdf_url_to_pdf'), but the input and engine information gives an agent enough context to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_markdown_to_pdfMarkdown to PDF (Chrome)ADestructiveInspect
Render a Markdown string to a PDF using headless Chrome. Returns a { FileUrl } (valid ~24h). BILLED. Api2Pdf API: POST /chrome/pdf/markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| markdown | Yes | The Markdown source to render into a PDF. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing that the call is BILLED, returns a FileUrl, and that the URL is valid for approximately 24 hours. It also reveals the underlying API endpoint (POST /chrome/pdf/markdown), which adds useful operational context. The destructiveHint annotation is not contradicted, since the description transparently flags the cost-sensitive nature of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler: purpose, return value and lifetime, and billing/API context. Each sentence earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully explains the return value and its 24-hour validity, which is essential for an agent deciding whether to download immediately. Combined with the 100% parameter coverage and explicit billing warning, the tool is adequately specified for correct selection and invocation, though a note about authentication requirements would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description itself does not document any parameters, but schema description coverage is 100%, so every parameter already has a meaningful explanation in the input schema. The baseline of 3 applies because the schema carries the full burden and the description adds no additional parameter-level nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Render a Markdown string to a PDF using headless Chrome.' This clearly distinguishes it from sibling tools like api2pdf_html_to_pdf, api2pdf_url_to_pdf, and api2pdf_office_to_pdf by source format and engine.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly defines the input type ('Markdown string') and rendering engine, providing enough context for an agent to select this tool when the source is Markdown. It does not explicitly name alternatives or exclusion conditions, but the resource constraint is unmistakable and sufficient for routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_merge_pdfsMerge PDFs (PDFSharp)ADestructiveInspect
Merge several existing PDFs (given as URLs, in order) into a single PDF. Returns a { FileUrl } (valid ~24h). BILLED. Api2Pdf API: POST /pdfsharp/merge.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | URLs of the PDFs to merge, in the order they should appear (at least two). | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include destructiveHint=true, and the description does not contradict that. It adds useful behavioral context: returns a { FileUrl } valid ~24h, is billed, and uses the API endpoint POST /pdfsharp/merge. It does not discuss auth or rate limits, but those are secondary given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences deliver the core action, input format, output behavior, billing warning, and endpoint with no filler. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so explicitly stating the return type and 24-hour validity is valuable. The description covers the core call pattern and the schema documents all remaining parameters. It lacks error-behavior or side-effect clarification, but the essential information for a successful call is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all parameters already have individual descriptions. The tool description mostly reinforces the urls behavior ('given as URLs, in order') and describes the result rather than adding substantial new parameter-level meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation ('Merge'), a specific resource ('several existing PDFs'), and adds ordering and URL constraints. It clearly distinguishes this from sibling tools like extract_pages or compress_pdf, and the API endpoint further removes ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear input requirements ('given as URLs, in order') and explains the output format and billing implication. It does not explicitly name alternatives or state when not to use this tool, but the context is specific enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_office_to_pdfOffice document to PDF (LibreOffice)ADestructiveInspect
Convert an office document (Word, Excel, PowerPoint, ODT, and many more) at a URL to a PDF using LibreOffice. Returns a { FileUrl } (valid ~24h). BILLED. Api2Pdf API: POST /libreoffice/any-to-pdf.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the source document to convert to PDF. | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that this operation is BILLED and that the returned FileUrl expires in about 24 hours, both important behavioral traits. It also states the underlying API endpoint. The statement that it returns a FileUrl is slightly over-broad since output_binary can change that, but the schema clarifies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences deliver the core purpose, the output/expiry, the cost warning, and the API route with no filler. The most critical information (what it converts and to what) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a conversion tool with 8 parameters, nested objects, a cost implication, and no output schema, the description covers the essential behavior well: input kind, engine, output URL lifetime, and billing. It does not describe error cases or asynchronous behavior, but the schema covers parameters and the description gives enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all 8 parameters with 100% description coverage, so the description does not need to explain parameters. It adds no parameter-level information beyond the schema, which is acceptable but not above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('convert') plus a resource ('office document... at a URL') and target format ('to a PDF'), and names the engine (LibreOffice). It clearly distinguishes this tool from siblings like api2pdf_html_to_pdf or api2pdf_url_to_pdf by restricting input to office document formats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended use clear: converting Word, Excel, PowerPoint, ODT, and similar office documents from a URL. It implicitly tells the agent not to use this for HTML or Markdown inputs, but it does not explicitly name sibling alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_url_to_imageURL to image / screenshot (Chrome)ADestructiveInspect
Take a screenshot of a live web page by URL using headless Chrome. Returns a { FileUrl } (valid ~24h). BILLED. Api2Pdf API: POST /chrome/image/url.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the web page to screenshot. | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that the operation is BILLED, returns a short-lived FileUrl (~24h), and uses POST /chrome/image/url. It does not explain authentication prerequisites or failure behavior, but the cost and ephemeral-output warnings add real behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and contains no filler: action, output format/expiry, billing warning, and endpoint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with nested objects and no output schema, the description still gives the return shape, time-to-live, cost, and API endpoint. It could mention auth or load-wait behavior, but the schema covers parameter semantics, leaving only minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover all eight parameters (100% coverage), so the description need not repeat them. It does not add extra parameter meaning beyond what the schema provides, hence the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb and resource: 'Take a screenshot of a live web page by URL using headless Chrome.' This clearly distinguishes the tool from siblings like api2pdf_url_to_pdf (PDF output) and api2pdf_html_to_image (HTML input rather than URL).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'live web page by URL' gives clear context for when to use it, but the description never names alternatives or states when not to use it (e.g., HTML strings should go to html_to_image). No exclusions are provided, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_url_to_pdfURL to PDF (Chrome)ADestructiveInspect
Fetch a web page by URL and render it to a PDF using headless Chrome. Returns a { FileUrl } (valid ~24h). Use extraHTTPHeaders to pass auth for a protected page. BILLED. Api2Pdf API: POST /chrome/pdf/url.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the web page Api2Pdf will fetch and render to PDF. | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses the return shape '{ FileUrl }', its ~24h validity, the billing side effect, and the exact API endpoint. This is meaningful operational transparency and does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences convey behavior, output, auth, billing, and endpoint with no filler. The most decision-relevant information is front-loaded before the billing and API details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately explains the return value and expiry. It also covers auth and billing, while the detailed input schema handles the remaining parameters. It omits the output_binary alternative, but the schema already documents that clearly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds only light reinforcement for extraHTTPHeaders and the FileUrl return; it does not need to compensate because the schema is rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Fetch a web page by URL and render it to a PDF using headless Chrome.' It also names the engine (Chrome) and API endpoint, which differentiates it from sibling tools like api2pdf_wkhtml_to_pdf and api2pdf_url_to_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit conditional guidance: 'Use extraHTTPHeaders to pass auth for a protected page,' and flags that the operation is BILLED. It does not explicitly compare against sibling PDF tools, but the Chrome engine and endpoint make the intended use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
api2pdf_wkhtml_to_pdfHTML to PDF (wkhtmltopdf)ADestructiveInspect
Render an HTML string to a PDF using the wkhtmltopdf engine — an alternate to Chrome that supports a table of contents (pass enableToc / tocOptions inside options). Returns a { FileUrl } (valid ~24h). BILLED. Api2Pdf API: POST /wkhtml/pdf/html.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | The HTML source to render into a PDF. | |
| inline | No | If true (Api2Pdf default), the generated file is served inline; if false, as an attachment. | |
| options | No | Engine-specific render options (page size, margins, orientation, headers/footers, etc.). Passed through verbatim to Api2Pdf. | |
| storage | No | Custom storage target, used when useCustomStorage is true. | |
| fileName | No | A name for the generated file, e.g. 'invoice.pdf'. | |
| output_binary | No | If true, return the raw file bytes as base64 instead of a FileUrl. Default false (recommended for agents — returns a short-lived link). | |
| extraHTTPHeaders | No | Extra HTTP headers Api2Pdf forwards when it fetches a source URL (e.g. auth for a protected page/file). | |
| useCustomStorage | No | If true, Api2Pdf uploads the result to your own storage (see `storage`) instead of hosting it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds important operational context: the operation is billed, the returned FileUrl is only valid for ~24 hours, and the underlying API path is disclosed. This meaningfully helps an agent understand side effects and expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three dense sentences, front-loading the core purpose and engine, then return shape and billing. There is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description covers the essential non-schema facts: return shape, URL expiration, billing, and engine-specific TOC capability. It could be slightly more explicit about which sibling tool is the Chrome alternative, but overall it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds one useful parameter-level hint — enabling TOC via 'enableToc / tocOptions inside options' — but does not need to repeat what the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Render an HTML string to a PDF using the wkhtmltopdf engine.' It also distinguishes itself from Chrome-based rendering by highlighting TOC support, though it does not explicitly name the sibling tool it differs from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It frames wkhtmltopdf as 'an alternate to Chrome' and mentions a unique capability (table of contents), implying when an agent should choose this engine. It stops short of explicit when-not-to-use guidance or naming the Chrome-based sibling, so it is clear context rather than full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
16 tool updates
- First observed
api2pdf_add_password - First observed
api2pdf_compress_pdf - First observed
api2pdf_convert_to_markdown - First observed
api2pdf_delete_file - First observed
api2pdf_extract_pages - First observed
api2pdf_generate_barcode - First observed
api2pdf_get_balance - First observed
api2pdf_get_status - First observed
api2pdf_html_to_image - First observed
api2pdf_html_to_pdf - First observed
api2pdf_markdown_to_pdf - First observed
api2pdf_merge_pdfs - First observed
api2pdf_office_to_pdf - First observed
api2pdf_url_to_image - First observed
api2pdf_url_to_pdf - First observed
api2pdf_wkhtml_to_pdf
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
HTML-to-PDF MCP server — render pixel-faithful PDFs from HTML.
MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.
Cloud PDF generation from HTML, CSS and XSL-FO, with PDF/A and PDF/UA support.
Document-to-Markdown MCP server — convert PDF, Office and HTML into LLM-ready Markdown.
Related MCP Servers
- AlicenseBqualityDmaintenanceA universal MCP server for document processing, conversion, and automation. Handle PDF, DOCX, HTML, Markdown, and more through a unified API and toolset.1333139MIT

polydoc-mcpofficial
AlicenseNot gradedqualityCmaintenanceMCP server that converts HTML or URLs to PDF, captures screenshots, and generates EU-compliant e-invoices (Factur-X/ZUGFeRD).65MIT- FlicenseNot gradedqualityDmaintenanceThis MCP server enables interactions with the PDF Generator API for creating, converting, and managing PDF documents using natural language commands.-
- MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool targets a distinct operation: conversions, PDF manipulations, file deletion, and account/service info are clearly separated. Even the three HTML-to-PDF tools are distinguished by source type or rendering engine.
All tools follow a consistent api2pdf_ prefix with snake_case verb-based names such as add_password, merge_pdfs, and url_to_pdf. The pattern is predictable and makes it easy to infer what each tool does.
Sixteen tools is slightly above the typical 3-15 range, but the count is justified by the breadth of Api2Pdf's functionality spanning creation, manipulation, conversion, deletion, and account management.
The surface covers the full PDF lifecycle: generate from multiple sources, manipulate via merge/extract/compress/password, convert to markdown, delete files, plus billing and status checks. No obvious missing operations for the documented purpose.