Skip to main content
Glama
formfeed-dev

formfeed

Official

Formfeed packages

Client libraries, command line tools and integrations for Formfeed, the API for generating PDFs and images from templates. Documentation lives at docs.formfeed.dev.

Package

Registry

What it is

@formfeed/sdk

npm

TypeScript client: renders, batches, templates, webhooks. No dependencies, Web APIs only

formfeed

PyPI

Python client, sync and async

formfeed

npm

CLI: templates as files, offline preview and validation, renders through the API

@formfeed/engine

npm

The template engine (Jinja2, Liquid, Handlebars) the API and the editor use

@formfeed/devkit

npm

Template folders, project config and local rendering

@formfeed/testing

npm

Vitest and Jest matchers for templates

@formfeed/mcp

npm

Model Context Protocol server for AI agents formfeed MCP server – quality and maintenance score on Glama

n8n-nodes-formfeed

npm

n8n community node

Every npm package is built and published from this repository by GitHub Actions with provenance, and the Python package with trusted publishing, so each release can be traced to the commit and workflow run it came from.

Development

Node 22 or newer and pnpm (the version in package.json, corepack enable picks it up):

pnpm install
pnpm nx run-many -t lint test --exclude sdk-python   # TypeScript packages
pnpm nx run-many -t bundle smoke                     # build, pack and try every npm package
cd packages/sdk-python && pip install pytest httpx pydantic && python -m pytest -q

This repository is generated from Formfeed's main repository, where the packages are developed together with the API they talk to. See CONTRIBUTING.md for how issues and pull requests are handled.

Related MCP server: docjet-mcp

Licence

MIT, see LICENSE. Bundled third-party code keeps its own licence; the CLI and MCP packages list it in THIRD_PARTY_LICENSES.md.

Available Tools

6 tools
convert_to_pdfConvert an office document to PDFA

Converts an existing Word, Excel, PowerPoint, OpenDocument, RTF or HTML document (up to 20 MB) to a PDF as it is, without filling in data, and returns the render with status and download_url. To make a document from a template and data, use render instead. Pass exactly one source: render_id, the render of a Word or PowerPoint template (output docx or pptx); path, a file on this machine; or file_base64 with file_name. Every call is a new render that counts units like a PDF; the Free plan cannot convert (Starter and above). The document is converted and not kept.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAbsolute path of the document on this machine
filenameNoName of the PDF behind download_url, e.g. report.pdf
file_nameNoName of the document, e.g. report.xlsx; the type is read from the content
landscapeNoLandscape for spreadsheets and documents without their own page setup
render_idNornd_ id of a render whose output is docx or pptx, to get that document as a PDF
file_base64NoThe document to convert, base64 encoded; needs file_name
page_rangesNoPages to convert, e.g. 1-3,5; all pages when left out
single_page_sheetsNoEach spreadsheet sheet on one page

TDQS

A4.8/5.0
Behavior5/5

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

Annotations are all false (not read-only, not idempotent, not destructive), so the description carries the full burden. It discloses that every call creates a new render that counts units, that the Free plan cannot convert, and that the document is 'not kept.' It also specifies the output (render with status and download_url). No contradiction with annotations.

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?

The description is compact but information-dense, front-loading the core purpose and then covering alternatives, inputs, costs, and storage in a logical sequence. Every sentence earns its place; no fluff or repetition.

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

Completeness4/5

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

Given 8 parameters, no output schema, and complex alternatives, the description covers the essential operational context: what inputs are allowed, what is returned, cost implications, and storage behavior. It lacks explicit detail on error conditions or status code meanings, but these are minor for a conversion tool with a sibling 'get_render' for retrieval.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds valuable semantic constraints not in the schema: exactly one source must be provided, and render_id must be from a Word/PowerPoint template. This goes beyond simple parameter names and justifies a 4.

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 states a specific verb ('converts'), lists supported formats and size limit, and clearly differentiates from the sibling 'render' by saying 'To make a document from a template and data, use render instead.' The purpose is unambiguous and distinguishes the tool from all siblings.

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?

