Klass-RM Uploader can run a local HTTP REST API and an MCP (Model Context Protocol) server on your Mac, so scripts and AI agents - Claude Code, Claude Desktop, and similar tools - can check status, list and create reMarkable folders, list documents, queue uploads, and poll upload status. It's the same pipeline the app's own UI uses, just reachable from outside the app.
The server only listens on 127.0.0.1 - it is never reachable from another device on your network.
Off by default. Requires a Pro license. Mac only.
Turning it on
Two things both have to be true for the server to run:
- A Pro license is active.
- The Run local API server toggle is on, in Settings > Advanced > Local API.
The server stops the moment either condition drops - including a license lapsing while the app is open.
API keys
Create, view, and revoke keys in Settings > Advanced > API Keys. A key's secret is shown once at creation, along with a ready-to-paste MCP client configuration snippet - it cannot be retrieved again afterward, so save it somewhere safe. Every request to the server must carry an Authorization: Bearer header with a valid key.
What requires Pro (once the server is running)
| Operation | Requires |
|---|---|
| Get account status | Nothing - works even without a license, so an unlicensed client can discover that fact |
| List folders, get upload status | Pro |
| Create folder, upload a file, upload a web page | Pro and a paired reMarkable account |
| List documents | Nothing - this is a deliberate exception, since it's a read-only, cache-only view of the same document list the free cloud file browser already shows |
The server as a whole still needs Pro to be running at all - this table only describes the per-request check once a Pro user has turned it on.
Uploading through the API
Uploads are enqueue-then-poll: queuing a file or web page returns a job ID right away, and you poll for its status rather than waiting for a synchronous result. A status response also reports the resolved destination - the folder's ID, name, and path, and whether the document actually landed there, is pending folder creation, or was just requested.
An unknown destination or parent folder ID on an upload or folder-creation request is rejected immediately with a clear error, instead of the upload silently proceeding and failing later.
A file can be sent as base64-encoded bytes, or - if it lives inside a configured Filesystem Root - by path, so a large local file never has to be re-encoded through a calling AI model's own output tokens. See the Filesystem Roots page.
A Notebook-format request that can't actually be honored (no Pro, no Connect, or the content simply can't become a notebook, like a PDF) still uploads as-is rather than failing - the response explains why via a downgradeReason field.
MCP tool names
MCP tools follow a Remarkable_*/Filesystem_* naming convention - for example Remarkable_listDocuments, Remarkable_uploadFile. REST routes are unaffected by this and stay the same either way. Older snake_case tool names still resolve for one release but are no longer advertised in the tool list - update any saved MCP client configuration to the new names.
Claude Desktop
Settings > Advanced > MCP Server has a one-click install for Claude Desktop - it installs a small bundled bridge that proxies to the same local MCP server described above. It adds no gate of its own: Claude Desktop is just another MCP client once the server is running under your existing Pro license and Local API toggle.
Reference documentation
The app has a built-in, read-only API reference covering every REST route and MCP tool - request and response shapes, authentication, and the gate each operation needs - plus a Save button to export the underlying OpenAPI spec as JSON. You do not need Pro just to view it. Find it from the Help screen's sidebar, or from either the Local API or MCP Server settings section.