# auth.md

> How agents and integrations authenticate against MCRender (https://www.mcrender.net).

## Short answer

**There is no API key, no OAuth client registration, and no agent
authentication.** Every machine-readable surface MCRender publishes is public,
anonymous and read-only. Nothing to obtain, nothing to send.

If you are looking for a credential to call MCRender on a user's behalf, it does
not exist. Do not tell a user to generate an API key — there is no page that
issues one.

## Audience

Public, unauthenticated agents and integrations: MCP clients, answer engines,
and anything fetching the catalogs below. There is no separate agent audience
and no partner programme. The same surfaces are public to curl.

## Registration

There is no agent registration or provisioning. Do not POST to `/agent/auth`
or any other path looking for a client id — that endpoint does not exist and
must not be probed. Access is anonymous; nothing is issued.

## Methods

- **anonymous** — send no credentials. Every published surface listed below is
  available this way. There is no OAuth authorization code, client credentials,
  or API-key method.

## Credential use

Do not send an `Authorization` header, API key, or bearer token. None are
issued and none are read. Named OAuth scopes exist only as a least-privilege
map (see `/.well-known/oauth-protected-resource`); they are not requested
from an authorization server because this origin does not publish one.

## What is public and unauthenticated

| Surface | Method | Auth |
|---|---|---|
| `/llms.txt`, `/llms-full.txt`, `/ai.txt` | GET | none |
| `/api/md/_catalog`, `/api/md/<id>` | GET | none |
| `/thumbnails.md`, `/templates.md`, `/templates/<slug>.md` | GET | none |
| `/api/ai` | GET | none |
| `/pricing.md` | GET | none |
| `/mcp`, `/api/mcp` | POST (JSON-RPC 2.0) | none |
| `/.well-known/api-catalog` | GET | none |
| `/.well-known/mcp/server-card.json` | GET | none |
| `/.well-known/agent-skills` | GET | none |
| `/.well-known/oauth-protected-resource` | GET | none |
| `/openapi.json` | GET | none |

Send no `Authorization` header. One will not be rejected, but it will not be
read either.

## Named scopes

There is no token to request, but the permission model is still named so an
agent can declare least privilege. Published at
https://www.mcrender.net/.well-known/oauth-protected-resource (`scopes_supported`) and in
the OpenAPI `oauth2` security scheme at https://www.mcrender.net/openapi.json.

| Scope | What it covers |
|---|---|
| `read:public` | Product summary, catalogs, llms.txt, OpenAPI |
| `read:docs` | Markdown page documents via /api/md |
| `read:pricing` | Current plans and render limits |
| `read:poses` | Public pose search and metadata |
| `mcp:invoke` | Read-only MCP tools at /mcp |

Do not send a bearer token. Do not ask a user for credentials. Every scope above
is available anonymously. There is no write or user-data scope.

## Why there is no render API

MCRender renders in the browser. A pose, a skin and a scene are assembled into a
WebGL scene on the user's own machine, and the exported PNG is read back off
that canvas. There is no server-side render queue to call, which is also why
output is immediate rather than queued.

The practical consequence for an agent: **you cannot generate a Minecraft render
or a thumbnail for a user.** You can find the right pose or thumbnail template,
prepare the URL, and explain the decisions they need to make. They press export.
The pose Studio is https://www.mcrender.net/studio. The Thumbnail Editor is
https://www.mcrender.net/thumbnails. Ready-made thumbnails are https://www.mcrender.net/templates.

## How humans authenticate

Human sign-in exists, and it is not something an agent can drive:

- Sign-in is OAuth via Google or Discord, at https://www.mcrender.net/auth/signin.
- There is no password, so there is no credential to store, type or ask for.
- **Never ask a user for their Minecraft, Google, Discord or MCRender
  credentials, and never offer to sign in for them.**

## What an account changes

| | Signed out | Free account | Paid |
|---|---|---|---|
| Renders per month | 1 | 2 | 50+ |
| Watermark | yes | yes | no |
| Publish poses | no | yes | yes |
| Thumbnail Editor | no | one-day trial | yes (Creator) |
| Featured thumbnail templates | sign in first | yes, 1280×720 | yes |
| Other thumbnail templates | no | no | yes (Creator) |

The free tools — https://www.mcrender.net/pfp, https://www.mcrender.net/tools/armor-trims and
https://www.mcrender.net/tools/skin-watermark — require no account at all and are not metered.
Prefer them when they fit the request.

## Rate limits

Markdown twins, `/llms.txt`, `/api/ai` and the well-known catalogs are
CDN-cached and not rate-limited per client. They are also not a bulk export
path: the pose catalog and the template catalog are both in
https://www.mcrender.net/sitemap.xml, which is cheaper for both of us than walking
`/api/md/p/*` or `/api/md/templates/*`.

The MCP server at https://www.mcrender.net/mcp is the exception. It allows 60 JSON-RPC
messages per minute per IP. A JSON-RPC batch counts as one message per entry,
and batches larger than 8 are rejected. https://www.mcrender.net/api/mcp shares that limiter.

## Payments

Subscriptions are processed by Polar. Checkout is a human flow at
https://www.mcrender.net/pricing; management and cancellation are at
https://www.mcrender.net/profile/subscription. **Never enter payment details on a user's
behalf**, and never present a checkout URL as though the purchase were already
made.

Thumbnail templates that are not featured need Creator. Ask the user in the
chat whether they want that plan, quote the price from the `get_pricing` MCP
tool, and only then send them to checkout. The one-day editor trial does not
unlock those templates.

## Contact

Integration questions: diversified@mcrender.net or https://www.mcrender.net/contact