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

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 a Word, Excel, PowerPoint, OpenDocument, RTF or HTML document (up to 20 MB) to a PDF and returns a download URL (Starter plan and above; units follow the PDF rule). 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. The document is converted and not kept.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoAbsolute path of a document on this machine
filenameNoName of the 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
file_base64NoThe document, base64 encoded
page_rangesNoPages to convert, e.g. 1-3,5
single_page_sheetsNoEach spreadsheet sheet on one page

TDQS

A4.4/5.0
Behavior4/5

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

Annotations are minimal (readOnlyHint=false, idempotentHint=false), so the description carries most behavioral disclosure. It adds the 20 MB limit, plan/billing rule, output format, and 'not kept' retention behavior; it stops short of describing error cases or URL lifetime, which are secondary.

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?

Two dense sentences lead with the core action and result, then pack constraints, plan requirements, and source modes without redundancy. Every clause adds useful information.

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, the description covers formats, size, result, billing, source exclusivity, and retention. It could add URL expiry or failure behavior, but nothing essential for selecting and invoking the tool 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 parameters are already documented. The description adds the crucial mutual-exclusion constraint that exactly one of render_id, path, or file_base64 must be supplied and that file_base64 pairs with file_name, which the schema alone does not convey.

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 opening sentence states a specific verb (Converts) and resource (office document to PDF) and returns a download URL, which distinguishes it from render-oriented siblings. Listing supported formats further narrows the tool's purpose.

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 clearly describes the three source modes and states 'Pass exactly one source', giving an agent the key precondition. It does not explicitly name sibling alternatives or say when not to use them, but the render_id option ties it naturally to the render workflow.

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

Status, download URL and error of a render by id (rnd_…).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the safe-read profile is covered. The description adds that the tool returns status, download URL, and error, which is useful, but it does not disclose behaviors like not-found handling, URL expiration, or auth requirements. With annotations present, the bar is lower, and this meets it without contradiction.

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 a single concise sentence that front-loads the key output fields and includes the id format. Every word contributes value with no redundancy.

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

Completeness4/5

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

For a simple single-parameter read tool with no output schema, the description adequately covers what the tool returns and what the id should look like. It could add more about error/not-found behavior, but the core information an agent needs to call it correctly is present.

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 0% and the schema only says id is a string. The description compensates by specifying the expected id format (rnd_…) and clarifying that it is a render id, which is meaningful beyond the raw schema.

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

Purpose4/5

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

The description identifies the resource (a render), the key identifier format (rnd_…), and the returned information (status, download URL, error). While it is a noun phrase rather than an explicit verb phrase, the title 'Get a render' supplies the verb, and the content clearly separates this read tool from siblings like render (creation) and list_templates.

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

Usage Guidelines3/5

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

Usage is implied: call this when you have a render id and need its status or download URL. There is no explicit when-not-to-use guidance or mention of alternatives, though the sibling list makes it inferable that render creates and convert_to_pdf converts.

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

JSON Schema of the data object a template expects, plus the sample data it was designed with. Use it to build the data for render.

ParametersJSON Schema
NameRequiredDescriptionDefault
templateYesTemplate slug or tpl_ id

TDQS

A4.3/5.0
Behavior4/5

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

The readOnlyHint annotation already covers the safety profile (read-only). The description adds value by disclosing that the tool returns both the JSON schema and the sample data, which is behavioral information beyond the annotation. It does not contradict any annotation.

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 consists of two concise sentences. The first states the core function and output, the second gives a clear usage instruction. Every sentence serves a purpose with no redundancy.

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 simple tool with one well-documented parameter and a read-only annotation, the description is complete: it explains what the tool returns (schema and sample data) and how to use it (to build data for render). No essential information is missing for an agent to call it correctly.

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?

The input schema already documents the only parameter 'template' with a clear description ('Template slug or tpl_ id'), achieving 100% coverage. The tool description does not add any extra detail about the parameter beyond what the schema provides, so the baseline 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: it returns the JSON Schema of the expected 'data' object for a template, plus sample data. This clearly distinguishes it from siblings like 'render' (which processes data) and 'validate_template' (which checks correctness).

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?

The description explicitly tells the agent when to use it: 'Use it to build the data for render.' This gives clear context for the use case. However, it does not mention when not to use it or alternatives, leaving a small gap.

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

list_templatesList templatesB
Read-only

Templates of the workspace the API key belongs to, with slug, kind (pdf, image, docx for Word, pptx for PowerPoint), engine and published version.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch in name and slug
tagNo
kindNo
engineNo

TDQS

B3.1/5.0
Behavior3/5

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

The annotation readOnlyHint=true already indicates the operation is read-only, so the description does not need to repeat that. The description adds context about the returned fields (kind mapping to file types), which is mildly useful but does not disclose behaviors like pagination, ordering, or rate limits. It adds some value beyond annotations but not rich 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.

Conciseness5/5

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

The description is a single sentence that directly states the purpose and scope. It front-loads the core action and provides essential field details without any fluff. Every word contributes value, making it highly concise and well-structured.

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

Completeness3/5

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

For a list operation with 4 optional parameters and no output schema, the description gives a sense of what is returned but omits key contextual details such as pagination, sorting, filtering behavior, or any limitations (e.g., max results). While the tool is simple, more specifics would help an agent know what to expect when calling it. It is adequate but has clear gaps.

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

Parameters2/5

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

Schema description coverage is only 25% (only 'q' has a description). The description adds meaning for the 'kind' parameter by mapping values to file types (docx for Word, pptx for PowerPoint), which goes beyond the schema enum. However, it does not explain 'tag', 'engine', or clarify the 'q' parameter beyond its schema description. With low coverage, the description only partially compensates, leaving most parameters semantically thin.

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

