tldraw について
tldraw MCP app は、MCP app 仕様を通じて対話型の tldraw キャンバスを AI エージェントに公開するアプリです。この仕様に対応する任意の MCP クライアントから、エージェントとともに図や画面を編集したいユーザー向けです。Cloudflare Workers 上で動作し、ローカル開発とトンネルを使った検証の手順も含まれています。
主な機能
- 01エージェントから操作できる対話型 tldraw キャンバス
- 02Editor API 仕様を検索する search ツール
- 03キャンバス上で JavaScript を実行する exec ツール
- 04Durable Object と SQLite によるチェックポイント保存
- 05Claude Desktop と ChatGPT からの接続
活用シーン
- 01AI エージェントにホワイトボード上で図を描かせる
- 02MCP クライアントからエージェントとキャンバスを共同編集する
- 03トンネル経由で ChatGPT からローカル環境を検証する
MCP 対応
本プロジェクトは MCP サーバーであり、MCP クライアントに search と exec などのツールを公開します。ウィジェットが使用するアプリ専用ツールは、キャンバスのチェックポイント保存に利用されます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://tldraw-mcp-app.tldraw.workers.dev/mcpclaude mcp add --transport http tldraw https://tldraw-mcp-app.tldraw.workers.dev/mcp{"mcpServers":{"tldraw":{"type":"http","url":"https://tldraw-mcp-app.tldraw.workers.dev/mcp"}}}Cursor で開く{"servers":{"tldraw":{"type":"http","url":"https://tldraw-mcp-app.tldraw.workers.dev/mcp"}}}VS Code で開く{"mcpServers":{"tldraw":{"type":"http","url":"https://tldraw-mcp-app.tldraw.workers.dev/mcp"}}}{"mcpServers":{"tldraw":{"serverUrl":"https://tldraw-mcp-app.tldraw.workers.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://tldraw-mcp-app.tldraw.workers.dev/mcphttps://tldraw-mcp-app.tldraw.workers.dev/sseツール
6| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| code | string | はい | `spec` を受け取って結果を返す JavaScript コードです。出力には `return` を使用する必要があります。 |
詳細
tldraw MCP アプリ
これは tldraw MCP アプリです。Model Context Protocol アプリ仕様を通じて、インタラクティブな tldraw キャンバスを AI エージェントに公開します。これにより、MCP アプリ仕様をサポートする任意の MCP クライアントで、エージェントと一緒に tldraw 内で作業できます。
アーキテクチャ
このアプリは 2 つの部分で構成されています: サーバーとウィジェットです。
サーバー
サーバーは、src/worker.ts を介して Cloudflare Workers 上で動作し、SQLite に支えられた Durable Object(TldrawMCP)を使用してチェックポイントを永続的に保存します。
公開しているもの:
search— サンドボックス化された動的ワーカー内で、抽出された Editor API 仕様をクエリしますexec— 保留中リクエストのコールバックブリッジを介して、ウィジェット内のライブエディターに対して JavaScript を実行します_exec_callback— ウィジェットが保留中のexecリクエストを解決するために呼び出す、アプリ専用ツールsave_checkpoint/read_checkpoint— ウィジェットがチェックポイントの永続化に使用する、アプリ専用ツール
ウィジェット
ウィジェットは React アプリ(src/widget/mcp-app.tsx)で、MCP ホストの iframe 内に完全な tldraw キャンバスをレンダリングします。
AI が exec を呼び出すと、サーバーが保留中リクエストを作成し、ウィジェットがそれを受け取ります。ウィジェットは、AI に扱いやすいシェイプ形式(シンプルな文字列 ID、フラットな _type シェイプ)と tldraw 内部の TLShape/TLShapeId 型との間を変換する専用エディタープロキシ(src/widget/focused/)を通じてコードを実行し、その後 _exec_callback を呼び出して保留中リクエストを結果で解決します。キャンバスの状態は、Durable Object の SQLite データベースとブラウザーのローカルストレージにチェックポイントされます。
開発
前提条件
ウィジェットのビルドは、エディターの TypeScript 宣言から抽出される生成ファイル(editor-api.json、method-map.json)に依存しています。mcp-app を開発またはビルドする前に、まずコアパッケージをビルドする必要があります:
# from the repo root
pnpm build
これにより、pnpm extract-api が読み取る .tsbuild/ 出力が生成されます。build および dev スクリプトは extract-api を自動的に実行するため、別途呼び出す必要はありません。
パッケージスクリプト
すべてのコマンドは apps/mcp-app から実行してください。
| コマンド | 実行内容 |
|---|---|
pnpm build | ウィジェットの HTML をビルド |
pnpm dev | ウィジェットをビルド + ローカル Cloudflare ワーカーを起動(localhost:8787 で HTTP MCP) |
pnpm dev:tunnel | ウィジェットをビルド + 安定した名前付き Cloudflare トンネル + ローカルワーカーを起動(WORKER_ORIGIN をトンネル URL に設定) |
pnpm run deploy | ウィジェットをビルド + Cloudflare ワーカーを本番環境にデプロイ |
pnpm dev:tunnel を使用するには、マシンに cloudflared CLI がインストールされていること、および一度だけ cloudflared tunnel login を実行していることが必要です。これは名前付きトンネルを介してユーザーごとに安定したホスト名(<user>-mcp-app-dev.tldraw.xyz)を提供するため、ホスト型 MCP クライアントに登録する URL が実行ごとに変わることなく、常に同じままになります。ユーザースラッグのデフォルトは whoami です。MCP_TUNNEL_USER、MCP_TUNNEL_ZONE、PORT で上書きできます(ゾーンやポートも同様です)。ゾーンは Cloudflare でホストされているゾーンである必要があります(tldraw.xyz は該当しますが、tldraw.dev/tldraw.com は Vercel 上にあり動作しません)。
ワーカーは wrangler.toml でデフォルトで本番環境に安全な動作をするよう設定されており、MCP_IS_DEV="false" の設定も含まれます。ローカル HTTP 開発スクリプトはこれを MCP_IS_DEV=true で上書きするため、ローカルの Claude/ChatGPT コネクターは ui.domain を抑制しますが、本番環境のデプロイでは有効のままになります。
Cursor のセットアップ
~/.cursor/mcp.json に次の 2 つのサーバーを追加します:
{
"mcpServers": {
"tldraw": {
"transport": "http",
"url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
},
"tldraw-local": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://127.0.0.1:8787/mcp"]
}
}
}
Claude Desktop のローカルセットアップ
ローカルの Claude Desktop 開発では、ローカル HTTP サーバーを使用して claude_desktop_config.json を設定します:
{
"mcpServers": {
"tldraw-local": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://127.0.0.1:8787/mcp"]
}
}
}
Claude Desktop でのリモートセットアップ
Claude Desktop でリモート MCP サーバーを試したい場合は、本番 URL を claude_desktop_config.json に追加するのではなく、アプリ内のコネクターフローを使用してください。
- Claude Desktop を開きます
- サイドバーで Customize に移動します
- Connectors を開きます
- コネクターを追加するボタンをクリックし、Add custom connector を選択します
tldrawなどの名前を付けます- サーバー URL として
https://tldraw-mcp-app.tldraw.workers.dev/mcpを貼り付けます
Add custom connector オプションは無料プランでは利用できないため、Max などの有料プランが必要になる場合があります。
Claude Desktop で Notion へのアクセスが必要な場合は、別途 Notion MCP コネクターを使用してください。
ChatGPT でのローカル開発
ChatGPT は HTTPS オリジンを必要とするため、Cloudflare トンネルが必要です。ローカル開発を行うには、OpenAI 組織/ワークスペースの管理者である必要があります。
初回セットアップ (マシンごとに 1 回):
cloudflared tunnel loginを実行し、tldraw.xyzゾーンを選択します
その後、毎回のセッションで:
apps/mcp-appでpnpm dev:tunnelを実行します- 安定したホスト名 (例:
https://<user>-mcp-app-dev.tldraw.xyz) で提供されます (初回実行時には名前付きトンネルとその DNS ルートも作成されます) - ChatGPT のウェブ版 (デスクトップアプリではありません) で Apps に移動し、その URL を使ってアプリを追加します
- その後、ChatGPT のウェブ版とデスクトップまたはモバイルアプリの両方でテストできます
ホスト名はユーザーごとに安定しているため、ChatGPT でアプリを追加するのは 1 回だけで済みます。以降の pnpm dev:tunnel の実行では同じ URL が再利用されます。
dev:tunnel は WORKER_ORIGIN を安定したトンネル URL に自動的に接続し、ローカルワーカーに対して MCP_IS_DEV=true を設定します。
イテレーションループ
apps/mcp-appでコードを変更します- 該当するスクリプト (
devまたはdev:tunnel) を実行します - クライアントで MCP サーバーを切断して再接続します (またはページ/アプリを再読み込みします)
- ウィジェットを変更する場合は、
pnpm buildを実行するか、いずれかの開発スクリプトを再実行して、必ず再ビルドしてください。
変更後にサーバーを再接続することが、新しいコード (特にウィジェットの HTML が変更された場合) を取り込む最も確実な方法です。
セッションストレージのライフサイクル
各 MCP セッションは TldrawMCP Durable Object です。最大 MAX_CHECKPOINTS (50) 個のキャンバススナップショットを保持し、チェックポイントの保存なしで IDLE_TTL_MS (7 日間) が経過すると自身を破棄します。このスケジュールは init() で設定され、チェックごとに再設定されます。
お問い合わせ
Twitter/X で @tldraw を見つけてください。
コミュニティ
質問、コメント、フィードバックがありますか? Discord に参加してください。最新ニュースとリリースノートについては、tldraw.dev をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。