Is the Galleyrender Galley Render MCP server down?

mcp-registry/com.galleyrender/galley-render · v0.2.0

healthy
Last checked 2026-10-26 12:52 UTC · handshake 84ms

As of 2026-10-26 12:52 UTC, the Galleyrender Galley Render MCP server is up with a Glimind reliability score of 100/100 (grade A). Over the last 30 days it answered 100% of Glimind's liveness checks.

uptime (30d checks)
100%
checks observed
4,886
outages (90d)
0
tools
20

JSON in, PDF out. Render invoices, certificates, reports and cards from a template and a payload.

Install Galleyrender Galley Render MCP server

Add to Cursor Add to VS Code

Claude Code

claude mcp add --transport http galleyrender-galley-render-mcp-server https://mcp.galleyrender.com/mcp

Claude Desktop · Windsurf · Cline (mcpServers JSON)

{
  "mcpServers": {
    "galleyrender-galley-render-mcp-server": {
      "type": "http",
      "url": "https://mcp.galleyrender.com/mcp"
    }
  }
}

Third-party server, listed as discovered. Review its source before installing.

Agent-readiness: B (88/100)

B (88/100): 0 error(s), 3 warning(s) across 20 tool(s); ~8,742 tokens of tool definitions.
Scores higher than 64% of 15,750 MCP servers Glimind has audited.
Its tool list costs an agent ~8,742 tokens per session — more than 65% of servers.
85 → 88 since 2026-10-17
no tool-poisoning patterns
Schemas80
Descriptions100
Safety hints86
Token cost85
Client compatibility70
Protocol100
Reliability100
Stability92

What to fix (5)

2 tool definition(s) exceed ~1,200 tokens each (largest: create_template, ~1,393).

Move long reference material out of descriptions (link a doc or expose a resource), drop repeated examples, and collapse large enums. Trimming these to ~600 tokens saves ~1,471 tokens every session. How to fix →

Tools: create_template, update_template · saves ~1,471 tokens/session

4 tool(s) have parameters with no type (no type/enum/anyOf/$ref).

Give every parameter a "type" (or "enum"/"anyOf"). Untyped parameters make models guess — strings for numbers, objects for arrays. How to fix →

Tools: create_template, render, update_template, validate_data

1 tool(s) look like they change state (create/send/delete/pay…) but declare no destructiveHint.

Set annotations {"readOnlyHint": false, "destructiveHint": true|false, "idempotentHint": …}. Clients use these to ask the user before a side effect and to auto-approve safe reads. How to fix →

Tools: validate_data

No tool declares an outputSchema.

Declare outputSchema and return structuredContent (MCP 2025-06-18+). Agents can then parse results without guessing, and chain tools reliably. How to fix →

In the last 30 days: 0 tool(s) removed and 2 schema change(s).

Add new tools or optional parameters instead of renaming or removing; deprecate first (say so in the description) and remove later. Agents cache tool contracts. How to fix →

Auto-fix: 4 corrected tool definitions

Paste-ready definitions with the problems above fixed. Changes marked verify need a human look. All of them as JSON: /v1/readiness/mcp-registry%2Fcom.galleyrender%2Fgalley-render/fixes