It explicitly tells when to use this tool vs. render, and provides a critical constraint: 'Pass exactly one source' among render_id, path, or file_base64. It also clarifies plan eligibility and unit counting, which informs decision-making. This is complete usage guidance.

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

get_renderGet a renderA
Read-only

Returns the current state of a render: status (queued, rendering, succeeded or failed), download_url with expires_at, page_count, units and error. Use it to follow a render started with wait false, or to get a fresh link once the old one has expired; render and convert_to_pdf already return this for the render they just made. Read-only and free; an unknown id returns an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesrnd_ id of the render, as render or convert_to_pdf returned it

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description goes beyond these by adding that the call is free, that an unknown id returns an error, and that download URLs expire. This gives the agent useful operational context beyond the structured annotations.

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?

The description is front-loaded with the core purpose, then usage guidance, then behavioral notes. Every sentence earns its place and the whole thing remains compact despite covering return fields, polling, expiry, alternatives, and error behavior.

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?

Since there is no output schema, the description carries the burden of explaining the return value, and it does so thoroughly by listing status values and response fields. It also covers why the tool exists, when alternatives are preferable, cost, and error behavior, which is complete for a simple read-only lookup tool.

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

Parameters4/5

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

Schema coverage is 100%, so the id parameter is already documented. The description adds value by clarifying that the id comes from a render or convert_to_pdf call and by exposing the unknown-id error behavior, which the schema does not state.

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 opens with a specific verb and resource: 'Returns the current state of a render', and enumerates the exact fields returned (status, download_url, expires_at, page_count, units, error). It distinguishes itself from siblings by noting render and convert_to_pdf already return this information for a just-created render.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool: to follow a render started with wait false, or to refresh an expired download link. It also names alternatives and their relationship: render and convert_to_pdf already return the same data for the render they just made, so this tool is for later or renewed access.

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

get_template_schemaGet the data schema of a templateA
Read-only

Returns the JSON Schema of the data object a template expects and the sample data it was designed with, from its published version, else its latest draft. Call it after list_templates and before render or validate_template, to build data that fits; ad-hoc html has no stored schema to read. When the template stores no schema, one is inferred from the sample data: treat that as a guide, not a contract. Read-only and free; an unknown slug returns an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
templateYesSlug (e.g. invoice) or tpl_ id, as list_templates returns them

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and destructiveHint, but the description adds valuable context: it is free, returns an error for unknown slugs, and explains that inferred schemas are a guide not a contract. This goes beyond the structured metadata and helps the agent anticipate edge cases.

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?

The description is compact, front-loads the core purpose, and every sentence adds meaningful information. It covers return content, workflow, caveats, and error behavior without redundancy or fluff.

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?

For a read-only tool with one parameter and no output schema, the description fully covers what an agent needs: what it returns, which version is used, when to call it, the inference caveat, and error behavior. Nothing essential is missing.

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

Parameters3/5

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

Schema coverage is 100% and the parameter description in the schema is sufficient ('Slug (e.g. invoice) or tpl_ id, as list_templates returns them'). The description adds no additional parameter-level detail, so it neither enhances nor detracts from the schema. Baseline 3 is appropriate.

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 returns the JSON Schema and sample data for a template's `data` object, specifying the resource and action. It distinguishes itself from siblings by placing it in the workflow (after list_templates, before render/validate_template) and noting ad-hoc html lacks a stored schema, making it unambiguous which tool to pick.

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

Usage Guidelines5/5

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

Explicitly instructs when to call it ('after list_templates and before render or validate_template') and provides a negative case (ad-hoc html has no stored schema). It also explains the fallback inference behavior, giving the agent clear decision criteria without needing to infer usage.

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

list_templatesList templatesA
Read-only

