Dittu

io.github.BorisGujvin由 GitHub 账号 BorisGujvin 发布v1.0.0更新于 Oct 24, 2026

Turns a phone into a camera+Bluetooth remote so AI assistants can see and control any PC.

已验证Streamable HTTP可网页运行浏览器自动化开发者工具

概览

AI 生成的概览

Dittu 让 AI 助手通过手机摄像头看到电脑屏幕,并用蓝牙鼠标和键盘控制这台电脑。

可以做什么
通过手机摄像头拍摄显示器画面,提供普通、叠加网格、局部放大带十字准星以及未处理的原始画面,用于定位目标和排查对齐问题。按归一化屏幕坐标移动光标、单击、双击和滚动。通过配对的蓝牙键盘输入文字并发送按键组合。读取和更新四角校准,把摄像头画面映射到屏幕。
适用场景
适合需要让助手操作无法安装软件的电脑,或没有远程桌面环境、但可以把手机架在显示器前的情况。适用于重复性桌面任务和实际屏幕操作,而不只是描述。
运行要求
远程 streamable-HTTP 端点;在 Dittu Android 应用中注册设备后获得的 API 密钥;一部架在三脚架上、朝向显示器的 Android 手机,并与目标电脑完成蓝牙配对。需要网络访问。
安装前请注意
端点需要 Bearer API 密钥,应妥善保密。助手可以在目标电脑上点击、输入、发送快捷键和修改校准,可能产生非预期操作,执行前宜先用截图确认目标。屏幕的摄像头画面会发送到 Dittu 服务。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Dittu,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.BorisGujvin%2Fdittu/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "dittu": {
      "type": "http",
      "url": "https://app.dittu.org/mcp"
    }
  }
}

README

Dittu MCP Server

Dittu turns a phone into the eyes and hands of an AI assistant. Stand the phone on a tripod facing a monitor — the camera reads the screen, Bluetooth pairs as a real mouse and keyboard. No software to install on the target computer, no remote-desktop setup.

Tools

ToolWhat it doesOutputWhen to use
take_screenshotCaptures what the phone's camera currently sees on the monitorImageBefore any action, to check current screen state
take_screenshot_with_gridSame as take_screenshot but overlays a coordinate gridImageTo locate exact click targets by coordinate
take_screenshot_with_crosshair(nx, ny)Zoomed crop around a point with a crosshair marking the targetImageTo verify the cursor will land exactly where intended, before clicking a small/important target
get_raw_screenshotUnprocessed camera frame, no corner-mapping appliedImageDebugging camera alignment issues
move_mouse(nx, ny)Moves the cursor to a normalized screen coordinate without clickingConfirmationPositioning the cursor before a verified click
click(nx, ny)Left-clicks at a normalized screen coordinateConfirmationStandard click actions
double_click(nx, ny)Double left-clicks at a normalized screen coordinateConfirmationOpening files/apps, other double-click actions
scrollScrolls the screen in a given directionConfirmationNavigating long pages or lists
keySends a keyboard key or shortcutConfirmationShortcuts, Enter, Escape, arrow keys, etc.
type_textTypes a string of text via the Bluetooth keyboardConfirmationFilling in text fields, search boxes, documents
get_cornersReads the current four-corner monitor calibrationCoordinatesDiagnosing why clicks land off-target
set_cornersSets the four-corner monitor calibrationConfirmationFixing calibration when the camera view is misaligned or cropped

Why a camera instead of screen-sharing?

Because it works on any computer — no software to install, no permissions to configure, no remote-desktop setup. If the monitor is in front of the phone, an AI assistant can see it and control it.

Built for

  • Automating repetitive desktop tasks
  • Controlling a computer you can't install anything on
  • Letting an AI assistant actually do things on-screen, not just describe them

来源:README.md,提交 faa17eb

工具

12

take_screenshot

Capture the current screen via the Dittu phone camera. Returns a JPEG image. Call this to see what's on screen before acting.

无需输入参数。

take_screenshot_with_grid

Capture the screen and overlay a coordinate grid. step: grid spacing (default 0.1, use 0.05 for finer grid on small UI elements). Returns a JPEG image with grid drawn on top.

输入参数step

take_screenshot_with_crosshair

Capture the screen, crop tightly around (nx, ny), zoom in, and draw a crosshair at exactly that expected position. Use this for screen-corner calibration: move_mouse(nx, ny) near a screen edge, then call this to see whether the actual cursor lines up with the crosshair (where it SHOULD be if calibration is perfect). If the cursor is offset from the crosshair, or missing entirely (edge is cropped out of frame), corners need adjusting — see get_corners/set_corners. nx, ny: the same coordinates you passed to move_mouse. zoom: magnification factor for the cropped region (default 4x).

输入参数nx必填ny必填zoom

get_raw_screenshot

Capture the RAW camera frame — no perspective warp, no crop to the calibrated screen quad. Use this to see exactly what the camera sees before any correction, e.g. when troubleshooting why take_screenshot looks wrong, or before adjusting corners with get_corners/set_corners.

无需输入参数。

get_corners

Get the phone's current screen-corner calibration. Returns {"tl": [nx,ny], "tr": [nx,ny], "br": [nx,ny], "bl": [nx,ny]} — each corner is a normalized point (0.0–1.0) in the RAW camera frame, defining the perspective warp that maps the camera view onto a flat rectangle representing the monitor. These four points are an arbitrary quadrilateral (trapezoid), not a bounding box — adjust one corner at a time without assuming the others move symmetrically.

无需输入参数。

set_corners

Update the phone's screen-corner calibration. Each corner is [nx, ny] normalized 0.0–1.0 in the raw camera frame. tl/tr/br/bl = top-left/top-right/bottom-right/bottom-left of the monitor as seen by the camera (an arbitrary trapezoid due to perspective — not a rectangle). Call get_corners() first to read the current values before nudging one of them.

输入参数bl必填br必填tl必填tr必填

move_mouse

Move mouse cursor to normalized coordinates WITHOUT clicking. nx, ny: float 0.0000–1.0000.

输入参数nx必填ny必填

click

Click at normalized screen coordinates. nx, ny: float 0.0000–1.0000 where (0,0) = top-left, (1,1) = bottom-right.

输入参数nx必填ny必填

double_click

Double-click at normalized screen coordinates.

输入参数nx必填ny必填

type_text

Type text on the computer keyboard.

输入参数text必填

key

Press a key combination. modifiers bitmask: LCtrl=1, LShift=2, LAlt=4, LWin=8 Common keycodes: Enter=40, Escape=41, Tab=43, Space=44, F4=61, PageDown=78, PageUp=75, Win=227 Examples: Alt+F4 → key(4, [61]) Ctrl+W → key(1, [26])

输入参数keycodes必填modifiers必填

scroll

Scroll the mouse wheel. delta: number of ticks. Positive = scroll down, negative = scroll up.

输入参数delta必填

版本历史

1
  1. v1.0.0最新Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。