资讯动态

基于MCP协议构建AI设计协作上下文服务器:打通蓝湖与LLM的实践

发布时间:2026/9/29 0:49:29 来源:尧图企业网站定制
1. 项目概述一个为设计协作平台注入AI灵魂的桥梁最近在折腾一个挺有意思的项目叫refinist/lanhu-context-mcp。乍一看这个标题可能很多朋友会有点懵尤其是对“MCP”这个缩写不熟悉的话。简单来说这是一个专门为“蓝湖”Lanhu这类设计协作平台打造的“上下文服务器”。它的核心使命是让像ChatGPT、Claude这类大型语言模型LLM能够“理解”并“操作”你在蓝湖上的设计项目、设计稿、组件库等资产。我自己作为一名长期混迹在设计与开发交叉地带的从业者对这个项目感触很深。在日常工作中设计师和开发者之间最大的鸿沟之一就是“信息差”。设计师在蓝湖上更新了一个按钮的颜色开发者可能还在对着上周的标注图写代码产品经理调整了某个页面的交互流程这个变更可能只停留在PRD文档里没有及时同步到代码实现的语境中。lanhu-context-mcp要解决的正是这个痛点。它不是一个独立的应用而是一个“适配器”或“翻译官”它把蓝湖这个设计工具丰富的结构化数据设计稿、图层、标注、评论、设计系统通过标准化的协议MCP暴露给AI智能体从而让AI能在我们熟悉的工作流中基于最新的、最准确的设计上下文来协助我们。它适合谁呢首先是追求效率的前端和客户端工程师你可以让AI帮你根据最新的设计稿直接生成组件代码骨架其次是产品经理和设计师你可以让AI基于整个项目的历史设计稿和评论快速生成设计走查报告或版本更新摘要甚至对于测试同学也能基于设计稿自动生成一部分UI测试用例。本质上它是将设计资产变成了AI可查询、可理解的“知识库”极大地扩展了AI在具体工作场景中的应用深度。2. 核心架构与MCP协议深度解析2.1 什么是MCP为什么是它要理解这个项目必须先搞懂MCPModel Context Protocol。你可以把它想象成AI世界的“USB协议”。在MCP出现之前每个AI应用或智能体如果想访问外部工具和数据比如日历、数据库、设计平台都需要自己写一套复杂的连接和认证逻辑这就像早期的电子设备每个都有自己专用的充电器和数据线混乱且低效。MCP协议的目标就是标准化这个过程。它定义了一套简单的、与模型无关的通信规范。在这个规范里主要有三个核心概念Server服务器就是像lanhu-context-mcp这样的项目。它封装了对特定资源这里是蓝湖的访问逻辑并提供标准的接口。Client客户端通常是AI应用或平台比如Claude Desktop、Cursor IDE或者一些自建的AI Agent框架。客户端负责发起请求。Protocol协议定义Server和Client之间如何对话包括如何发现可用工具Tools、如何调用工具、如何读取资源Resources等。选择MCP来构建这个桥梁有以下几个关键考量解耦与专注lanhu-context-mcp只需要专注于一件事——做好蓝湖API的封装和数据结构化。它不需要关心最终是哪个AI来使用它。这符合Unix哲学“只做一件事并做到最好”。生态兼容性一旦实现了MCP Server它就自动兼容所有支持MCP协议的客户端。这意味着你的工作成果可以立即被Claude、Cursor等主流工具使用无需为每个工具单独开发插件。安全性MCP通常运行在本地或受信任的网络环境中设计资产的访问令牌Token等敏感信息不需要上传到第三方AI服务商数据流转可控。标准化操作MCP将对外部系统的操作抽象为“工具”Tools例如“获取项目列表”、“搜索设计稿”、“读取标注信息”。AI通过调用这些明确的工具来完成任务过程透明且可预测。2.2 项目核心模块拆解基于MCP的架构lanhu-context-mcp的内部设计可以清晰地分为几个层次1. 协议适配层这是项目的“外壳”完全遵循MCP协议规范实现。它负责启动一个标准的MCP Server监听来自客户端的连接并对外宣告自己提供了哪些“工具”和“资源”。这一层代码相对固定是项目能融入MCP生态的入场券。2. 蓝湖API客户端层这是项目的“肌肉”负责与蓝湖的官方API进行实际通信。蓝湖的API通常需要认证Access Token并提供RESTful接口来操作团队、项目、设计稿、图层等。这一层需要处理认证与令牌刷新。将蓝湖的API响应通常是JSON解析为内部统一的、更简洁的数据模型。实现错误重试、速率限制等稳健性策略。由于蓝湖API可能会变动这一层需要良好的封装以便于后续维护。3. 业务逻辑与上下文组装层这是项目的“大脑”也是最体现价值的部分。它决定了AI能获取到什么样的“上下文”。简单的API数据搬运价值有限真正的智能来源于数据的再组织。例如设计稿搜索不仅返回列表还能根据项目阶段、设计者、最近修改时间进行过滤和排序将最相关的设计稿优先提供给AI。图层树解析蓝湖的一个页面可能包含成百上千个图层。这一层需要能提取出有意义的组件结构如“这是一个导航栏包含Logo、菜单列表和用户头像”而不是平铺所有图层信息。设计系统关联当AI查看一个按钮时这一层可以关联到设计系统中这个按钮组件的使用规范、代码片段和历史修改记录形成立体化的上下文。变更摘要生成对比两个版本的设计稿自动生成文字摘要说明哪些图层被移动、哪些样式被修改作为AI理解设计迭代的背景信息。4. 提示词Prompt优化层隐式虽然不直接暴露为代码模块但一个优秀的MCP Server在设计时就必须考虑AI如何使用它。这意味着返回给AI的数据结构应该是清晰、无冗余、富含语义的。例如图层信息除了坐标和尺寸还应包含其语义角色是按钮、图标还是文本段落和样式关键词“主色按钮”、“标题字体”。这相当于为AI预先做好了特征工程能极大提升后续对话和任务执行的准确度。3. 环境配置与核心实操要点3.1 前期准备获取蓝湖访问凭证一切开始之前你必须拥有访问蓝湖API的权限。这通常不是个人账号的默认设置需要团队管理员或拥有者进行操作。进入团队管理后台在蓝湖网页端找到团队设置或企业管理后台。创建第三方应用在“开放平台”或“API管理”相关页面选择创建新的应用。这个过程类似于我们在微信开放平台申请小程序。配置应用权限这是关键一步。你需要仔细勾选你的MCP Server需要访问的数据范围。最小化权限原则至关重要。对于lanhu-context-mcp通常需要以下权限project:read读取项目列表和信息。design:read读取设计稿详情、图层、标注。design-library:read读取团队组件库设计系统。可选comment:read读取设计稿上的评论。注意切勿盲目勾选所有权限尤其是写操作权限如design:write。你的MCP Server目前只应是一个“只读”的观察者避免因AI指令误操作导致设计资产被意外修改的风险。获取凭证创建成功后你会得到两个关键信息Client ID和Client Secret。请将它们视为最高机密绝不能提交到公开的代码仓库。3.2 项目部署与运行指南假设你已经将refinist/lanhu-context-mcp的代码克隆到本地接下来的步骤是让它跑起来。方式一本地开发运行适用于调试和二次开发# 1. 克隆项目 git clone https://github.com/refinist/lanhu-context-mcp.git cd lanhu-context-mcp # 2. 安装依赖项目通常是Node.js/Python实现以Node为例 npm install # 3. 配置环境变量 # 创建 .env 文件填入你的蓝湖凭证 LANHU_CLIENT_IDyour_client_id_here LANHU_CLIENT_SECRETyour_client_secret_here # 可选指定团队ID如果只访问特定团队 LANHU_TEAM_IDyour_team_id_here # 4. 启动MCP Server npm start # 或使用开发模式支持热重载 npm run dev启动后控制台会输出Server正在监听的地址如stdio或http://localhost:8080。这个地址需要配置到你的MCP客户端中。方式二作为全局工具安装适用于日常使用更便捷的方式是将其安装为系统级的命令行工具。# 假设项目提供了全局安装命令 npm install -g lanhu-context-mcp # 安装后可以直接通过命令启动并通过参数传递凭证 lanhu-context-mcp --client-id YOUR_ID --client-secret YOUR_SECRET这种方式下你甚至可以将启动命令封装成一个简单的脚本或别名一键运行。3.3 客户端配置以Claude Desktop为例目前Anthropic的Claude Desktop是对MCP支持最友好、最成熟的客户端之一。配置步骤如下打开Claude Desktop进入Settings-Developer设置。在MCP Servers配置区域点击添加。配置方式取决于你的Server启动模式如果Server通过stdio启动选择 “Command” 类型在命令栏填写启动命令如lanhu-context-mcp并在环境变量中设置LANHU_CLIENT_ID和LANHU_CLIENT_SECRET。如果Server通过HTTP启动选择 “HTTP” 类型填写Server的URL如http://localhost:8080。注意HTTP模式可能需要在Server端处理CORS等问题。保存配置并重启Claude Desktop。重启后当你新建一个对话时Claude的输入框附近可能会出现一个“连接资源”的图标。点击它你应该能看到lanhu-context-mcp提供的资源列表例如“蓝湖项目列表”、“最近的设计稿”等。选择加载某个资源这些信息就会作为对话的背景上下文提供给Claude。实操心得在配置环境变量时我强烈推荐使用.env文件配合dotenv库来管理而不是在命令行中硬编码。这不仅能避免敏感信息泄露到历史命令中也便于在不同环境开发、生产间切换配置。另外首次运行可能会因为网络或权限问题失败务必查看Server的日志输出通常会有明确的错误信息指引。4. 核心功能场景与实战应用4.1 场景一AI辅助前端开发——从设计稿到代码骨架这是最直接的价值体现。以前前端开发者需要反复在蓝湖和IDE之间切换手动测量间距、拾取颜色、编写重复的布局代码。现在你可以这样操作在Claude中加载上下文告诉Claude“请加载我蓝湖上‘用户中心改版’项目的最新设计稿列表。” Claude会调用MCP工具获取列表。定位具体页面你从列表中选择“个人资料编辑页”Claude会将该页面的设计稿资源包含图层树、样式、标注加载为上下文。发出精准指令基于这个丰富的上下文你可以给出非常具体的指令“基于当前加载的设计稿为我生成这个用户信息表单区域的React Tailwind CSS代码。要求1. 使用Formik和Yup处理表单验证2. 头像上传区域使用独立的组件3. 颜色和间距请严格遵循设计稿标注。”AI生成与迭代Claude会根据它“看到”的图层结构、文字内容、颜色值、间距尺寸生成高度可用的初始代码。你可以继续对话“提交按钮的圆角看起来是8px请调整一下。” 或者 “把这个表单拆分成UserBasicInfoForm和UserPrivacySettingsForm两个子组件。”背后的技术细节MCP Server在此场景下不仅提供了原始的图层数据更关键的是提供了语义化的图层分组信息和精确的样式Token。一个设计良好的Server会告诉AI“这一组图层构成了一个卡片Card其内部包含一个标题TypographyH2级别、一个表单Form和底部操作区Button Group。” 这比单纯给出100个无序图层的坐标信息要有用得多。4.2 场景二设计评审与文档自动化设计评审常常陷入“看图说话”和“细节纠缠”的循环。利用这个工具产品经理或设计负责人可以生成评审摘要在评审会议前让AI分析本次迭代的所有修改页面。指令可以是“对比‘v2.3’和‘v2.4’版本的所有设计稿生成一份变更摘要按‘新增功能’、‘视觉优化’、‘交互调整’、‘问题修复’分类列出。”自动提取设计规范对于一套全新的页面可以指令AI“扫描当前项目中的所有设计稿归纳出使用的颜色色板、字体字号系统、按钮和输入框的组件样式整理成一份Markdown格式的设计系统初稿。”关联用户反馈如果MCP Server集成了评论读取功能AI可以综合分析某处设计修改下方的所有评论总结出团队成员的争议点和共识辅助决策。实操要点这个场景对MCP Server的数据聚合和对比能力要求较高。Server需要能按版本号过滤设计稿并能计算两个版本图层树的差异。在实现时可以考虑在Server端预先计算好差异摘要作为一个独立的“资源”或“工具”提供给AI以节省AI的上下文窗口Token并提高分析准确性。4.3 场景三多模态交互与复杂查询随着多模态大模型如GPT-4V的发展未来的想象空间更大。虽然当前MCP主要传递文本和结构化数据但我们可以进行架构上的预留设计稿缩略图作为上下文MCP Server可以提供设计稿的缩略图URL。支持图像输入的AI可以直接“看到”设计稿的整体视觉效果结合结构化数据进行更丰富的描述、风格分析甚至灵感发散。自然语言复杂查询你可以问“帮我找出所有使用了‘危险’操作红色按钮的页面。” 或者 “我们产品里用户完成一个任务平均需要点击几次哪个页面的跳转路径最长” 这要求Server不仅能提供数据还要建立图层、页面、流程之间的关联图并提供一个强大的查询工具给AI调用。与代码仓库联动进阶这是更未来的场景。如果MCP Server还能连接到Git仓库AI就能建立“设计稿 - 前端组件 - 提交历史 - 设计评论”的完整追溯链路。你可以问“这个按钮上周改了颜色是谁提的需求对应的前端代码修改是哪次提交测试同学有没有针对此更新用例”5. 深入原理数据流与上下文构建剖析5.1 一次完整的AI请求数据流让我们追踪一次典型的“获取设计稿详情”请求看看数据是如何流动的用户发起对话用户在Claude中输入“我想看看‘登录页’设计稿的标注。”Claude解析意图Claude识别出用户意图与“设计稿”、“标注”相关并发现已配置的lanhu-context-mcpServer提供了相关工具。MCP协议调用ClaudeClient通过MCP协议向本地运行的lanhu-context-mcpServer发送一个标准的tools/call请求调用名为get_design_annotations的工具参数为{ design_id: “123456” }。Server处理请求认证Server从内存或配置中取出预先通过OAuth流程获取的蓝湖Access Token。API调用使用该Token向蓝湖API的https://api.lanhuapp.com/v1/designs/123456/annotations端点发起HTTP GET请求。数据转换收到蓝湖API的原始响应一个复杂的JSON后Server开始执行核心的“精炼”工作。它会过滤掉对AI无用的元数据如创建者ID的时间戳格式将标注信息按画板Artboard分组将标注点如尺寸、颜色、文字转换为清晰的描述语句如“标题文字字体为PingFang SC字号32px字重Semibold颜色#1A1A1A”。协议封装将处理好的、简洁的结构化数据按照MCP协议规定的JSON格式进行封装。返回结果Server将封装好的结果返回给Claude。Claude组织回复Claude将收到的标注信息整合到自己的上下文中并生成一段人性化的回复呈现给用户“这是‘登录页’的标注信息主要包含以下部分1. 顶部导航栏… 2. 登录表单区域… 其中登录按钮的主色值是#007AFF…”整个过程中用户和Claude都不需要知道蓝湖API的具体细节也不需要处理复杂的认证逻辑。MCP Server完成了所有脏活累活。5.2 上下文构建的策略与优化如何为AI构建一个“好用”的上下文是一门艺术。直接 dumping 所有原始数据会迅速耗尽AI的上下文窗口并导致其注意力分散。分层加载这是最重要的策略。不要一次性加载一个包含500个图层的完整设计稿。MCP Server应提供不同粒度的资源项目列表轻量仅包含项目ID和名称。设计稿列表轻量某个项目下的设计稿ID、名称、缩略图、更新时间。设计稿摘要中量设计稿的页面结构画板列表、核心组件统计。画板详情重量单个画板内的图层树和样式。标注信息独立资源与图层分离按需加载。 这样AI和用户可以通过多次交互由粗到细地逐步深入精准获取所需信息。信息压缩与摘要对于文本内容如图层名称、备注可以进行智能摘要。对于重复的样式可以提取为共享的“样式变量”。例如10个颜色为#007AFF的图层在上下文中可以表示为“使用了主色primary-color, #007AFF”。关联索引在返回数据时附带关键的关联ID。例如返回一个按钮组件时可以附带其所属的设计系统组件库ID。这样当AI后续需要查询该组件的详细规范时可以快速定位。踩坑实录在早期版本中我曾尝试一次性将整个设计稿的扁平化图层列表丢给AI。结果发现当图层数量超过100个时AI的理解能力急剧下降经常混淆图层间的层级关系生成的代码结构混乱。后来改为提供嵌套的图层树结构并显著压缩了每个图层的属性描述只保留类型、名称、关键样式和矩形区域AI生成代码的准确率和结构合理性提升了70%以上。这印证了“少即是多”的原则在AI上下文中同样适用——提供高信息密度、强结构化的数据远胜于提供海量的原始数据。6. 高级配置、问题排查与二次开发指南6.1 性能调优与高级配置当你的团队设计稿数量庞大时简单的Server可能遇到性能瓶颈。以下是一些调优思路实现缓存层这是提升响应速度最有效的手段。蓝湖的设计稿元数据如列表、结构变更频率较低但API调用可能有频率限制。可以在Server内引入一个内存缓存如Node.js的node-cache或分布式缓存如Redis对GET类请求的结果进行缓存。需要设置合理的过期时间TTL例如项目列表缓存5分钟设计稿详情缓存1小时并为缓存键Cache Key包含资源ID和版本号。// 伪代码示例简单的内存缓存 const NodeCache require(node-cache); const cache new NodeCache({ stdTTL: 300 }); // 默认5分钟过期 async function getProjectList(forceRefresh false) { const cacheKey project_list; let projects cache.get(cacheKey); if (!projects || forceRefresh) { projects await fetchFromLanhuAPI(/v1/projects); // 实际调用蓝湖API cache.set(cacheKey, projects); } return projects; }分页与懒加载如果AI客户端请求所有项目不要一次性返回成千上万条记录。MCP Server应实现分页逻辑或者与客户端约定只返回最近活跃的N个项目。对于单个设计稿也可以先返回顶层画板待用户指定某个画板后再加载其内部细节。连接池与超时设置Server对蓝湖API的调用应使用HTTP连接池避免频繁建立TCP连接的开销。同时必须设置合理的请求超时和重试机制防止因网络波动或蓝湖API暂时不可用导致整个Server挂起。6.2 常见问题排查手册在部署和使用过程中你可能会遇到以下典型问题问题现象可能原因排查步骤与解决方案Claude无法发现或连接MCP Server1. Server进程未启动。2. Claude配置错误命令、参数、环境变量。3. 防火墙/端口阻止。1. 在终端运行ps aux | grep lanhu确认进程存在。2. 检查Claude配置中的命令是否与终端启动命令完全一致环境变量是否已正确设置。3. 如果使用HTTP模式在浏览器访问http://localhost:端口看是否有响应。加载资源时提示“认证失败”或“无权限”1. Client ID/Secret错误或已失效。2. 申请的API权限不足。3. Access Token过期。1. 核对.env文件中的凭证确保无空格或换行符。2. 登录蓝湖开放平台检查应用权限是否包含所需scope如design:read。3. Server应实现OAuth Token的自动刷新逻辑。检查Server日志是否有刷新失败的错误。AI返回的结果不准确或缺失信息1. Server返回的数据结构不符合AI预期。2. 蓝湖API返回的数据格式有变动。3. 上下文窗口已满早期信息被截断。1. 使用curl或 Postman 直接调用Server提供的工具接口检查其返回的原始数据是否完整、清晰。2. 查看蓝湖官方API文档确认是否有更新。可能需要调整Server的数据解析逻辑。3. 在Claude中尝试先清除对话历史再重新加载关键资源。优化Server返回数据的简洁性。Server运行一段时间后崩溃1. 内存泄漏。2. 未处理的异常导致进程退出。3. 与蓝湖API的连接数过多。1. 使用node --inspect进行内存分析检查是否有缓存未设置上限或事件监听器未移除。2. 为所有异步操作添加.catch()处理使用process.on(‘uncaughtException’)捕获全局错误并记录日志。3. 实现请求队列或限制并发请求数。6.3 二次开发扩展你的MCP Server开源项目的魅力在于可以定制。你可能需要根据自己团队的工作流扩展lanhu-context-mcp添加新的工具Tools例如你的团队使用Jira管理任务设计稿标题包含Jira issue key如“PROJ-123登录页”。你可以新增一个link_design_to_jira工具让AI能够自动将设计稿与Jira任务关联甚至提取设计稿中的修改点自动填充到Jira评论中。步骤在Server的Tools定义数组中添加新工具的描述名称、描述、参数schema。在对应的处理函数中实现调用蓝湖API和Jira API的逻辑并返回结果。支持其他设计平台项目架构是解耦的。你可以抽象出一个DesignPlatformClient接口然后分别实现LanhuClient和FigmaClient假设。这样同一个MCP Server可以根据配置同时为多个设计平台提供上下文。优化数据模型如果你发现AI对你们团队特有的设计组件如“业务数据卡片”理解不佳可以在Server的数据转换层加入自定义的识别规则和语义化描述将这些特定组件类型明确地标记出来帮助AI更好地理解其作用和用法。开发建议在开始二次开发前务必先通读项目的源码结构特别是src/protocolMCP协议实现、src/clients/lanhu蓝湖客户端和src/tools工具定义这几个目录。良好的开源项目会有清晰的模块划分让你能快速定位到需要修改的地方。另外在添加新功能时始终遵循MCP协议的标准确保你的扩展不会破坏与标准客户端的兼容性。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