KI-Agenten · Model Context Protocol
Ihr Agent liefert die Daten.
Formfeed macht das Dokument.
Der MCP-Server von Formfeed gibt Claude, Cursor, Copilot, Codex und Ihren eigenen Agenten acht Werkzeuge: Vorlage finden, erwartete Daten lesen, Daten und E-Rechnungen kostenlos prüfen, PDF oder Bild rendern, Office-Dateien in PDF umwandeln, später nach einem Rendering sehen und den Workspace nennen, in dem er arbeitet. Das Layout bestimmen Ihre Vorlagen; der Agent füllt sie nur.
Ab sofort verfügbar: npx -y @formfeed/mcp (Node.js 22+) lokal, oder der gehostete Endpunkt mcp.formfeed.dev mit API-Schlüssel oder Anmeldung mit Ihrem Konto.
Rechnung an Olvarest GmbH: 8 Stunden Beratung zu 120 € und 20 Stunden Umsetzung zu 110 €, Nummer 2026-0042.
- list_templates { "kind": "pdf", "q": "invoice" }→ invoice-de · jinja2 · v7
- get_template_schema { "template": "invoice-de" }→ invoice.number, invoice.date, invoice.lines[] …
- validate_template { "template": "invoice-de", "data": { … } }→ ok · 0 errors
- render { "template": "invoice-de", "data": { … } }→ succeeded · 1 page · 1 unit
In einer Minute verbunden
Kein SDK, kein Klebecode. Der Server läuft neben Ihrem Client oder gehostet unter mcp.formfeed.dev und spricht mit Ihrem Schlüssel mit der Formfeed-API.
Test-Schlüssel anlegen
In der App unter API-Schlüssel die Testumgebung wählen. Testrenderings werden nicht berechnet, der Agent kann also so oft probieren, wie er muss.
Server hinzufügen
Ein Befehl in Claude Code oder Codex, ein paar Zeilen JSON in Cursor, VS Code, Windsurf (heute Devin Desktop) oder Claude Desktop.
Nach einem Dokument fragen
Der Agent findet die Vorlage, liest ihr Schema, prüft die Daten und gibt Ihnen den Download-Link.
Richten Sie Ihren Client ein
Derselbe Server funktioniert in jedem Client, der MCP spricht. Wählen Sie Ihren; jeder Reiter verlinkt eine vollständige Anleitung mit Prüfschritten und Tipps.
claude mcp add --transport stdio formfeed \
--env FORMFEED_API_KEY=ff_test_... \
-- npx -y @formfeed/mcpMit --scope user steht der Server in jedem Projekt bereit. Vollständige Anleitung für Claude Code →
{
"mcpServers": {
"formfeed": {
"command": "npx",
"args": ["-y", "@formfeed/mcp"],
"env": { "FORMFEED_API_KEY": "ff_test_..." }
}
}
}{
"mcpServers": {
"formfeed": {
"command": "npx",
"args": ["-y", "@formfeed/mcp"],
"env": { "FORMFEED_API_KEY": "ff_test_..." }
}
}
}{
"inputs": [
{ "type": "promptString", "id": "formfeed-key", "description": "Formfeed API key", "password": true }
],
"servers": {
"formfeed": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@formfeed/mcp"],
"env": { "FORMFEED_API_KEY": "${input:formfeed-key}" }
}
}
}{
"mcpServers": {
"formfeed": {
"command": "npx",
"args": ["-y", "@formfeed/mcp"],
"env": { "FORMFEED_API_KEY": "ff_test_..." }
}
}
}codex mcp add formfeed \
--env FORMFEED_API_KEY=ff_test_... \
-- npx -y @formfeed/mcp{
"mcpServers": {
"formfeed": {
"command": "npx",
"args": ["-y", "@formfeed/mcp"],
"env": { "FORMFEED_API_KEY": "$FORMFEED_API_KEY" }
}
}
}{
"context_servers": {
"formfeed": {
"command": "npx",
"args": ["-y", "@formfeed/mcp"],
"env": { "FORMFEED_API_KEY": "ff_test_..." }
}
}
}Assistenten und Editoren
Chat- und Coding-Agenten, die Sie täglich nutzen.
- Claude CodeAnthropicEin Befehl im Terminal. Claude Code rendert Dokumente und bearbeitet und testet mit der CLI Ihre Vorlagen als Dateien.
- Claude DesktopAnthropicIm Chat nach einer Rechnung oder einem Zertifikat fragen und den PDF-Link zurückbekommen. Lokaler Server, eine Konfigurationsdatei.
- CursorAnysphereDer Agent von Cursor rendert Dokumente aus Ihren Vorlagen, während er am Code arbeitet, der die Daten sendet.
- VS Code (GitHub Copilot)MicrosoftDer Agent-Modus von Copilot mit Formfeed-Werkzeugen. VS Code fragt einmal nach dem Schlüssel und speichert ihn sicher.
- WindsurfCognitionWindsurf heißt seit Juni 2026 Devin Desktop. Sein Agent bekommt die Formfeed-Werkzeuge aus einer JSON-Datei.
- OpenAI Codex CLIOpenAIFormfeed mit
codex mcp addoder ein paar Zeilen TOML zu Codex hinzufügen. - Gemini CLIGoogleFormfeed-Werkzeuge in Googles Terminal-Agent, eingerichtet in settings.json.
- ZedZed IndustriesContext-Server in den Einstellungen von Zed geben seinem Agenten die Formfeed-Werkzeuge.
- ClineClineDie kostenlosen Werkzeuge automatisch freigeben, Renderings bestätigen lassen.
Agenten-Frameworks
Bauen Sie eigene Agenten mit den Formfeed-Werkzeugen.
- Claude Agent SDKAnthropicBauen Sie Ihren eigenen Agenten auf dem Unterbau von Claude Code und geben Sie ihm die Formfeed-Werkzeuge.
- Claude APIAnthropicHeute den lokalen Server mit dem Tool Runner des SDK nutzen, oder die API direkt mit dem gehosteten Endpunkt verbinden lassen.
- OpenAI Agents SDKOpenAI
MCPServerStdiostartet den Formfeed-Server; der Agent listet und ruft seine Werkzeuge auf. - Vercel AI SDKVercel
createMCPClientmacht aus den Formfeed-Werkzeugen AI-SDK-Werkzeuge für jeden Modellanbieter. - LangChain and LangGraphLangChainDie MCP-Adapter laden die Formfeed-Werkzeuge als LangChain-Werkzeuge für jeden Agenten und jeden Graphen.
- MastraMastra
MCPClientaus@mastra/mcpgibt einem Mastra-Agenten die Formfeed-Werkzeuge. - CrewAICrewAIGeben Sie einem Crew-Mitglied die Formfeed-Werkzeuge mit einem Eintrag in
mcps. - Plain tool callingFormfeed SDKGanz ohne MCP: einen Formfeed-Aufruf in ein Werkzeug mit festem Schema packen. Am besten, wenn der Agent immer nur eine Art Dokument erzeugt.
Automatisierung
Agenten in Workflow-Werkzeugen.
Acht Werkzeuge, nichts Zerstörerisches
Der Server bietet, was ein Agent für ein Dokument braucht, und nichts, was Ihren Workspace verändert: kein Veröffentlichen, kein Löschen, keine Webhooks.
| Werkzeug | Was es tut | Kosten |
|---|---|---|
| list_templates | Vorlagen des Workspace mit Slug, Art (PDF, Bild, Word oder PowerPoint), Engine und veröffentlichter Version; filterbar nach Art, Engine, Tag oder Suchtext. | kostenlos |
| get_template_schema | Das JSON-Schema der Daten, die eine Vorlage erwartet, mit den Beispieldaten, mit denen sie gestaltet wurde. Speichert eine Vorlage kein Schema, wird eines aus den Beispieldaten abgeleitet: ein Anhaltspunkt, kein Vertrag. | kostenlos |
| validate_template | Prüft eine Vorlage mit den Daten, ohne zu rendern: Syntax, Variablen, die in den Daten fehlen, Fehler, die erst mit diesen Daten auftreten, und die Daten gegen das gespeicherte Schema der Vorlage. Ad-hoc-HTML wird offline geprüft. | kostenlos |
| check_invoice | Prüft den _invoice-Block einer E-Rechnung offline, wie die API es vor dem Rendern tut: die Felder, die EN 16931 verlangt, die Summen auf den Cent, Umsatzsteuerkategorien und Codelisten sowie die Regeln Frankreichs. Nennt jedes Feld und jede Regel, die er verletzt. | kostenlos |
| render | Rendert eine Vorlage oder rohes HTML zu PDF, PNG, JPG oder WebP (Word- und PowerPoint-Vorlagen auch zu DOCX oder PPTX) und liefert Download-URL, Seitenzahl und Einheiten. Mit einvoice wird das PDF eine ZUGFeRD- / Factur-X-E-Rechnung mit dem Bericht des Validators, für eine Einheit mehr (live ab dem Starter-Plan). | 1 Einheit, PDFs je 5 Seiten |
| convert_to_pdf | Wandelt ein Word-, Excel-, PowerPoint-, OpenDocument-, RTF- oder HTML-Dokument bis 20 MB oder das Rendering einer Word- oder PowerPoint-Vorlage in ein PDF um und liefert die Download-URL; das Dokument wird nicht aufbewahrt. Der lokale Server liest eine Datei auch über ihren Pfad. Ab dem Starter-Plan. | wie ein PDF |
| get_render | Status, Download-URL und Fehler eines Renderings: für Renderings, die der Agent mit wait: false eingereiht hat, und für einen frischen Link, wenn der alte abgelaufen ist. | kostenlos |
| get_workspace | Workspace und Organisation, in denen der Server arbeitet, der Tarif, die Umgebung und die Einheiten des Zeitraums: wie viele Renderings noch bleiben. | kostenlos |
Test-Schlüssel werden nie berechnet. Ein Agent, der sich mit Ihrem Konto angemeldet hat, rendert immer live.
So arbeitet ein Agent damit
Der Server nennt dem Agenten diese Reihenfolge in seinen Anweisungen, und jeder Schritt liefert strukturiertes JSON, mit dem der Agent weiterarbeiten kann.
Vorlage finden
list_templatesDer Agent sucht nach Art oder Name, statt einen Slug zu raten.
Den Vertrag lesen
get_template_schemaFeldnamen, Typen und ein Beispiel kommen aus der Vorlage, der Agent baut also genau die Daten, die Ihr Layout erwartet.
Prüfen vor dem Bezahlen
validate_templateEin Tippfehler im Feldnamen kommt als Warnung mit Zeile und Spalte zurück, und der Agent korrigiert ihn, ohne eine Einheit zu verbrauchen.
Rendern und übergeben
renderDas Dokument wird in der EU gerendert, und der Agent antwortet mit einem signierten Link.
{
"template": "invoice-de",
"version": 7,
"status": "published",
"schema": {
"type": "object",
"properties": {
"invoice": {
"type": "object",
"properties": {
"number": { "type": "string" },
"date": { "type": "string" },
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": { "type": "string" },
"qty": { "type": "number" },
"price": { "type": "number" }
}
}
}
}
}
}
},
"sample_data": {
"invoice": {
"number": "2026-0042",
"date": "2026-09-15",
"lines": [{ "description": "Consulting", "qty": 8, "price": 120 }]
}
}
}{
"ok": true,
"template": { "id": "tpl_…", "slug": "invoice-de", "version": 7 },
"diagnostics": [
{
"severity": "warning",
"code": "unknown-variable",
"message": "\"customer.vat_id\" is not present in the sample data",
"line": 18,
"column": 9
}
]
}{
"id": "rnd_7da09ab6cd9946b798c187c2a9350852",
"status": "succeeded",
"download_url": "https://cdn.formfeed.dev/o/eu/…/invoice-2026-0042.pdf?exp=…&sig=…",
"expires_at": "2026-09-17T10:42:00Z",
"page_count": 1,
"units": 1,
"environment": "live",
"template": { "id": "tpl_…", "slug": "invoice-de", "version": 7 },
"error": null
}Was Sie fragen können
Jeder Prompt unten funktioniert mit den acht Werkzeugen und einem Workspace, der die passende Vorlage hat.
- Rechnung
“Rendere Rechnung 2026-0042 an Olvarest GmbH: 8 Stunden Beratung zu 120 € und 20 Stunden Umsetzung zu 110 €. Nimm die deutsche Rechnungsvorlage.”
- Zertifikate
“Hier ist die Teilnehmerliste vom gestrigen Workshop. Erstelle pro Person ein Zertifikat mit der Vorlage certificate und liste die Links auf.”
- Social-Bild
“Erstelle das Open-Graph-Bild für unseren Beitrag „Vorlagen gehören in Git“ als PNG.”
- Prüfung
“Prüfe, ob orders/2026-0042.json zur Vorlage invoice-de passt, bevor du irgendetwas renderst.”
- Bericht
“Mach aus dieser CSV mit Monatsumsätzen den Quartalsbericht samt Balkendiagramm und schick mir das PDF.”
- Sprache
“Rendere dieselbe Rechnung noch einmal mit der Locale en-GB für unseren irischen Kunden.”
- HTML
“Mach aus diesen Besprechungsnotizen ein einseitiges PDF. Ohne Vorlage, einfaches HTML genügt.”
- Support
“Warum ist Rendering rnd_7da09ab6cd9946b798c187c2a9350852 fehlgeschlagen? Zeig mir den Fehler und was an den Daten zu ändern ist.”
Bauen Sie Ihren eigenen Agenten
Jedes große Agenten-Framework kann MCP-Werkzeuge laden. Die Beispiele starten den lokalen Server, geben seine Werkzeuge an das Modell und führen eine Anfrage aus.
import { query } from '@anthropic-ai/claude-agent-sdk';
const prompt = 'Render invoice 2026-0042 for Olvarest GmbH: 8 hours of consulting at 120 EUR.';
for await (const message of query({
prompt,
options: {
mcpServers: {
formfeed: {
command: 'npx',
args: ['-y', '@formfeed/mcp'],
env: { FORMFEED_API_KEY: process.env.FORMFEED_API_KEY! },
},
},
allowedTools: ['mcp__formfeed__*'],
},
})) {
if (message.type === 'result' && message.subtype === 'success') {
console.log(message.result);
}
}import asyncio
import os
from agents import Agent, Runner
from agents.mcp import MCPServerStdio
async def main() -> None:
async with MCPServerStdio(
name="formfeed",
params={
"command": "npx",
"args": ["-y", "@formfeed/mcp"],
"env": {"FORMFEED_API_KEY": os.environ["FORMFEED_API_KEY"]},
},
cache_tools_list=True,
) as formfeed:
agent = Agent(
name="Billing assistant",
instructions="Create documents with the Formfeed tools. Read the schema first.",
mcp_servers=[formfeed],
)
prompt = "Render invoice 2026-0042 for Olvarest GmbH: 8 hours of consulting at 120 EUR."
result = await Runner.run(agent, prompt)
print(result.final_output)
asyncio.run(main())import { anthropic } from '@ai-sdk/anthropic';
import { createMCPClient } from '@ai-sdk/mcp';
import { Experimental_StdioMCPTransport } from '@ai-sdk/mcp/mcp-stdio';
import { generateText, stepCountIs } from 'ai';
const formfeed = await createMCPClient({
transport: new Experimental_StdioMCPTransport({
command: 'npx',
args: ['-y', '@formfeed/mcp'],
env: { FORMFEED_API_KEY: process.env.FORMFEED_API_KEY! },
}),
});
try {
const { text } = await generateText({
model: anthropic('claude-opus-5-5'),
tools: await formfeed.tools(),
stopWhen: stepCountIs(8),
prompt: 'Render the certificate for Jane Doe, course "Analytical Engines 101".',
});
console.log(text);
} finally {
await formfeed.close();
}import asyncio
import os
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient(
{
"formfeed": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@formfeed/mcp"],
"env": {"FORMFEED_API_KEY": os.environ["FORMFEED_API_KEY"]},
}
}
)
async def main() -> None:
tools = await client.get_tools()
agent = create_agent("anthropic:claude-opus-5-5", tools)
prompt = "Render invoice 2026-0042 for Olvarest GmbH and return the link."
result = await agent.ainvoke({"messages": [{"role": "user", "content": prompt}]})
print(result["messages"][-1].content)
asyncio.run(main())import { anthropic } from '@ai-sdk/anthropic';
import { Agent } from '@mastra/core/agent';
import { MCPClient } from '@mastra/mcp';
const mcp = new MCPClient({
servers: {
formfeed: {
command: 'npx',
args: ['-y', '@formfeed/mcp'],
env: { FORMFEED_API_KEY: process.env.FORMFEED_API_KEY! },
},
},
});
export const documentAgent = new Agent({
name: 'Document agent',
instructions: 'Render documents with the Formfeed tools. Read the template schema before you render.',
model: anthropic('claude-opus-5-5'),
tools: await mcp.listTools(),
});import os
from crewai import Agent, Crew, Task
from crewai.mcp import MCPServerStdio
clerk = Agent(
role="Document clerk",
goal="Produce finished PDFs from the workspace's Formfeed templates",
backstory="You read a template's data schema before you render and never guess field names.",
mcps=[
MCPServerStdio(
command="npx",
args=["-y", "@formfeed/mcp"],
env={"FORMFEED_API_KEY": os.environ["FORMFEED_API_KEY"]},
)
],
)
task = Task(
description="Render a certificate for Jane Doe, course Analytical Engines 101, dated today.",
expected_output="The download URL of the certificate",
agent=clerk,
)
print(Crew(agents=[clerk], tasks=[task]).kickoff())import asyncio
import os
from anthropic import AsyncAnthropic
from anthropic.lib.tools.mcp import async_mcp_tool
from mcp import ClientSession
from mcp.client.stdio import StdioServerParameters, stdio_client
formfeed = StdioServerParameters(
command="npx",
args=["-y", "@formfeed/mcp"],
env={"FORMFEED_API_KEY": os.environ["FORMFEED_API_KEY"]},
)
prompt = "Render the certificate for Jane Doe, course Analytical Engines 101."
async def main() -> None:
client = AsyncAnthropic()
async with stdio_client(formfeed) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
tools = (await session.list_tools()).tools
runner = client.beta.messages.tool_runner(
model="claude-opus-5-5",
max_tokens=16000,
tools=[async_mcp_tool(t, session) for t in tools],
messages=[{"role": "user", "content": prompt}],
)
async for message in runner:
print(message.content)
asyncio.run(main())import Anthropic from '@anthropic-ai/sdk';
import { betaZodTool } from '@anthropic-ai/sdk/helpers/beta/zod';
import { Formfeed } from '@formfeed/sdk';
import { z } from 'zod';
const anthropic = new Anthropic();
const formfeed = new Formfeed({ apiKey: process.env.FORMFEED_API_KEY! });
const renderInvoice = betaZodTool({
name: 'render_invoice',
description: 'Renders an invoice PDF with the invoice-de template and returns its download URL.',
inputSchema: z.object({
number: z.string(),
customer: z.object({ name: z.string(), street: z.string(), zip: z.string(), city: z.string() }),
lines: z.array(z.object({ description: z.string(), qty: z.number(), price: z.number() })),
}),
run: async (invoice) => {
const render = await formfeed.renders.create({ template: 'invoice-de', data: { invoice } });
const done = render.status === 'succeeded' ? render : await formfeed.renders.waitFor(render.id);
return done.download_url ?? `Render ${done.id} failed: ${done.error?.message}`;
},
});
const message = await anthropic.beta.messages.toolRunner({
model: 'claude-opus-5-5',
max_tokens: 16000,
tools: [renderInvoice],
messages: [
{
role: 'user',
content: 'Invoice Olvarest GmbH, Beispielweg 2, 54321 Beispielstadt: 8 h consulting at 120 EUR. Number 2026-0042.',
},
],
});
console.log(message.content);Coding-Agenten bearbeiten Vorlagen als Dateien
Claude Code, Codex, Cursor und Copilot können HTML und CSS. Mit der Formfeed-CLI sind Ihre Vorlagen Dateien im Repository, und der Agent bekommt dieselben Prüfungen, die Sie selbst ausführen würden.
- Offline-Prüfung
formfeed validate --jsonkompiliert jede Vorlage mit der Produktions-Engine und meldet Fehler mit Datei, Zeile und Spalte.- Snapshot-Tests
formfeed testrendert jeden Datensatz und vergleicht mit dem freigegebenen HTML, eine Layoutänderung wird so zum Diff.- Lokale Vorschau
formfeed devzeigt eine paginierte Vorschau mit Hot Reload;formfeed rendererzeugt ein echtes PDF über die API, kostenlos mit einem Test-Schlüssel (formfeed loginim Browser speichert einen Live-Schlüssel).- Review im Pull Request
formfeed ci previewrendert die geänderten Vorlagen und schreibt eine Zusammenfassung für den Pull Request.
## Formfeed templates
Templates live in `templates/<slug>/` (see `formfeed.json`). After changing one:
1. Run `npx formfeed validate <slug> --json` and fix every error before you continue.
2. Run `npx formfeed test <slug>`. If a snapshot changed on purpose, update it
with `npx formfeed test <slug> -u` and say so in your summary.
3. Render a real PDF only with a test key (`npx formfeed whoami` names the stored key's
environment): `npx formfeed render <slug> --data <set>`.
4. Never run `npx formfeed templates push` unless asked: it changes the shared workspace.
Helpers (money, date, qrcode, epcQr, chart, …): https://docs.formfeed.dev/templates/helpersFügen Sie das in AGENTS.md oder CLAUDE.md ein, dann folgt der Agent jedes Mal derselben Schleife.
npx formfeed login ff_test_... # store a test key: its renders are free
npx formfeed init --from-workspace # formfeed.json, templates/<slug>/ as files
npx formfeed validate invoice-de --json # errors with file, line, column
npx formfeed test # compare approved HTML snapshots
npx formfeed dev invoice-de # preview with hot reload on :4400
npx formfeed render invoice-de --data many-lines # true render with that keySie bauen ein KI-Produkt? Halten Sie Kunden getrennt.
Ein API-Schlüssel gehört zu genau einem Workspace. Geben Sie jedem Kunden einen eigenen Workspace und jeder Agenten-Sitzung den Schlüssel dieses Kunden: Der Server sieht nur die Vorlagen und Renderings dieses Workspace, egal was im Prompt steht.
Vom Schlüssel erzwungen
Die Abgrenzung passiert in der API, nicht im Prompt, und hält deshalb auch gegen Prompt-Injection. Ein Standardschlüssel hat template:read, render:create, render:read und account:read, sonst nichts.
Test und Live
Entwickeln Sie mit Test-Schlüsseln: Renderings werden nicht berechnet und laufen nach einem Tag ab (im Free-Plan mit Testmarkierung). Zum Start tauschen Sie den Schlüssel, nicht den Code.
Nachvollziehbar
Jedes Rendering des Servers trägt meta.source = "mcp" und steht im Render-Log mit Vorlagenversion und den Hashes seines Reproduzierbarkeitsnachweises; die gesendeten Daten auch, wenn der Workspace Anfragedaten aufbewahrt (eine Einstellung der bezahlten Pläne, voreingestellt aus).
Gleicher Preis
Agenten-Renderings kosten dieselben Einheiten wie jedes andere API-Rendering, in jedem Plan inklusive Free. Rate Limits gelten pro Workspace.
Den HTTP-Endpunkt selbst betreiben
Das Paket liefert auch zustandsloses Streamable HTTP, genau das läuft auf mcp.formfeed.dev. Es speichert weder Sitzungen noch Schlüssel: Jede Anfrage bringt ihren eigenen API-Schlüssel als Bearer-Token mit. Die Anmeldung mit einem Formfeed-Konto bleibt dem gehosteten Endpunkt vorbehalten, weil die API nur Tokens der eigenen Formfeed-Anmeldung annimmt. Betreiben Sie es im eigenen Netz für volle Kontrolle.
# stateless Streamable HTTP on :8790, the key comes from each request
npx -y @formfeed/mcp --http --host 0.0.0.0 --port 8790
# health check for your load balancer
curl http://localhost:8790/healthzservices:
formfeed-mcp:
image: node:22-alpine
command: npx -y @formfeed/mcp --http --host 0.0.0.0 --port 8790
restart: unless-stopped
ports: ["127.0.0.1:8790:8790"]FAQ
- Welche Clients werden unterstützt?
- Jeder Client, der das Model Context Protocol spricht: Claude Code, Claude Desktop, Cursor, VS Code mit GitHub Copilot, Windsurf (heute Devin Desktop), OpenAI Codex, Gemini CLI, Zed, Cline und die oben genannten Agenten-Frameworks. Der lokale Server braucht Node.js 22 oder neuer. Ein Client, der aus der offiziellen MCP-Registry installiert, findet den Server als
io.github.formfeed-dev/formfeed. - Kosten Agenten-Renderings extra?
- Nein. Ein Rendering über MCP kostet dieselben Einheiten wie jedes andere: eine Einheit pro PDF mit bis zu fünf Seiten oder pro Bild, eine mehr für eine E-Rechnung. Auflisten, Schema-Abfragen und Prüfen sind kostenlos, Test-Schlüssel werden nie berechnet. Wie viele Einheiten jeder Plan enthält, steht bei den Preisen.
- Funktioniert es in ChatGPT oder Claude.ai im Browser?
- Ja. Browser-Clients binden entfernte Server als Konnektoren mit OAuth-Anmeldung ein: Geben Sie
https://mcp.formfeed.dev/mcpein, melden Sie sich mit Ihrem Formfeed-Konto an und wählen Sie den Workspace, in dem der Agent arbeitet. Der Agent handelt dann als Sie in diesem Workspace, mit höchstens vier Scopes (template:read,render:read,render:create,account:read) und nie mehr, als Ihre Rolle erlaubt: Er liest Vorlagen, prüft, rendert und wandelt um, immer live, seine Renderings verbrauchen also Einheiten. Den Workspace ändern oder den Agenten widerrufen Sie in der App unter Konto → Verbundene Agenten. Mit Zwei-Faktor-Authentifizierung erlauben Sie den Agenten aus einer Sitzung, die Ihren Code bestanden hat; einer, den Sie vor dem Einschalten erlaubt haben, wird mit 403 abgewiesen, bis Sie ihn neu verbinden. - Kann der Agent Vorlagen anlegen oder ändern?
- Nicht über MCP: Der Server liest Vorlagen nur und rendert sie, ein Agent kann also kein kaputtes Layout veröffentlichen. Coding-Agenten ändern Vorlagen als Dateien mit der CLI, und Sie entscheiden, wann sie hochgeladen und veröffentlicht werden.
- Kann der Agent ohne Vorlage rendern?
- Ja.
rendernimmt auch rohes HTML, auf Wunsch mit Jinja2-, Liquid- oder Handlebars-Syntax, für einmalige Dokumente. - Wo werden die Daten verarbeitet?
- In der EU. Rendering und Datenbank laufen in Frankfurt, gerenderte Dateien liegen in der EU. Der MCP-Server selbst speichert nichts; er reicht jeden Aufruf mit Ihrem Schlüssel an die API weiter.
- Brauche ich überhaupt MCP?
- Nein. Wenn der Agent immer nur eine Art Dokument erzeugt, packen Sie einen API-Aufruf in ein eigenes Werkzeug: siehe einfaches Tool Calling.
Integrationen· MCP-Dokumentation· @formfeed/mcp auf npm
Aus dem Blog
- Den Agenten die Daten schreiben lassen, nicht das HTML →
Ein KI-Agent, der das HTML eines Dokuments schreibt, schreibt jedes Mal ein neues Dokument. Einer, der eine geprüfte Vorlage füllt, schreibt dasselbe. Was die Vorlage dem Modell noch falsch zu machen lässt, und wie man es kostenlos prüft, bevor etwas gedruckt wird.
Heute mit dem Rendern beginnen
Der kostenlose Plan enthält 100 Einheiten im Monat und kostenlose Testrenderings. Wechseln Sie den Plan, wenn Sie mehr brauchen.