Skip to main content
Glama

CCPhoto

npm version License: MIT Node.js

通过本地网络把手机相机桥接到 Claude Code。

CCPhoto 是一个 MCP 服务器,让你可以在手机上拍照并直接发送给 Claude Code。把手机对准电路板、白板、标签——任何东西——Claude 都能立即看到。无需安装应用;手机浏览器的相机就能完成所有工作。

 +----------+        WiFi        +-----------+       MCP        +-------------+
 |  Phone   |  photos, voice,   |  CCPhoto  |   image/text     |  Claude     |
 |  Camera  |  mode switches    |  Server   |   data            |  Code       |
 |  + Mic   | <--------------- |  (local)  | <--------------- |             |
 +----------+   TTS, guidance   +-----------+   send_to_phone  +-------------+

快速开始

npx ccphoto --setup        # One-time: register CCPhoto as an MCP server

然后在 Claude Code 中,只需说 “拍张照片”——剩下的事交给 Claude。

Related MCP server: phone-mcp

工作原理

  1. Claude 调用 capture_photo MCP 工具。

  2. 你的终端中会出现一个二维码。

  3. 用手机扫描它——手机浏览器会打开一个相机页面。

  4. 拍照——Claude 直接接收图像。

无需安装应用。手机原生相机会通过 <input capture> HTML 属性访问。

常驻模式

服务器在第一次调用 capture_photo 时启动,并在整个会话期间保持运行。你的手机保持连接——无需重新扫描二维码。想拍多少张就拍多少张,也可以通过 Claude 随时调取任意一张。

拍照请求通知

当你的手机已连接且 Claude 再次调用 capture_photo 时,手机会收到一条 SSE 推送通知。拍照按钮会闪烁,提示你 Claude 正在等待新照片。点击即可拍摄。

双向消息

Claude 可以使用 send_to_phone 工具向你的手机发送内容。文本、markdown 和图片会显示在手机上的可折叠面板中。这样,你的手机就变成了参考屏——当你双手都在忙时,Claude 可以显示接线说明、引脚图或代码片段。

照片标注

拍照后会出现一个标注界面,你可以在发送前在图片上绘制。使用彩色画笔(红、蓝、绿、白)圈出组件、绘制箭头或高亮感兴趣的区域。点击“发送”上传标注后的图片,或点击“跳过”发送未标注的原图。

实时视频助手

从手机相机启动一个准实时视频流。Claude 会观看实时画面(每 3 秒一帧)并实时提供指导——把相机对准 Claude 要求的地方,就能在手机屏幕上收到指示。

需要 HTTPS(用于相机访问)。在 Android Chrome 上,只需接受一次证书警告。目前仅支持 Android/Chrome;iOS 支持正在规划中。

语音交互

点击手机上的麦克风按钮即可对 Claude 说话。语音会使用浏览器内置的 Speech Recognition API 转写为文本并发送。Claude 可以使用带 speak: true 的 send_to_phone 以语音音频回复——手机会通过文本转语音功能大声朗读回复。

这让你无需动手也能完成工作:拿着烙铁时提问,不用看屏幕就能听到答案。麦克风按钮只出现在支持语音识别的浏览器上(Android Chrome)。

生成式 UI

Claude 可以根据它所看到的内容,在手机上生成丰富的上下文 UI。把相机对准产品、组件、食谱或任何东西——Claude 会分析它,并向你的手机屏幕发送一个自定义交互界面。

支持 12 种组件类型:Card、Text、Image、Metric、MetricGrid、Checklist、StepByStep、Alert、Table、Timer、Badge 和 Divider。Claude 会将这些组件组合成上下文相关的布局——带有浇水清单的植物养护卡片、带有引脚图的电路元件表,或带有计时器的分步维修指南。

使用 send_to_phone 并传入 ui_spec 参数来生成自定义 UI。

安装

npx(推荐,无需安装)

npx ccphoto --setup

全局安装

npm install -g ccphoto
ccphoto --setup

从源码安装

git clone https://github.com/stepankaiser/ccphoto.git
cd ccphoto
npm install
npm run build
node dist/index.js --setup

如果你希望手动注册 MCP 服务器,而不是使用 --setup:

claude mcp add ccphoto -- npx ccphoto --mcp

MCP 工具参考

工具

描述

参数

capture_photo

启动服务器并显示二维码。如果手机已连接,则会收到推送通知。

--

wait_for_photo

阻塞直到照片上传或超时到期。在 capture_photo 之后立即调用。

timeout_seconds(可选,默认:120)

get_latest_photo

返回最近的照片,或按文件名返回特定照片。

filename(可选)

list_photos

列出所有已拍摄照片及其文件名、时间戳和大小。

--

send_to_phone

向手机屏幕发送文本、图片或丰富的生成式 UI。手机将成为显示说明、图表或引脚图的参考屏。

text、image_base64、image_mime_type、speak、ui_spec(全部可选)

