Formfeed

io.github.formfeed-dev由 GitHub 账号 formfeed-dev 发布v0.3.23更新于 Nov 3, 2026

Render PDFs and images from templates, validate data and convert Office files to PDF.

已验证Streamable HTTP可网页运行效率与工作流文件与存储

概览

AI 生成的概览

Formfeed 的 MCP 服务器,让助手列出和编辑文档模板、校验数据、渲染 PDF 与图片,并把 Office 文件转成 PDF。

可以做什么
  • 列出模板,并读取其数据架构、源码、设置与示例数据
  • 离线校验模板数据与临时 HTML,并按 EN 16931 检查电子发票区块
  • 用已存模板或临时 HTML 渲染 PDF、图片、DOCX 与 PPTX,并查询渲染状态和下载链接
  • 把 Word、Excel、PowerPoint、OpenDocument、RTF 和 HTML 文件转换为 PDF
  • 把新模板或修改保存为草稿,并查看工作区、套餐与剩余额度
适用场景
适合需要借助 Formfeed 模板生成文档、在渲染前校验数据、把现有 Office 文件转成 PDF,或准备 ZUGFeRD / Factur-X 电子发票的场景。也适合由助手起草模板修改、再交由人工发布的流程。
运行要求
可使用托管端点,通过 Authorization 请求头携带 API 密钥或使用 OAuth 登录 Formfeed 账号;也可在本地以 stdio 运行 npm 包。FORMFEED_API_KEY 中的 API 密钥可选,但多数工具需要它;FORMFEED_REGION 或 FORMFEED_BASE_URL 可切换 API 主机。写入模板需要密钥具备 template:write 权限。
安装前请注意
正式密钥(ff_live_)在渲染和转换时会消耗付费额度,测试密钥渲染结果带测试标记;可用 get_workspace 查看余额。save_template 会向工作区写入新草稿,但在 Formfeed 中由人工发布前不会生效。文档和数据会发送到 Formfeed 的 API,API 密钥属于机密信息。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Formfeed,将其添加到工作区。
  2. 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.formfeed-dev%2Fformfeed/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。

{
  "mcpServers": {
    "formfeed": {
      "type": "http",
      "url": "https://mcp.formfeed.dev/mcp"
    }
  }
}

README

@formfeed/mcp

[formfeed MCP server – quality and maintenance score on Glama]

Model Context Protocol server for Formfeed. Gives Claude, Cursor and other agents ten tools: list_templates, get_template_schema, validate_template (free: the data against the template's schema, ad-hoc HTML offline), check_invoice (free and offline: the _invoice block of a ZUGFeRD / Factur-X e-invoice against EN 16931), render (with einvoice, the PDF becomes that e-invoice; an image comes back as a picture the agent can look at), convert_to_pdf (Word, Excel, PowerPoint and OpenDocument to PDF), get_render, get_workspace (which workspace the server works in, and the units left), get_template_source and save_template (a new template or a change as a draft, which a person publishes in Formfeed; needs template:write on the key, or the person's permission for a signed-in agent).

stdio (Claude Desktop, Cursor, Claude Code)

json
{  "mcpServers": {    "formfeed": {      "command": "npx",      "args": ["-y", "@formfeed/mcp"],      "env": { "FORMFEED_API_KEY": "ff_test_…" }    }  }}

A test key renders for free (on the Free plan with a test mark); a live key consumes units. Without FORMFEED_API_KEY the server starts too, with the offline checks only: validate_template with html and engine, and check_invoice. FORMFEED_REGION=us or FORMFEED_BASE_URL select another API host.

Hosted (Streamable HTTP)

https://mcp.formfeed.dev/mcp takes Authorization: Bearer ff_…, or signs in with your Formfeed account when no key is sent (OAuth; the client opens the browser, and you choose the workspace the agent works in). https://mcp.formfeed.dev/mcp/<workspace id> pins another workspace for a signed-in client. Self-host the same endpoint with formfeed-mcp --http --port 8790, plus --auth-server <issuer> for OAuth sign-in against your own Supabase Auth.

Claude Code installs the hosted server together with two skills for writing and checking templates as Formfeed's plugin, from formfeed-dev/skills: https://docs.formfeed.dev/devkit/coding-agents

Documentation: https://docs.formfeed.dev/integrations/mcp

来源:packages/mcp/README.md,提交 c0023f8

