# Reported issues for reMarkable MCP Server by SamMorrowDrums

Pod holds 22 of 45 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [reMarkable MCP Server by SamMorrowDrums](/mcp/remarkable-mcp-server-by-sammorrowdrums).

## Most discussed

### Can't get it to work

Man, I love the idea of this project, but I haven't been able to get it to work.  In USB mode it appears that the image generation is failing, so it can't do OCR to extract text.  Even if cloud mode is slow, I'd be willing to live with it to give it a go, but it fails with bad request, despite me copying and pasting the generated key output from the terminal.

Any suggestions are welcome!

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/94) · 2026-05-20 · closed · external user · 6 comments

### remarkable_image fails in Claude Desktop/Web with "cairo library missing", but works in MCP Inspector

I'm seeing inconsistent behavior between MCP Inspector and Claude.

* `remarkable_browse` works correctly.
* `remarkable_read` works correctly.
* `remarkable_image` works correctly in MCP Inspector.
* However, Claude always reports **"cairo library missing"** when it tries to use `remarkable_image`.

Because Inspector successfully generates PNG images, it doesn't appear that Cairo is actually missing on the server.

## Environment

* remarkable-mcp: **1.0.0**
* Started with:

```bash
npx -y mcp-

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/137) · 2026-07-21 · closed · external user · 4 comments

### 400 Bad Request on sync/v3 endpoint - Cloud authentication fails despite valid device token

**Environment**
- OS: Windows 11
- remarkable-mcp version: latest (uvx remarkable-mcp)
- Transport: Cloud (REMARKABLE_TOKEN via environment variable)
- reMarkable Connect subscription: active

**Problem**
Authentication always fails with 400 Bad Request on a specific sync/v3 URL.
The URL and hash are always identical regardless of token:

  400 Client Error: Bad Request for url:
  https://internal.cloud.remarkable.com/sync/v3/files/8a2469797b082cbe6ad8ff9fc5a4b8ca161cc44f59542ebc9d3ace1ce5ee32dc

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/101) · 2026-06-06 · closed · external user · 4 comments

### Export in pdf, ocr via google gemini

Thanks for your incredible work!

I'm wondering why you chose google vision api, if let's say gemini flash can do the trick with pdf even simpplier and with a way better quality?

Thanks, af

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/44) · 2026-01-12 · closed · external user · 4 comments

### Add a pluggable OCR provider interface

## Summary

Add more OCR provider options beyond Google Vision and Tesseract. Goal: **BYOK (Bring Your Own Key)** — let users choose their preferred provider.

## Current State

| Provider | Status | Notes |
|----------|--------|-------|
| Google Vision | ✅ Implemented | Excellent handwriting recognition |
| Tesseract | ✅ Implemented | Offline fallback, poor for handwriting |

## Proposed Additions

| Provider | Priority | Notes |
|----------|----------|-------|
| **Microsoft Azure AI Vision** |

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/25) · 2025-11-28 · open · 4 comments

### Mark notebook pages as processed

## Summary

Add write capabilities to remarkable-mcp, enabling document creation and synchronization.

## Proposed Features

### Phase 1: Basic Write Operations
- **Create notebooks** — Create new blank notebooks in any folder
- **Upload PDFs** — Upload PDF files to reMarkable
- **Folder management** — Create, rename, and move folders

### Phase 2: Obsidian Integration
- **Markdown to PDF** — Convert markdown notes to PDFs and upload
- **Bi-directional sync** — Notes flow between reMarkable and 

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/24) · 2025-11-28 · open · 4 comments

### SSH smoke sessions intermittently lose connectivity on large libraries

## Summary

On an up-to-date reMarkable Paper Pro with roughly 400 synced documents, a sequence of SSH write tools can still leave the SSH daemon accepting TCP connections but unable to complete the SSH banner exchange. This causes subsequent authoring and cleanup operations to fail even after #131's xochitl readiness/settle changes.

## Environment

- Device: reMarkable Paper Pro, current firmware
- Transport: USB SSH at `10.11.99.1`
- Library: approximately 399–404 documents
- remarkable-mcp: 

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/157) · 2026-08-14 · closed · 3 comments

### remarkable_read fails in cloud mode with coroutine error

## Description

`remarkable_read()` fails in cloud mode (both 0.7.0 and 0.8.0) with the following error:

```json
{
  "_error": {
    "type": "read_failed",
    "message": "the JSON object must be str, bytes or bytearray, not coroutine",
    "suggestion": "Check remarkable_status() to verify your connection."
  }
}
```

## Reproduction

1. Connect via cloud mode (environment variable token)
2. Verify connection works: `remarkable_status()` → `authenticated: true`, `document_count: 67`
3. Verify 

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/63) · 2026-03-05 · closed · external user · 3 comments

## Most recent

### Avoid event-loop blocking after USB metadata cache invalidation race

## Problem

`USBWebClient.run_method_async()` checks whether `get_meta_items` is cached, releases the metadata lock, then may call `get_meta_items()` synchronously. If another thread invalidates the cache in that narrow gap, the second check starts a full USB HTTP traversal on the asyncio event-loop thread.

## Impact

Results remain correct, but all MCP tool handling can pause for the duration of the metadata traversal.

## Expected behavior

Keep the cached fast path, but ensure a cache miss a

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/179) · 2026-08-17 · open · 0 comments

### Exclude trashed documents from lookup and resource registration

## Problem

A trashed document keeps its visible name. If a live document has the same name, by-name resolution can select the trashed item first. Trashed documents may also be registered as MCP resources.

Reported by @lowercasename in #163.

## Scope

Use the existing `_is_cloud_archived` transport-aware predicate rather than adding another trash helper. Apply it consistently to:

- shared `remarkable_read` / `remarkable_image` document lookup
- `remarkable_canvas` lookup
- synchronous resourc

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/171) · 2026-08-14 · closed · 1 comment

### Protect USB web document caches during concurrent dispatch

## Problem

`USBWebClient` permits concurrent operations but reads and replaces `_documents` and `_documents_by_id` without a shared lock. A concurrent reader can observe the updated list with the previous ID map, or vice versa.

## Impact

The failure is transient and does not change tablet data, but it can produce stale or inconsistent document resolution under concurrent USB operations.

## Expected behavior

Use one metadata lock and a generation-aware or atomic cache replacement pattern, ma

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/170) · 2026-08-14 · closed · 0 comments

### Refresh after cancellation when an SSH write may have started

## Problem

If `OperationDispatcher.close()` cancels an active SSH write after the remote-execution marker was emitted, `_run_process` currently raises `SSHJobCancelled`. `SSHRefreshCoordinator.run_write` treats that as a clean cancellation and does not schedule a safety refresh, even though the remote mutation may already have started.

## Impact

Local caches are invalidated and recover on the next read, but the tablet UI may not notice the filesystem mutation until another write or a manual `

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/169) · 2026-08-14 · closed · 0 comments