create_template 1 change
{
  "name": "create_template",
  "description": "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 keeps a limited number of templates of your own (the starter library never counts): at the limit this returns `plan_required` with how many the account has, and `update_template` still works.",
  "inputSchema": {
    "type": "object",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "required": [
      "name",
      "source"
    ],
    "properties": {
      "name": {
        "type": "string",
        "pattern": "^[a-z0-9][a-z0-9._-]{0,62}$",
        "examples": [
          "invoice",
          "delivery-note"
        ],
        "description": "Template name: lowercase letters, digits, dot, dash or underscore, 1-63 characters. Unique per account. Versions are separate — do not put `@1` here."
      },
      "engine": {
        "enum": [
          "chromium",
          "satori"
        ],
        "type": "string",
        "description": "Rendering engine. `chromium` (default) is full HTML and CSS and is required for PDF. `satori` is a fast PNG path for simple flexbox card layouts — no page breaks, no floats, no external CSS — and costs us less, so prefer it for OG images and social cards."
      },
      "schema": {
        "type": "object",
        "examples": [
          {
            "type": "object",
            "required": [
              "title"
            ],
            "properties": {
              "title": {
                "type": "string",
                "description": "Headline, one line"
              }
            }
          }
        ],
        "description": "JSON Schema (2020-12) for the `data` payload this template accepts. Strongly recommended: it is what turns a bad payload into a field-level error with a path, an expected type and a working example instead of a blank page. Use `required` and give each property a `description`.",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      },
      "source": {
        "type": "string",
        "examples": [
          "<html><body><h1>{{ title }}</h1></body></html>"
        ],
        "minLength": 1,
        "description": "One self-contained HTML document with inline CSS and Liquid expressions (`{{ customer.name }}`, `{% for line in line_items %}`). No file includes: everything the render needs must be in this string, or at a public https URL. Two extra filters ship by default: `money` and `date_medium`. For a PDF, use `@page { size: Letter; margin: 18mm }` to control pagination."
      },
      "example": {
        "description": "A payload that renders correctly. It is echoed back in validation errors, so include one.",
        "type": "string"
      },
      "message": {
        "type": "string",
        "description": "Change note for this version, like a commit message."
      },
      "options": {
        "type": "object",
        "properties": {
          "css": {
            "type": "string",
            "description": "Extra CSS appended after the template's own styles."
          },
          "scale": {
            "type": "number",
            "maximum": 3,
            "minimum": 0.1,
            "description": "Device pixel ratio for png/jpg, 0.1-3. Use 2 for retina."
          },
          "width": {
            "type": "integer",
            "maximum": 9007199254740991,
            "description": "Viewport width in px for png/jpg. Default 1200.",
            "exclusiveMinimum": 0
          },
          "height": {
            "type": "integer",
            "maximum": 9007199254740991,
            "description": "Viewport height in px for png/jpg. Default 630.",
            "exclusiveMinimum": 0
          },
          "margin": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "object",
                "properties": {
                  "top": {
                    "type": [
                      "string",
                      "number"
                    ]
                  },
                  "left": {
                    "type": [
                      "string",
                      "number"
                    ]
                  },
                  "right": {
                    "type": [
                      "string",
                      "number"
                    ]
                  },
                  "bottom": {
                    "type": [
                      "string",
                      "number"
                    ]
                  }
                }
              }
            ],
            "description": "PDF margins, CSS lengths in `in`, `px`, `cm` or `mm`: `18mm`, or per side. A bare number is px."
          },
          "quality": {
            "type": "integer",
            "maximum": 100,
            "minimum": 1,
            "description": "jpg only, 1-100. Default 90."
          },
          "full_page": {
            "type": "boolean",
            "description": "png/jpg: capture the whole document instead of the viewport."
          },
          "landscape": {
            "type": "boolean",
            "description": "PDF only. Default false."
          },
          "page_size": {
            "type": "string",
            "description": "PDF page size: `Letter`, `A4`, `Legal`, or `210mm x 297mm`."
          },
          "background": {
            "type": "string",
            "description": "CSS colour painted under the document, e.g. `#ffffff`."
          },
          "on_blocked_asset": {
            "enum": [
              "fail",
              "skip"
            ],
            "type": "string",
            "description": "What to do when an image or font the template asks for is refused by the egress policy or fails to fetch. `fail` (the default) fails the render with `asset_blocked` naming the URL; `skip` drops the asset and renders without it. Use `skip` only for decorative assets."
          },
          "print_background": {
            "type": "boolean",
            "description": "PDF: print background colours and images. Default true."
          }
        },
        "description": "Render options, merged over the template's own defaults. Options are part of the cache key, so two calls that differ only here are two different renders."
      },
      "description": {
        "type": "string",
        "description": "One line on what this template is for. Shown in list_templates."
      },
      "expected_pages": {
        "type": "integer",
        "maximum": 2000,
        "minimum": 1,
        "description": "How many PDF pages a typical payload renders. Default 1. This is the estimate the free tier and the spend cap are checked against before the render starts, so a template that runs to several pages must say so or a render that cannot fit the allowance will be started and then go over. It is not a limit: the render is billed on the pages it actually produced."
      }
    }
  },
  "annotations": {
    "readOnlyHint": false,
    "openWorldHint": true,
    "idempotentHint": false,
    "destructiveHint": false
  },
  "title": "Create a template"
}
render 1 change
{
  "name": "render",
  "description": "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.\n\nSmall 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 payload comes back `status: \"queued\"` with an id for get_render.\n\nRenders are deterministic and cached: the same template version, data and options return the stored object with `cached: true`, free and ",
  "inputSchema": {
    "type": "object",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "required": [
      "template",
      "data"
    ],
    "properties": {
      "data": {
        "description": "The JSON payload for the template, matching its schema. Call get_template for the schema, or validate_data to dry-run a payload for free. If get_template shows a `lang` property in the schema, add `lang` (a BCP 47 tag such as `fi` or `pt-BR`) for the reader's language, and `labels` (key to text) to reword single strings. Do not send them to a template whose schema lacks them: they are unknown fields there (a warning on an open schema, a 422 on a closed one).",
        "type": "string"
      },
      "async": {
        "type": "boolean",
        "description": "Force the queued path even for a small job. Default false: small jobs finish inside the call and come back with a URL already."
      },
      "format": {
        "enum": [
          "pdf",
          "png",
          "jpg",
          "jpeg"
        ],
        "type": "string",
        "description": "Output format. Defaults to `pdf` for chromium templates and `png` for satori ones. `webp` is not supported in v1."
      },
      "options": {
        "type": "object",
        "properties": {
          "css": {
            "type": "string",
            "description": "Extra CSS appended after the template's own styles."
          },
          "scale": {
            "type": "number",
            "maximum": 3,
            "minimum": 0.1,
            "description": "Device pixel ratio for png/jpg, 0.1-3. Use 2 for retina."
          },
          "width": {
            "type": "integer",
            "maximum": 9007199254740991,
            "description": "Viewport width in px for png/jpg. Default 1200.",
            "exclusiveMinimum": 0
          },
          "height": {
            "type": "integer",
            "maximum": 9007199254740991,
            "description": "Viewport height in px for png/jpg. Default 630.",
            "exclusiveMinimum": 0
          },
          "margin": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "object",
                "properties": {
                  "top": {
                    "type": [
                      "string",
                      "number"
                    ]
                  },
                  "left": {
                    "type": [
                      "string",
                      "number"
                    ]
                  },
                  "right": {
                    "type": [
                      "string",
                      "number"
                    ]
                  },
                  "bottom": {
                    "type": [
                      "string",
                      "number"
                    ]
                  }
                }
              }
            ],
            "description": "PDF margins, CSS lengths in `in`, `px`, `cm` or `mm`: `18mm`, or per side. A bare number is px."
          },
          "quality": {
            "type": "integer",
            "maximum": 100,
            "minimum": 1,
            "description": "jpg only, 1-100. Default 90."
          },
          "full_page": {
            "type": "boolean",
            "description": "png/jpg: capture the whole document instead of the viewport."
          },
          "landscape": {
            "type": "boolean",
            "description": "PDF only. Default false."
          },
          "page_size": {
            "type": "string",
            "description": "PDF page size: `Letter`, `A4`, `Legal`, or `210mm x 297mm`."
          },
          "background": {
            "type": "string",
            "description": "CSS colour painted under the document, e.g. `#ffffff`."
          },
          "on_blocked_asset": {
            "enum": [
              "fail",
              "skip"
            ],
            "type": "string",
            "description": "What to do when an image or font the template asks for is refused by the egress policy or fails to fetch. `fail` (the default) fails the render with `asset_blocked` naming the URL; `skip` drops the asset and renders without it. Use `skip` only for decorative assets."
          },
          "print_background": {
            "type": "boolean",
            "description": "PDF: print background colours and images. Default true."
          }
        },
        "description": "Render options, merged over the template's own defaults. Options are part of the cache key, so two calls that differ only here are two different renders."
      },
      "template": {
        "type": "string",
        "examples": [
          "invoice",
          "invoice@3"
        ],
        "minLength": 1,
        "description": "Template to use: `invoice` for the latest version, or `invoice@3` to pin version 3. Pin the version in anything you ship — a new version changes the output and the cache key. Call list_templates to see what this account has."
      },
      "webhook_url": {
        "type": "string",
        "examples": [
          "https://example.com/hooks/galley"
        ],
        "description": "Absolute https URL to POST the finished render to. Supplying one forces the queued path: the call returns immediately with status `queued`."
      }
    }
  },
  "annotations": {
    "readOnlyHint": false,
    "openWorldHint": true,
    "idempotentHint": true,
    "destructiveHint": false
  },
  "title": "Render a document"
}
update_template 1 change
{
  "name": "update_template",
  "description": "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`, `options` and `example` are inherited from the previous version unless you send them, so a source-only change needs only `template` and `source`. Free.",
  "inputSchema": {
    "type": "object",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "required": [
      "template",
      "source"
    ],
    "properties": {
      "engine": {
        "enum": [
          "chromium",
          "satori"
        ],
        "type": "string",
        "description": "Engine for the new version. Inherited from the previous version when omitted."
      },
      "schema": {
        "type": "object",
        "examples": [
          {
            "type": "object",
            "required": [
              "title"
            ],
            "properties": {
              "title": {
                "type": "string",
                "description": "Headline, one line"
              }
            }
          }
        ],
        "description": "JSON Schema for the `data` payload. Inherited from the previous version when omitted — send `{}` only if you really want a version that validates nothing.",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      },
      "source": {
        "type": "string",
        "examples": [
          "<html><body><h1>{{ title }}</h1></body></html>"
        ],
        "minLength": 1,
        "description": "One self-contained HTML document with inline CSS and Liquid expressions (`{{ customer.name }}`, `{% for line in line_items %}`). No file includes: everything the render needs must be in this string, or at a public https URL. Two extra filters ship by default: `money` and `date_medium`. For a PDF, use `@page { size: Letter; margin: 18mm }` to control pagination."
      },
      "example": {
        "description": "A payload that renders correctly under the new version. Inherited when omitted.",
        "type": "string"
      },
      "message": {
        "type": "string",
        "description": "Change note for this version, like a commit message."
      },
      "options": {
        "type": "object",
        "properties": {
          "css": {
            "type": "string",
            "description": "Extra CSS appended after the template's own styles."
          },
          "scale": {
            "type": "number",
            "maximum": 3,
            "minimum": 0.1,
            "description": "Device pixel ratio for png/jpg, 0.1-3. Use 2 for retina."
          },
          "width": {
            "type": "integer",
            "maximum": 9007199254740991,
            "description": "Viewport width in px for png/jpg. Default 1200.",
            "exclusiveMinimum": 0
          },
          "height": {
            "type": "integer",
            "maximum": 9007199254740991,
            "description": "Viewport height in px for png/jpg. Default 630.",
            "exclusiveMinimum": 0
          },
          "margin": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "object",
                "properties": {
                  "top": {
                    "type": [
                      "string",
                      "number"
                    ]
                  },
                  "left": {
                    "type": [
                      "string",
                      "number"
                    ]
                  },
                  "right": {
                    "type": [
                      "string",
                      "number"
                    ]
                  },
                  "bottom": {
                    "type": [
                      "string",
                      "number"
                    ]
                  }
                }
              }
            ],
            "description": "PDF margins, CSS lengths in `in`, `px`, `cm` or `mm`: `18mm`, or per side. A bare number is px."
          },
          "quality": {
            "type": "integer",
            "maximum": 100,
            "minimum": 1,
            "description": "jpg only, 1-100. Default 90."
          },
          "full_page": {
            "type": "boolean",
            "description": "png/jpg: capture the whole document instead of the viewport."
          },
          "landscape": {
            "type": "boolean",
            "description": "PDF only. Default false."
          },
          "page_size": {
            "type": "string",
            "description": "PDF page size: `Letter`, `A4`, `Legal`, or `210mm x 297mm`."
          },
          "background": {
            "type": "string",
            "description": "CSS colour painted under the document, e.g. `#ffffff`."
          },
          "on_blocked_asset": {
            "enum": [
              "fail",
              "skip"
            ],
            "type": "string",
            "description": "What to do when an image or font the template asks for is refused by the egress policy or fails to fetch. `fail` (the default) fails the render with `asset_blocked` naming the URL; `skip` drops the asset and renders without it. Use `skip` only for decorative assets."
          },
          "print_background": {
            "type": "boolean",
            "description": "PDF: print background colours and images. Default true."
          }
        },
        "description": "Default render options. Inherited from the previous version when omitted."
      },
      "template": {
        "type": "string",
        "pattern": "^[a-z0-9][a-z0-9._-]{0,62}$",
        "examples": [
          "invoice",
          "delivery-note"
        ],
        "description": "Name of an existing template. A new immutable version is published; earlier versions keep rendering, so anything pinned to `name@2` is unaffected."
      },
      "description": {
        "type": "string",
        "description": "Replaces the template description."
      },
      "expected_pages": {
        "type": "integer",
        "maximum": 2000,
        "minimum": 1,
        "description": "How many PDF pages a typical payload renders. Inherited from the previous version when omitted. This is the estimate the free tier and the spend cap are checked against before the render starts, so a template that runs to several pages must say so or a render that cannot fit the allowance will be started and then go over. It is not a limit: the render is billed on the pages it actually produced."
      }
    }
  },
  "annotations": {
    "readOnlyHint": false,
    "openWorldHint": true,
    "idempotentHint": false,
    "destructiveHint": false
  },
  "title": "Publish a new template version"
}