start_livestream

从手机相机启动实时视频流。生成 HTTPS 证书并返回二维码。

--

get_live_frame

从实时相机流中获取最新帧,并附带新鲜度时间戳。

--

独立 CLI 模式

CCPhoto 也可以独立运行,无需 Claude Code:

npx ccphoto                                  # Start with defaults
npx ccphoto --port 4000 --output-dir ./photos  # Custom port and directory

二维码会打印到终端。扫描二维码、拍照,照片会保存到磁盘。服务器会持续运行,支持多次拍摄。

CLI 选项

选项

描述

默认值

--setup

将 CCPhoto 注册为 Claude Code 中的 MCP 服务器

--

--mcp

作为 MCP 服务器运行(由 Claude Code 内部使用)

--

--port <number>

HTTP 服务器端口

3847

--output-dir <path>

照片保存目录

~/.ccphoto/captures/

--help

显示帮助

--

配置

环境变量

描述

默认值

CCPHOTO_DIR

覆盖默认的照片存储目录

~/.ccphoto/captures/

安全

  • 会话令牌——每个服务器会话都会生成一个加密随机的 32 字符十六进制令牌。每个请求都必须包含该令牌。

  • 时序安全比较——令牌验证使用 crypto.timingSafeEqual 来防止时序攻击。

  • 仅限本地网络——服务器绑定到你的本地网络 IP。数据不会离开你的网络。

  • 无外部服务——照片通过局域网上的 HTTP 在手机和服务器之间直接传输。不会上传任何内容到云端。

故障排除

无法检测到本地网络 IP

确保你的计算机已连接到 WiFi(在某些配置下,仅连接以太网是不够的)。CCPhoto 需要一个手机可以访问的局域网 IP 地址。

二维码无法扫描

尝试增大终端字体大小或减小终端宽度,使二维码以可扫描的分辨率渲染。你也可以复制二维码下方打印的 URL,并手动输入到手机浏览器中。

手机相机无法打开

在某些浏览器上,相机拍摄功能需要 HTTPS,但大多数移动浏览器允许本地网络地址通过纯 HTTP 使用该功能。如果你的浏览器阻止相机访问,请尝试使用 Safari(iOS)或 Chrome(Android)。

上传失败

请确认你的手机和计算机连接到同一个 WiFi 网络。启用客户端隔离的企业网络可能会阻止设备之间的流量。请尝试改用个人热点或家庭网络。

开发

npm install          # Install dependencies
npm run build        # Compile TypeScript
npm run dev          # Watch mode (recompile on change)
npm test             # Run the test suite (94 tests)

测试使用 Node.js 内置的测试运行器,并且需要 tsx 开发依赖来执行 TypeScript。

项目结构:

src/
  index.ts        CLI entry point and arg parsing
  mcp.ts          MCP server with tool definitions
  server.ts       HTTP server, SSE, upload handling
  mobile-page.ts  Self-contained HTML for the phone camera page
  storage.ts      Photo file management
  network.ts      Local IP detection
  token.ts        Session token generation and validation
  types.ts        Shared TypeScript interfaces

路线图

  • 真实域名 + Let's Encrypt 证书——使用带有有效证书的注册域名,以在任何设备(包括 iOS Safari)上实现零浏览器警告。

  • iOS 实时视频支持——实时视频流目前可在 Android/Chrome 上使用。iOS Safari 支持需要受信任的证书。

  • 相机画面上的 AR 叠加——直接在实时相机视图上实时绘制标注。

  • 多相机支持——同时连接多部手机,以获得不同视角。

  • WebRTC 流式传输——当 Claude 的视觉处理延迟改善后,用 WebRTC 取代 HTTP 帧轮询。

贡献

欢迎贡献。

  1. Fork 本仓库

  2. 创建功能分支(git checkout -b my-feature)

  3. 进行你的修改

  4. 运行 npm test 以确认一切正常

  5. 提交你的修改(git commit -m "Add my feature")

  6. 推送到你的分支(git push origin my-feature)

  7. 打开一个拉取请求

报告 bug 时,请附上你的 Node.js 版本、操作系统以及重现问题的步骤。

许可证

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables Claude Code sessions on a PC to access iPhone data such as photos, video, location, contacts, calendar, and clipboard over Tailscale, and supports plugin-based browser automations for logged-in services.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables desktop agents such as Claude Code and Codex to control an Android phone as a long-lived action endpoint, pairing over outbound WebSocket and exposing phone capabilities as MCP tools with local pause and revocation.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables voice-driven control of coding agents via Claude on your phone, allowing status checks, stand-ups, sending prompts, and receiving push notifications when agents finish or need decisions.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables Claude or any MCP agent to see and operate a real Android phone over adb, with fast screen reads, tap/type/swipe actions, app launching, deep links, and brand-aware setup guidance, all without admin rights or an Android SDK.
    MIT