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 分