ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Cursor 接入蓝湖:用 MCP 打通设计稿到代码的高效还原链路

Cursor 接入蓝湖:用 MCP 打通设计稿到代码的高效还原链路 事情是这样的我们前端组和设计组之间的对话很长一段时间都是“还原了吗”“还原了。”“这里差 2px再改一下。”“哦那这里呢”……直到有一天我把 Cursor 接到了蓝湖上设计师终于不再追着我问“还原了吗”而是自己打开设计稿、看一眼状态、顺手丢给我一句“这个可以直接做了”。这篇文章不是教你怎么装一个普通插件而是想把我在实际项目里踩过的坑、拆过的方案、以及最后稳定运行下来的那套完整做法原原本本记录下来。如果你也是每天在 Cursor 和蓝湖之间来回切换、手动核对设计稿还原度的人或者你正在被“设计稿标注对不上”“开发完了设计师又说不对”这类问题折磨这篇文章应该能帮到你。我尽量少讲虚的直接把能落地的步骤和配置摆出来适合前端开发、全栈工程师也适合刚开始尝试用 Cursor 写业务代码的团队按照下面的流程走一遍基本就能把“设计稿→代码实现”这条链路跑通。1. 为什么要把 Cursor 接到蓝湖上——动机和收益1.1 还原度问题的根源在哪先说一个扎心的现实绝大多数还原度问题不是设计师要求高也不是前端能力差而是信息在传递过程中丢了。设计稿里标注的是 16px 字号、8px 边距、灰色描边 #EAEAEA开发的时候看到的是 Figma 截图或者蓝湖页面上的一堆参数。截图可以放大但参数不会自己跳到你面前。你切到代码编辑器再切回蓝湖来回几次之后眼睛花了数值也记混了结果就是“我明明按标注做的怎么还是不对”。我见过太多团队用共享文档记录还原规则比如“主按钮圆角 8px次要按钮 4px”听着很规范但文档更新永远比设计稿慢。等设计稿改了第三个版本文档还停在第一版。这个问题的本质是人和工具之间缺一条活的数据通道。1.2 Cursor 接入蓝湖后工作流变成什么样接入之前我的工作流是蓝湖看尺寸 → 切图 → 复制样式 → 回编辑器手写 CSS → 截图对比 → 出问题再回蓝湖核对。接入之后这套流程被压成了让 Cursor 直接读蓝湖上的设计稿数据 → 在对话里生成对应组件代码 → 我负责审查和微调 → 提交。这里的核心不是“自动生成代码”而是Cursor 能在一个上下文里同时理解设计稿数据和当前代码结构。以前设计稿数据只在设计师的电脑和蓝湖页面上现在它能作为工具输入进入你的编码环节。你再也不用拿着手机拍屏幕或者开三个窗口反复对照。1.3 这件事解决的不只是“效率”对我个人来说最大变化是沟通方式变了。以前设计师问“还原了吗”我得解释“哪部分还原了、哪部分没还原、为什么没还原”。现在我可以直接让 Cursor 调用蓝湖数据核对当前实现的样式参数然后给设计师一个明确的结论这个按钮的高度和标注差了 1px是因为字体渲染差异导致的实际视觉上没问题。设计师听到的是“你已经核过数了”而不是“我觉得差不多”。这个转变本质上把“主观判断”变成了“客观数据核对”。它能减少的不仅是来回对话的次数更是两个角色之间的信任消耗。毕竟天天“差不多”三个字说多了再好的合作关系也会被磨出刺。2. 先搞懂 MCP 是什么——以及为什么用它来对接蓝湖2.1 MCP 的现实类比MCPModel Context Protocol这个名字听起来很技术但你可以把它理解为Cursor 和外部数据源之间的 USB 接口。没有 USB 的时候你想给电脑接一个键盘得拆开机箱焊线有了统一接口插上就能用。Cursor 本身不能直接看懂蓝湖内部的设计参数MCP 服务就是那个“转接头”它负责把蓝湖上的设计稿信息翻译成 Cursor 能读懂的格式再交给模型去分析。我知道有些人一听到“要部署服务”就头大心里想的是我就写个前端还要自己起服务这里我得说句公道话。MCP 的部署并没有想象中复杂它不要求你有独立的服务器本地跑一个 Node 服务就行。真正麻烦的反而是理解它的工作方式Cursor 启动时会拉起 MCP 服务服务提供一组“工具”模型在对话中根据需要调用这些工具然后把结果拼进上下文。2.2 蓝湖侧的数据能力不只是截图蓝湖上能拿到的数据比很多人以为的多很多。除了最基础的截图预览它还有每个图层的尺寸、位置、颜色、字体、圆角、边距等结构化参数以及设计评论、标注说明、版本状态这些协作信息。这些东西如果能直接交给 Cursor它就能做到很多以前得靠人肉才能完成的事读取某个按钮的设计参数直接生成样式代码。对比当前 CSS 与设计稿参数指出差异点。根据设计稿里的备注自动补充注释或调整实现逻辑。这些场景里的关键不是“AI 有多聪明”而是数据能不能被稳定、结构化地拿到。截图不行因为那是像素文档也不行因为那是文本。只有走接口协议才能让数据像代码一样被精确引用。2.3 为什么不用截图和插件而选协议化连接之前我也试过更简单的方案。比如直接把蓝湖截图拖进 Cursor让它“看图写代码”。截图方案的问题很明显模型能看个大概但读不出精确参数。你让它写一个按钮它可能会给你一个外观相似的按钮但字号差 1px、颜色深一点它自己都不一定能意识到。对于非视觉还原要求极高的业务页面这种误差积累起来会很可怕。还有人想过用浏览器插件把蓝湖页面上的标注“刮”下来再喂给 Cursor。这个方案能解决部分问题但插件拿到的信息是 UI 层文本不是源数据。设计稿一改插件里的旧数据就成了误导。MCP 方案不一样它每次调用都去蓝湖拉最新数据因此只要设计稿更新了你让 Cursor 重新读取一次拿到的一定是新版本。这一点在协作中特别关键因为团队里最容易出现的问题就是“大家看的不是同一版”。3. 实操把 Cursor 接到蓝湖的完整过程3.1 前置准备与环境清单开始之前先把需要准备的东西列清楚免得中途手忙脚乱。一台能跑 Node.js 18 的电脑Windows、macOS、Linux 都行我实测下来 macOS 和 Windows 没有本质差异。蓝湖账号并且拥有对应项目的访问权限。蓝湖开放平台的 API Token用于让 MCP 服务身份认证后取数。安装了最新稳定版 Cursor 的编辑器版本不要太老老版本在自定义 MCP 配置上支持有限。如果你所在团队已有统一的蓝湖组织最好申请一个“服务账号”而不是用个人账号的 Token。因为个人 Token 一旦离职或者权限调整整个 MCP 服务就跟着失效。用服务账号可以让流程更稳定也方便在蓝湖侧统一管理访问范围。3.2 部署蓝湖 MCP 服务我们用的方案是本地起一个 MCP Server对外暴露为 HTTP 端点Cursor 通过这个端点调用工具。部署过程说白了有三步写配置、填 Token、启动服务。以下是一个参考的 Node 项目结构你可以根据自己的团队情况调整lanhu-mcp-server/ ├── src/ │ └── index.js ├── .env └── package.json在.env里填入蓝湖开放平台的 Token 和项目域名LANHU_API_BASEhttps://api.lanhuapp.com LANHU_API_TOKENyour_token_here LANHU_PROJECT_IDyour_project_id服务核心逻辑其实不复杂就是封装几个请求蓝湖接口的函数然后注册成 MCP 工具。我用的是 MCP 的 TypeScript SDK可以用npx modelcontextprotocol/sdk初始化一个空服务模板。如果你不想从零写很多团队会直接把这类服务放内网公共环境让大家共用。第一次跑通后后续维护成本非常低。注意Token 一定不要提交到 Git 仓库尤其是公开仓库。.env要写进.gitignore。这听起来是常识但我见过不少团队因为图省事把 Token 硬编码在代码里结果整个蓝湖项目的权限都被曝光。3.3 在 Cursor 中注册 MCP 客户端服务跑起来之后接下来要在 Cursor 里把这个服务“接进来”。Cursor 是支持自定义 MCP Server 的你可以在设置里找到 MCP 配置项也可以通过项目根目录的.cursor/mcp.json文件来声明。我的配置长这样{ mcpServers: { lanhu: { url: http://127.0.0.1:8787/mcp, enabled: true } } }如果你的 MCP 服务是通过命令行启动的比如用 npx 直接跑包配置方式略有不同大概形式是把启动命令和参数写进配置里。具体用哪种取决于你部署的 MCP 服务形态。团队如果有统一的配置管理也可以让 Cursor 直接指向远程端点这样本地不需要启动任何服务。配置保存后重启 Cursor然后在 AI 对话面板里应该能看到新的 MCP 工具已经注册。很多第一次配置的朋友到这里就卡住了其实重启这一步非常关键因为 Cursor 并不会在配置保存的瞬间自动加载新服务。3.4 让 Cursor 读取一条设计稿并给出还原结论服务注册好之后真正的应用场景就来了。我在实际项目里最常用的一个动作是从蓝湖读取当前页面的设计稿参数和 styles/button.css 里的实现做对比 列出所有不一致的样式属性同时给出修改后的完整代码。第一次跑这个流程时我甚至有点惊讶Cursor 调用 MCP 工具后会输出一份结构化的差异清单比如“按钮圆角设计稿为 8px当前实现为 4px背景色设计稿为 #1E80FF当前实现为 #1A7AFF”。有了这个对照做还原度验收就不再需要两个人对着屏幕数像素了。这里有一个很关键的技巧调用 MCP 工具时要在提示词里明确指定要读哪个文件或哪个页面。如果不指定模型可能会随机挑一个设计稿或者干脆不调用工具那结果就不可控了。我给团队写的标准模板是请调用蓝湖 MCP 工具 1. 读取设计稿页面【页面名称/ID】的样式参数。 2. 打开当前项目的【对应文件路径】。 3. 逐一比对后给出差异报告按影响程度排序。提示词写得越具体结果越准确。这不算什么高深技巧但是很多人没意识到MCP 工具不是自动触发的模型需要根据你的指令决定是否调用它。你想让 AI 主动读数据就得在自然语言里给出明确的调用意图。4. 实际执行过程中的坑与排查4.1 连接失败的四种典型场景MCP 接入第一次能全通的人不多。我把最常见的失败场景和解决办法整理成了表格方便你有问题直接对号入座。现象可能原因处理方式服务启动后立刻退出缺依赖、端口被占用检查是否装了对应 Node 依赖换一个空闲端口在 Cursor 里看不到 MCP 工具配置路径不对或没重启确认.mcp.json位置保存后重启 Cursor调用工具时报认证失败Token 过期或权限不足去蓝湖重新生成 Token并确认项目权限拉不到数据但服务正常项目 ID 配错或接口变动查看服务日志确认请求响应的具体状态码4.2 cursor 报 “access to private networks is forbidden” 的处理这个报错我见过不少人在社区里问。它的背景是 Cursor 对本地或内网地址的访问做了限制默认不允许 MCP 请求直接访问未显式声明的内网资源。很多团队的蓝湖 MCP 服务搭在局域网里结果 Cursor 一调用就报这个错。解决思路不是去绕过限制而是显式声明你的 MCP 端点来源可信。具体做法分两步第一确认服务监听在127.0.0.1而不是0.0.0.0本地回环地址通常不会触发这类限制第二如果服务确实部署在局域网其他机器上需要在 Cursor 的配置文件里把对应域名加入可访问列表。我之前在 Windows 上遇到这个问题时就是先改成http://127.0.0.1:8787/mcp问题就消失了。如果你非要让 Cursor 访问远程团队的公共服务就一定要确认网络策略是合理且授权的同时服务端做好身份验证。任何绕过访问限制的做法都是风险极高的不要碰。4.3 提示词被错误带进上下文的问题Cursor 在调用 MCP 工具时会先读取一些元数据。如果你的项目文件命名不规范或者服务器返回了多余的信息模型可能会把无关内容当成设计上下文。一个典型的案例是项目里有多个版本的页面文件Cursor 调用工具时自动读到了旧版本结果生成的新代码全是基于过时数据写的。我的解决方法很粗暴在项目根目录放一个说明文件明确告诉 Cursor “当前生效的设计稿是哪个版本哪些文件夹属于旧版不要参考”。这比在每次对话里反复强调要稳定得多。另外MCP 服务的日志一定要开一旦发现返回了不该返回的外部数据能第一时间从源头排查。4.4 对话过长的 reconnect 问题MCP 服务本身很稳定但有一个问题随着使用深入会慢慢暴露长时间对话后上下文太长Cursor 和 MCP 服务之间的连接会变得不稳定甚至出现 reconnect。这个问题不是服务挂了而是客户端在设计上会主动断开某些不再活跃的会话通道。我的建议是一次对话只专注一个页面的还原核对不要在一个会话里连续处理几十个页面。如果确实需要批量操作把任务拆成多个新对话每个对话带着明确的文件名和页面 ID 重新开始。这样既能解决 reconnect 问题也能让模型每次都拿到干净、独立的上下文准确率反而更高。4.5 常用配置项速查表根据团队成员的使用习惯我再补充一份高频配置项的对照表免得大家在设置界面里到处找。需求配置方式调整 Cursor 界面语言为中文Settings → General → Language选择简体中文设置 Cursor 回复中文在对话首句声明“请始终用中文回复”或在自定义规则里固定让 Cursor 默认打开 Agent 模式Settings → Default Mode选择 Agent删除某段历史对话在对话列表右键 → Delete Conversation查看当前接入的 MCP 服务Settings → MCP刷新服务列表5. 团队协作里真正改变的是什么5.1 设计师自己不再“追”工程师也能主动看设计稿接入这套流程之后最直观的变化是设计师的“还原了吗”这句口头禅消失了。不是他们不想问了而是他们发现问一句“你看过蓝湖上的标注了吗”不如直接说“你用 Cursor 拉一下最新数据”。当工程师能主动调取设计稿参数、自己核对差异设计师的角色就从一个“追踪者”变成了一个“验收者”。我们团队甚至在项目约定里写了一条前端在提测前必须用 Cursor 跑一次设计稿还原检查并把差异报告贴在任务描述里。这样做的好处是设计师不用逐屏截图圈红工程师自己就能解决大部分参数精度问题。设计师只需要看报告里标红的部分判断是不是真的要改沟通成本降了一个量级。5.2 评审会上的变化从“我认为”变成“看数据”以前前端和设计师在还原度评审会上经常吵起来。前端说“我觉得用 4px 圆角更好看”设计师说“标注就是 8px”。这种争论特别消耗关系因为双方凭的都是主观体验。接入蓝湖 MCP 之后我们直接在评审会现场让 Cursor 对比设计稿和线上代码差异数据一出来大家讨论的就从“谁对谁错”变成“这个差异是功能需要还是纯视觉偏差”。这个转变看起来很小但对团队氛围的影响非常大。我印象最深的一次是设计稿里一个卡片的阴影参数很模糊设计师自己也拿不准。我们直接在会上让 Cursor 读蓝湖的图层信息结果显示阴影的模糊半径是 10px透明度 12%。设计师当场确认“对就是这个”前端照做了那次评审会十分钟就结束了。5.3 这套流程的边界与适用场景当然我并不觉得把 Cursor 接到蓝湖上就能解决一切还原度问题。一些高度定制化的动效、交互动画是没法靠静态设计稿参数来控制的还有一些设计稿本身标注不全、图层混乱的情况MCP 服务再稳定也拿不到有效数据。所以使用这套方案时千万别把它当成万能神器它解决的是“静态样式参数核对”和“设计稿到代码的高效传递”这部分做好了就已经能省掉大量机械性的往返沟通了。对于小团队我建议试点范围控制在“一到两个核心页面”上设计稿参数相对完整、改动频率不是特别高更容易跑出正向效果。跑通之后再逐步推广到更多业务线。最后再分享一个我自己的小习惯每次开始新一天的开发前我都会让 Cursor 用 MCP 工具重新读一遍当天要做的页面的设计稿哪怕是昨天刚看过的。设计稿的改动经常发生在半夜你根本不知道设计师有多勤奋。多读一次就能少一次“白做”。这个习惯我已经坚持了很久它帮我避开了不知道多少返工。如果你也准备把 Cursor 和蓝湖接起来可以试试从这个小习惯开始。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进