# BrewMyPDF > Design a PDF template once — in a visual editor or as JSON — then send data to a REST API and get the PDF back. Built for invoices, payslips, contracts, labels and anything else that is the same shape every time with different values. BrewMyPDF is also an MCP server, so an agent can list templates and render one with the same API key and the same limits as the REST API. ## MCP If you are an agent, this is how you connect. Endpoint: https://brewmypdf.com/mcp — JSON-RPC 2.0 over a single HTTP POST, no session to open. Authenticate with `Authorization: Bearer `. Note this header differs from the REST API, which uses x-api-key; the key itself is the same one and is issued in the console (Lite plan or above). Tools, in the order you should call them: - list_templates: List the PDF templates on this account. Returns id, name and last-updated time. Call this first — every other tool needs a template_id from here. - describe_template_schema: Describe the JSON data a template expects. Returns a JSON Schema plus the flat list of binding paths found in the template. Types are intentionally left open — the template only says which values it uses, not what they must be. Call this before preview_template or render_pdf. - preview_template: Render a template with data to HTML, without producing a PDF. Free and fast — use it to check your data fits before calling render_pdf. Returns the HTML and any binding warnings (a warning is not a failure: it tells you which value was missing or wrong). - render_pdf: Render a template with data to a PDF and return a download URL. This consumes one render from the account quota, so preview_template first. If the render takes longer than the wait window you get a job_id with status "queued" instead of a URL. The initialize response carries an instructions field describing the same flow — clients may put it in the system prompt. These tools cannot create or edit templates: use the REST API (POST /v1/templates) or the web editor for that. Full guide: https://brewmypdf.com/docs/mcp ## Facts - Node types: 10 (label, image, line, rect, circle, table, chart, code, html, form field) - Built-in expression functions: 48 - Document model fields: 105 - Step-by-step recipes: 14 - Uploaded PDFs: up to 10MB and 100 pages, deleted after 24 hours - Free plan available without a card ## What it does not do - It does not sign PDFs. It creates signature spaces; the viewer signs. - It does not fetch remote images during a render. Images must be data: URIs. - It does not run your JavaScript. Expressions are a small sandboxed language. ## Docs - [/](https://brewmypdf.com/): What it is, how it works, what you can build - [/pricing](https://brewmypdf.com/pricing): Plans, quotas and what counts as one render - [/docs/schema](https://brewmypdf.com/docs/schema): The document model: every field, node type and built-in function - [/docs/api](https://brewmypdf.com/docs/api): REST endpoints, authentication, limits and error codes - [/docs/mcp](https://brewmypdf.com/docs/mcp): Connect an AI agent over MCP: endpoint, auth, the four tools and their order - [/docs/intake](https://brewmypdf.com/docs/intake): Make documents from a spreadsheet: download the form made from your template, fill it, upload — one row, one PDF; everything checked before anything is made - [/docs/editor](https://brewmypdf.com/docs/editor): How to use the visual template editor - [/docs/handson](https://brewmypdf.com/docs/handson): Step-by-step recipes for 14 document types - [/gallery](https://brewmypdf.com/gallery): Ready-made templates you can copy into your account and render as-is - [/faq](https://brewmypdf.com/faq): Answers on limits, fonts, page breaks, data shape and billing - [/contact](https://brewmypdf.com/contact): How to reach us — support, billing and template requests ## Recipes - [/docs/handson/invoice](https://brewmypdf.com/docs/handson/invoice) - [/docs/handson/purchase-order](https://brewmypdf.com/docs/handson/purchase-order) - [/docs/handson/credit-note](https://brewmypdf.com/docs/handson/credit-note) - [/docs/handson/payslip](https://brewmypdf.com/docs/handson/payslip) - [/docs/handson/contract](https://brewmypdf.com/docs/handson/contract) - [/docs/handson/certificate](https://brewmypdf.com/docs/handson/certificate) - [/docs/handson/agreement](https://brewmypdf.com/docs/handson/agreement) - [/docs/handson/packing-slip](https://brewmypdf.com/docs/handson/packing-slip) - [/docs/handson/delivery-note](https://brewmypdf.com/docs/handson/delivery-note) - [/docs/handson/dispatch-label](https://brewmypdf.com/docs/handson/dispatch-label) - [/docs/handson/shipping-label](https://brewmypdf.com/docs/handson/shipping-label) - [/docs/handson/coupon](https://brewmypdf.com/docs/handson/coupon) - [/docs/handson/label-sheet](https://brewmypdf.com/docs/handson/label-sheet) - [/docs/handson/statement](https://brewmypdf.com/docs/handson/statement) ## Templates Ready-made templates. Each one is a working document you can copy into your account and render as-is, or fork and change. Fields and sample data are already in place. - [/gallery/invoice](https://brewmypdf.com/gallery/invoice) - [/gallery/quotation](https://brewmypdf.com/gallery/quotation) - [/gallery/purchase-order](https://brewmypdf.com/gallery/purchase-order) - [/gallery/receipt](https://brewmypdf.com/gallery/receipt) - [/gallery/credit-note](https://brewmypdf.com/gallery/credit-note) - [/gallery/statement](https://brewmypdf.com/gallery/statement) - [/gallery/proforma-invoice](https://brewmypdf.com/gallery/proforma-invoice) - [/gallery/packing-list](https://brewmypdf.com/gallery/packing-list) - [/gallery/delivery-note](https://brewmypdf.com/gallery/delivery-note) - [/gallery/shipping-label](https://brewmypdf.com/gallery/shipping-label) - [/gallery/payslip](https://brewmypdf.com/gallery/payslip) - [/gallery/employment-letter](https://brewmypdf.com/gallery/employment-letter) - [/gallery/offer-letter](https://brewmypdf.com/gallery/offer-letter) - [/gallery/timesheet](https://brewmypdf.com/gallery/timesheet) - [/gallery/expense-report](https://brewmypdf.com/gallery/expense-report) - [/gallery/work-order](https://brewmypdf.com/gallery/work-order) - [/gallery/sales-report](https://brewmypdf.com/gallery/sales-report) - [/gallery/certificate](https://brewmypdf.com/gallery/certificate) - [/gallery/nda](https://brewmypdf.com/gallery/nda) - [/gallery/service-agreement](https://brewmypdf.com/gallery/service-agreement) - [/gallery/irs-w2](https://brewmypdf.com/gallery/irs-w2) - [/gallery/irs-1099-nec](https://brewmypdf.com/gallery/irs-1099-nec) - [/gallery/irs-1099-misc](https://brewmypdf.com/gallery/irs-1099-misc) - [/gallery/sf-1449](https://brewmypdf.com/gallery/sf-1449) - [/gallery/jp-invoice](https://brewmypdf.com/gallery/jp-invoice) - [/gallery/jp-return-invoice](https://brewmypdf.com/gallery/jp-return-invoice) - [/gallery/jp-gensen](https://brewmypdf.com/gallery/jp-gensen) - [/gallery/ad-card](https://brewmypdf.com/gallery/ad-card) - [/gallery/vehicle-permit](https://brewmypdf.com/gallery/vehicle-permit) - [/gallery/entry-confirmation](https://brewmypdf.com/gallery/entry-confirmation) - [/gallery/race-result](https://brewmypdf.com/gallery/race-result) - [/gallery/trade-statement](https://brewmypdf.com/gallery/trade-statement) - [/gallery/address-labels](https://brewmypdf.com/gallery/address-labels) ## Journal Weekly notes on treating documents as code — page breaks, fonts, how tables behave. Most of them start with something we got wrong first. - [/blog/all](https://brewmypdf.com/blog/all) - [/blog/korean-trade-statement](https://brewmypdf.com/blog/korean-trade-statement) - [/blog/event-credentials-platform-does-not-print](https://brewmypdf.com/blog/event-credentials-platform-does-not-print) - [/blog/quote-to-invoice-document-set](https://brewmypdf.com/blog/quote-to-invoice-document-set) - [/blog/eu-vat-invoice-required-fields](https://brewmypdf.com/blog/eu-vat-invoice-required-fields)