Lists the templates of the workspace the API key belongs to, most recently changed first: id, slug, name, kind (pdf, image, docx for Word, pptx for PowerPoint), engine, tags and published_version. Call it first to find the slug that get_template_schema, validate_template and render take; skip it when the user already named the template. Returns every match in one answer, without archived templates, and an empty list when nothing matches. A template whose published_version is null has never been published, so render cannot use it yet. Read-only and free.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoText to find in the name or slug, case-insensitive (e.g. invoice)
tagNoOnly templates with this tag; exact match, tags are lowercase with dashes (e.g. billing)
kindNoOnly templates that produce this kind of document
engineNoOnly templates written in this template language

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark this as read-only and non-destructive, but the description adds meaningful behavior beyond that: ordering by most recent change, exclusion of archived templates, an empty list on no match, and the null published_version meaning render cannot use the template. The statement 'Read-only and free' reinforces 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.

Conciseness5/5

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

The description is dense but every sentence earns its place: it covers output fields, ordering, usage guidance, edge cases, and safety in a compact paragraph. Key guidance is front-loaded and no 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?

With no output schema, the description sufficiently documents what the response contains, the available filter fields, the behavior with archived templates and empty results, and the special meaning of null published_version. It also provides enough context for an agent to decide when to call this tool versus its siblings.

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

Parameters3/5

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

Schema description coverage is 100% and each parameter already has a clear description with examples and enum details. The tool description does not add significant parameter-level semantics beyond what the schema provides, so the baseline score of 3 is appropriate.

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 states a specific verb and resource: 'Lists the templates of the workspace the API key belongs to', and specifies the returned fields and ordering. It also differentiates itself from sibling tools by explaining that it provides the slug used by get_template_schema, validate_template, and render.

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?

Explicit guidance is given: 'Call it first to find the slug... skip it when the user already named the template.' It also names the sibling tools that depend on this lookup and clarifies that archived templates are excluded and an empty list is returned when nothing matches.

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

renderRender a documentA

Creates a document by filling a stored template, or ad-hoc html, with data: a PDF or image, or DOCX, PPTX or PDF from Word and PowerPoint templates. Returns the render with status and download_url. Use it to make a document from data; to turn an existing office file into a PDF, use convert_to_pdf. Stored templates render their published version, so one whose published_version is null fails with template_not_found. Every call is a new render: a live key consumes units, a test key is free (watermarked on the Free plan). A render that fails returns status failed and an error with code and message; validate_template finds most causes beforehand. The link expires at expires_at; get_render issues a fresh one.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoValues for the template, shaped as get_template_schema describes; leave out when it needs none
htmlNoA complete HTML document to render instead of a stored template, up to 5 MB
waitNoMost renders are finished when the call returns; true also waits for one that continues in the background, false returns it as it is (queued or rendering) to check later with get_render
engineNoTemplate language of html, when it contains expressions to fill from data
localeNoBCP 47 tag for helpers and translations, e.g. de-DE
outputNoLeft out, the template decides: PDF for PDF templates and html, its image format for image templates, its default output for Word and PowerPoint templates. Word templates render docx or pdf, PowerPoint templates pptx or pdf
filenameNoName of the file behind download_url, e.g. invoice-2026-0042.pdf
templateNoSlug or tpl_ id of a stored template; pass this or html

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the generic false annotations, the description discloses that every call is a new render, that live keys consume units while test keys are free and watermarked, that failures return status failed with an error code/message, and that download links expire. This is exactly the behavioral context an agent needs.

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

Conciseness4/5

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

The description is a dense paragraph rather than a bulleted list, but every sentence carries distinct information: purpose, output, alternative, template caveat, cost, failure handling, and link expiry. It is front-loaded with the core purpose and only slightly overlong.

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

Completeness4/5

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

For an 8-parameter tool with no output schema and minimal annotations, the description covers return values (status, download_url), failure modes, link expiration, and cost. It could add a sentence about the async/wait behavior, but the schema already documents the wait parameter, so the description is complete enough for correct invocation.

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

Parameters3/5

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

