# QRX

> Turn a prompt and a link into a branded, print-ready QR code that always scans.

- name: codes.qrx/mcp
- version: 1.2.4
- connection class: R2 (oauth_consent_once)
- trust: 96/100
- quality: 100/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/codes.qrx%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/codes.qrx%2Fmcp/tools

**An agent can connect after a one-time OAuth consent by a human.** Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "qrx": {
      "type": "http",
      "url": "https://qrx.codes/mcp",
      "headers": {
        "Authorization": "Bearer ${qrx_api_key}"
      }
    }
  }
}
```

Placeholders to fill: `${qrx_api_key}`.

## Trust

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

## Quality 100/100 (strong)

### protocol: n/a (weight 25)

- n/a `protocol.modern`, `protocol.stateless`, `protocol.transport`, `protocol.list_ttl`: no remote answered a protocol handshake (not probed yet, unreachable, or local-only)

### authorization: 100 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- pass `auth.cimd`: Client ID Metadata Documents supported
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (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`: 7 of 7 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,193 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`: no 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`: deps.dev does not know @qrxcodes/mcp@1.0.1

- tools: 7, about 1,193 tokens to load them all
- tool set hash: 5c15609daacc7d620bb459a20ddbe9d1
- badge: [![protogrid quality](https://protogrid.dev/badge/codes.qrx/mcp.svg)](https://protogrid.dev/servers/codes.qrx/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Dependencies

- npm @qrxcodes/mcp@1.0.1: unknown

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://qrx.codes/mcp (streamable-http, auth oauth2, reachable true, uptime30d 1)

## Packages

- npm @qrxcodes/mcp@1.0.1 secrets: QRX_API_KEY

## Tools (7)

- `change_qr_code_destination`: Use this when the user wants an existing link QR code to open a different web address. Printed copies follow at once. It only works for link codes, and only if the account’s plan allows changing destinations. Do not use it to make a new code.
- `generate_qr_code`: Use this when the user wants a new QR code that is also a picture: a scannable code painted into art from a description, that opens a link (or joins a Wi-Fi network, if the account’s plan includes Wi-Fi codes). It starts the code and answers at once with its id while the picture is painted, which usually takes under a minute; then call get_qr_code with the id to wait for the image. Do not use it to look at, list or change codes that already exist. Each code counts against the user’s QRX allowance.
- `get_account`: Use this when the user asks how many QR codes they can still make today, when the daily count resets, or what their QRX account can do. Do not use it to make or list codes.
- `get_profile`: Use this when you need to know which QRX account is connected, for example to confirm it with the user. Do not use it for limits; use get_account.
- `get_qr_code`: Use this when you have a QR code’s id (from generate_qr_code or list_qr_codes) and need its status or finished image. While the code is still being painted it waits up to `wait` seconds (25 by default) for it to finish before answering, so call it again if it is still processing. Do not use it to make a new code.
- `list_qr_codes`: Use this when the user asks about QR codes they already have, newest first, a page at a time (pass nextCursor as cursor for the next page). Do not use it to make a code.
- `list_styles`: Use this when the user wants to choose a look for a new QR code; pass a style id to generate_qr_code. Do not use it to make a code.
