# 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 |
| `/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
for a user.** You can find the right pose, prepare the URL, and explain the four
decisions they need to make. They press export.

## 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 |

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 is in https://www.mcrender.net/sitemap.xml, which is cheaper for both
of us than walking `/api/md/p/*`.

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.

## Contact

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