### remarkable_read and remarkable_image disagree on total_pages for handwritten notebooks

One more from Claude, so the usual grain of salt applies:

For a notebook that's mostly handwriting, `remarkable_read` reports `total_pages` as the number of extracted text segments (`len(notebook_pages)`), which collapses to 1 when there's little or no typed text. `remarkable_image` reports the real document page count. So the same seven page notebook answers 1 from one tool and 7 from the other.

This affects any client that reads first and then iterates pages using the count it was given. Not

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/165) · 2026-08-14 · closed · external user · 1 comment

### render_merged is opt-in, so agents silently get inkless renders of annotated PDFs

Claude has filed this one too, but pretty sure it's right!

After #159 the merged PDF and annotation rendering works really well, but `remarkable_image` defaults to `render_merged=False`. A client that doesn't pass the flag follows the annotation-only path: a page with ink renders as bare strokes floating on the background with no PDF page beneath them, and a page without ink falls back to rasterizing the clean source PDF. Neither response mentions the missing layer. This is a bad bug for agent 

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/164) · 2026-08-14 · closed · external user · 1 comment

### default nix configuration module does not even build

git commit version: `d0f98094626bb2fb49c32b10bfb8fcc6b732966d`

error:
```
building the system configuration...
error:
       … while calling the 'derivationStrict' builtin
         at «nix-internal»/derivation-internal.nix:37:12:
           36|
           37|   strict = derivationStrict drvAttrs;
             |            ^
           38|

       … while evaluating derivation 'nixos-system-nixos-26.11pre1050399.279b4a8275f0'
         whose name attribute is located at /nix/store/dy2m3gv51jdklsi

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/162) · 2026-08-14 · closed · external user · 1 comment

### Synchronize reMarkable documents with an Obsidian vault

## Problem

Users want reMarkable notes to flow into an Obsidian vault without manually exporting, naming, and placing each document.

## Scope

Design an opt-in synchronization workflow that can:

- export selected notebooks or folders into an Obsidian vault
- preserve stable document identity so repeated runs update rather than duplicate notes
- map reMarkable folders and useful metadata into predictable Markdown paths/frontmatter
- detect conflicts and avoid silently overwriting user-edited O

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/158) · 2026-08-14 · open · 0 comments

### Fresh installs broken: unbounded mcp dependency now resolves to the 2.0 SDK

Thanks for building this! Browsing and OCR-ing a reMarkable library over MCP is exactly what I needed, and the transport fallback design is really nice. This is going to make using my tablet so much nicer!

Claude has filed this, so please take with a grain of salt:

Fresh installs are currently broken: `pyproject.toml` declares `mcp>=1.27.0` with no upper bound, and the MCP Python SDK has released 2.0.0, which removes the `mcp.server.fastmcp` module path that `server.py` imports. A clean instal

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/149) · 2026-08-11 · closed · external user · 1 comment

### ModuleNotFoundError: No module named 'mcp.server.fastmcp' when installed via uvx (unpinned mcp dependency)

## Description

Running `uvx remarkable-mcp --usb` (or `--ssh`) fails at startup with:

## Root cause (suspected)

`remarkable-mcp` does not appear to pin an upper bound on the `mcp` SDK
dependency. `uvx` resolves the latest available `mcp` release at each
invocation, and a recent `mcp` release appears to have moved or removed the
`mcp.server.fastmcp` module, breaking the import in `server.py`.

## Reproduction

- Worked correctly on 2026-07-28 (fresh `uvx` install, USB mode).
- Broke starting 2

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/143) · 2026-08-03 · closed · external user · 0 comments

### Unbounded mcp>=1.27.0 breaks on mcp 2.0.0 — server dies at import as a generic "Connection closed"

## Summary

`remarkable-mcp` declares `mcp>=1.27.0` with no upper bound. `mcp` 2.0.0 removed the `mcp.server.fastmcp` module, so any fresh resolve picks up `mcp>=2` and the server dies at import.

Because `uvx` re-resolves on every launch, this breaks the server *silently and repeatedly* on a previously working install — no code changed on either side.

## What the user sees

The MCP client reports:

```
-32000: Connection closed
```

That reads like an authentication or cloud-token failure, whi

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/141) · 2026-07-30 · closed · external user · 0 comments

### ModuleNotFoundError: No module named 'mcp.server.fastmcp'

Got this error today:

```
Traceback (most recent call last):
  File "<frozen runpy>", line 203, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\USER\AppData\Local\uv\cache\archive-v0\6wSz6y4hY01v5E9WgJW1w\Scripts\remarkable-mcp.exe\__main__.py", line 10, in <module>
    sys.exit(main())
             ~~~~^^
  File "C:\Users\USER\AppData\Local\uv\cache\archive-v0\6wSz6y4hY01v5E9WgJW1w\Lib\site-packages\remarkable_mcp\cli.py", line 182, in main
    from remar

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/139) · 2026-07-28 · closed · external user · 1 comment

