reMarkable MCP Server について
reMarkable MCP Server は、MCP クライアントから reMarkable のドキュメントライブラリを閲覧、検索、読み取り、レンダリングできる MCP サーバーです。USB web、ローカルディレクトリ、クラウド、SSH の各接続方式に対応しており、reMarkable のノートを AI クライアントで利用したい方に向いています。
主な機能
- 01フォルダと最近のドキュメントの閲覧
- 02名前・タグ・抽出テキストによる検索
- 03テキスト、ハイライト、注釈の読み取り
- 04ノートブックの PNG または SVG レンダリング
- 05ドキュメントの PDF または Markdown エクスポート
- 06stdio とローカル Streamable HTTP での提供
活用シーン
- 01AI クライアントから過去の会議メモを検索する
- 02注釈付き PDF を画像に変換してモデルで確認する
- 03単一のドキュメントを Markdown に書き出して編集する
MCP 対応
本プロジェクトは MCP サーバーであり、Claude、VS Code Copilot、OpenWebUI などの MCP クライアントに対して、reMarkable ライブラリの閲覧、読み取り、レンダリング、エクスポートの機能を提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx remarkable-mcpREMARKABLE_TOKENシークレットOptional cloud credential. Prefer `remarkable-mcp --register CODE`, which saves it to ~/.rmapi. USB, SSH, and local-directory modes do not require it.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
14掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| grep | any | いいえ | |
| page | integer | いいえ | |
| document | string | はい | |
| include_ocr | boolean | いいえ | |
| content_type | enum | いいえ | text | raw | annotations |
詳細
reMarkable MCP Server
reMarkable ライブラリに、Claude、VS Code Copilot、OpenWebUI、その他の互換性のあるツールなどの MCP クライアントからアクセスできます。
機能
- フォルダーや最近のドキュメントを閲覧できます。
- 名前、タグ、抽出したテキストを検索できます。
- 入力テキスト、PDF および EPUB のテキスト、ハイライト、注釈を読み取れます。
- ノートブックや注釈付き PDF を PNG または SVG としてレンダリングできます。
- 1 つのドキュメントを、完全な PDF またはセクションごとに分割された Markdown リソースとしてエクスポートできます。
- Google Vision または Tesseract を使って手書き文字の OCR を実行できます。
- 対応するトランスポートで、ファイルをアップロードしたりフォルダーを管理したりできます。
- Markdown を PDF としてレンダリングし、タブレットにアップロードできます。
- MCP Apps に対応するクライアントで、インタラクティブなキャンバスを開けます。
- MCP を stdio またはローカルの Streamable HTTP 経由で提供できます。
- 安定版 SDK 2.x の
MCPServer1 つで、MCP2026-07-28と、SDK がサポートするそれ以前のすべてのリビジョンを提供できます。
クイックインストール
前提条件:uv をインストールする
以下のコマンドでは、uv に含まれる uvx を使います。
ページ画像のラスタライズには PyMuPDF を使います。macOS、Linux、Windows のいずれでも、システムの Cairo、ブラウザー、グラフィックスランタイムをインストールする必要はありません。
macOS と Linux
公式スタンドアロンインストーラーを使います。
curl -LsSf https://astral.sh/uv/install.sh | sh
または、Homebrew でインストールします。
brew install uv
Windows
PowerShell から公式スタンドアロンインストーラーを使います。
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
または、WinGet でインストールします。
winget install --id=astral-sh.uv -e
接続方法を選ぶ
ご利用の環境に合う方法から始めてください。
| 順序 | 方法 | セットアップ | 書き込み | 適した用途 |
|---|---|---|---|---|
| 1 | USB Web | タブレットを接続し、USB Web を有効にします | アップロード。保存先はタブレットが選択 | サブスクリプションや開発者モードなしで、最短でセットアップしたい場合 |
| 2 | ローカルディレクトリ | デスクトップアプリをインストールしてサインインします | なし | デスクトップのキャッシュから、オフラインでデバイスに接続せずに読み取りたい場合 |
| 3 | クラウド | 一度登録します。Connect サブスクリプションが必要です | ドキュメントとフォルダーをすべて管理可能 | ワイヤレスまたはリモートでアクセスしたい場合 |
| 4 | SSH | 開発者モードを有効にし、SSH を設定します | すべての管理機能とネイティブな作成機能 | ファイルシステムに直接アクセスする場合や、ネイティブ形式でインクを書き込みたい場合 |
USB Web インターフェース
USB で接続し、タブレットの「ストレージ設定」で Web インターフェースを有効にしてください。
- reMarkable を USB で接続します
- タブレットで 設定 > ストレージ を開き、USB Web インターフェース を有効にします
- 上のボタンからインストールします
USB Web の手動設定
.vscode/mcp.json に追加します:
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--usb"],
"env": {
"GOOGLE_VISION_API_KEY": "your-api-key"
}
}
}
}
- reMarkable が USB で接続され、ロック解除されていることを確認します
- 「設定 > ストレージ」で USB Web インターフェースが有効になっていることを確認します
- タブレットには
http://10.11.99.1でアクセスできます
ローカルディレクトリモード
公式 reMarkable デスクトップアプリの同期フォルダーをディスクから読み取ります。このモードはオフラインで、読み取り専用です。同期はデスクトップアプリが管理します。
ローカルディレクトリの設定
.vscode/mcp.json に追加します:
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--local-dir"]
}
}
}
パスを指定しない場合、デスクトップアプリのデータフォルダーが自動検出されます:
- macOS(現行アプリ):
~/Library/Containers/com.remarkable.desktop/Data/Library/Application Support/remarkable/desktop - macOS(旧アプリ):
~/Library/Application Support/remarkable/desktop - Windows:
%APPDATA%\remarkable\desktop - Linux:
~/.local/share/remarkable/desktop
または、xochitl 形式の任意のディレクトリ(タブレットのバックアップなど)を指定できます:
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--local-dir", "/path/to/xochitl-data"]
}
}
}
- コンテンツの最新性はデスクトップアプリに依存します。アプリを起動したままにし、サインインしておいてください。
- このモードは読み取り専用です。直接書き込むと同期を回避し、アプリのキャッシュを破損させる可能性があります。
- ディレクトリが見つからず、クラウドトークンが設定されている場合、サーバーは読み取りアクセスのためにクラウドモードへフォールバックします(ローカルディレクトリモードで起動されているため、サーバーは引き続き読み取り専用です)
クラウドモード
クラウドモードはデバイスに接続せずに利用でき、reMarkable Connect のサブスクリプションが必要です。
メタデータを並列に取得し、コンテンツアドレス指定された Blob をディスクにキャッシュします。設定については クラウドのパフォーマンスとキャッシュを参照してください。
クラウドモードのセットアップ
1. ワンタイムコードを取得する
my.remarkable.com/device/desktop/connect にアクセスし、コードを生成します。
2. トークンに変換する
uvx remarkable-mcp --register YOUR_CODE
登録すると、トークンが ~/.rmapi に保存されます。MCP クライアントが同じマシン上で同じユーザーとしてサーバーを実行する場合、remarkable-mcp はこのファイルを自動的に読み取るため、クライアントの設定にトークンを記述する必要はありません。サーバーを別のユーザーまたは別のマシンで実行する場合など、~/.rmapi を利用できない場合に限り、REMARKABLE_TOKEN を設定してください。
3. MCP クライアントを設定する
最小限のクライアント非依存サーバー定義
クライアントで必要な MCP 設定 UI またはラッパーを使用して、このサーバー定義を追加します。
{
"command": "uvx",
"args": ["remarkable-mcp"]
}
サーバーが ~/.rmapi からトークンを読み取れる場合、env エントリーは不要です。
VS Code
VS Code の .vscode/mcp.json では、トップレベルの servers オブジェクトを使用します。認証情報は ~/.rmapi に保存されているため、トークンの入力は不要です。
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp"]
}
}
}
Claude Desktop およびその他のクライアント
Claude Desktop と多くのその他の MCP クライアントでは、トップレベルの mcpServers オブジェクトと env 内のリテラル値を使用します。VS Code の inputs 配列は使用しません。トークンが ~/.rmapi にある場合、最小限の設定は次のとおりです。
{
"mcpServers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp"]
}
}
}
トークンファイルを利用できない場合は、remarkable サーバーエントリーに "env": {"REMARKABLE_TOKEN": "your-token"} を追加します。外側のキーやシークレットの保存方法が異なる場合は、クライアントのドキュメントを参照してください。
SSH モード
SSH では、ファイルシステムに直接アクセスでき、ノートブックをネイティブに作成できます。このモードには 開発者モードが必要です。有効にすると、タブレットは工場出荷時の状態にリセットされます。 USB web、ローカルディレクトリ、クラウドモードでは必要な操作ができない場合にのみ、このモードを使用してください。
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--ssh"]
}
}
}
認証とデバイスの設定については、SSH セットアップガイドを参照してください。
接続モード
すべてのモードで、読み取り、レンダリング、単一ドキュメントのエクスポートができます。クラウドモードと SSH モードでは、ライブラリを全面的に管理できます。USB web ではアップロードできますが、保存先フォルダーは指定できません。 ローカルディレクトリモードは 読み取り専用です。
| モード | セットアップ | サブスクリプション | オフライン | タブレットが必要 | 元データ | アップロード | フォルダー操作¹ |
|---|---|---|---|---|---|---|---|
| ローカルディレクトリ | デスクトップアプリのインストール | 不要² | はい | いいえ | PDF と EPUB | いいえ | いいえ |
| USB web | 設定で有効化 | 不要 | はい | はい | ルートのみ | いいえ | |
| クラウド | 初回登録 | Connect | いいえ | いいえ | PDF と EPUB | はい | はい |
| SSH | 開発者モード | 不要 | はい | はい | PDF と EPUB | はい | はい |
¹ フォルダー操作=フォルダーの作成/移動/名前変更/削除。アップロードとフォルダー操作はデフォルトで有効です。読み取り専用サーバーを公開するには、--read-only を指定します。削除するとアイテムはゴミ箱に移動します。クライアントがエリシテーションに対応している場合は確認を求め、対応していない場合は REMARKABLE_SKIP_CONFIRM=1 が設定されていない限り削除を拒否します。
² デスクトップアプリ自体は同期のために reMarkable クラウドにサインインします。ローカルディレクトリモードは、アプリがすでにディスクに同期したデータを読み取るだけです。
クラウドへの自動フォールバック
選択したデバイスのトランスポートを利用できず、クラウド認証情報が設定されている場合、サーバーはクラウドモードにフォールバックします。--local-dir を指定して起動したサーバーは、フォールバック後も読み取り専用です。remarkable_status は有効なトランスポートを報告し、fell_back_to_cloud を設定します。
この動作を無効にして、デバイスに接続できない場合にエラーにするには、--no-cloud-fallback を指定するか、REMARKABLE_DISABLE_CLOUD_FALLBACK=1 を設定します。
トランスポートはサーバープロセスごとに一度だけ解決されます。プロセスがすでにクラウドにフォールバックしている場合は、デバイスを接続するかデスクトップアプリを起動した後に、MCP サーバーを再起動してください。
詳細なセットアップ:
OpenWebUI(Streamable HTTP)
OpenWebUI のネイティブ MCP 接続では Streamable HTTP を使用します。同じマシンで remarkable-mcp を起動します。
uvx remarkable-mcp --http
次に、OpenWebUI で MCP サーバーの URL として http://127.0.0.1:8000/mcp を追加します。HTTP トランスポートは --usb、--ssh、--read-only と組み合わせて使用できます。たとえば、次のようにします。
uvx remarkable-mcp --usb --http
バインドアドレスとポートは、--host / --port または REMARKABLE_MCP_HOST / REMARKABLE_MCP_PORT でも設定できます。
サーバーでは、MCP Python SDK 2.x の新旧両世代に対応したエンドポイントを使用します。新しい 2026-07-28 リクエストはセッションレスです。古いクライアントは、同じ /mcp ルートで引き続き初期化ハンドシェイクとレガシー MCP セッションを使用できます。reMarkable トークンと選択されたタブレットのトランスポートは、プロセス内の CLI/環境変数設定で管理され、MCP HTTP 認証ヘッダーから推測されることはありません。
警告
Streamable HTTP には組み込みの認証機能がありません。デフォルトでは
127.0.0.1にバインドされます。ネットワーク境界を管理できる場合を除き、このデフォルト設定を維持してください。0.0.0.0や::などのワイルドカードバインドは、厳格な Host 許可リストを設定できないため拒否されます。ループバック以外の具体的なアドレスは使用できますが、ポートに接続できるクライアントに対して、書き込みを含む有効なすべてのツールが公開されます。
認証済みリバースプロキシ経由のリモートアクセス
remarkable-mcp はデフォルトのループバックバインドのままにし、同じホスト上にプロキシを配置してください。MCPServer の DNS リバインディング保護では、デフォルトでループバックの Host 値と Origin 値のみが許可されます。そのため、パブリックホスト名を変更せずに転送するプロキシは 421 Misdirected Request を受け取り、公開ブラウザーの Origin は 403 Forbidden を受け取ります。
プロキシでリクエストを認証し、Host をループバックのアップストリームに書き換え、Origin をクリアする必要があります。たとえば、既存の htpasswd ファイルを使って nginx を設定する場合は、次のようにします。
location /mcp {
auth_basic "reMarkable MCP";
auth_basic_user_file /etc/nginx/remarkable-mcp.htpasswd;
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_buffering off;
proxy_read_timeout 3600s;
# Required by MCPServer's default DNS-rebinding protection.
proxy_set_header Host 127.0.0.1:8000;
proxy_set_header Origin "";
}
アップストリームのポートを直接公開しないでください。OpenWebUI には、https://mcp.example.com/mcp のような認証済みプロキシ URL を設定します。
NixOS では、remarkable-mcp-bridge.nix に同じループバックデフォルトを使用する systemd モジュールが用意されています。
{
imports = [ ./remarkable-mcp-bridge.nix ];
services.remarkable-mcp = {
enable = true;
command = "/opt/remarkable-mcp/.venv/bin/remarkable-mcp";
};
}
サービスユーザーの reMarkable 認証情報は、/var/lib/remarkable-mcp(または設定した home)に配置する必要があります。このモジュールはサービスの実行ファイル検索パスに Tesseract を追加します。設定した command は別途インストールしてください。
OpenClaw 連携
remarkable-mcp は OpenClaw のスキルとして動作します。openclaw.json に次の内容を追加してください。
{
"mcpServers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--usb"]
}
}
}
ClawHub からインストールします。
clawhub install remarkable-mcp
または、このリポジトリの SKILL.md を ~/.openclaw/skills/remarkable-mcp/ ディレクトリにコピーしてください。
ツール
| ツール | 説明 |
|---|---|
remarkable_read | ドキュメントを読み取り、テキストを抽出します(ページネーションと検索に対応) |
remarkable_browse | フォルダーを移動したり、ドキュメント名で検索したり、タグで絞り込んだりします |
remarkable_search | 複数のドキュメントにわたって内容を検索します(タグによる絞り込みに対応) |
remarkable_recent | 最近変更されたドキュメントを取得します |
remarkable_status | 接続状態とトランスポートごとの機能マトリックスを確認します |
remarkable_image | オプションの OCR 付きでページの PNG/SVG 画像を取得します |
remarkable_export | 1 つのドキュメントを一時的な PDF または Markdown リソースとしてエクスポートします |
読み取り/検索/レンダリングツールは読み取り専用です。remarkable_export はタブレットを変更しませんが、MCP サーバーホスト上に上限付きの一時ファイルを書き込むため、readOnlyHint=false を宣言します。エクスポートリンクは 15 分後に期限切れとなり、サーバーが保持するリンクは一度に最大 8 件です。
対応するトランスポートでは、デフォルトで書き込みツールも登録されます。無効にするには --read-only を指定してください。書き込みツールを参照してください。
MCP Apps に対応するクライアントでは、remarkable_canvas も開くことができます。
ツールの動作
- ドキュメントのパスを参照すると、その内容が返されます。
- ノートブックのテキストが空の場合、OCR が自動的に実行されることがあります。
- 検索では、条件に一致する複数のドキュメントを検索できます。
- 画像ツールは、テキスト抽出では取得できない視覚的な内容を返します。
remarkable_read.total_pagesは物理的なドキュメントのページ数です。content_pagesは抽出されたテキストのチャンク数を示し、more/next_pageでそれらのチャンクを続けて取得できます。 生の PDF の読み取りでは、ダウンロード済みの PDF のページ数がカウントされます。生の EPUB の別アーカイブを読み取れない場合でも、テキストは返されますが、total_pages: nullおよびtotal_pages_known: falseとなります。- PDF を元にしたページの PNG 画像では、元のページと注釈が自動的に統合されます。注釈レイヤーのみを取得するには、
render_merged=Falseを指定してください。 - PDF のエクスポートでは、物理的なページ順が保持され、マッピングされた元文書の下地と注釈がデフォルトで統合されます。Markdown のエクスポートでは、ドキュメント構造を推測せず、元文書/入力テキスト/注釈/ハイライト/OCR の各セクションが固定順で保持されます。
- OCR では、Google Vision が設定されている場合はそれを使用し、設定されていない場合は Tesseract でローカル実行します。
- 参照と検索では、タグによるフィルターを利用できます。
使用例
# 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
remarkable_image("Handwritten Notes", include_ocr=True)
# Imported PDF pages include their reMarkable annotations automatically
remarkable_image("Research Paper", page=3)
# Request only the reMarkable annotation layer
remarkable_image("Research Paper", page=3, render_merged=False)
# Transparent background for compositing
remarkable_image("Logo Sketch", background="#00000000")
# Compatibility mode: return resource URI instead of embedded resource
remarkable_image("Diagram", compatibility=True)
# Export a complete PDF through a temporary MCP ResourceLink
remarkable_export("Meeting Notes")
# Export honest, sectioned Markdown with opt-in OCR
remarkable_export("Journal", output_format="markdown", include_ocr=True)
# Export only full-page annotation layers when archive data is available
remarkable_export("Research Paper", pdf_mode="annotations")
注記: PNG のレンダリングでは、ノートブックの SVG と PDF ページの両方に PyMuPDF を使用するため、
remarkable_imageに Cairo、Inkscape、Chromium、その他のシステムグラフィックスランタイムは必要ありません。ローカルでのストローク解析でページを処理できない場合、USB モードと SSH モードではタブレット標準の PDF エクスポートにフォールバックし、クラウドモードでは元のソース PDF が存在すればそれにフォールバックします。
リソース
ドキュメントは MCP リソースとして自動的に登録されます。
| URI スキーム | 説明 |
|---|---|
remarkable:///{path}.txt | 抽出されたテキスト内容 |
remarkableraw:///{path}.pdf.txt | 元の PDF から抽出されたテキスト |
remarkableraw:///{path}.epub.txt | 元の EPUB から抽出されたテキスト |
remarkableimg:///{path}.page-{N}.png | N ページ目の PNG 画像(ノートブックのみ) |
remarkablesvg:///{path}.page-{N}.svg | N ページ目の SVG ベクター画像(ノートブックのみ) |
remarkableexport:///{format}/{id} | 一時生成された PDF または Markdown エクスポート |
ゴミ箱に入れられたドキュメントは、ツール、キャンバス、リソースの検索対象から除外されるため、ゴミ箱内の項目が同じ名前の有効なドキュメントを隠すことはありません。
remarkable_export は、サイズが大きくなる可能性のあるファイル内容をツールの応答に埋め込まず、ResourceLink を返します。サーバーはファイルを非公開の一時ディレクトリに 15 分間保存し、エクスポートを最大 8 件保持して、シャットダウン時に管理対象のエクスポートを削除します。長期利用する場合は、リンクされたリソースを取得して保存してください。
手書き文字の OCR
手書きの内容について、remarkable-mcp は 2 種類の OCR バックエンドを提供します。
| バックエンド | セットアップ | オフライン | 備考 |
|---|---|---|---|
| Google Vision | API キー | いいえ | 手書き文字の認識に優れています |
| Tesseract | システムへのインストール | はい | 印刷されたテキストに適しています |
クイックセットアップ
MCP 設定で REMARKABLE_OCR_BACKEND を設定します。
{
"env": {
"REMARKABLE_OCR_BACKEND": "auto"
}
}
オプション: auto、google、tesseract
Google Cloud Vision
- Cloud Vision API を有効にします
- API キーを作成します
- 設定に追加します:
"GOOGLE_VISION_API_KEY": "your-key"
料金: 月 1,000 リクエストまで無料。その後は 1,000 リクエストあたり約 $1.50 です。
Tesseract
印刷されたテキスト向けに設計されたオープンソースの OCR です。手書き文字の認識精度は低いものの、オフライン時の代替手段として便利です。
# Install Tesseract
# macOS
brew install tesseract
# Ubuntu/Debian
sudo apt install tesseract-ocr
# Windows
choco install tesseract
デフォルトの動作(auto)
REMARKABLE_OCR_BACKEND=auto(デフォルト)の場合:
- Google Vision(
GOOGLE_VISION_API_KEYが設定されている場合) - Tesseract(フォールバック)
トランスポート別の書き込みツール
書き込みツールを使うと、reMarkable にドキュメントをアップロードし、整理、管理できます。**書き込み可能なトランスポートではデフォルトで有効です。**クラウドモードと SSH モードではすべての機能を利用できます。USB Web モードではアップロードのみ利用できます(ファームウェアでフォルダー操作が公開されていないためです)。ローカルディレクトリモードは常に読み取り専用です。ほかのモードで読み取り専用サーバーを公開するには、--read-only を指定してください。
| 機能 | ローカルディレクトリ | クラウドモード | SSH モード | USB Web モード |
|---|---|---|---|---|
| アップロード | ❌ | ✅ | ✅ | ✅(タブレットで選択したフォルダー) |
| フォルダー作成 | ❌ | ✅ | ✅ | ❌ |
| 移動 | ❌ | ✅ | ✅ | ❌ |
| 名前の変更 | ❌ | ✅ | ✅ | ❌ |
| 削除 | ❌ | ✅(→ ゴミ箱) | ✅(→ ゴミ箱。完全削除も可能) | ❌ |
書き込みツールを無効にする(読み取り専用モード)
書き込み可能な各モードでは、書き込みツールがデフォルトで有効です。ローカルディレクトリモードは常に読み取り専用です。ほかのトランスポートを読み取り専用にするには、--read-only フラグを追加してください。
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--read-only"]
}
}
}
トランスポートフラグ(--ssh、--usb)と組み合わせて使用できます。
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--ssh", "--read-only"]
}
}
}
または、環境変数を設定してください。
{
"env": {
"REMARKABLE_READ_ONLY": "1"
}
}
旧式の
--writeフラグとREMARKABLE_ENABLE_WRITE変数も後方互換性のために引き続き受け付けられますが、現在は何も行いません(書き込みはデフォルトで有効です)。--writeと--read-onlyは同時に指定できません。
利用可能な書き込みツール
| ツール | 説明 |
|---|---|
remarkable_upload(file_path, parent_folder, document_name, defer_restart) | PDF または EPUB ファイルをアップロードします(クラウド、SSH、USB Web。USB Web では名前は保持されますが、parent_folder は無視されます) |
remarkable_markdown_to_pdf(markdown, document_name, parent_folder, defer_restart) | Markdown をページ分割された PDF に変換してアップロードします(クラウド、SSH、USB Web) |
remarkable_mkdir(folder_name, parent, defer_restart) | 新しいフォルダーを作成します(クラウド、SSH) |
remarkable_move(document, dest_folder, defer_restart) | ドキュメントまたはフォルダーを移動します(クラウド、SSH) |
remarkable_rename(document, new_name, defer_restart) | ドキュメントまたはフォルダーの名前を変更します(クラウド、SSH) |
remarkable_delete(document, defer_restart, permanent) | ドキュメントまたはフォルダーをゴミ箱に移動します。SSH では permanent=True を指定すると完全に削除できます |
remarkable_refresh() | defer_restart=True を指定して行った保留中の書き込みを適用するため、xochitl を安全に 1 回再起動します。このプロセスでクリーンな状態が確認済みの場合は何も行いません — SSH のみ |
remarkable_author(method, ..., defer_restart) | ネイティブの手書きデータとノートブックを作成します — draw(ストロークを追加)、add_page(ノートブックに空白ページを追加)、create_document(新しいノートブックを作成) — SSH のみ |
安全性
- クラウド、SSH、USB ウェブモードではアップロードが可能です — ローカルディレクトリモードでは書き込みツールが公開されることはありません。
- mkdir、move、rename、delete はクラウドモードと SSH モードでのみ登録されます — USB ウェブでは公開されません(タブレットの USB ウェブファームウェアにはフォルダー/移動/名前変更/削除のエンドポイントがありません)。これにより、ツール一覧を有効なトランスポートが実際にサポートする機能に限定します。
- 可能な場合、削除前に確認を求めます — クライアントが MCP エリシテーションに対応している場合、
remarkable_deleteは削除前にユーザーへ確認を求めます。MCP SDK 2.x では、この確認は2026-07-28クライアントには複数ラウンドの入力リクエストとして、レガシークライアントにはプッシュ型エリシテーションとして送られます。クライアントが確認を表示できない場合、REMARKABLE_SKIP_CONFIRM=1が設定されていない限り、削除は拒否され(実行されません)、エリシテーションに対応していないクライアントから、書き込みがデフォルトで有効な状態のまま誤って削除されることはありません。クラウドと SSH では、デフォルトで項目をゴミ箱に移動します。SSH では、明示的に要求した場合に限り、permanent=Trueによる完全削除にも対応しています。クラウドでの完全削除は、引き続きアプリ/タブレットでゴミ箱を管理する操作です。自動化環境で確認なしの削除を許可するには、REMARKABLE_SKIP_CONFIRM=1を設定します。すべての書き込みツールにはToolAnnotations(read_only_hint=False)が設定され(削除にはdestructive_hint=Trueも設定)、エージェントのハーネスが MCP 層で書き込みを制御できるようになっています。 - SSH 処理は公平にスケジュールされ、サーバーごとに直列化されます — 1 つの FIFO ディスパッチャーがすべての SSH サブプロセスを管理するため、起動時のスキャン、読み取り、アップロード、変更、更新確認がタブレットの USB CDC 接続を同時に頻繁に使用することはありません。キャッシュ済みのメタデータ読み取りはキューを経由しません。
- 同時に発生した SSH 書き込みでは、更新バリアを共有します — ほぼ同時に発生した書き込みは FIFO 順に永続化され、その後、成功を報告する前に、参加する各呼び出しが 1 回の共有
xochitl再起動を待ちます。上限付きのデバウンスで、バックグラウンド処理や遅延した成功報告を発生させずに一連の書き込みをまとめます。 - SSH の更新では、ファームウェアの緊急再起動経路を回避します — 直列化された更新処理では、再起動の直前に
xochitlの systemd 起動カウンターのみをリセットし、その後、同じ起動状態で SSH セッションが安定し、多重化されていないことを確認します。OpenSSH のエイリアスはssh -Gで解決されます。再起動前に、その実効ホストで USB ウェブに接続できた場合は、ポート 80 の復旧も必須です。確認に失敗した場合はrefresh_pending: trueのままになり、書き込みが再実行されることはありません。 - 再試行の対象は意図的に限定されています — リモートコマンドが開始されていないことが確認できる接続失敗(接続拒否、接続タイムアウト、バナータイムアウトなど)のみ、上限付きの指数バックオフで再試行します。実行後の書き込み失敗や、開始したかどうかが不明な書き込み失敗は再実行されません。その場合は、タブレットを更新して状態を確認するよう呼び出し元に案内するエラーが返されます。
- 明示的な一括操作では、各書き込み(
remarkable_authorを含む)にdefer_restart=Trueを渡すか、REMARKABLE_DEFER_RESTART=1を設定し、最後に 1 回だけremarkable_refresh()を呼び出します。更新を延期した書き込みは、refresh_pending: trueを付けて直ちに返ります。現在のサーバープロセスがクリーンな状態を確認済みの場合に限り、追加の更新は何も行いません。以前のプロセスがディスク上の変更を保留したまま終了したかどうかは新しいプロセスでは判断できないため、新しいプロセスは安全策として更新を 1 回実行します。 - 複数ステップの SSH 書き込みで、変更が確定した後に失敗した場合は、
write_partially_persistedを返し、再実行しないでくださいと伝えるとともに、更新による復旧がまだ保留中かどうかを報告します。共有更新の失敗は、書き込み自体によって変更が発生した参加者にのみ伝播します。検証時または実行前に失敗し、変更が発生していない場合は、元のエラーが維持されます。 - USB HTTP リクエストは、
REMARKABLE_USB_MAX_CONCURRENCY(デフォルトは2)を使用して、同じ上限付きの操作コアを利用します。クラウド同期では、既存のプール型で冪等性を考慮したリクエスト層と、REMARKABLE_SYNC_WORKERSの制御を引き続き使用します。
例
# Upload a PDF
remarkable_upload("paper.pdf", parent_folder="/Research")
# Render Markdown and upload the PDF without creating a local file
remarkable_markdown_to_pdf(
"# Meeting Notes\n\n- Follow up with Sam",
document_name="Meeting Notes",
parent_folder="/Research",
)
# Create a folder
remarkable_mkdir("2024 Archive", parent="/Archive")
# Move a document
remarkable_move("Meeting Notes", "/Archive/2024 Archive")
# Rename a document
remarkable_rename("Untitled", "Q4 Planning Notes")
# Delete (destructive; confirms via elicitation when supported)
remarkable_delete("Old Draft")
# Permanently delete in SSH mode only
remarkable_delete("Disposable Test", permanent=True)
# Bulk import (SSH): defer the restart on each write, then refresh once.
# One xochitl restart for the whole batch instead of one per upload.
remarkable_upload("a.pdf", parent_folder="/Research", defer_restart=True)
remarkable_upload("b.pdf", parent_folder="/Research", defer_restart=True)
remarkable_refresh()
# Author native ink and notebooks (SSH only)
# Append pen/highlighter strokes to a page (coordinates normalized [0,1] from
# the page's top-left). The interactive canvas Save button calls this too.
remarkable_author(
method="draw",
document="Ideas",
page=1,
strokes=[{"points": [[0.1, 0.2], [0.8, 0.2]], "tool": "highlighter", "color": "yellow"}],
)
# Append a blank, drawable page to the end of a notebook
remarkable_author(method="add_page", document="Ideas")
# Create a new blank notebook
remarkable_author(method="create_document", name="Sketches")
# Only seed typed text when the user explicitly requested it.
remarkable_author(method="create_document", name="Meeting notes", text="Agenda\nFollow-ups")
インタラクティブキャンバスアプリ(MCP Apps)
MCP Apps 拡張(SEP-1865)をベースにした、インタラクティブなページビューアーです。MCP Apps に対応したクライアント(ChatGPT、Claude、VS Code、MCP Inspector など)では、サイドパネルにキャンバスが表示され、ドキュメントのページを閲覧したり、ページ間を移動したりできます。
有効にするためのフラグはありません。remarkable_canvas ツールと ui://remarkable/canvas リソースは常に登録され、クライアントの機能情報を通じて機能が自動的にネゴシエーションされます(最新のディスカバリー、または従来の初期化ハンドシェイク)。アプリ対応クライアントではインタラクティブキャンバスが開き、それ以外のクライアントにはレンダリングされたページが画像として返されるため、どの環境でも安全かつ便利に使えます。
次のツールが登録されます。
| ツール | 説明 |
|---|---|
remarkable_canvas(document, page) | インタラクティブキャンバスビューアーでページを開きます |
動作は次のとおりです。
- アプリ対応クライアントでは、キャンバス(
ui://remarkable/canvas、MIME タイプtext/html;profile=mcp-appで宣言)を開き、MCP Apps の postMessage ブリッジを介してドキュメント内のページを移動できます。サーバーは、レンダリングされた各ページをワイヤー結果のstructuredContent(Python ではstructured_content)で返します。 - その他のクライアントにも、レンダリングされたページが埋め込み PNG 画像として返されるため、どの環境でも便利に使えます。ただし、インタラクティブパネルは開きません。
_meta.ui/ui://メタデータは、MCP Apps UI 拡張を通知しないクライアントでは無効です。
キャンバスからの描画と作成
書き込みモードがオン(デフォルト)で、かつアクティブなトランスポートが SSH の場合、キャンバスは書き込み画面になります。
- 描画:ペンまたは蛍光ペンを選んで描画し、デバイスにネイティブ
.rmインクとして保存します。 - ページを追加:空白のネイティブノートブックページを追加待ちにし、そのページに描画してから保存します。
- 情報源は一つだけです。キャンバスは、モデルが呼び出すものと同じ
remarkable_authorツールを呼び出すため(保存時はmethod="draw"、+ページではmethod="add_page")、人間の操作とモデルの操作でバイト単位まで同じ結果が生成されます。
ページが書き込み不可の場合(読み取り専用モード、または SSH 以外のトランスポート)、保存/描画/+ページのコントロールは非表示になり、キャンバスは通常の画像ビューアーに戻ります。iframe ブリッジは MCP Apps 仕様に準拠していますが、使用するクライアントで個別に検証することをおすすめします。
高度な設定
ルートパスによるフィルタリング
reMarkable 上の特定のフォルダーに MCP サーバーのアクセス範囲を限定します。すべての操作がこのフォルダー内に限定されます。
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--ssh"],
"env": {
"REMARKABLE_ROOT_PATH": "/Work",
"GOOGLE_VISION_API_KEY": "your-api-key"
}
}
}
}
この設定では、次のようになります。
remarkable_browse("/")は/Workの内容を表示しますremarkable_browse("/Projects")は/Work/Projectsを表示します/Workの外にあるドキュメントにはアクセスできません
次のような用途に便利です。
- 勤務時間中に仕事のドキュメントに集中する
- 個人的なメモと仕事のメモを分ける
- 特定の AI ワークフローの対象範囲を制限する
カスタム背景色
画像のレンダリングに使用するデフォルトの背景色を設定します。
{
"servers": {
"remarkable": {
"command": "uvx",
"args": ["remarkable-mcp", "--ssh"],
"env": {
"REMARKABLE_BACKGROUND_COLOR": "#FFFFFF"
}
}
}
}
対応する形式:
#RRGGBB:RGB 16 進数。例:#FFFFFF#RRGGBBAA:RGBA 16 進数。例:#00000000
デフォルトは #FBFBFB(reMarkable の用紙の色)です。この設定は remarkable_image ツールと画像リソースの両方に適用されます。
再試行の設定
クラウド API リクエストでは、一時的な障害(HTTP 429、500、502、503、504)やネットワークエラーが発生すると、指数バックオフとジッターを使って自動的に再試行されます。環境変数で調整できます。
| 変数 | デフォルト | 説明 |
|---|---|---|
REMARKABLE_RETRY_ATTEMPTS | 3 | リクエストの最大試行回数(最小 1) |
REMARKABLE_RETRY_DELAY | 2.0 | 指数バックオフの基準となる待機時間(秒) |
レート制限時の再試行では、数値または HTTP 日付形式の Retry-After 値が尊重され、上限は
20 秒です。認証に失敗した場合は再試行せず、トークンが更新されます。
クラウドのパフォーマンスとキャッシュ
クラウドモードは、デバイスを使わないワークフローを高速に実行できるよう設計されています。
- 並列走査:ドキュメントのメタデータを並行して取得します。
- 接続プーリング:HTTP 接続を再利用します。
- コンテンツアドレス方式の Blob キャッシュ:ハッシュをキーに不変の Blob を再利用し、ドキュメントが変更された場合は新しいハッシュを取得します。
通常、これらを設定する必要はありませんが、次の環境変数で調整できます。
| 変数 | デフォルト | 説明 |
|---|---|---|
REMARKABLE_SYNC_WORKERS | 16 | クラウドからの取得に使う並列ワーカー数(上限は 64)。 |
REMARKABLE_DISABLE_CACHE | unset | 1 に設定すると、ディスク上の Blob キャッシュを完全に無効にします。 |
REMARKABLE_CACHE_DIR | ~/.remarkable/cache/blobs | キャッシュされた Blob の保存場所です。 |
REMARKABLE_CACHE_MAX_BLOB | 4194304 (4 MiB) | このサイズを超える Blob はストリーミングされますが、キャッシュされません。 |
キャッシュはローカルでの処理を高速化するだけのものです。REMARKABLE_CACHE_DIR を削除すると、次回の読み込み時に再ダウンロードされます。変更されるクラウドのルートハッシュは常に最新のものを取得するため、古いライブラリが表示されることはありません。
よく使うワークフロー
- 最近のメモを読み、アクションアイテムを抽出します。
- 名前、タグ、入力されたテキスト、OCR の出力を検索します。
- 注釈付き PDF を、元のページと注釈を並べて確認します。
- 選択したメモを別のローカルワークフローに移動します。
- 参照用 PDF や生成した Markdown ドキュメントをアップロードします。
ドキュメント
| ガイド | 説明 |
|---|---|
| SSH のセットアップ | 開発者モードを有効にして SSH を設定します |
| Google Vision のセットアップ | 手書き文字の OCR をセットアップします |
| ツールのリファレンス | ツールの詳細なドキュメント |
| リソースのリファレンス | MCP リソースのドキュメント |
| 機能ネゴシエーション | MCP プロトコルの機能 |
| 開発 | コントリビューションと開発環境のセットアップ |
| 今後の計画 | ロードマップと予定されている機能 |
開発
git clone https://github.com/SamMorrowDrums/remarkable-mcp.git
cd remarkable-mcp
uv sync --all-extras
uv run pytest -v
Dependabot は uv エコシステムを通じて、Python の依存関係と uv.lock を毎週確認し、GitHub Actions も確認します。依存関係の更新は pip-audit で監査されます。更新と検証に使うコマンドの詳細は、開発ガイドを参照してください。
複数トランスポートのスモークテスト
問題が起きているように見える場合は、まず決定論的な AI 不使用のスモークテストを実行してください。このテストでは、MCP 経由で実際のサーバーを動かし、到達可能なすべてのトランスポートで利用可能なすべてのツールを、次の順に実行します:ローカルディレクトリ、クラウド、USB Web、SSH。
uv run python smoke/run_smoke.py # all available modes
uv run python smoke/run_smoke.py --read-only # connectivity + reads only
スモークテストガイド および各モードの期待される動作。
ライセンス
MIT
rmscene、 PyMuPDF、 markdown-it-py を使用し、 ddvk/rmapi から着想を得ています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。