Purpose4/5

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

The description clearly states the verb (list) and resource (templates) with specific details about returned fields (slug, kind, engine, published version). It scopes to the workspace of the API key, which adds clarity. However, it does not explicitly differentiate from sibling tools like get_template_schema or render, so it misses the 'distinguishes from siblings' criterion for a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention when not to use it or point to other tools for specific use cases. The only context is the workspace scoping, which is more about data scope than usage selection. This is essentially no usage guidance.

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

renderRender a documentA

Renders a template (with data) or raw HTML to a PDF or image, or a Word or PowerPoint template to DOCX, PPTX or PDF, and returns a download URL. Live keys consume units; test keys render free with a watermark.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
htmlNoRaw HTML instead of a template
waitNoWait for the render to finish (sync renders finish immediately)
engineNoEngine for html that contains template syntax
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
filenameNo
templateNoTemplate slug or tpl_ id

TDQS

A3.5/5.0
Behavior4/5

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

Annotations only state readOnlyHint=false and idempotentHint=false, leaving the description to carry behavioral context. The description adds useful transparency by noting that live keys consume units, test keys add a watermark, and the tool returns a download URL. It stops short of explaining side effects like resource creation or quota impact, but it adds meaningful value beyond 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.

Conciseness5/5

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

The description is two sentences, front-loaded with the core operation and output, and wastes no words. It packs the essential purpose, input types, output formats, return value, and billing behavior into a compact, scannable form.

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

Completeness3/5

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

This is a complex 8-parameter tool with no output schema, so the description needs to cover return values and operational call requirements. It explains the download URL and main rendering paths, but it does not state whether a template or html is required, how filename behaves, or how asynchronous renders are retrieved. These gaps leave an agent with some uncertainty before invoking the tool.

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 75%, so the schema already handles most parameter documentation. The tool description clarifies high-level input modes (template+data vs raw HTML) and output format categories, but it does not add detail for undocumented parameters like data or filename. It is neither harmful nor highly compensatory.

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

Purpose4/5

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

The description clearly states a specific verb and resource: it renders templates or raw HTML into PDFs, images, DOCX, or PPTX, and returns a download URL. It does not explicitly differentiate itself from siblings like get_render or convert_to_pdf, but the output and rendering scope make the core purpose evident.

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

Usage Guidelines2/5

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

The description provides billing-related context (live keys consume units, test keys render with a watermark) but gives no guidance on when to use this tool instead of alternatives such as convert_to_pdf, get_render, or validate_template. It lacks explicit exclusions, prerequisites, or scenario-based routing.

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 with data without rendering; free. With a template slug the API checks the version a render uses (the published one, else the latest) as the render would: syntax, header and footer, errors that happen only with this data, and the data against the template's stored JSON Schema (a wrong type or a missing required field is an error). With html plus engine it compiles offline and reports syntax errors, unknown filters and variables missing from the data. Warnings leave ok true: treat each one as a question to settle before rendering. For Word and PowerPoint templates the findings name the document part and paragraph.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
htmlNoTemplate source when no slug is given
engineNoRequired with html
templateNoTemplate slug or tpl_ id

TDQS

A4.6/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint=true annotation: it states that no rendering occurs, that slug-mode checks the same version a render would, that html-mode compiles offline, that warnings preserve ok true, and that Word/PowerPoint findings include document part and paragraph. This is rich, actionable behavioral detail.

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 not bloated: five sentences, each earning its place. The first sentence front-loads the core purpose and cost/rendering behavior, followed by mode details, warning semantics, and output location details. No filler or redundancy.

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

Completeness4/5

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

For a read-only validation tool with no output schema, the description covers most critical aspects: modes, error categories, warning behavior, and output granularity. It falls slightly short by not explicitly stating the required combination of template or html+engine (the schema lists no required fields), and by leaving the overall response structure mostly implicit aside from the ok flag.

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?

The schema already documents data, html, engine, and template with 75% coverage. The description adds meaningful semantics: template can be a slug or tpl_ id, slug mode validates the published-or-latest version, html mode requires engine and compiles offline, and data is validated against the stored JSON Schema. This supplements the schema effectively.

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 'Checks a template with data without rendering; free,' naming a specific action, resource, and the key differentiator from rendering. It further clarifies two distinct invocation modes (slug vs html+engine), making the purpose unmistakable.

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

Usage Guidelines4/5

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

It clearly implies usage: validate before rendering, avoid rendering costs, and choose between a template slug or html+engine mode. However, it never explicitly states that exactly one of these modes is required, nor does it discuss when not to use it relative to sibling tools like get_template_schema.

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.7
    • First observedconvert_to_pdf
    • First observedget_render
    • First observedget_template_schema
    • First observedlist_templates
    • First observedrender
    • First observedvalidate_template

TDQS

A4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool addresses a distinct stage in the document generation workflow: listing templates, inspecting schemas, validating, rendering, converting, and retrieving results. Even validate_template and render are clearly separated by purpose—one checks without producing output, the other produces a downloadable render.

Naming Consistency4/5

Tool names mostly follow a clear verb_noun pattern like list_templates, get_template_schema, validate_template, and get_render. The bare verb 'render' is a minor deviation since it omits an explicit object, but the overall naming remains predictable and readable.

Tool Count5/5

Six tools is a well-scoped count for a document rendering and conversion server. Each tool serves a necessary function in the workflow without redundancy or bloat.

Completeness5/5

The tool surface covers the full lifecycle: discover available templates, understand their required data schema, validate before rendering, render to multiple formats, convert outputs to PDF, and check render status or retrieve results. No obvious gaps exist for the server's stated purpose.

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.
    8 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