### Text-anchored ink renders overlapping the typed text block; remarkable_read returns no typed text from the same v6 page

## Summary

Two related problems on pages that mix typed text with handwriting (native notebooks, current firmware / v6, cloud mode):

1. **Rendered images draw the ink and the typed text block on top of each other.** On the device, ink written below a typed block is *anchored* to a text character (`Group.anchor_id`) and moves with it as the text reflows. `_v6_paths_from_blocks` draws strokes at their raw stored coordinates and never consults the group's anchor, so anchored handwriting lands ins

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/135) · 2026-07-20 · closed · external user · 1 comment

### Request dependency bump to resolve v5 stroke rendering and empty text layer errors via uvx

When running the server via uvx, Claude encounters an unhandled exception during the image rendering stage on modern reMarkable notebooks using the .v5 stroke format. The background stroke parser fails to compute the layout, resulting in empty text layers and an entirely frozen file state.Could the underlying rmc or rmscene library dependencies be updated in the package setup to explicitly support v5 rendering blocks out-of-the-box?

[Read the thread](https://github.com/SamMorrowDrums/remarkable-mcp/issues/124) · 2026-06-19 · closed · external user · 2 comments

The remaining reports are on [the project's issue tracker](https://github.com/SamMorrowDrums/remarkable-mcp/issues).
