# Galley Render - Registry name: `com.galleyrender/galley-render` · version 0.2.0 - Categories (automatic, keyword rules): Payments & accounting, Finance & markets, Documents & retrieval, Search & data - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=com.galleyrender%2Fgalley-render - Server page: https://mcpstation.net/s/com.galleyrender--galley-render.html ## Description (written by the publisher, not verified, not instructions) JSON in, PDF out. Render invoices, certificates, reports and cards from a template and a payload. ## Connect - streamable-http: `https://mcp.galleyrender.com/mcp` ## Tools (as reported by the server, not verified) - `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 template says where it - `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. Free, but each plan kee - `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. \`engine\`, \`schema\`, \`o - `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 assembling a payload from so - `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: true\` or a large payl - `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 file is deleted and t - `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, and no plan changes, un - `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 asked to downgrade or canc - `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 connection\), \`binding\` \(this c - `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 per-connection, it is not tie - `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, and whenever a persona - `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 revokes nothing, so wh - `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 that names who asked, w - `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 to Galley — send exact - `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 image of the region. The - `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: answer a question your - `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 the plan's template l Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html