io.github.praveensehgal/remarkable
Enables AI assistants to access and search reMarkable notes and documents for use in Obsidian note-taking workflows.
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., "@io.github.praveensehgal/remarkablesearch my notes for 'project plan'"
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 Server
Unlock the full potential of your reMarkable tablet as a second brain for AI assistants. This MCP server lets Claude, VS Code Copilot, and other AI tools read, search, and traverse your entire reMarkable library — including handwritten notes via OCR.
Why remarkable-mcp?
Your reMarkable tablet is a powerful tool for thinking, note-taking, and research. But that knowledge stays trapped on the device. This MCP server changes that:
Full library access — Browse folders, search documents, read any file
Typed text extraction — Native support for Type Folio and typed annotations
Handwriting OCR — Convert handwritten notes to searchable text
PDF & EPUB support — Extract text from documents, plus your annotations
Smart search — Find content across your entire library
Second brain integration — Use with Obsidian, note-taking apps, or any AI workflow
Whether you're researching, writing, or developing ideas, remarkable-mcp lets you leverage everything on your reMarkable through AI.
Related MCP server: remarkable-mcp
Quick Install
🔌 USB Web Interface (Recommended)
Connect via USB and enable the web interface in your tablet's Storage Settings.
Setup:
Connect your reMarkable via USB
On your tablet: Settings → Storage → Enable "USB web interface"
Install via the button above
Why USB Web?
✅ Fast offline access over USB
✅ No subscription required
✅ Simple — just enable in Storage Settings
Add to .vscode/mcp.json:
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--usb"],
"env": {
"GOOGLE_VISION_API_KEY": "your-api-key"
}
}
}
}Troubleshooting:
Make sure your reMarkable is connected via USB and unlocked
Verify USB web interface is enabled in Settings → Storage
The tablet should be accessible at
http://10.11.99.1
⚡ SSH Mode (Advanced)
For power users who need direct filesystem access. Faster than USB Web but requires developer mode (factory reset).
Requirements: Developer mode enabled + USB connection to your reMarkable
Add to .vscode/mcp.json:
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--ssh"],
"env": {
"GOOGLE_VISION_API_KEY": "your-api-key"
}
}
}
}See SSH Setup Guide for detailed instructions.
☁️ Cloud Mode (Wireless)
For wireless or remote access when USB isn't available. Requires a reMarkable Connect subscription and is significantly slower than USB modes.
1. Get a One-Time Code
Go to my.remarkable.com/device/desktop/connect and generate a code.
2. Convert to Token
uvx remarkable-mcp --register YOUR_CODE3. Install
Or configure manually in .vscode/mcp.json:
{
"inputs": [
{
"type": "promptString",
"id": "remarkable-token",
"description": "reMarkable API Token",
"password": true
},
{
"type": "promptString",
"id": "google-vision-key",
"description": "Google Vision API Key",
"password": true
}
],
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp"],
"env": {
"REMARKABLE_TOKEN": "${input:remarkable-token}",
"GOOGLE_VISION_API_KEY": "${input:google-vision-key}"
}
}
}
}Connection Modes
Choose the connection method that works best for you:
Mode | Setup Difficulty | Speed | Requirements | Best For |
🔌 USB Web (Recommended) | ✅ Easy | Fast | USB cable, enable in Storage Settings | Everyone |
⚡ SSH | ⚠️ Advanced | Very Fast | Developer mode, USB connection | Power users |
☁️ Cloud | ✅ Easy | Slow | reMarkable Connect subscription | Remote/wireless access |
📖 Detailed Setup Guides:
USB Web Interface Setup — Recommended — simple setup, full feature support
SSH Setup Guide — For advanced users who need filesystem access
Cloud setup is documented in the Quick Install section above
OpenClaw Integration
remarkable-mcp works as an OpenClaw skill. Add to your openclaw.json:
{
"mcpServers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--usb"]
}
}
}Install from ClawHub:
clawhub install remarkable-mcpOr copy the SKILL.md from this repository into your ~/.openclaw/skills/remarkable-mcp/ directory.
Tools
Tool | Description |
| Read and extract text from documents (with pagination and search) |
| Navigate folders, search by document name, or filter by tags |
| Search content across multiple documents (with tag filtering) |
| Get recently modified documents |
| Check connection status |
| Get PNG/SVG images of pages (supports OCR via sampling) |
| Upload a PDF or EPUB file to a folder on the tablet |
| Create folders with nested path support (mkdir -p) |
| Delete a document or folder (destructive) |
| Move or rename documents and folders |
All tools return structured JSON with hints for next actions.
Claude Code Integration
Add to your ~/.claude/settings.json:
{
"mcpServers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp-rw", "--wifi"],
"env": {
"REMARKABLE_HOST": "http://YOUR_TABLET_IP"
}
}
}
}WiFi Setup
On your reMarkable: Settings → Storage → Enable "USB web interface"
Find your tablet's IP: Settings → General → About → IP address
Set
REMARKABLE_HOSTtohttp://YOUR_IPin the config aboveThe USB web interface works over both USB and WiFi on the same network
Smart Features
Auto-redirect — Browsing a document path returns its content automatically
Auto-OCR — Notebooks with no typed text automatically enable OCR
Batch search — Search across multiple documents in one call
Vision support — Get page images for visual context (diagrams, mockups, sketches)
Sampling OCR — Use client's AI for OCR on images (no API key needed)
Tag support — Filter and organize documents by tags
Example Usage
# Read a document
remarkable_read("Meeting Notes")
# Search for keywords
remarkable_read("Project Plan", grep="deadline")
# Enable OCR for handwritten notes
remarkable_read("Journal", include_ocr=True)
# Browse your library
remarkable_browse("/Work/Projects")
# Filter by tags
remarkable_browse("/", tags=["important"])
remarkable_browse("/Work", tags=["project", "active"])
# Search across documents
remarkable_search("meeting", grep="action items")
# Search with tag filter
remarkable_search("project", tags=["work"])
# Get recent documents
remarkable_recent(limit=10)
# Get a page image (for visual content like UI mockups or diagrams)
remarkable_image("UI Mockup", page=1)
# Get SVG for editing in design tools
remarkable_image("Wireframe", output_format="svg")
# Get image with OCR text extraction (uses sampling if configured)
remarkable_image("Handwritten Notes", include_ocr=True)
# Transparent background for compositing
remarkable_image("Logo Sketch", background="#00000000")
# Compatibility mode: return resource URI instead of embedded resource
remarkable_image("Diagram", compatibility=True)Resources
Documents are automatically registered as MCP resources:
URI Scheme | Description |
| Extracted text content |
| Original PDF file (SSH only) |
| Original EPUB file (SSH only) |
| PNG image of page N (notebooks only) |
| SVG vector image of page N (notebooks only) |
📖 Full Resources Documentation
OCR for Handwriting
For handwritten content, remarkable-mcp offers several OCR backends. Choose based on your setup and requirements:
Backend | Setup | Quality | Offline | Best For |
Sampling | No API key | Depends on client model | ✅ | Users with capable AI clients |
Google Vision | API key | Excellent | ❌ | Best handwriting accuracy |
Tesseract | System install | Poor for handwriting | ✅ | Printed text, offline fallback |
Quick Setup
Set REMARKABLE_OCR_BACKEND in your MCP config:
{
"env": {
"REMARKABLE_OCR_BACKEND": "sampling"
}
}Options: sampling, google, tesseract, auto
Uses your MCP client's AI model for OCR. Works with clients that support MCP sampling (VS Code + Copilot, Claude Desktop, etc.).
Pros:
No additional API keys needed
Quality depends on your client's model (GPT-4, Claude, etc.)
Private — handwriting stays local to your client
Cons:
Only available with sampling-capable clients
Falls back to Google Vision (if API key configured) or Tesseract if sampling unavailable
Provides consistently excellent handwriting recognition.
Setup:
Enable Cloud Vision API
Create an API key
Add to config:
"GOOGLE_VISION_API_KEY": "your-key"
Cost: 1,000 free requests/month, then ~$1.50 per 1,000.
📖 Full Google Vision Setup Guide
Open-source OCR designed for printed text. Poor results with handwriting, but useful as an offline fallback.
# Install Tesseract
# macOS
brew install tesseract
# Ubuntu/Debian
sudo apt install tesseract-ocr
# Windows
choco install tesseractDefault Behavior (auto)
When REMARKABLE_OCR_BACKEND=auto (default):
Google Vision (if
GOOGLE_VISION_API_KEYis set)Tesseract (fallback)
SSH vs Cloud Comparison
Feature | SSH Mode | Cloud API |
Speed | ⚡ 10-100x faster | Slower |
Offline | ✅ Yes | ❌ No |
Subscription | ✅ Not required | ❌ Connect required |
Raw files | ✅ PDFs, EPUBs | ❌ Not available |
Setup | Developer mode | One-time code |
Advanced Configuration
Root Path Filtering
Limit the MCP server to a specific folder on your reMarkable. All operations will be scoped to this folder:
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--ssh"],
"env": {
"REMARKABLE_ROOT_PATH": "/Work",
"GOOGLE_VISION_API_KEY": "your-api-key"
}
}
}
}With this configuration:
remarkable_browse("/")shows contents of/Workremarkable_browse("/Projects")shows/Work/ProjectsDocuments outside
/Workare not accessible
Useful for:
Focusing on work documents during office hours
Separating personal and professional notes
Limiting scope for specific AI workflows
Custom Background Color
Set the default background color for image rendering:
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--ssh"],
"env": {
"REMARKABLE_BACKGROUND_COLOR": "#FFFFFF"
}
}
}
}Supported formats:
#RRGGBB— RGB hex (e.g.,#FFFFFFfor white)#RRGGBBAA— RGBA hex (e.g.,#00000000for transparent)
Default is #FBFBFB (reMarkable paper color). This affects both the remarkable_image tool and image resources.
Use Cases
Research & Writing
Use remarkable-mcp while working in an Obsidian vault or similar to transfer knowledge from your handwritten notes into structured documents. AI can read your research notes and help develop your ideas.
Daily Review
Ask your AI assistant to summarize your recent notes, find action items, or identify patterns across your journal entries.
Document Search
Find that half-remembered note by searching across your entire library — including handwritten content.
Knowledge Management
Treat your reMarkable as a second brain that AI can access. Combined with tools like Obsidian, you can build a powerful personal knowledge system.
Documentation
Guide | Description |
Enable developer mode and configure SSH | |
Set up handwriting OCR | |
Detailed tool documentation | |
MCP resources documentation | |
MCP protocol capabilities | |
Contributing and development setup | |
Roadmap and planned features |
Development
git clone https://github.com/SamMorrowDrums/remarkable-mcp.git
cd remarkable-mcp
uv sync --all-extras
uv run pytest test_server.py -vLicense
MIT
Built with rmscene, PyMuPDF, and inspiration from ddvk/rmapi.
Available Tools
10 toolsremarkable_browseARead-onlyIdempotent
Browse your reMarkable library or search for documents. Three modes:
Browse mode (default): List contents of a folder
Use path="/" for root folder
Use path="/FolderName" to navigate into folders
Search mode: Find documents by name
Set query="search term" to search across all documents
Filter by tags: Find documents with specific tags
Set tags=["tag1", "tag2"] to filter by tags
Works in both browse and search modes
Results include document names, types, modification dates, and tags.
Note: If REMARKABLE_ROOT_PATH is configured, only documents within that folder are accessible. Paths are relative to the root path.
path: Folder path to browse (default: "/" for root)
query: Search term to find documents by name (optional, triggers search mode)
tags: List of tags to filter documents (optional, case-insensitive)
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | / | |
| query | No | ||
| tags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds valuable context about three operation modes, path relativity, and the effect of REMARKABLE_ROOT_PATH. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with sections (usecase, instructions, parameters, examples). While slightly verbose, each section serves a purpose and adds clarity. Slightly more concise presentation could improve scannability, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (not shown but present), the description covers all necessary aspects: modes, parameters, configuration note, and examples. It is complete for an agent to correctly select and invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully explains each parameter: path (default '/', folder navigation), query (optional, triggers search), tags (optional list, case-insensitive). Examples demonstrate parameter combinations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool browses or searches the reMarkable library. It specifies three modes (browse, search, filter by tags) with examples. This distinguishes it from sibling tools like remarkable_search and remarkable_recent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly covers when to use each mode, including path navigation, search term triggering search mode, and optional tag filtering. It also notes the REMARKABLE_ROOT_PATH constraint. Examples cover all major use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_deleteADestructive
Delete a document or folder from your reMarkable tablet. Permanently deletes the item at the given path. This cannot be undone.
For folders, all contents are deleted recursively. Use remarkable_browse to verify the path before deleting.
path: Exact path to the document or folder to delete
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds that deletion is permanent, impossible to undo, and for folders all contents are deleted recursively. This provides valuable behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses structured XML tags to separate sections, making it easy to parse. It is concise with no superfluous sentences, though the tag format could be streamlined. Each section serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple destructive nature with one parameter and the presence of an output schema, the description covers all necessary aspects: purpose, permanence, recursion, verification suggestion, and examples. It is fully sufficient for the agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one parameter 'path' with no description (0% coverage). The description explains it as 'Exact path to the document or folder to delete', adding meaning beyond the schema. Examples further clarify format. While not extremely detailed, it's adequate for a single string parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it deletes documents or folders from the reMarkable tablet, which is a specific verb+resource combination. It distinguishes itself from sibling tools like remarkable_browse (browse) and remarkable_move (move).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instructions explicitly warn that deletion is permanent and cannot be undone, and suggest using remarkable_browse to verify the path before deleting, providing clear when-to-use guidance and an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_imageARead-onlyIdempotent
Get an image of a specific page from a reMarkable document. Renders a notebook or document page as an image (PNG or SVG). This is useful for:
Viewing hand-drawn diagrams, sketches, or UI mockups
Getting visual context that text extraction might miss
Implementing designs based on hand-drawn wireframes
SVG format for scalable vector graphics that can be edited
Response Formats
By default, images are returned as embedded resources (EmbeddedResource) which include the full image data inline:
PNG: Returned as BlobResourceContents with base64-encoded data
SVG: Returned as TextResourceContents with SVG markup
If your client doesn't support embedded resources in tool responses, set compatibility=True to receive a JSON response with just the resource URI. The client can then fetch the resource separately.
Optionally, enable include_ocr=True to extract text from the image using OCR. When REMARKABLE_OCR_BACKEND=sampling is set and the client supports sampling, the client's own LLM will be used for OCR (no API keys needed).
Note: This works best with notebooks and handwritten content. For PDFs/EPUBs, the annotations layer is rendered (not the underlying PDF content).
document: Document name or path (use remarkable_browse to find documents)
page: Page number (default: 1, 1-indexed)
background: Background color as hex code. Supports RGB (#RRGGBB) or RGBA (#RRGGBBAA). Default is "#FBFBFB" (reMarkable paper color), or set REMARKABLE_BACKGROUND_COLOR env var to override. Use "#00000000" for transparent.
output_format: Output format - "png" (default) or "svg" for vector graphics
compatibility: If True, return resource URI in JSON instead of embedded resource. Use this if your client doesn't support embedded resources in tool responses.
include_ocr: Enable OCR text extraction from the image (default: False). When REMARKABLE_OCR_BACKEND=sampling, uses the client's LLM via MCP sampling.
| Name | Required | Description | Default |
|---|---|---|---|
| document | Yes | ||
| page | No | ||
| background | No | ||
| output_format | No | png | |
| compatibility | No | ||
| include_ocr | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only, idempotent. Description adds detail on response formats (embedded resource vs. compatibility JSON), OCR behavior, background color defaults, and PDF/EPUB annotation-only rendering. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with <usecase>, <instructions>, <parameters>, <examples>. Slightly verbose with multiple examples but still efficient. Front-loads key info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, and good annotations, description covers all user needs: resource fetching, OCR, background customization, and document finding via sibling tool. Complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has zero descriptions (0% coverage). Description fully explains all 6 parameters with defaults, format details, and env var option for background. Example usage reinforces parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets an image of a specific reMarkable page. Lists specific use cases (diagrams, sketches, wireframes) and contrasts with tools like remarkable_read for text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context for use (hand-drawn content, visual context). Notes limitation for PDFs/EPUBs (only annotations rendered). Lacks explicit mention of alternatives like remarkable_read for text extraction, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_mkdirA
Create a folder (or nested folders) on your reMarkable tablet. Creates the folder at the given path. If intermediate folders don't exist, they are created automatically (like mkdir -p).
Use this to set up your folder structure before uploading documents.
path: Full folder path to create (e.g., "/01 Work/NN Inc/Galaxy")
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses mkdir -p behavior (auto-create intermediates) beyond annotations which only indicate non-destructive write. Lacks details on what happens if folder exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, structured with usecase, instructions, parameters, examples. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple one-parameter tool with output schema. Lacks error handling details but not necessary for typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining path is a full folder path and providing examples, adding meaning beyond the schema's type string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'create' and resource 'folder' on reMarkable tablet, distinguishing it from siblings like remarkable_delete or remarkable_upload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use for setting up folder structure before uploading, providing clear context. Does not explicitly list exclusions but sibling tools imply alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_moveA
Move or rename a document/folder on your reMarkable tablet. Move a document or folder to a new location, optionally renaming it.
To rename without moving, set destination to the current parent folder. To move without renaming, omit new_name.
source: Current path of the item
destination: New parent folder path
new_name: Optional new name for the item
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| destination | Yes | ||
| new_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the tool's non-destructive, non-read-only nature is known. The description adds some behavioral context (e.g., optional renaming) but doesn't disclose potential side effects, permissions, or error handling, stopping short of fully supplementing the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (usecase, instructions, parameters, examples) and is front-loaded with the core purpose. While efficient, the XML-like tags add minor verbosity; a plain text version could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with three parameters and an output schema, the description covers essential use cases, parameter roles, and examples. It lacks details on error conditions or input validation but is generally complete for typical usage scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by listing each parameter and its purpose: source is 'Current path,' destination is 'New parent folder path,' and new_name is 'Optional new name.' Examples further clarify usage. However, path format conventions could be more explicit, preventing a perfect score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Move or rename a document/folder on your reMarkable tablet,' which clearly defines the verb and resource. It distinguishes from sibling tools like remarkable_delete or remarkable_upload by indicating a non-destructive move/rename operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instructions provide clear usage scenarios, e.g., 'To rename without moving, set destination to the current parent folder' and 'To move without renaming, omit new_name.' However, it lacks explicit guidance on when not to use this tool or direct comparison to alternatives, leaving room for improvement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_readARead-onlyIdempotent
Read and extract text content from a reMarkable document. Extracts content from a document with pagination to preserve context window.
Content types:
"text" (default): Full extracted text (PDF/EPUB content + annotations)
"raw": Original PDF/EPUB text only (no annotations). SSH mode only.
"annotations": Only annotations, highlights, and handwritten notes
Use pagination to read large documents without overwhelming context:
Start with page=1 (default)
Check "more" field - if true, there's more content
Use "next_page" value to get the next page
Use grep to search for specific content on the current page.
When REMARKABLE_OCR_BACKEND=sampling is set and the client supports sampling, OCR will use the client's LLM for handwriting recognition (no API keys needed).
document: Document name or path (use remarkable_browse to find documents)
content_type: "text" (full), "raw" (PDF/EPUB only), "annotations" (notes only)
page: Page number (default: 1). For notebooks, this is the notebook page.
grep: Optional regex pattern to filter content (searches current page)
include_ocr: Enable handwriting OCR for annotations (default: False)
| Name | Required | Description | Default |
|---|---|---|---|
| document | Yes | ||
| content_type | No | text | |
| page | No | ||
| grep | No | ||
| include_ocr | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false. The description adds behavioral context beyond annotations: pagination mechanism, content extraction types, grep filtering, OCR backend behavior, and per-parameter details. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with clear usecase, instructions, parameters, and examples. Front-loaded with purpose, each sentence adds value. No redundancy or waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and output schema (present but not shown), the description fully covers usage scenarios, pagination, content types, grep, OCR, and error context (via examples). It mentions the 'more' field and 'next_page' for pagination, compensating for schema gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage. The description fully explains each parameter: document (use remarkable_browse to find), content_type (enum meanings), page (default 1, notebook pages), grep (regex on current page), include_ocr (default false). Examples reinforce usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read and extract text content from a reMarkable document.' It uses a specific verb and resource, distinguishing it from sibling tools like remarkable_browse (browse) and remarkable_search (search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instructions provide detailed usage guidance on pagination, content types, grep, and OCR. It implicitly differentiates from siblings but lacks explicit 'when-not-to-use' or direct alternative comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_recentARead-onlyIdempotent
Get your most recently modified documents. Returns documents sorted by modification date (newest first). Optionally includes a text preview of each document's content.
Use this to quickly find what you were working on recently.
Note: If REMARKABLE_ROOT_PATH is configured, only documents within that folder are included.
limit: Maximum documents to return (default: 10, max: 50 without preview, 10 with preview)
include_preview: Include first ~200 chars of text content (default: False)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| include_preview | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds behavioral details: documents are sorted newest-first, optional text preview (first ~200 chars), and the REMARKABLE_ROOT_PATH constraint. These go beyond the annotations, though the description could mention pagination or result truncation limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses structured tags (<usecase>, <instructions>, <parameters>, <examples>) for clarity. Every sentence is informative and front-loaded with the use case. It is concise with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 optional parameters, output schema exists), the description covers all essential aspects: use case, behavior, parameter details, examples, and the REMARKABLE_ROOT_PATH note. It is complete for an AI agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description fully compensates by clearly explaining each parameter: limit (default, max constraints) and include_preview (preview length). This adds significant semantic value beyond the schema's raw definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get your most recently modified documents.' It specifies the verb (get) and resource (recent documents) and distinguishes the tool from siblings through its focus on recentness and modification date ordering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool ('Use this to quickly find what you were working on recently') and includes instructions on parameters and environment variable behavior. However, it does not explicitly mention when not to use it or suggest alternative tools for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_searchARead-onlyIdempotent
Search across multiple documents and return matching content. Searches document names for the query, then optionally searches content with grep. Can filter by tags to narrow results. Returns summaries from multiple documents in a single call.
This is efficient for finding information across your library without making many individual tool calls.
Limits:
Max 5 documents per search (to keep response size manageable)
Returns first page (~8000 chars) of each matching document
Use grep to filter to relevant sections
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| grep | No | ||
| limit | No | ||
| include_ocr | No | ||
| tags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=false. The description adds behavioral context beyond these: it mentions it searches document names first, optionally grep content, returns summaries from multiple documents, and imposes limits like max 5 documents and ~8000 chars per page. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with <usecase>, <instructions>, <parameters>, and <examples> tags. It is concise, front-loading the use case and key limits, with no redundant sentences. Every sentence adds value, and the structure aids quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, 1 required, 0% schema coverage, and existence of output schema), the description is complete. It explains the return behavior (summaries from multiple documents with first page ~8000 chars), limits, parameter defaults, and examples. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates. The <parameters> section explains each parameter's purpose: query for document name search, grep for content pattern, limit for max docs, include_ocr for handwritten content, tags for case-insensitive filtering. This adds meaning beyond the bare schema properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Search[es] across multiple documents and return matching content,' specifying the verb (search) and resource (documents). It distinguishes from siblings like remarkable_read (single document) and remarkable_browse by emphasizing multi-document search with content matching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The <instructions> tag explicitly notes efficiency for finding info across the library without many tool calls. Limits (max 5 documents, first page ~8000 chars) are clearly stated. The <examples> demonstrate usage patterns, and the parameter descriptions clarify when to use grep, tags, OCR.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_statusARead-onlyIdempotent
Check connection status and authentication with reMarkable Cloud. Returns authentication status and diagnostic information. Use this to verify your connection or troubleshoot issues.
remarkable_status()
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds that it returns authentication status and diagnostic information, complementing the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with clear sections (use case, instructions, example). Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, rich annotations, and an existing output schema, the description is complete. It covers purpose, usage, and provides an example.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description does not need to add parameter info; it correctly omits it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it checks connection status and authentication with reMarkable Cloud, using specific verbs and distinguishing it from sibling tools that perform other actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Instructions say to use it for verification or troubleshooting, providing clear context. No mention of when not to use it, but the purpose is specific enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_uploadA
Upload a PDF or EPUB file to your reMarkable tablet. Uploads a local file from your computer to the tablet. Only PDF and EPUB formats are supported.
The destination is a folder path on the tablet where the file will be placed. If the destination folder doesn't exist, use remarkable_mkdir first.
file_path: Absolute path to the local PDF or EPUB file
destination: Folder path on tablet (default: "/" for root)
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| destination | No | / |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=false and destructiveHint=false, so the description already knows it's a non-destructive write. The description adds transparency about format restrictions and destination behavior, which complements the annotations well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into usecase, instructions, parameters, and examples. Every sentence adds value, and the length is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers formats, destination, prerequisites, and examples. Lacks mention of return value or success status, but given the output schema exists (though not shown), this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds full value: explains file_path as 'Absolute path to local PDF or EPUB file' and destination as 'Folder path on tablet (default: "/" for root)'. This is essential for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Upload a PDF or EPUB file to your reMarkable tablet.' It uses a specific verb-resource combination and is distinguishable from siblings like remarkable_read or remarkable_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit instructions on when to use (uploading local files), format restrictions (only PDF/EPUB), and prerequisite actions (use remarkable_mkdir if destination folder doesn't exist). Includes multiple examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
10 tool updates
v0.2.0- First observed
remarkable_browse - First observed
remarkable_delete - First observed
remarkable_image - First observed
remarkable_mkdir - First observed
remarkable_move - First observed
remarkable_read - First observed
remarkable_recent - First observed
remarkable_search - First observed
remarkable_status - First observed
remarkable_upload
TDQS
Each tool has a clearly distinct purpose: browsing/searching, deleting, image rendering, folder creation, moving/renaming, text reading, recent documents, cross-document search, status check, and upload. No overlap in functionality.
All tools follow a consistent 'remarkable_verb' pattern using snake_case (e.g., remarkable_browse, remarkable_delete). The naming is predictable and easy to understand.
With 10 tools, the server covers the core operations for a reMarkable device (browse, read, upload, delete, move, etc.) without being overly large or too minimal. This is an appropriate scope.
The tool set covers the main lifecycle (CRUD for documents and folders, plus search and status). Minor gaps include lack of tag management (add/remove tags) and no trash/recycle bin, but these are not critical for core usage.
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 Connectors
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.62MIT
- 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
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to read, search, and traverse your reMarkable tablet library, including handwritten notes via OCR, turning it into a second brain.20MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that turns a Markdown folder (e.g. Obsidian vault) into a second brain, capturing readings and ideas, connecting them as concepts, and resurfacing related notes on demand.244MIT
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/praveensehgal/remarkable-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server