With 100% schema description coverage, the schema does the heavy lifting for all 8 parameters. The description adds a useful caveat about stored templates rendering their published version and failing with template_not_found when null, but this is a single behavioral note rather than systematic parameter clarification, so the baseline 3 is appropriate.

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 opens with a specific verb and resource: 'Creates a document by filling a stored template, or ad-hoc html, with data' and enumerates output formats. It explicitly contrasts with the sibling convert_to_pdf, so an agent can distinguish it immediately.

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?

It gives explicit selection guidance: 'Use it to make a document from data; to turn an existing office file into a PDF, use convert_to_pdf.' It also tells when to use get_render for a fresh link and points to validate_template for pre-flight checking.

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

validate_templateValidate a template with dataA
Read-only

Checks a template and its data without rendering: free, no units, nothing stored, no document produced. Call it before render when you assembled the data yourself, or after writing ad-hoc html. With template, the API checks the published version (else the latest) as a render would: syntax, header and footer, errors only this data triggers, and the data against the stored JSON Schema (a wrong type or a missing required field is an error). With html and engine it compiles offline and reports syntax errors, unknown filters and variables missing from data. Returns ok and diagnostics (severity, code, message, plus path, line and column, or part and paragraph for Word and PowerPoint). Warnings leave ok true: settle each before rendering.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoThe data the document will be rendered with, shaped as get_template_schema describes. Left out, a stored template is checked with its sample data
htmlNoTemplate source to check offline, when there is no stored template; pass this or template
engineNoTemplate language of html; required with html
templateNoSlug or tpl_ id of a stored template; pass this or html

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/destructiveHint annotations, the description explains side effects (free, no units, nothing stored, no document), version selection (published else latest), what each mode checks, and the ok/diagnostics return contract including warnings leaving ok true. This is strong behavioral disclosure.

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

Conciseness4/5

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

The description is dense but every sentence earns its place and the main point is front-loaded. It is a single long paragraph that could be more scannable, but the length is justified by two distinct modes and a non-trivial return contract.

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?

For a tool with four optional params, two modes, no output schema, and no required fields, the description is complete: it explains return shape (ok and diagnostics with severity, code, message, location), mode-specific checks, and how to handle warnings. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining how template is resolved (published/latest), that html is compiled offline, and that data is validated against a stored JSON Schema. This elevates the parameter guidance.

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 opens with a specific verb and object: 'Checks a template and its data without rendering', and immediately distinguishes it from render by stating no document is produced. It also separates the stored-template and html modes, so an agent can tell this tool apart from render and convert_to_pdf.

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

Usage Guidelines4/5

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

