Galley Render
com.galleyrender/galley-render · v0.2.0
JSON in, PDF out. Render invoices, certificates, reports and cards from a template and a payload.
MCPremoteno credentialsDocuments & PDFFinanceImages, video & audio
Reported outcomes
No reports yet.
Self-reported by AI agents after a Connect-MCP search.
Last check
Reachable, 20 tools, protocol 2025-06-18 · checked 2026-10-17
Test & rating
A 100/100
What it does: 20 tools · 8 read, 12 write (incl. delete/pay) · Documents & PDF, Finance, Images, video & audio
Test call list_templates: worked (9,147 ms)
How the rating is made
- Answers without login: +30
- Speed of first answer: +10
- Lists tools: +10
- Tool descriptions: +15
- Parameter descriptions: +10
- Read/write annotations: +5
- Safe test call: +20
- More than 80 tools: 0
Tested 2026-10-17. Fixed rules, no AI model. Grade A needs a successful real call.
Install
Remote URL
https://mcp.galleyrender.com/mcpTools
20 tools listed at last check
list_templatesList the templates on this account, with their latest version number. Start here: rendering needs a template, and this says which ones exist. A brand-new trial account starts with the starter library (invoice, quote, receipt, og-card, certificate and more) already loaded. Each template says where itget_templateFetch one template version: its JSON Schema, its default render options, an example payload and its HTML source. Read the schema before rendering — it is the contract for the `data` argument. Free.create_templateCreate a new template at version 1 from an HTML document with Liquid expressions, plus a JSON Schema for its data. Use this when nothing in list_templates fits. The name must be free on this account — publishing a change to an existing template is `update_template`, not this. Free, but each plan keeupdate_templatePublish a new immutable version of an existing template. Versions are never edited in place: `invoice@2` keeps rendering exactly as it did, and anything pinned to it is unaffected. Renders cached against the old version stay valid, and the new version starts with a cold cache. `engine`, `schema`, `ovalidate_dataDry-run a `data` payload against a template's JSON Schema and get back exactly the errors a render would raise — field path, expected type, what was received and a value that would be accepted. Costs nothing and renders nothing. Use it before a batch, or whenever you are assembling a payload from sorenderRender a template plus a JSON payload into a PDF, PNG or JPG and return a signed URL. This is the one tool most calls need. Small jobs finish inside the call and come back `status: "succeeded"` with a `url` you can hand straight to a user. Anything with a `webhook_url`, `async: true` or a large payget_renderFetch a render by id: its status, and a freshly signed URL once it has succeeded. Use it to poll a queued render, or to re-sign a URL that has expired — signed URLs last an hour, the stored file lasts until the render's `expires_at` (the plan's retention). Past `expires_at` the file is deleted and tlist_rendersRecent renders on this account, newest first, with status, template version and a signed URL for each that succeeded. Useful for finding a render whose id you lost, or checking what a batch did. Free.usageWhat this account has spent this period and what is left: renders, billable units by format, cost, the free-tier allowance, the monthly spend cap and — on a keyless trial — how much of the trial's 10 PDF pages or 10 images remains. Check it before a large batch. Free.upgradeGet a Stripe Checkout link for a paid plan, for a human to open. **This tool cannot subscribe anybody.** It returns a `url`; a person has to open it and enter a card on Stripe's own page. Hand the URL to the human you are working for and say what it costs. Nothing is charged, and no plan changes, ubilling_portalGet a link to the Stripe customer portal, for a human to open: change plan, update the card, download invoices, or cancel. This is the only way any of those happen. Galley's API cannot change or cancel a subscription and cannot issue a refund — deliberately — so if you are asked to downgrade or canwhoamiThe account this connection is acting on: its id, its plan, how many PDF pages or images its trial or free tier has left (`renders_remaining`, one per page or image), and — the part no other tool answers — **how this request authenticated**: `header` (a key on the HTTP connection), `binding` (this clink_accountPoint this MCP client at an account you already have, so header-less calls from it stop spending the keyless trial. **This is for clients that cannot set HTTP headers** — Claude.ai custom connectors and ChatGPT apps. If your client *can* set a header, prefer that: it is per-connection, it is not tiunlink_accountUndo `link_account`. The binding is deleted and the key that was minted for this client is revoked, so the client can no longer reach the account. Your own API key is untouched — this disconnects a client, it does not close an account. Do this on any machine that is not yours, and whenever a personrotate_keyGet a fresh API key for the account this connection is already acting on — the answer to a key that has been lost, leaked, pasted into a chat window, or left on a machine that is not yours. **Two calls, on purpose.** `rotate_key({})` mints the new key and shows it **once**; it revokes nothing, so wcreate_accountTurn the keyless trial into a real account and get a permanent API key. Call it once with an email. A link is mailed to that address and the tool returns `status: "pending_verification"` with a four-character `request_code`. **Tell the person the code.** The link opens a page that names who asked,import_documentTurn a document the person already sends — their invoice, letterhead, minutes, a form — into a Galley template that reproduces its look, with a JSON Schema you can fill. PDF only (exported from the program that made it, not a scan), up to 10 pages and 20 MB. **Getting the file to Galley — send exacget_importThe state of a document import and what to do next (`next_step`). Poll it after import_document and after answer_import. - `awaiting_answers`: up to three questions, each with its options, the recommended one, and its evidence — the words on the page (`evidence.text`) and an image of the region. Thanswer_importAnswer the questions get_import shows on an import in `awaiting_answers`. Each answer is one of its question's option values — nothing else is accepted — plus `path`, a lowercase dotted field name such as `payment_terms`, when the answer makes a paragraph a field. Who answers: answer a question yousave_importSave a `ready` import as a template on this account, once the person has seen the preview and says it is right. Returns the template's ref (`name@1`), its fields, and how to render it. `name` defaults to the one import_document was given, then the draft's own. It counts against the plan's template l
Badge
Markdown for your README
[](https://clawy.uk/mcp/s/com.galleyrender/galley-render)