尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

TRAA(2)MCP Server 接入 Claude Desktop:指定窗口截图配置与验证

TRAA(2)MCP Server 接入 Claude Desktop:指定窗口截图配置与验证 1. 为什么要在 Claude Desktop 里做指定窗口截图TRAA MCP Server 是一个基于 Model Context Protocol 的屏幕捕获服务它能枚举系统里的显示器和窗口并按 source_id 精确截取某一个窗口的画面。Claude Desktop 本身只能聊天但接上 MCP Server 之后它就能调用工具去看你指定的窗口比如某个正在跑的 IDE、浏览器页面、监控面板然后把截图内容作为图像返回给模型继续分析。这个能力适合谁三类人最常用一是做 UI 自动化验证的开发者想让模型帮忙看某个应用窗口有没有渲染异常二是做多窗口监控的运维需要定时抓取特定窗口状态三是做 Agent 实验的人希望给模型一个眼睛让它能观察本机应用而不是只处理文本。我试过把 TRAA 接到 Claude Desktop 上截取一个 Electron 应用的窗口整个链路是Claude Desktop 读取claude_desktop_config.json→ 启动 TRAA MCP Server 进程stdio 模式→ 模型根据用户指令调用enum_screen_sources找到目标窗口 → 调用create_snapshot或save_snapshot拿到图像 → 图像回传给模型。关键点在于 source_id 必须准确窗口标题要能对上否则截出来的是整个显示器而不是你要的那个窗口。和直接写 Python 脚本调 TRAA 相比MCP 接入的价值在于对话式触发。你不需要每次改代码直接在 Claude Desktop 里说截一下标题包含 VSCode 的窗口模型会自己走枚举和截图两步。下面我把配置骨架、验证动作和常见报错都拆开讲照着做就能跑通。2. TaoToken 前置准备与 MCP 运行环境在动 Claude Desktop 配置之前先把两件事准备好模型侧的访问凭证以及本机的 Python/uv 环境。TRAA MCP Server 本身是本地进程不走网络但 Claude Desktop 要调用模型能力需要配置可用的 API 入口。这里用 TaoToken 作为统一入口官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。第一步拿到 API Key。打开 https://taotoken.net/api-keys 登录后创建一个 Key复制保存。这个 Key 后面会写进 Claude Desktop 的配置里作为模型调用的凭证。注意 Key 只显示一次丢了就重新建。第二步确认本机 Python 版本。TRAA 依赖mcp1.0.0、anyio4.5、traa0.1.5、pillow11.1.0建议 Python 3.10 以上。用 uv 管理依赖最省事没装 uv 的话先装pip install uv第三步准备项目目录。把 traa-mcp 源码拉到本地进入目录后执行uv sync这一步会根据pyproject.toml把 mcp、traa、pillow 等依赖装进虚拟环境。装完可以验证一下uv run python -c import traa, mcp, PIL; print(deps ok)输出deps ok就说明依赖齐了。如果报ModuleNotFoundError: No module named traa多半是没在项目根目录执行或者 uv 没识别到虚拟环境重新uv sync一次即可。第四步单独测一下 MCP Server 能不能启动。stdio 模式是默认模式直接跑uv run traa_mcp_server正常情况下进程会挂起等待 stdio 输入不报错就说明 Server 本身没问题。按 CtrlC 退出。如果你想用 SSE 模式调试可以跑uv run traa_mcp_server-sse --port 3001SSE 模式适合用浏览器或 curl 手动测但 Claude Desktop 走的是 stdio所以正式接入还是用默认模式。这里要提醒一点TaoToken 的 Key 是给 Claude Desktop 调模型用的不是给 TRAA 用的。TRAA 是纯本地截图工具不需要联网。两者职责分开配置时别把 Key 写进 TRAA 的启动参数里。3. 可复制的 Claude Desktop MCP 配置骨架Claude Desktop 的 MCP 配置写在claude_desktop_config.json里。不同系统路径不一样macOS~/Library/Application Support/Claude/claude_desktop_config.jsonWindows%APPDATA%\Claude\claude_desktop_config.jsonLinux~/.config/Claude/claude_desktop_config.json如果文件不存在就新建一个。下面是一份可直接改的配置骨架把command和args换成你本机的实际路径{ mcpServers: { traa: { command: uv, args: [ --directory, /Users/yourname/projects/traa-mcp, run, traa_mcp_server ], env: { PYTHONUNBUFFERED: 1 } } } }几个关键点解释一下。command用uv而不是python是因为 uv 能自动找到项目虚拟环境避免路径混乱。--directory后面必须写 traa-mcp 项目的绝对路径Windows 下写成C:\\projects\\traa-mcp这种双反斜杠形式。run traa_mcp_server是启动 stdio 模式的入口不要加-sseClaude Desktop 不认 SSE。如果你不用 uv也可以直接用虚拟环境里的 python{ mcpServers: { traa: { command: /Users/yourname/projects/traa-mcp/.venv/bin/python, args: [-m, traa_mcp_server], env: { PYTHONUNBUFFERED: 1 } } } }这种写法要求 traa-mcp 包已经以可编辑模式装进虚拟环境否则-m traa_mcp_server找不到模块。稳妥起见还是推荐 uv 方案。模型侧的配置不在这个文件里。Claude Desktop 的模型入口需要在应用内设置或者通过环境变量指向 TaoToken 的 API 地址。如果你用的是支持自定义 Base URL 的客户端把 Base URL 填https://taotoken.net/apiKey 填刚才在 https://taotoken.net/api-keys 创建的那串。Model ID 按你实际使用的模型名填比如claude-sonnet-4-20250514这类。三件套Base URL Key Model ID缺一不可少一个就会在调用时报 401 或 model not found。配置写完后完全退出 Claude Desktop 再重新打开。注意是完全退出macOS 上要 CmdQ不是关窗口。重启后 Claude Desktop 会读取配置并拉起 traa 这个 MCP Server 进程。你可以在对话界面看到工具列表里多出enum_screen_sources、create_snapshot、save_snapshot这几个工具说明接入成功。4. 验证请求从枚举窗口到拿到截图配置生效后验证分三步走先枚举再定位最后截图。整个过程在 Claude Desktop 对话框里用自然语言触发模型会自动调用对应工具。第一步枚举屏幕源。在对话框输入列出当前系统所有的屏幕和窗口源告诉我每个的 ID 和标题模型会调用enum_screen_sources返回类似这样的结构ID: 1 标题: 整个屏幕 类型: 显示器 位置: (0, 0, 2560, 1440) ID: 2 标题: Visual Studio Code 类型: 窗口 位置: (100, 80, 1500, 900) ID: 3 标题: Chrome - TaoToken 文档 类型: 窗口 位置: (200, 120, 1400, 1000)这一步的目的是拿到目标窗口的 source_id。注意is_window为 true 的才是窗口显示器类型的 source_id 截出来是全屏。窗口标题可能被截断比如 Chrome 只显示当前标签页标题所以定位时用关键词匹配更稳。第二步指定窗口截图。假设你要截 VSCode 那个窗口source_id 是 2输入截取 ID 为 2 的窗口保存到 /tmp/vscode_shot.jpeg质量 80模型会调用save_snapshot参数对应source_id2、file_path/tmp/vscode_shot.jpeg、quality80、formatjpeg。执行成功后返回保存路径你去对应目录就能看到文件。如果你想让模型直接看截图内容而不是存文件就用create_snapshot截取 ID 为 2 的窗口尺寸 1920x1080然后描述画面里有什么模型会调用create_snapshot拿到 MCP Image 对象图像会作为多模态输入回传给模型它就能基于画面内容回答。这一步是 TRAA 接入 Claude Desktop 最有价值的地方——模型真的看到了你的窗口。第三步确认结果。成功的标志有三个一是工具调用返回没有 error 字段二是save_snapshot的路径下确实生成了文件用ls -lh /tmp/vscode_shot.jpeg能看到大小三是create_snapshot返回的图像能被模型正确描述比如你问窗口标题栏写的是什么模型能答出来。如果截图是黑屏或者只有一部分多半是窗口被遮挡或者最小化了。TRAA 截的是窗口当前渲染内容最小化的窗口可能拿不到有效画面。把目标窗口置顶再截一次。5. 常见报错排查对照接入过程中最容易撞上四类报错我按真实遇到的顺序列出来对照着查。401 Unauthorized。这个报错来自模型侧不是 TRAA。说明 TaoToken 的 Key 没填对或者 Base URL 写错了。检查两点Base URL 必须是https://taotoken.net/api结尾不要多加/v1之类的路径Key 要从 https://taotoken.net/api-keys 重新复制注意别把前后空格带进去。如果用的是环境变量确认变量名和客户端要求的一致。local proxy failed / connection refused。这个报错说明 Claude Desktop 拉不起 MCP Server 进程。原因通常是command路径不对或者--directory指向的目录里没有pyproject.toml。排查方法把配置里的 command 和 args 拼成一条命令在终端里手动跑一遍uv --directory /Users/yourname/projects/traa-mcp run traa_mcp_server如果终端里能跑起来说明配置路径没问题那就是 Claude Desktop 没重启干净彻底退出再开。如果终端里也报错按报错信息修常见的是No module named traa_mcp_server说明包没装好回项目目录重新uv sync。reading choices / unexpected end of JSON。这个报错出现在模型返回阶段通常是模型输出被截断或者格式不对。检查 Model ID 是否填对有些模型名带日期后缀写错了会走到错误的端点。另外把max_tokens调大一点截图描述类任务输出较长太小会被截断。OAuth / token expired。如果客户端走的是 OAuth 流程而不是直接填 Key过期后会报这个。重新走一遍授权或者在 https://taotoken.net/console 里检查 Key 状态是否正常。注意 TaoToken 的 Key 是长期有效的除非你手动删除一般不会自己过期。还有一个隐蔽的坑save_snapshot的file_path目录不存在时会报错。TRAA 虽然支持自动创建目录但某些权限受限的路径比如系统目录会失败。换成用户目录下的路径比如~/shots/先手动mkdir -p ~/shots更稳。排查时记住一个原则TRAA 相关报错看终端输出模型相关报错看客户端日志。两者分开定位别混在一起猜。6. 长期使用建议与接入入口跑通之后如果你打算把 TRAA 截图能力长期用在编码或 Agent 流程里有几个实践建议。一是把常用的窗口 source_id 记下来窗口 ID 在应用重启后可能变化但标题关键词相对稳定用标题包含 XXX来定位比硬编码 ID 更可靠。二是截图质量按场景调纯文字窗口用 PNG 质量更好彩色画面用 JPEG 质量 60-80 能压到 1MB 以内。三是别把截图目录设在系统盘根目录统一放~/traa_shots/方便清理。如果你需要更稳定的模型调用和更高的并发额度可以走 Coding Plan适合长期编码和 Agent 场景https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。只是想快速验证模型对话效果用模型对话入口就行https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有各客户端的配置示例。Key 管理还是 https://taotoken.net/api-keys 。最后补一个实用技巧TRAA 的enum_screen_sources返回的位置信息是(left, top, right, bottom)四元组你可以用它来判断窗口是否在屏幕外或者被移到了副屏。如果截图总是拿到空白先看位置坐标是不是负数或者超出主屏分辨率把窗口拖回主屏再截。这个细节在自动化脚本里特别容易踩手动验证时留意一下就能省很多调试时间。
返回列表