Skip to main content
Glama
lukaisailovic

remarkable-mcp

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoAlternate setting for the HTTP port.8080
MCP_HTTPNoSet to '1' to enable Streamable HTTP mode instead of stdio.off
MCP_HTTP_HOSTNoBind address for the HTTP server.127.0.0.1
MCP_HTTP_PORTNoHTTP port for the server.8080
REMARKABLE_KEYNoPath to a private key (or PEM content) for SSH authentication. If unset, ~/.ssh/id_ed25519 then id_rsa are tried.
REMARKABLE_FAKENoSet to '1' to use an in-memory fake tablet (for testing).off
REMARKABLE_HOSTNoSSH host of the reMarkable tablet.10.11.99.1
REMARKABLE_PORTNoSSH port.22
REMARKABLE_USERNoSSH user.root
REMARKABLE_FAKE_DIRNoLocal directory treated as a xochitl tree when using fake mode.
REMARKABLE_PASSWORDNoSSH password for the tablet.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
remarkable_executeA

Run JavaScript against the reMarkable API (SSH tablet or rmfakecloud).

declare const rme: { list(args): Promise; // List notebooks, PDFs, EPUBs, and folders. Trash is hidden unless includeTrash is true. browse(args): Promise; // Browse one folder path (default /). Opening a notebook returns that item. search(args): Promise; // Search by notebook name or path, optionally filtered by tag. info(args): Promise; // Notebook/folder/PDF info. Notebooks include pages[].title from the first typed line. read(args): Promise; // Read a notebook page (native paragraphs + checkbox state). Omit page to read every page. PDFs/EPUBs return extracted text. download(args): Promise; // Download the raw PDF or EPUB as base64. exportPage(args): Promise; // Render ink on a notebook page to PNG or SVG (base64). Does not render typed text. upload(args): Promise; // Upload a PDF or EPUB (base64) into a folder. mkdir(args): Promise; // Create a folder. move(args): Promise; // Move a notebook or folder into another folder (folder: "/" for root). rename(args): Promise; // Rename a notebook or folder. remove(args): Promise; // Move a notebook or folder to trash. createNotebook(args): Promise; // Create a blank notebook with one page. addPage(args): Promise; // Append (or insert after N) a blank notebook page. Returns the new 1-based page number. removePage(args): Promise; // Delete a 1-based notebook page. writeInk(args): Promise; // Append pen/highlighter strokes to a page. Points are [x,y] in 0–1 from the top-left. writeMermaid(args): Promise; // Draw a Mermaid diagram as ink (flowchart, sequence, state, class, ER, xychart). Renders to SVG then strokes. pie/gantt/etc. error. writeText(args): Promise; // Append native Type Folio text to a notebook page (default: last page). style: title (big), heading, body (small), bullet, checkbox. checked:true ticks a checkbox. blocks: mixed styles in one call. replace:true overwrites typed text (ink stays). newPage:true adds a blank page first. Repeated calls stack as new paragraphs. tag(args): Promise; // Add or remove a notebook tag (or a page tag when page is set). tags(args): Promise; // List every tag used on the tablet. refresh(args): Promise; // Restart xochitl so the tablet UI reloads the library. };

Write an async arrow function. No TypeScript syntax. Example: async () => { const docs = await rme.list({}); return docs; }

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 1 tool

Disambiguation1/5

All functionality is bundled into a single tool with a polymorphic 'rme' object offering many methods, making it impossible for an agent to select a specific operation without inspecting the runtime API. The tool description describes numerous distinct actions, but as a single tool it obscures boundaries and forces arbitrary disambiguation at runtime.

Naming Consistency1/5

The tool itself is named 'remarkable_execute' while its methods use a mix of verb forms (list, read, download, exportPage, writeInk, etc.) and inconsistent naming styles (e.g., exportPage camelCase vs. others snake-like? Actually all methods are camelCase but the tool name is snake_case, and verb-noun pattern is inconsistent: 'list', 'browse', 'info', 'read' are verbs without nouns, while 'createNotebook', 'addPage', 'writeMermaid' have nouns. The mixture of generic verbs and specific compound names lacks a coherent pattern.

Tool Count2/5

With only one entry point for a rich API covering file operations, reading, writing ink, exports, and tags, the tool count is far too low for the scope. A single mega-tool burdens the agent with parsing and routing, and the server would benefit from splitting into separate tools per operation.

Completeness4/5

The bundled operations cover a broad lifecycle: listing, browsing, search, info, read, download, export, upload, mkdir, move, rename, remove, notebook creation, page manipulation, writing ink/text/Mermaid, tagging, and refresh. Missing operations like bulk exports or custom storage sync are minor; the surface is quite comprehensive for typical reMarkable workflows.

Maintenance

ActivitySlowing
ResponsivenessNo issues