# PrintSanity

> Checks AI-made flyers, cards and posters will print right. Fixes proportions and broken QR codes.

- name: io.github.chartsmartdev/printsanity
- version: 1.0.1
- connection class: R0 (autonomous)
- trust: 79/100 flags: no-repository
- quality: 89/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.chartsmartdev%2Fprintsanity
- tools: https://api.protogrid.dev/v1/servers/io.github.chartsmartdev%2Fprintsanity/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "printsanity": {
      "type": "http",
      "url": "https://printsanity.com/mcp",
      "headers": {
        "Authorization": "Bearer ${PRINTSANITY_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${PRINTSANITY_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 98
- freshness: 100
- provenance: 45
- drivers: +website +reachable +uptime-94% +updated-14d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 89/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 4 of 4 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: list_print_sizes (destructiveHint, idempotentHint); plan_artwork (destructiveHint, idempotentHint); fix_print_file (idempotentHint); …
- pass `tools.token_cost`: about 768 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 4 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 768 tokens to load them all
- tool set hash: 670f77c2ae920ec41acfb7b7f229810e
- tools last changed: 2026-10-07T09:41:55.056Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.chartsmartdev/printsanity.svg)](https://protogrid.dev/servers/io.github.chartsmartdev/printsanity)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-07 `fix_print_file` changed (annotations)
- 2026-10-07 `check_print_file` changed (annotations)
- 2026-10-07 `plan_artwork` changed (annotations)
- 2026-10-07 `list_print_sizes` changed (annotations)

Full history: https://api.protogrid.dev/v1/servers/io.github.chartsmartdev%2Fprintsanity/changes

## Remotes

- https://printsanity.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.9433962)

## Packages

_none_

## Tools (4)

- `check_print_file`: Check whether artwork will print correctly at the given size.

Give the artwork as file_url (public https link) or file_base64. `size` is required
for images. Returns the verdict, what is wrong, whether repair reaches a printable
file, and the prompt to regenerate with when it cannot.

- `fix_print_file`: Repair what can be repaired and return download links for the print-ready file.

Rebuilds QR codes so they scan, fixes proportions by adding paper rather than
cropping, and returns a PDF the size of the paper (inside a border a home printer can
reach, where the paper is one a home printer takes) plus a PNG and, where it differs,
an edge-to-edge PDF for print shops. For small pieces such as business cards and
invitations it also returns letter and A4 sheets with several copies and cut marks.
Links last 30 minutes. Resolution is never faked:
when that is the problem the result carries the prompt to regenerate with.

`qr_url` is the link a QR code should carry when the one on the artwork was drawn by
an image model and decodes to nothing.

- `list_print_sizes`: The named print sizes `size` accepts, with their dimensions.
- `plan_artwork`: What to ask an image model for, before generating artwork for this print size.

Returns the pixel dimensions to generate at, the floor below which it will look soft,
the proportions, the smallest QR code that scans from where this piece is read, and a
line to paste into the image prompt.

