Refly v0.7.1 解析:MCP Store 五大平台一键接入与 Skill 调用后台执行
【免费下载链接】reflyThe first open-source agent skills builder. Define skills by vibe workflow, run on Claude Code, Cursor, Codex & more. Build Clawdbot 🦞· APIs for Lovable · Bots for Slack & Lark/Feishu · Skills are infrastructure, not prompts.项目地址: https://gitcode.com/GitHub_Trending/re/refly
Refly v0.7.1 的核心主题是MCP Store:用户只需配置对应平台的 API Key,即可一键接入 GitHub、Firecrawl、DeepWiki、Gitee、Zapier 五个远端 MCP Server,无需手写连接地址与鉴权头;同时该版本为Skill Invocation 引入后台执行能力,调用发起后即使关闭浏览器,任务仍在服务端继续运行。读完本文,你可以掌握 MCP Store 的目录结构与分发机制、API Key 的三种注入方式、MCP Server 的完整生命周期 API,以及后台执行能力对 Skill 工作流的影响。
以下内容基于仓库中的发布说明 v0.7.1.md、目录配置 mcp-catalog.json 与apps/api、packages/ai-workspace-common中的对应源码整理。
版本亮点总览
v0.7.1 的发布说明(Highlights)概括了三大改动:
- MCP Store 上线:支持快捷添加 MCP Server,首发包含 GitHub、Firecrawl、DeepWiki、Gitee、Zapier 五款服务,只需配置各平台的 API Key 即可连接使用;
- Skill Invocation 支持后台执行:可以关闭浏览器,技能调用继续在后台运行,随时回来查看结果;
- 稳定性与体验修复:多项 Bug 修复与优化(详见文末「缺陷修复与体验优化」小节)。
MCP Store:首批 5 款 MCP Server 一览
MCP Store 的目录内容定义在仓库根目录的 config/mcp-catalog.json。每个条目包含名称、中英文描述、连接类型(type)、连接地址(url)、鉴权方式(authorization)与外部文档链接。首批 5 款服务的实际配置如下:
| 服务 | 连接类型 | 地址 | 鉴权方式 | 用途 |
|---|---|---|---|---|
| GitHub | streamable | https://api.githubcopilot.com/mcp/ | API Key 置于Authorization: Bearer头 | 访问 GitHub API:文件操作、仓库管理、搜索等 |
| Firecrawl | sse | https://mcp.firecrawl.dev/${API_KEY}/sse | API Key 直接写入 URL | 将 URL 爬取并转换为干净的 Markdown |
| DeepWiki | sse | https://mcp.deepwiki.com/sse | 无需鉴权 | 与任意仓库的最新文档对话 |
| Gitee | streamable | https://api.gitee.com/mcp | API Key 置于Authorization: Bearer头 | 基于 Git 的代码托管与协作平台 |
| Zapier | sse | https://actions.zapier.com/mcp/${API_KEY}/sse | API Key 直接写入 URL | 连接应用并自动化工作流 |
从源码结构看,这里体现了 MCP 的两种远端传输形态:streamable(Streamable HTTP)与sse(Server-Sent Events)。二者在 Refly 服务端均属于 URL 型服务器(区别于本地stdio进程型服务器),这也决定了它们的必填字段是url。
只需配置 API Key:三种鉴权注入方式
发布说明强调 "Simply configure the API Key for the respective platform to connect"。这一「只填一个 Key」体验的实现在前端 utils.ts 的applyCommunityMcpApiKey函数中:它根据目录条目里authorization[].apiKeyIn字段的取值,将用户填写的 Key 自动注入到连接配置的不同位置:
url:把 URL 中的${API_KEY}占位符替换为真实 Key(Firecrawl、Zapier 采用这种方式,见目录配置);authorizationBearer:追加Authorization: Bearer <key>请求头(GitHub、Gitee 采用这种方式);headers:写入自定义请求头,头名取paramName,缺省为X-API-Key。
对应的类型定义在 types.ts:
export interface CommunityMcpAuthorization { type: 'apiKey'; apiKeyIn: 'url' | 'authorizationBearer' | 'headers'; paramName?: string; // For headers type }同时,requiresApiKey工具函数通过检查authorization数组判断某个目录条目是否需要 Key——这正是 DeepWiki 无需任何 Key 即可直连的原因:它的authorization数组为空。当需要配置 Key 时,界面会弹出 CommunityMcpApiKeyModal.tsx 提供的 Key 配置弹窗,并根据apiKeyIn类型展示对应的鉴权说明文案(URL 参数 / Bearer Token / 自定义 Header)。
目录的分发链路:从仓库文件到前端商店
MCP Store 的目录并非硬编码在前端,而是一条「仓库文件 → 对象存储 → 静态 URL」的分发链路:
- 源头:目录文件维护在仓库的 config/mcp-catalog.json;
- 发布:scripts/upload-config.js 通过 MinIO 客户端把该文件上传到对象存储的
mcp-config/mcp-catalog.json路径(同脚本还会上传provider-catalog.json); - 拉取:前端 mcp-community.ts 中的
fetchCommunityMcpConfigs从https://static.refly.ai/mcp-config/mcp-catalog.json获取目录,并校验响应必须包含servers数组,同时返回version与lastUpdated元数据; - 可用性探测:同文件还提供
checkCommunityMcpApiHealth,用HEAD请求检测目录 API 是否可达,用于界面上区分「商店不可用」与「目录为空」两种状态。
这条链路意味着新增或下线一个 Store 服务只需更新目录 JSON 并重新发布,前端无需发版。
安装后的生命周期:MCP Server 管理 API
从 Store「安装」一款服务,本质上是调用后端 MCP Server 的创建接口,把它落库为当前用户的一条服务器配置。相关实现在 mcp-server.controller.ts 与 mcp-server.service.ts,路由前缀为v1/mcp-server,全部需要 JWT 鉴权:
| 接口 | 方法 | 说明 |
|---|---|---|
/v1/mcp-server/list | GET | 列出当前用户的服务器(支持type、enabled过滤),并合并全局(isGlobal)服务器 |
/v1/mcp-server/create | POST | 创建服务器;同名已软删的记录会被恢复复用 |
/v1/mcp-server/update | POST | 更新配置;全局服务器不可被更新 |
/v1/mcp-server/delete | POST | 软删除(写入deletedAt);全局服务器不可被删除 |
/v1/mcp-server/validate | POST | 真实建立一次连接验证配置是否可用 |
几个值得注意的实现细节:
- 敏感信息加密落库:
headers与env两个字段在写入前经EncryptionService加密(encryptServerConfig),读取时再解密(decryptServerConfig),保证 API Key 等凭据不以明文形式保存在数据库中; - Web 端限制 stdio:
createMcpServer会显式拒绝type === 'stdio'的请求,提示 Web 界面仅支持 URL 型(sse/streamable)服务器——这也解释了 Store 目录中全部为远端服务的选型; - 连接验证有超时保护:
testMcpConnection使用MultiServerMCPClient(来自@refly/skill-template包)初始化真实连接,默认 15 秒超时(Promise.race),并进一步要求服务器至少返回一个 tool,否则判定为「No tools found for this MCP server」; - 列表排序策略:
listMcpServers按「已启用优先 → 最近更新优先 → 名称升序」排序,便于用户在工具列表中快速定位常用服务器。
validate接口的存在与 Store 场景直接相关:填入 Key 后即可先验证连通性,再决定保存,避免把配置错误的服务器带入 Skill 执行链路。
Skill Invocation 的后台执行
v0.7.1 的另一项核心能力是Skill 调用支持后台执行:发起技能调用后可以关闭浏览器,调用仍在后台继续运行,用户可随时返回查看结果(发布说明原文:"You can now close your browser, and the skill invocation will continue to run in the background.")。
这项能力改变了 Skill 工作流的使用边界:耗时长、多步骤的编排型任务不再受浏览器页面生命周期约束——例如触发一次需要多次工具调用与模型推理的复杂 Skill 后离开,回来后在运行历史中查看最终产物即可。该行为属于本次版本新引入的能力,仓库中的 Skill 相关实现集中在 apps/api/src/modules/skill 模块,可结合该目录源码进一步了解调用与结果回传的机制。
缺陷修复与体验优化
发布说明「System Optimizations & Bug Fixes」小节列出的修复与优化完整继承如下:
性能与稳定性
- 修复共享(shared)代码组件中超链接不可点击的问题;
- 修复某些场景下复制代码组件时报错的问题;
- 修复已选中 MCP 数量显示不正确的问题;
- 修复编辑器偶发崩溃的问题。
用户体验
- 改进了 Skill 调用失败时的错误信息展示;
- 优化了暗色模式下的 Markdown 样式。
其中「已选中 MCP 数量显示错误」与「Skill 调用失败错误信息」两项修复,恰好落在 MCP Store 与后台执行两大新功能所影响的界面上,可以理解为新功能配套的体验打磨。
小结与延伸阅读
v0.7.1 把「连接外部 MCP 服务」这件事从手动填写地址、鉴权头简化为:在 Store 中选择服务 → 填入 API Key(或免 Key)→ 验证 → 使用。实现上它由三层支撑:
- 目录层:config/mcp-catalog.json 定义服务清单,经 scripts/upload-config.js 分发到静态端点;
- 前端层:mcp-community.ts 拉取目录,utils.ts 按
apiKeyIn自动注入 Key; - 服务端层:mcp-server.service.ts 负责加密落库、连接验证与软删除等完整生命周期管理。
如需继续深入,建议依次查看:MCP 客户端封装(@refly/skill-template包中的MultiServerMCPClient与createMcpClientConfig)、数据库模型(apps/api/prisma/schema.prisma 中的McpServer表)以及中文发布说明 docs/zh/changelog/v0.7.1.md。
【免费下载链接】reflyThe first open-source agent skills builder. Define skills by vibe workflow, run on Claude Code, Cursor, Codex & more. Build Clawdbot 🦞· APIs for Lovable · Bots for Slack & Lark/Feishu · Skills are infrastructure, not prompts.项目地址: https://gitcode.com/GitHub_Trending/re/refly
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考