Get alerted

Get an email or webhook when this server's readiness drops by 10+ points, tool-poisoning text appears, or a tool breaks:

curl -X POST https://glimind.com/v1/subscriptions -H 'content-type: application/json' -d '{"tools":["mcp-registry/com.galleyrender/galley-render"],"email":"[email protected]"}'

Agents: watch_tool({"toolId": "mcp-registry/com.galleyrender/galley-render"}) over MCP.

Passed

Largest tool definitions

Static checks of the advertised tools/list (schema, descriptions, annotations, tool-poisoning patterns, names, size) plus observed protocol, uptime, latency and contract changes. Read-only: no tool is ever called. Weights: schema 15, docs 20, safety 15, efficiency 15, compatibility 15, protocol 5, reliability 10, stability 5. Token counts are estimates (~3.6 characters per token).

Operator? Fix these, then re-check live. Embed the readiness badge:

Markdown
[![MCP agent-readiness](https://glimind.com/v1/readiness/badge/mcp-registry%2Fcom.galleyrender%2Fgalley-render.svg)](https://glimind.com/server/mcp-registry%2Fcom.galleyrender%2Fgalley-render?ref=badge)
HTML
<a href="https://glimind.com/server/mcp-registry%2Fcom.galleyrender%2Fgalley-render?ref=badge"><img src="https://glimind.com/v1/readiness/badge/mcp-registry%2Fcom.galleyrender%2Fgalley-render.svg" alt="MCP agent-readiness"></a>
reStructuredText
.. image:: https://glimind.com/v1/readiness/badge/mcp-registry%2Fcom.galleyrender%2Fgalley-render.svg
   :target: https://glimind.com/server/mcp-registry%2Fcom.galleyrender%2Fgalley-render?ref=badge
   :alt: MCP agent-readiness

Tool-definition log

Glimind records every version of this server's tool definitions in a signed, append-only transparency log. Current manifest sha256:a4acf732a2bb0c53…, first seen 2026-10-17, included at leaf 615 of 72,943. Version history · verify what your client received.

Tools (20)

Compare: most reliable other servers · most reliable payments servers · most reliable productivity servers · most reliable media servers · most reliable knowledge servers

Know before your agent calls it

Glimind tells agents whether a server is up right now and how to call it, then fails over to a live alternative when it isn't.

Add Glimind — free, no signup:

Add to Cursor Add to VS Code

Claude Code

claude mcp add --transport http glimind https://glimind.com/mcp

Claude Desktop · Windsurf · Cline (mcpServers JSON)

{
  "mcpServers": {
    "glimind": {
      "type": "http",
      "url": "https://glimind.com/mcp"
    }
  }
}

FAQ

Is the Galleyrender Galley Render MCP server down right now?

As of 2026-10-26 12:52 UTC, the Galleyrender Galley Render MCP server is up with a Glimind reliability score of 100/100 (grade A). Over the last 30 days it answered 100% of Glimind's liveness checks.

How many tools does Galleyrender Galley Render MCP server provide?

Galleyrender Galley Render MCP server advertises 20 tools, including answer_import, billing_portal, create_account, create_template, get_import.

How do I install Galleyrender Galley Render MCP server?

Point your MCP client at this streamable-http endpoint: https://mcp.galleyrender.com/mcp

Is the Galleyrender Galley Render MCP server safe to connect to an AI agent?

Glimind scanned all 20 tool definitions for tool-poisoning patterns — hidden or invisible characters, instructions that override the model, concealment from the user, requests to read credential or MCP config files, conversation exfiltration and cross-tool shadowing — and found none. This checks what the server tells the model, not what its code does; review the source before granting access to sensitive data.

Operator of Galleyrender Galley Render MCP server?

Status page: 90-day uptime, every outage and how long it lasted.

Claim this listing to get the Verified operator marker, a remediation checklist and owner analytics, or embed the live badge from any of the tool pages above. Maintainers: alerts, deploy attestation and monthly reports.

Status is an automated estimate from Glimind's liveness checks (handshake and tool listing only; no tool is ever called) and may lag or differ from your network. Glimind is not affiliated with this server or its operator. Operator? Request a correction or opt out at https://glimind.com/opt-out.

Feedback
Help us improve