mcpField
T
tldraw

tldraw

远程服务
github.com/tldraw媒体与设计51.1k1 天前更新
文档代码仓库

关于 tldraw

tldraw MCP app 通过 MCP app 规范向 AI Agent 开放交互式 tldraw 画布,使用户可以在支持该规范的 MCP 客户端中与 Agent 协作绘图。它部署在 Cloudflare Workers 上,并提供本地开发与隧道调试流程。

主要功能

  1. 01向 Agent 开放交互式 tldraw 画布
  2. 02search 工具查询 Editor API 规范
  3. 03exec 工具在画布中执行 JavaScript
  4. 04基于 Durable Object 与 SQLite 的检查点存储
  5. 05可在 Claude Desktop 与 ChatGPT 中接入

适用场景

  1. 01让 AI Agent 在白板中绘制图表与流程图
  2. 02在 MCP 客户端中与 Agent 协作编辑画布
  3. 03本地开发并通过隧道在 ChatGPT 中调试

MCP 相关

该项目是一个 MCP 服务,向 MCP 客户端暴露 search、exec 等工具以及面向组件的 app 工具,用于读取与修改 tldraw 画布。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://tldraw-mcp-app.tldraw.workers.dev/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://tldraw-mcp-app.tldraw.workers.dev/mcp
SSEhttps://tldraw-mcp-app.tldraw.workers.dev/sse

工具

6
参数类型必填说明
codestring是接收 `spec` 并返回结果的 JavaScript 代码。必须使用 `return` 生成输出。

详细介绍

tldraw MCP 应用

这是 tldraw MCP 应用。它通过 Model Context Protocol app specification 向 AI Agent 提供可交互的 tldraw 画布,因此你可以在任何支持 MCP app 规范的 MCP 客户端中与 Agent 一起使用 tldraw。

架构

该应用由两部分组成:服务端和小组件。

服务端

服务端通过 src/worker.ts 在 Cloudflare Workers 上运行,使用由 SQLite 支持的 Durable Object(TldrawMCP)持久化存储检查点。

它提供以下工具:

  • search — 在沙盒化的动态 Worker 中查询提取出的 Editor API 规范
  • exec — 通过待处理请求回调桥接,在小组件中的实时编辑器上执行 JavaScript
  • _exec_callback — 仅供应用使用的工具,由小组件调用以完成待处理的 exec 请求
  • save_checkpoint / read_checkpoint — 仅供应用使用的工具,由小组件用于持久化检查点
小组件

小组件是一个 React 应用(src/widget/mcp-app.tsx),在 MCP 宿主的 iframe 中渲染完整的 tldraw 画布。

AI 调用 exec 时,服务端会创建一个待处理请求,小组件会获取该请求,并通过一个聚焦的编辑器代理(src/widget/focused/)运行代码。该代理会在便于 AI 使用的形状格式(简单字符串 ID、扁平的 _type 形状)和 tldraw 的内部 TLShape/TLShapeId 类型之间进行转换,然后调用 _exec_callback,以结果完成待处理请求。画布状态会保存到 Durable Object 的 SQLite 数据库和浏览器本地存储中。

开发

前置条件

小组件构建依赖生成的文件(editor-api.json、method-map.json),这些文件是从编辑器的 TypeScript 声明中提取的。开发或构建 mcp-app 之前,需要先构建核心软件包:

# from the repo root
pnpm build

这会生成 .tsbuild/ 输出,供 pnpm extract-api 读取。build 和 dev 脚本会自动运行 extract-api,因此无需单独调用。

软件包脚本

在 apps/mcp-app 目录中运行所有命令。

命令作用
pnpm build构建小组件 HTML
pnpm dev构建小组件 + 启动本地 Cloudflare Worker(在 localhost:8787 上运行 HTTP MCP)
pnpm dev:tunnel构建小组件 + 启动稳定的命名 Cloudflare 隧道 + 本地 Worker,并将 WORKER_ORIGIN 设置为隧道 URL
pnpm run deploy构建小组件 + 将 Cloudflare Worker 部署到生产环境

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 中,Worker 默认采用适用于生产环境的安全行为,包括将 MCP_IS_DEV="false" 设为环境变量。本地 HTTP 开发脚本会将其覆盖为 MCP_IS_DEV=true,以便本地 Claude/ChatGPT 连接器禁用 ui.domain,而生产部署会继续启用该设置。

Cursor 配置

在 ~/.cursor/mcp.json 中添加以下两个服务:

{
	"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 本地开发时,使用 claude_desktop_config.json 和本地 HTTP 服务端:

{
	"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。

  1. 打开 Claude Desktop
  2. 在侧边栏中,前往 自定义
  3. 打开 连接器
  4. 点击添加连接器的按钮,然后选择 添加自定义连接器
  5. 为其命名,例如 tldraw
  6. 将 https://tldraw-mcp-app.tldraw.workers.dev/mcp 粘贴为服务 URL

免费方案不提供 添加自定义连接器 选项,因此你可能需要 Max 或其他付费方案。

如果你需要在 Claude Desktop 中访问 Notion,请另外使用 Notion MCP 连接器。

ChatGPT 本地开发

ChatGPT 需要 HTTPS 源站,因此你需要 Cloudflare 隧道。你必须是 OpenAI 组织/工作区的管理员才能进行本地开发。

首次设置(每台机器只需一次):

  1. 运行 cloudflared tunnel login 并选择 tldraw.xyz 区域

之后每次会话:

  1. 在 apps/mcp-app 中运行 pnpm dev:tunnel
  2. 它会提供你的固定主机名,例如 https://<user>-mcp-app-dev.tldraw.xyz(首次运行还会创建具名隧道及其 DNS 路由)
  3. 在 ChatGPT 网页版(而非桌面应用)中,前往 应用,并使用该 URL 添加你的应用
  4. 然后,你可以在 ChatGPT 网页版以及桌面或移动应用中进行测试

由于每位用户的主机名都是固定的,你只需在 ChatGPT 中添加一次应用——之后运行 pnpm dev:tunnel 都会重复使用同一个 URL。

dev:tunnel 会自动将 WORKER_ORIGIN 连接到固定隧道 URL,并为本地 worker 设置 MCP_IS_DEV=true。

迭代流程
  1. 在 apps/mcp-app 中修改代码
  2. 运行相关脚本(dev 或 dev:tunnel)
  3. 在客户端中断开并重新连接 MCP 服务(或重新加载页面/应用)
  4. 修改 widget 时,确保重新构建,可以运行 pnpm build,也可以重新运行任一开发脚本。

修改后重新连接服务是获取新代码最可靠的方式,尤其是在 widget HTML 发生变化时。

会话存储生命周期

每个 MCP 会话都是一个 TldrawMCP Durable Object。它最多保留 MAX_CHECKPOINTS(50)个画布快照,并会在未保存检查点达 IDLE_TTL_MS(7 天)后销毁自身——该计划在 init() 中启动,并在每次检查时重新启动。

联系我们

欢迎在 Twitter/X 上关注我们:@tldraw。

社区

有问题、意见或反馈?加入我们的 Discord。如需了解最新消息和发行说明,请访问 tldraw.dev。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。