remarkable-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@remarkable-mcpList my notebooks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
remarkable-mcp
Give an AI assistant direct control of your reMarkable tablet — list notes, upload PDFs, export handwriting, write on pages — over SSH.
The assistant gets one MCP tool, remarkable_execute, and writes a short JavaScript snippet that calls rme.* (list, mkdir, write, export, …) in one shot.
You have | This project is |
A reMarkable with developer mode | An MCP server |
SSH over USB ( | stdio or Streamable HTTP (Docker) |
Claude / Cursor / VS Code / any MCP client | SFTP into the tablet’s xochitl library |
How it works
MCP client this process tablet
─────────── ──────────── ──────
remarkable_execute({ node:vm sandbox SSH/SFTP
code: `async () => { → rme.list / rme.mkdir / … → /home/root/.local/share/remarkable/xochitl
await rme.mkdir(…)
return await rme.list({})
}`
})Enable Settings → General → Developer mode on the tablet.
SSH in over USB (
root@10.11.99.1) or Wi‑Fi (IP under About → Copyrights).Run this server. Point your MCP client at it.
Related MCP server: remark-mcp
Install
pnpm install
pnpm buildNode 22+. pnpm is required.
Local (stdio)
Most desktop MCP clients spawn a process. Add this (Claude Desktop, Cursor, VS Code, …):
{
"mcpServers": {
"remarkable": {
"command": "node",
"args": ["/absolute/path/to/remarkable-mcp/dist/index.js"],
"env": {
"REMARKABLE_HOST": "10.11.99.1",
"REMARKABLE_USER": "root",
"REMARKABLE_PASSWORD": "your-tablet-password"
}
}
}
}Prefer a key? Set REMARKABLE_KEY to a private-key path (or the PEM). If unset, ~/.ssh/id_ed25519 then id_rsa are tried.
HTTP / Docker
Same server, Streamable HTTP on /mcp:
pnpm start:http
# → http://127.0.0.1:8080/mcp health: /healthdocker compose up --build
# bind 0.0.0.0:8080, pass REMARKABLE_* in the environmentWhat the model can do
The client only lists remarkable_execute. Inside the snippet, methods live on rme.
async () => {
const folder = await rme.mkdir({ name: "Projects" });
await rme.createNotebook({ name: "Ideas", parent: folder.id });
await rme.writeText({
notebook: "Ideas",
newPage: true,
blocks: [
{ text: "Ship it", style: "title" },
{ text: "Talk to design", style: "checkbox" },
],
});
await rme.writeText({ notebook: "Ideas", text: "Write the RFC", style: "checkbox" });
return await rme.read({ notebook: "Ideas", page: 2 });
}A notebook is the file (name, path /Work/Notes, or UUID). A page is 1-based inside that notebook. writeText always writes native Type Folio text and appends — call it again to stack more paragraphs. Ink points are [x, y] in 0–1 from the top-left. remove moves to trash. Writes restart xochitl so the UI refreshes.
| What it does |
| Library listing (trash hidden by default) |
| One folder, or a single notebook |
| Name / path search, optional tag |
| Id, path, type, tags, page count, |
| Native paragraphs (and checkbox state), or all pages if |
| Raw PDF/EPUB as base64 |
| Ink on a page → |
| Put a PDF or EPUB on the tablet |
| Folders and trash |
| Notebooks and pages |
| Pen / highlighter strokes |
| Native Type Folio: |
| Notebook or page tags |
| Restart xochitl |
Configuration
Flags and env vars are interchangeable (--host ≡ REMARKABLE_HOST).
Tablet | Default | |
|
| SSH host (USB default) |
|
| SSH user |
|
| SSH port |
| Password | |
|
| Key path or PEM |
Server | Default | |
| off | Streamable HTTP instead of stdio |
|
| Bind address ( |
|
| HTTP port |
| off | In-memory tablet (tests, no device) |
| Local directory treated as a xochitl tree |
Agent skill
Installable with skills.sh:
npx skills add <this-repo>The skill lives at skills/remarkable-mcp/SKILL.md.
Develop
pnpm test
pnpm exec tsx src/index.ts --fake
pnpm exec tsx src/index.ts --fake --http --http-port 8080Tests use a fake tablet filesystem. A live device is never required.
Inspired by sammorrowdrums/remarkable-mcp and itsfabioroma/remarkable-cli.
MIT. See LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityBmaintenanceEnables AI agents to remotely read/write files and execute commands on Linux servers via MCP protocol.4MIT
- Alicense-qualityDmaintenanceEnables AI assistants to browse and read documents from a reMarkable tablet connected via USB, rendering PDF pages as images for the AI to see.Apache 2.0
- AlicenseAqualityCmaintenanceMCP server that connects AI assistants to your reMarkable tablet, enabling reading, searching, and traversing handwritten and typed notes via OCR.102MIT
- AlicenseAqualityCmaintenanceAn MCP server that gives Claude direct access to your reMarkable tablet's notebooks, enabling document search, PDF rendering, handwriting transcription, and diagram conversion, all locally without API keys.63MIT
Related MCP Connectors
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.
MCP-native collaborative markdown editor with real-time AI document editing
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/lukaisailovic/remarkable-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server