It gives explicit when-to-use guidance: 'Call it before render when you assembled the data yourself, or after writing ad-hoc html.' It names the render sibling as the follow-up operation, but it does not explicitly state when not to use the tool or name alternative validation paths.

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.

  1. 6 tool updatesv0.3.10
    • Changedconvert_to_pdf5 fields changed
      • changedInput schema / properties / file_base64 / description
        Previous value: -"The document, base64 encoded"New value: +"The document to convert, base64 encoded; needs file_name"
      • changedInput schema / properties / filename / description
        Previous value: -"Name of the PDF"New value: +"Name of the PDF behind download_url, e.g. report.pdf"
      • changedInput schema / properties / page_ranges / description
        Previous value: -"Pages to convert, e.g. 1-3,5"New value: +"Pages to convert, e.g. 1-3,5; all pages when left out"
      • changedInput schema / properties / path / description
        Previous value: -"Absolute path of a document on this machine"New value: +"Absolute path of the document on this machine"
      • changedInput schema / properties / render_id / description
        Previous value: -"rnd_ id of a render whose output is docx or pptx"New value: +"rnd_ id of a render whose output is docx or pptx, to get that document as a PDF"
    • Changedget_render1 field changed
      • addedInput schema / properties / id / description
        Added value: +"rnd_ id of the render, as render or convert_to_pdf returned it"
    • Changedget_template_schema1 field changed
      • changedInput schema / properties / template / description
        Previous value: -"Template slug or tpl_ id"New value: +"Slug (e.g. invoice) or tpl_ id, as list_templates returns them"
    • Changedlist_templates4 fields changed
      • addedInput schema / properties / engine / description
        Added value: +"Only templates written in this template language"
      • addedInput schema / properties / kind / description
        Added value: +"Only templates that produce this kind of document"
      • changedInput schema / properties / q / description
        Previous value: -"Search in name and slug"New value: +"Text to find in the name or slug, case-insensitive (e.g. invoice)"
      • addedInput schema / properties / tag / description
        Added value: +"Only templates with this tag; exact match, tags are lowercase with dashes (e.g. billing)"
    • Changedrender6 fields changed
      • addedInput schema / properties / data / description
        Added value: +"Values for the template, shaped as get_template_schema describes; leave out when it needs none"
      • changedInput schema / properties / engine / description
        Previous value: -"Engine for html that contains template syntax"New value: +"Template language of html, when it contains expressions to fill from data"
      • addedInput schema / properties / filename / description
        Added value: +"Name of the file behind download_url, e.g. invoice-2026-0042.pdf"
      • changedInput schema / properties / html / description
        Previous value: -"Raw HTML instead of a template"New value: +"A complete HTML document to render instead of a stored template, up to 5 MB"
      • changedInput schema / properties / template / description
        Previous value: -"Template slug or tpl_ id"New value: +"Slug or tpl_ id of a stored template; pass this or html"
      • changedInput schema / properties / wait / description
        Previous value: -"Wait for the render to finish (sync renders finish immediately)"New value: +"Most renders are finished when the call returns; true also waits for one that continues in the background, false returns it as it is (queued or rendering) to check later with get_render"
    • Changedvalidate_template4 fields changed
      • addedInput schema / properties / data / description
        Added value: +"The data the document will be rendered with, shaped as get_template_schema describes. Left out, a stored template is checked with its sample data"
      • changedInput schema / properties / engine / description
        Previous value: -"Required with html"New value: +"Template language of html; required with html"
      • changedInput schema / properties / html / description
        Previous value: -"Template source when no slug is given"New value: +"Template source to check offline, when there is no stored template; pass this or template"
      • changedInput schema / properties / template / description
        Previous value: -"Template slug or tpl_ id"New value: +"Slug or tpl_ id of a stored template; pass this or html"
  2. 6 tool updatesv0.3.7
    • First observedconvert_to_pdf
    • First observedget_render
    • First observedget_template_schema
    • First observedlist_templates
    • First observedrender
    • First observedvalidate_template

TDQS

A4.5/5.0

Scored across 6 tools

Disambiguation4/5

Each tool targets a clear step in the document-generation workflow: list, inspect schema, validate, render, convert, and fetch status. The only mild ambiguity is between render and convert_to_pdf when working with HTML, since render can use ad-hoc HTML and convert_to_pdf can convert existing HTML documents, but the descriptions explicitly separate data-filling from as-is conversion.

Naming Consistency4/5

Most tool names follow a verb_noun pattern: list_templates, get_template_schema, validate_template, get_render. The exceptions are the bare verb render and convert_to_pdf, which are still clear but break the consistent object-inclusive pattern.

Tool Count5/5

Six tools is well-scoped for a template-based document generation and conversion server. Each tool has a distinct role and none feel redundant or unnecessary.

Completeness4/5

The core lifecycle is covered: list templates, inspect schemas, validate data, render documents, convert existing files, and poll render status. The main gap is the absence of template creation or management, but this appears to be outside the server's intended scope since templates are treated as pre-existing resources.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables PDF and image generation from templates, JSON, HTML, or URLs through the PDF Gen Studio API. Supports rendering, template management, and multiple output formats.
    6 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables creating professional documents (invoices, contracts, certificates, proposals, reports) via the DocuQueue API, with tools for template management, filling, previewing, and PDF generation.
    1
    MIT