rm-mcp
reMarkable MCP Server
解锁你的 reMarkable 平板作为 AI 助手的第二大脑的全部潜力。这个 MCP 服务器让 Claude、VS Code Copilot 和其他 AI 工具能够读取、搜索和遍历你整个 reMarkable 资料库——包括通过 OCR 识别手写笔记。
为什么选择 rm-mcp?
你的 reMarkable 平板是思考、笔记和研究的有力工具。但这些知识一直被困在设备里。这个 MCP 服务器改变了这一点:
完整资料库访问 — 浏览文件夹、搜索文档、读取任意文件
文本提取 — 原生支持 Type Folio 和打字注释
手写 OCR — 将手写笔记转换为可搜索的文本
PDF 与 EPUB 支持 — 从文档中提取文字,以及你的批注
智能搜索 — 在整个资料库中查找内容
整理资料库 — 重命名、移动和创建文件夹(绝不删除任何内容)
第二大脑集成 — 可与 Obsidian、笔记应用或任何 AI 工作流配合使用
无论你是在研究、写作还是构思,rm-mcp 都能让你通过 AI 充分利用 reMarkable 上的一切。
Related MCP server: io.github.praveensehgal/remarkable
快速安装
使用 reMarkable Cloud API。需要 reMarkable Connect 订阅。
一键设置(推荐)
uvx rm-mcp --setup这会在浏览器中打开页面,提示你输入一次性代码,并打印可直接粘贴到 Claude Code 和 Claude Desktop 的配置。
手动设置
1. 获取一次性代码
前往 my.remarkable.com/device/connect 并生成一个代码。
2. 转换为 Token
uvx rm-mcp --register YOUR_CODE3. 添加到 MCP 客户端
Claude Code:
claude mcp add remarkable \
-e REMARKABLE_TOKEN='<paste token from step 2>' \
-e REMARKABLE_OCR_BACKEND=sampling \
-- uvx rm-mcp@latestClaude Desktop — 添加到 claude_desktop_config.json(使用 uvx 的完整路径,例如通过 which uvx 获取):
{
"mcpServers": {
"remarkable": {
"command": "/Users/YOU/.local/bin/uvx",
"args": ["rm-mcp@latest"],
"env": {
"REMARKABLE_TOKEN": "<paste token from step 2>"
}
}
}
}工具
工具 | 说明 |
| 读取并提取文档中的文本(支持分页和搜索) |
| 浏览您的资料库中的文件夹 |
| 搜索多个文档中的内容 |
| 获取最近修改的文档 |
| 检查连接状态 |
| 获取页面的 PNG/SVG 图像(支持通过采样进行 OCR) |
所有工具均为只读,返回包含下一步操作提示的结构化 JSON。
I need to be careful about the ASCII art in GXP1 which represents a command. Let me check the source again for these placeholders...
Actually, looking at the source text more carefully:
GXP1 - placeholder for a code block
GXP2 - placeholder for code
GXP3 - placeholder for config
GXP4 - placeholder for config
GXP5 - placeholder for code example
GXP6 - placeholder for usage code
GXP7 - placeholder for config code
GXP8 - placeholder for config code
GXP9 - placeholder for development instructions
These should be preserved exactly as they are in the output.
Let me translate the document carefully now, following the structure.# reMarkable MCP 服务器
释放你 reMarkable 平板电脑的全部潜力,将其作为 AI 助手的第二大脑。这个 MCP 服务器让 Claude、VS Code Copilot 及其他 AI 工具能够读取、搜索并遍历你整个 reMarkable 资料库——包括通过 OCR 识别手写笔记。
为什么选择 rm-mcp?
你的 reMarkable 平板是思考、记笔记和研究的强大工具。但这些知识一直被困在设备里。这个 MCP 服务器改变了这一点:
完整资料库访问 — 浏览文件夹、搜索文档、读取任何文件
键入文本提取 — 原生支持 Type Folio 和键入注释
手写 OCR — 将手写笔记转换为可搜索的文本
PDF 与 EPUB 支持 — 从文档中提取文字,以及你的批注
智能搜索 — 在整个资料库中查找内容
整理资料库 — 重命名、移动和创建文件夹(绝不删除任何内容)
第二大脑集成 — 可用于 Obsidian、笔记应用或任何 AI 工作流
无论你是在研究、写作还是构思,rm-mcp 都能让你充分利用 reMarkable 上的所有内容。
快速安装
需要使用 reMarkable Cloud API。需要 reMarkable Connect 订阅。
一键安装
uvx rm-mcp --setup这将打开你的浏览器,提示输入一次性代码,并为 Claude Code 和 Claude Desktop 生成可直接使用的配置。
手动安装
1. 获取一次性代码
前往 my.remarkable.com/browser/connect 获取代码。
2. 转换为 Token
uvx rm-mcp --register YOUR_CODE3. 添加到你的 MCP 客户端
Claude Desktop — 编辑 claude_desktop_config.json(使用 uvx 的完整路径):
claude mcp add remarkable \
-e REMARKABLE_TOKEN='<paste token from step 2>' \
-e REMARKABLE_OCR_BACKEND=sampling \
-- uvx rm-mcp@latest工具
工具 | 描述 |
| 读取并提取文档文本(支持分页和搜索) |
| 浏览资料库中的文件夹 |
| 跨多个文档搜索内容 |
| 获取最近修改的文档 |
| 检查连接状态 |
| 获取 PNG/SVG 图像(支持通过采样实现 OCR) |
所有工具均为只读,返回结构化的 JSON,并包含下一步操作提示。
📖 完整工具文档
智能功能
多页读取 — 使用
page="all"或页码范围读取文档Grep 自动跳转 — 自动跳转到匹配页码
自动重定向 — 浏览文件夹时自动跳转到对应内容
自动 OCR — 无手写笔记的文档自动提取文本(可通过
include_ocr=False关闭)全文搜索 — 在多个文档中搜索内容
紧凑模式 — 减少响应中的 token 使用量
视觉支持 — 获取页面 PNG/SVG 图像(支持通过采样进行 OCR)
采样 OCR — 通过 MCP 采样调用客户端 LLM 识别手写内容(无需 API 密钥)
资源
URI 结构 | 说明 |
| 按路径获取文档或文件夹 |
| 获取特定页面内容 |
| 获取文档注释 |
📖 完整资源文档
OCR(光学字符识别)
本服务器支持采样 OCR — 通过 MCP 采样机制将手写笔记图像发送给客户端的 LLM(如 Claude)进行文本识别。无需 API 密钥。
工作原理
当你使用需要 OCR 的功能时,服务器会将页面图像通过 MCP 采样发送至你的客户端模型(Claude、GPT-4 等),模型识别手写内容并返回文本。
使用方法
# Read a document
remarkable_read("Meeting Notes")
# Read all pages at once
remarkable_read("Meeting Notes", pages="all")
# Read a range of pages
remarkable_read("Research Paper", pages="1-3")
# Search for keywords (auto-redirects to matching page)
remarkable_read("Project Plan", grep="deadline")
# Enable OCR for handwritten notes
remarkable_read("Journal", include_ocr=True)
# Browse your library
remarkable_browse("/Work/Projects")
# Search across documents
remarkable_search("meeting", grep="action items")
# Get recent documents with previews
remarkable_recent(limit=5, include_preview=True)
# Get a page image
remarkable_image("UI Mockup", page=1)
# Get image with OCR text extraction
remarkable_image("Handwritten Notes", include_ocr=True)高级配置
根路径过滤
将 MCP 服务器限定到 reMarkable 上的特定文件夹。所有操作都将限定在该文件夹内:
# OCR on a page image
remarkable_image("Handwritten Notes", include_ocr=True)
# OCR when reading a notebook
remarkable_read("Journal", include_ocr=True)配置示例:
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["rm-mcp"],
"env": {
"REMARKABLE_TOKEN": "your-token",
"REMARKABLE_ROOT_PATH": "/Work"
}
}
}
}适用于:
办公时间只关注工作文档
将个人笔记与工作笔记分开管理
为特定 AI 工作流限定范围
认证
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["rm-mcp"],
"env": {
"REMARKABLE_TOKEN": "your-token",
"REMARKABLE_BACKGROUND_COLOR": "#FFFFFF"
}
}
}
}使用 uvx rm-mcp 启动服务器时,通过环境变量提供认证信息:
变量 | 说明 |
| 重新标记云 API 令牌 |
使用场景
研究与写作
在 Obsidian 或类似笔记工具中使用 rm-mcp,可以将手写研究笔记转化为结构化文档。AI 可以读取你的研究笔记并帮助你推进想法。
每日回顾
让 AI 助手总结近期笔记、找出待办事项,或识别笔记中的模式。
文档搜索
通过跨整个资料库(包括手写内容)的搜索,找到那个模糊记得的笔记。
知识管理
将 reMarkable 视为 AI 可访问的第二大脑。结合 Obsidian 等工具,构建强大的个人知识管理系统。
文档
开发
{
"mcpServers": {
"remarkable": {
"command": "/Users/YOU/.local/bin/uvx",
"args": ["rm-mcp@latest"],
"env": {
"REMARKABLE_TOKEN": "<paste token from step 2>"
}
}
}
}📖 开发指南
许可证
MIT
基于 rmapi、PyMuPDF 和 librremarkable 构建。
Available Tools
9 toolsremarkable_browseARead-onlyIdempotent
Browse your reMarkable library folders. List contents of a folder on your reMarkable tablet.
Use path="/" for root folder
Use path="/FolderName" to navigate into folders
If you browse to a document path, it auto-redirects to remarkable_read
Results include document names, types, paths, and modification dates.
Note: If REMARKABLE_ROOT_PATH is configured, only documents within that folder are accessible. Paths are relative to the root path.
To search by name or content, use remarkable_search() instead.
path: Folder path to browse (default: "/" for root)
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | / | |
| compact_output | No |
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, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the auto-redirect to remarkable_read for document paths, the list of result fields (names, types, paths, dates), and the root-path scoping. It does not describe edge cases like empty folders or permission errors, but the core behavior is transparent.
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) and uses clear formatting. It is not overly verbose and every sentence adds value. It could be slightly tighter (e.g., merging the root path note into the path guidance), but the structure is effective and front-loads the core action.
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 output schema exists, the description need not explain return structure, and it does mention result fields anyway. It covers the primary path parameter and the auto-redirect behavior, which is important. However, the compact_output parameter is undocumented, and there is no mention of pagination or large-folder behavior. For a read-only browsing tool with two parameters, the missing parameter is a notable completeness 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?
The schema has two parameters: path and compact_output, but the description only documents path. The schema description coverage is 0% per context signals, so the description carries the full burden. It explains path usage with examples and defaults, but compact_output is completely omitted—an agent would not know it exists or what it does. This is a significant gap for one of two parameters.
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 opens with a clear usecase: 'Browse your reMarkable library folders' and explicitly states 'List contents of a folder on your reMarkable tablet.' It distinguishes itself from siblings by noting that browsing to a document path redirects to remarkable_read, and it names remarkable_search as the alternative for name/content search. The verb-resource pairing is specific and unambiguous.
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 usage instructions: how to use path for root and subfolders, the behavior of document paths (auto-redirect to read), and the REMARKABLE_ROOT_PATH constraint. It also directly points to remarkable_search() when searching is needed, giving clear when-to-use vs. when-not-to-use guidance. No alternative is left ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_create_folderA
Create a new empty folder on your reMarkable. Creates one folder. The parent folder must already exist — create nested folders one level at a time.
path: Full path of the folder to create, e.g. "/Work/Archive", or just a name to create it at the top level
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| compact_output | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (no idempotent, no destructive hints), so the description carries burden. It discloses the parent-existence requirement and the one-level-at-a-time limitation. It does not state behavior on duplicate folder names or parent missing (e.g., error handling). It also omits the compact_output parameter's effect. This is a moderate gap.
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. It is front-loaded with the purpose, and every sentence adds value. The examples are practical. No unnecessary fluff. Concise and efficient.
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?
The tool has an output schema (not shown), so return format is presumably covered. However, the description misses the optional 'compact_output' parameter entirely, which affects how results are presented. It also does not mention failure conditions (e.g., if parent doesn't exist or folder already exists). For a simple tool, these are notable omissions.
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 must fully explain parameters. It explains 'path' well with format and examples (full path or top-level name). However, it entirely ignores 'compact_output', which is present in the schema. Thus, one parameter is well-documented but the other is absent, leaving the agent without guidance on output format.
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 states a specific action ('Create a new empty folder') with a clear resource ('on your reMarkable'). It distinguishes from siblings (browse, rename, move, etc.) through the verb 'create' and the folder-specific context. Examples clarify usage. This is unambiguous.
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 a clear prerequisite: the parent folder must already exist, and it limits creation to one level at a time. It implies when to use (to create a folder) and the constraints. However, it does not explicitly contrast with sibling tools, but no sibling is for creation, so the guidance is adequate.
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 inline:
PNG: Returned as ImageContent with base64-encoded data
SVG: Returned as EmbeddedResource with TextResourceContents containing 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 |
|---|---|---|---|
| page | No | ||
| document | Yes | ||
| background | No | ||
| include_ocr | No | ||
| compatibility | No | ||
| output_format | No | png | |
| compact_output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and the description adds rich context beyond them: exact response formats (PNG as ImageContent, SVG as EmbeddedResource), the compatibility flag for clients without embedded-resource support, OCR behavior and the REMARKABLE_OCR_BACKEND=sampling path, and PDF/EPUB annotation-layer rendering. 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?
Well-structured with usecase/instructions/parameters/examples tags, front-loaded with the purpose, and examples add real value. Slightly long, but the dense instructions are organized in scannable subsections (Response Formats, OCR, PDF behavior) so every sentence earns its place.
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?
With no output schema and 0% schema coverage, the description carries a heavy burden and mostly delivers: it explains return formats, defaults, OCR, PDF caveats, and includes 7 illustrative examples. The sole completeness gap is the undocumented compact_output parameter, which an agent could not know how to use.
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 must compensate — and it does thoroughly: document (with browse pointer), page (1-indexed default), background (hex format, default, env override, transparent), output_format, compatibility, and include_ocr all get meaningful semantics. However, the input schema's compact_output parameter is not mentioned anywhere in the description, leaving one of seven parameters undocumented in both schema and description.
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 usecase tag states a specific verb+resource ('Get an image of a specific page from a reMarkable document') that clearly distinguishes it from siblings like remarkable_read (text extraction) and remarkable_browse (document tree). The instruction that it provides 'visual context that text extraction might miss' further disambiguates it from remarkable_read.
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 lists concrete use cases (viewing diagrams, sketches, mockups, wireframes) and a clear when-not: 'works best with notebooks... For PDFs/EPUBs, the annotations layer is rendered (not the underlying PDF content)'. It also routes to remarkable_browse for finding documents. However, it never explicitly names remarkable_read as the alternative for text-only extraction, leaving that exclusion implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_moveA
Move a document or folder into another folder. Changes where something lives. Use "/" as the destination to move it to the top level. The item keeps its name and contents.
item: Name or full path of the document or folder to move
destination: Path of the destination folder, or "/" for the top level
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| destination | Yes | ||
| compact_output | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a non-read, non-destructive operation. The description adds value by stating the item keeps its name and contents and explaining the '/' syntax, which goes beyond what annotations reveal. It does not cover error cases or permission requirements, but the core behavior is disclosed.
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 usecase, instructions, parameters, and examples. Every section serves a purpose, and the examples are especially useful for an agent to pattern-match calls. No filler or 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?
An output schema exists, so return values are covered. The description addresses the main behavior, the top-level special case, and parameter formats. It omits the compact_output parameter and error handling, but for a straightforward move tool this is largely sufficient.
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 coverage, the description must compensate. It explains 'item' as a name or full path and 'destination' as a folder path or '/' for top level, adding real meaning to the bare string types. However, the third parameter 'compact_output' is entirely unmentioned, leaving a gap.
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 states a specific verb ('move') and resource ('document or folder'), and clearly differentiates from siblings like remarkable_rename and remarkable_create_folder by naming the action. The usecase tag reinforces the core purpose without ambiguity.
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 clarify how to use the tool, including the special '/' destination for top-level moves and the preservation of name/contents. It does not explicitly list when not to use it or alternative tools, but the context is clear enough for an agent to decide when this is appropriate.
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 (annotations, highlights, OCR)
"annotations": Only annotations, highlights, and handwritten notes
Reading modes:
Single page: page=N returns the real page N (PDF pages, EPUB sections, notebook pages)
Multi-page: pages="all", pages="1-3", pages="2,4,5" — returns multiple pages concatenated
grep auto-redirects to the first matching page when no match on 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), "annotations" (notes only)
page: Page number for single-page mode (default: 1)
pages: Multi-page spec: "all", "1-3", "2,4,5" (overrides the page param)
grep: Regex pattern to filter content (auto-redirects to matching page)
include_ocr: Enable handwriting OCR for annotations (default: False)
auto_ocr: Auto-retry with OCR on empty notebooks (default: True, set False to skip)
| Name | Required | Description | Default |
|---|---|---|---|
| grep | No | ||
| page | No | ||
| pages | No | ||
| auto_ocr | No | ||
| document | Yes | ||
| include_ocr | No | ||
| content_type | No | text | |
| compact_output | No |
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=true, idempotentHint=true, and destructiveHint=false. The description adds substantial behavioral context: pagination to preserve context, content type selection, multi-page specs, grep auto-redirect, and OCR behavior depending on environment. This goes well beyond what annotations provide.
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, and examples. Each section is purposeful, front-loaded with the core purpose, and avoids redundancy. Appropriate length for a complex tool.
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 all major behaviors: pagination, content types, grep, OCR, and multi-page modes. The only missing detail is the compact_output parameter, which is not mentioned. Output schema exists, so return values are documented elsewhere. Overall very complete for a tool with 8 parameters.
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's parameter section is essential. It explains document, content_type, page, pages, grep, include_ocr, and auto_ocr with clear semantics and examples. However, it omits the 'compact_output' parameter present in the schema, leaving a small gap in meaning.
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?
States a specific verb and resource: 'Read and extract text content from a reMarkable document.' Clearly distinguishes from siblings like remarkable_browse (finding documents) and remarkable_search (searching), making it unambiguous for an agent.
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 detailed instructions on content types, reading modes, pagination, and grep behavior, plus a note to use remarkable_browse for finding documents. It does not explicitly list when NOT to use this tool versus alternatives like search, but the usecase and examples give enough context for an agent to select appropriately.
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. Previews are served from the local index when available (no cloud download).
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 | ||
| compact_output | 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?
Beyond the readOnlyHint/idempotent annotations, the description adds that previews are served from the local index (no cloud download), the sorting order, the limit behavior (max 50 without preview, 10 with preview), and the REMARKABLE_ROOT_PATH constraint. This gives an agent a solid model of what happens when the tool is invoked.
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. It is front-loaded with the core purpose and keeps each section tight. No redundant sentences.
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 that an output schema exists, the description doesn't need to explain return values. It covers the main behaviors, constraints, and usage. The only gap is the undocumented compact_output parameter, but overall it's nearly complete for a read-only 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?
The schema has 0% description coverage, so the description must explain all parameters. It explains limit and include_preview clearly, but omits the compact_output parameter entirely. While examples show usage, the missing parameter prevents a complete understanding.
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 states the specific verb 'Get' and resource 'most recently modified documents', and clarifies sorting behavior. This clearly distinguishes it from siblings like remarkable_search or remarkable_read.
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 instruction 'Use this to quickly find what you were working on recently' provides a clear usage scenario. It also notes the REMARKABLE_ROOT_PATH condition, but does not explicitly mention alternative tools or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remarkable_renameA
Rename a document or folder on your reMarkable. Changes the visible name. Contents, annotations and page data are untouched.
The change is committed as a single atomic update, and the response includes the previous library state so it can be undone.
item: Current name or full path of the document or folder
new_name: The new name (just the name, not a path)
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| new_name | Yes | ||
| compact_output | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=false and destructiveHint=false, indicating it's a mutation but not destructive. The description adds valuable context: it explicitly states that contents, annotations, and page data are untouched, and it mentions atomicity and that the response includes the previous library state for undo. This goes beyond the annotations and provides useful behavioral transparency, warranting a 4.
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 a usecase, instructions, parameters, and examples. It is front-loaded with the primary purpose, and every section adds value. The examples clarify usage. It is concise and efficient with no unnecessary filler, earning a 5.
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?
The description covers the operation's effect, atomicity, undo capability, and the main parameters. An output schema exists, so the description need not explain return values. However, it omits the compact_output parameter and does not address error conditions or edge cases (e.g., item not found). Given the tool's moderate complexity and that most critical information is present, a 4 is justified.
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 schema description coverage is 0%, so the description must compensate. It does explain the two required parameters (item and new_name) with useful semantics ('Current name or full path' and 'just the name, not a path'), which is helpful. However, it does not mention the optional 'compact_output' parameter that appears in the schema. Since one parameter is undocumented, the compensation is incomplete, so a 3 is appropriate.
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 purpose: 'Rename a document or folder on your reMarkable.' This is a specific verb (rename) and resource (document/folder), which is clear. However, it does not explicitly distinguish itself from sibling tools like remarkable_move, which might involve similar operations. The name and description are clear enough, but no sibling differentiation is present, so a 4 is appropriate.
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 context about the operation ('Changes the visible name. Contents, annotations and page data are untouched.') but do not explicitly state when to use this tool versus alternatives. There is no mention of exclusions or alternative tools. The usage is implied rather than explicit, so a 3 is given.
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 and previously-indexed content (FTS5) for the query.
Without grep: returns metadata only (name, path, file_type, modified) — no cloud downloads. With grep: searches document content for the pattern, using cached index when available.
Reading a document via remarkable_read indexes its content for future full-text search. The response includes index_coverage showing how many documents are searchable.
Limits:
Max 10 documents per search
Use grep to search within document content
| Name | Required | Description | Default |
|---|---|---|---|
| grep | No | ||
| limit | No | ||
| query | Yes | ||
| include_ocr | No | ||
| compact_output | No |
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=true and idempotentHint=true, covering the safety profile. The description adds significant behavioral detail beyond that: it explains the two execution modes (metadata-only without grep, content search with grep), the use of a cached FTS5 index, that reading via remarkable_read populates the index, that the response includes index_coverage, and the 10-document limit. It also notes 'no cloud downloads' in metadata mode. 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-organized with sections: usecase, instructions, parameters, examples. It is reasonably concise and front-loaded with the core purpose. There is minor redundancy (limits and parameter default repeated, 'Use grep' mentioned twice), but overall it is efficient and easy to scan. The examples are helpful.
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 tool with 5 parameters, an output schema, and read-only annotations, the description covers the main behavioral aspects: modes, indexing, limits, and examples. The output schema handles return values, so index_coverage is mentioned but not detailed. The main gap is the undocumented compact_output parameter, which prevents full completeness. Also, it doesn't mention pagination or sorting, but those are not critical for a search tool of this size. Overall, it is fairly complete with one notable omission.
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 must compensate. It explains query, grep, limit, and include_ocr with meaningful descriptions (e.g., grep is 'Optional regex pattern to search within document content'). It adds max=10 for limit, which the schema lacks. However, it completely omits compact_output, a fifth parameter, leaving the agent with no guidance on what it does. Since it covers 4 of 5 parameters but misses one entirely, it does not fully compensate for the lack of schema descriptions.
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 opens with a clear use case: 'Search across multiple documents and return matching content.' It specifies the verb (search), the resource (multiple documents), and the outcome (matching content). It further distinguishes two modes (metadata-only vs. content grep), which sets it apart from sibling tools like remarkable_browse (browsing) and remarkable_read (reading). No ambiguity about what this tool does.
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 clearly implies when to use this tool: when you need to find documents by name or indexed content. It explains the relationship with remarkable_read (reading indexes content for future search), which is useful context. However, it does not explicitly state when to prefer this over alternatives like remarkable_browse or remarkable_recent, nor does it mention exclusions. It provides clear context but not explicit when-not guidance.
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. Includes index statistics when available.
remarkable_status()
remarkable_status(compact_output=True) # Omit hints
| Name | Required | Description | Default |
|---|---|---|---|
| compact_output | No |
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=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it includes 'index statistics when available' and mentions diagnostic info, which is useful extra context beyond the annotations, but it does not detail the exact output or behavior further.
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, and examples. It is front-loaded with purpose and each section earns its place 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?
For a simple diagnostic tool with an output schema present, the description covers the purpose, when to use, and a usage example. It does not explain return values, but that is covered by the output schema. Slightly more detail on the 'index statistics' could help, but it is not essential.
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 schema has no description for compact_output (coverage 0%), but the example 'compact_output=True # Omit hints' provides some meaning, indicating it controls whether hints are shown. This is minimal but does add value beyond the schema's bare boolean type.
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 checks connection status and authentication with reMarkable Cloud, using specific verbs and resource. It is distinct from siblings which handle browsing, reading, renaming, etc., so an agent can easily tell them apart.
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?
It explicitly says 'Use this to verify your connection or troubleshoot issues,' giving clear context for when to use. It does not mention alternatives or when not to use, but no overlap exists with siblings, so exclusion is not critical.
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.
9 tool updates
v0.7.0- First observed
remarkable_browse - First observed
remarkable_create_folder - First observed
remarkable_image - First observed
remarkable_move - First observed
remarkable_read - First observed
remarkable_recent - First observed
remarkable_rename - First observed
remarkable_search - First observed
remarkable_status
TDQS
Scored across 9 tools
Each tool targets a distinct action on the reMarkable system: browsing, reading, searching, rendering images, renaming, moving, creating folders, recent items, and status. There's no functional overlap or ambiguity between tools.
All tools share a clear 'remarkable_' prefix with a descriptive word, which is predictable and readable. However, not all names follow a strict verb_noun pattern (e.g., 'image', 'recent', 'status' are nouns/adjectives rather than verbs), so it loses a point for slight inconsistency.
With 9 tools, the set is well-scoped for managing a reMarkable device. Each tool serves a distinct purpose and there are no redundant or unnecessary entries, matching the typical 3-15 tool range.
The tool surface covers the core workflows: browsing, reading, searching, visualizing, organizing (rename/move/create folder), and status. The main gap is the absence of a delete/trash tool, which prevents full lifecycle management but is not a critical failure for the primary use cases.
Maintenance
Related MCP Connectors
Personal context for every AI: search, read, and write back to your private Markdown library.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
AI research library. Save, organise and reuse notes and webpages as clean markdown context.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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.103MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to read, search, and traverse your reMarkable tablet's library, including handwritten notes via OCR.12MIT
- AlicenseAqualityDmaintenanceEnables reading and searching handwritten notes from GoodNotes on macOS, providing OCR text, search, and notebook management tools for AI assistants.6MIT