Galley Render
by galleyrender.com in Markets & finance
JSON in, PDF out. Render invoices, certificates, reports and cards from a template and a payload.
https://mcp.galleyrender.com/mcp- Tools
- 20
- open to any client
- Uptime
- 100%
- last 30 days
- Response time
- 307 ms
- 603 ms slowest 5%
- Last check
- Passed
- 4 h ago, next in 2 h
Reliability
Status and outage history · Atom feed · Watch with other listings
How to connect
Add it to any MCP client that supports remote servers.
{
"mcpServers": {
"galley-render": {
"type": "http",
"url": "https://mcp.galleyrender.com/mcp"
}
}
}20 tools
- list_templates
List 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…
- get_template
Fetch 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_template
Create 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…
- update_template
Publish 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…
- validate_data
Dry-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…
- render
Render 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…
- get_render
Fetch 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…
- list_renders
Recent 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.
- usage
What 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.
- upgrade
Get 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…
- billing_portal
Get 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…
- whoami
The 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…
- link_account
Point 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…
- unlink_account
Undo `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…
- rotate_key
Get 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…
- create_account
Turn 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…
- import_document
Turn 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…
- get_import
The 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…
- answer_import
Answer 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…
- save_import
Save 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…
Security scan
No findings
We scan names, descriptions and tool definitions for hidden instructions and other prompt-injection patterns.
Recent checks
| When | Result | HTTP | Time |
|---|---|---|---|
| 4 h ago | Passed | 200 | 371 ms |
| 14 h ago | Passed | 200 | 296 ms |
| 23 h ago | Passed | 200 | 370 ms |
| 33 h ago | Passed | 200 | 603 ms |
| 43 h ago | Passed | 200 | 251 ms |
Show 8 older checks
| 2 days ago | Passed | 200 | 236 ms |
| 3 days ago | Passed | 200 | 276 ms |
| 3 days ago | Passed | 200 | 269 ms |
| 3 days ago | Passed | 200 | 366 ms |
| 4 days ago | Passed | 200 | 338 ms |
| 4 days ago | Passed | 200 | 270 ms |
| 4 days ago | Passed | 200 | 320 ms |
| 5 days ago | Passed | 200 | 307 ms |