Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Your AI sees the screen but can't measure it — measured web UI findings, shared live sessions
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
UISIGHT_URL, UISIGHT_PORT, UISIGHT_LANG你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"uisight": {
"command": "npx",
"args": [
"-y",
"uisight"
],
"env": {
"UISIGHT_URL": "your-value",
"UISIGHT_PORT": "your-value",
"UISIGHT_LANG": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add uisight --env UISIGHT_URL=your-value --env UISIGHT_PORT=your-value --env UISIGHT_LANG=your-value -- npx -y uisight运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"uisight": {
"command": "npx",
"args": [
"-y",
"uisight"
],
"env": {
"UISIGHT_URL": "your-value",
"UISIGHT_PORT": "your-value",
"UISIGHT_LANG": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"uisight": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"uisight"
],
"env": {
"UISIGHT_URL": "your-value",
"UISIGHT_PORT": "your-value",
"UISIGHT_LANG": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
UISIGHT_URL envUISIGHT_PORT envUISIGHT_LANG env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
发布者(yusufcemres)不是仓库所有者(sololabstr);可能是其他人代为上架的
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 0 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.34.0)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Dialyne
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Real phone calls in France for AI agents: dial +33 numbers, menus, hold, AI disclosure.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Your AI can already see the screen. It just can't measure it.
Screenshots make an agent *guess*: "that heading looks a bit faint." uisight makes it know:
- from a screenshot: "the heading looks a little washed out, maybe adjust the color?"
One is an impression. The other is a measurement with a selector attached — the agent fixes *that* element instead of hunting for it.
uisight is an MCP server for web and responsive UIs (Claude Code, Cursor, Antigravity, anything that speaks MCP). It runs live mobile + desktop sessions side by side, measures what it finds, and puts you and the agent in front of the exact same screen.
Built by a solo founder who got tired of taking phone screenshots, pasting them into chat, and typing "the button looks broken, can you see it?"
*The live panel: desktop + mobile sessions of the same site, URL-synced. Inspect runs on every screen; findings come back per device. Your AI sees this exact view through MCP.*
| | Multi-viewport browsers (Polypane etc.) | Browser tools / computer use (Playwright MCP, agent harnesses) | Native app toolkits (Argent etc.) | uisight | |---|---|---|---|---| | Measures the UI (1.14:1, not "looks low") | ✅ for humans | — | — | ✅ as text, for the agent | | Human + agent share one live session | — | — | — | ✅ | | Device × theme matrix in one run | ✅ | — | — | ✅ | | Human pins a bug → agent reads note + frame | — | — | — | ✅ | | Native iOS/Android apps | — | — | ✅ | — (web only) |
The measurement engine is the heart: instead of your AI burning tokens squinting at screenshots, inspect returns findings like
[mobile · Pixel 7 · light] https://yourapp.com/
INVISIBLE TEXT 1.04:1 — span.bg-gradient-to-r "your headline" (text rgba(255,255,255,.5) / bg rgb(247,247,248)) BUTTON a.text-white "Get Started" → text/background contrast 3.35:1 touch target below 44px 180x23 — "read the guide"
Text findings are cheap, precise, and directly actionable — your AI fixes the exact selector instead of guessing.
Fair — and partly true. Computer use, browser tools and most agent harnesses can already open a page and take a screenshot. That's the part uisight doesn't try to replace. Three things are still missing:
1. Looking isn't measuring. A vision model reading a screenshot cannot tell you a contrast ratio. It can't tell 4.6:1 (fine) from 4.3:1 (fails WCAG AA) — they look identical. It won't notice that a tap target is 41px instead of 44px, or that an element renders identically in light and dark mode because its color is hard-coded. uisight computes these from the live DOM: alpha-composited backgrounds, gradient text, oklch() colors and all.
2. The same price buys far more. This used to claim a screenshot costs several times what a measurement does. Measured, that is not true: a mobile frame is ~460 tokens and the matching inspect result is ~570. inspect is not the cheap option — it is the option that says 4.38:1 (threshold 4.5) where a picture only lets the model guess.
The real saving is a different choice: uisight writes a report the model reads once (~800 tokens), while driving the MCP tools screen by screen re-sends the whole conversation at every step. Someone put the problem perfectly under the launch thread: *"it burns some tokens but it manages."* What it costs has the whole table, because a claim like this one is worth checking.
3. Nobody's watching with you. In the usual setup the agent looks at the page alone and reports back. Here you both watch the same live session — you see what it does as it does it, and when *you* spot something, you pin it (📌) with a note and the agent reads your note plus that exact frame. No more describing a bug in words.
Scope note: uisight is for web and responsive UIs. For native iOS/Android app control, Argent is excellent and does far more than we do there.
# one-shot audit: PNGs + gallery + report for iPhone/Pixel/desktop, light+dark
npx uisight https://yourapp.com --theme both
npx -y -p uisight uisight-panel http://localhost:3000
First run. Playwright ships its driver over npm but downloads browsers separately, so the first run has nothing to drive. In a terminal, uisight offers to fetch what it needs (Chromium is about 700 MB on disk, once) and shows the download. Where there is nobody to answer — CI, or a panel an editor or agent host started — it never asks and never downloads; it names the exact command instead. UISIGHT_NO_INSTALL=1 turns the offer off everywhere, and you can always do it yourself:
npx playwright install chromium # add webkit for the real iOS Safari engine
The one-shot audit produces a device × theme gallery with findings per card:
# Claude Code
claude mcp add --scope user uisight -- npx -y -p uisight@latest uisight-mcp
For Cursor / Antigravity / other MCP hosts, add to your MCP config:
{ "mcpServers": { "uisight": { "command": "npx", "args": ["-y", "-p", "uisight@latest", "uisight-mcp"] } } }
Then just tell your agent: *"look at my app with uisight"*. The panel server starts automatically when needed.
Download uisight- .mcpb from the latest release and open it. Claude Desktop installs it and asks three things: the page to open, the tool set (all or core), and whether to download the browser on first use. There is no JSON to edit.
The bundle carries the server and its dependencies (about 7 MB). Browsers are not in it, which is what that third question is about: leave it on and a missing Chromium is fetched once, on the first tool call, by the Playwright version the bundle was built with. Build the bundle yourself with node scripts/build-mcpb.mjs.
| Tool | What it does |
|---|---|
see_screen | Returns the current screen as an image — the exact frame the human sees in the panel |
inspect | Runs contrast / touch-target / overflow / theme checks; returns measured findings as text |
goto | Navigates all sessions to a URL (localhost included) |
tap / type_text / scroll | Drives the page — the human watches it happen live |
set_device | Switches device profile (iphone-15, iphone-se, pixel, galaxy, ipad, desktop, laptop) or light/dark theme |
status | Open URL, sessions, recent console/network errors — first stop when hunting a bug |
marks | Reads the notes the human pinned in the panel (📌 note + screenshot at that moment) |
Turkish tool names available with UISIGHT_LANG=tr (ekrani_gor, denetle, ...).
npx -y -p uisight uisight-panel opens a browser page at localhost:5055:
marks. No more "let me describe what I'm seeing."Works inside VS Code / Antigravity via *Simple Browser: Show* → http://localhost:5055.
Can you read it
oklab()/oklch() colors all handledline-clamp and friends are not "clipped" — they are a decision)Can you reach it
elementFromPoint, not geometry, and sampled edge to edge so a floating button covering one end of a wide button is caughtkeyboard-audit opens the keyboard the way a phone does and re-measures)overflow-x: auto is fine, because the content is reachableviewport-fit=cover) and then never used the inset it got back; without that flag iOS letterboxes the page and nothing can be hiddenDoes it make sense
Every check has a false-alarm test next to its detection test. That is not politeness: a tool that cries wolf on every bottom navigation bar gets ignored, and then its real findings go unread too.
And the honest limit: automated checks cannot see *design* mistakes — a collided header measures fine. That's why see_screen exists and why the report says "eyeball the PNGs."
Two of these cannot be measured from a rendered page: the network has to actually drop, and the back button has to actually be pressed. Both run as panel actions, so the audit and the MCP tools share them.
# through the panel
curl -X POST localhost:5055/action -H 'x-uisight-token: ...' \ -d '{"type":"offline-audit","session":"mobile"}'
Offline drops the connection, reloads, and asks what the person is looking at: an explanation, a retry, a spinner that will never finish, or nothing. The distinction that keeps it honest is the service worker — a page without one *cannot* answer offline, so that result is marked expected and the audit filters it out. A page that registers a worker and still shows the browser's error page is a real finding. The connection is restored in a finally, so a failure never leaves the session stuck offline.
Back follows an internal link and presses back, then checks that the address returned to where it started and that the screen is not empty. Coming back to a blank page is how "back" turns into "leave the app".
uisight-audit)Public pages are the half of an app nobody lives in. Of four real bugs a person found by hand and sent in, three
只显示了开头部分;其余内容请在仓库中阅读