工具

10

list_templates

List templates

Lists the templates of the workspace this server works in (the one chosen at sign-in, or the API key's), 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.

输入参数qtagkindengine

get_template_schema

Get the data schema of a template

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.

输入参数template必填

get_template_source

Read the source of a template

Returns what a template version is made of: the body markup (html), css, head, settings (paper, margins, header, footer, fonts), sample data, data sets, data schema, translations and partials, with the version's checksum. Call it before save_template to change a template the user named, and save what you edited with that checksum as base_checksum. Reads the latest version by default, the newest draft a change builds on; published reads what renders use. Word and PowerPoint templates are documents: for them it returns the settings and data, not the document. Read-only and free.

输入参数versiontemplate必填

validate_template

Validate a template with data

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, or the version you name) 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.

输入参数datahtmlengineversiontemplate

save_template

Save a template as a draft

Saves a template as a draft, never published: renders keep using the published version until a person publishes the draft in Formfeed. With template and base_checksum it saves a new version of that template: read it with get_template_source first, change what the user asked for, and pass only the parts you changed (the others are kept from the version you read). With new_template and html it creates a template whose version 1 is the draft. change_note says what changed; the person reads it before publishing. Returns the saved version, the check of the draft with its sample data (fix every error and save again) and review_url, the page where the person reviews and publishes it: hand that to the user. Needs an API key with template:write, or, for a signed-in agent, the person's permission under Account → Connected agents in Formfeed. Word and PowerPoint templates cannot be saved here. Free; a new template counts towards the plan's template limit.

输入参数cssheadhtmli18npartialssettingstemplatedata_setschange_note必填data_schemasample_datanew_template另有 1 个

check_invoice

Check an e-invoice

Checks the _invoice block of an e-invoice offline, as the API does before it renders one: the fields EN 16931 asks for, the totals to the cent, VAT categories and code lists, and France's rules for an invoice between two French businesses. Free, no units, nothing sent. Returns ok and problems, each with the field, the rule (BR-…) where one applies and a message. Nothing is computed for you: change the values a problem names, check again, then call render with einvoice and the block as data._invoice. The validator that runs during the render holds the file to the full rule set and to PDF/A-3b as well.

输入参数invoice必填profile

render

Render a document

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; for an image (png, jpg or webp) up to 2 MB the result also carries the picture itself, so look at what you made before handing it on (a PDF comes as its link). 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 or a signed-in agent 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. With einvoice the PDF becomes a ZUGFeRD / Factur-X e-invoice built from data._invoice (check the block with check_invoice first): the render then carries einvoice, the validator's report, and a refused invoice names the fields and rules to fix. The link expires at expires_at; get_render issues a fresh one.

输入参数datahtmlwaitenginelocaleoutputeinvoicefilenametemplate

convert_to_pdf

Convert an office document to PDF

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.

输入参数pathfilenamefile_namelandscaperender_idfile_base64page_rangessingle_page_sheets

get_render

Get a render

Returns the current state of a render: status (queued, rendering, succeeded or failed), download_url with expires_at, page_count, units and error, and the picture of a finished image render up to 2 MB. 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.

输入参数id必填

get_workspace

Which workspace this server works in

Returns the workspace and organisation this server acts in, the plan, the environment (live or test) and the units of the current period: included, used and the balance of prepaid units. Call it when the user asks where a document will land or how many renders are left, or when list_templates returns nothing you expected. A signed-in agent works in the workspace chosen when it was connected, which the person changes in Formfeed under Account → Connected agents; an API key works in the workspace it was made for. Read-only and free.

无需输入参数。

版本历史

15
  1. v0.3.23最新Nov 3, 2026
  2. v0.3.22Nov 1, 2026
  3. v0.3.21Oct 29, 2026
  4. v0.3.20Oct 26, 2026
  5. v0.3.19Oct 22, 2026
  6. v0.3.18Oct 19, 2026
  7. v0.3.17Oct 12, 2026
  8. v0.3.16Oct 9, 2026
  9. v0.3.14Oct 7, 2026
  10. v0.3.13Oct 5, 2026
  11. v0.3.12Oct 5, 2026
  12. v0.3.11Oct 2, 2026
  13. v0.3.10Sep 25, 2026
  14. v0.3.9Sep 23, 2026
  15. v0.3.8Sep 22, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分