简体中文
  • mcp-server
  • saas
  • ai-agent
  • developer-experience

远程 MCP 服务器实战:AI 时代下 SaaS 产品的新入口

学习如何为你的 SaaS 产品构建远程 MCP 服务器。我们分享了关于 MCP 与 Agent Skills 的对比、OAuth 集成以及 MCP 工具设计的经验。

Yijun
Yijun
Developer

不要在用户认证上浪费数周时间
使用 Logto 更快地发布安全应用。几分钟内集成用户认证,专注于您的核心产品。
立即开始
Product screenshot

SaaS 产品一直存在一个老问题:实现价值的时间太慢。很多用户还没到“aha”时刻就流失了。

我们在 Logto 的上手流程上做了很多次迭代。这是有帮助的,但瓶颈并没有完全消失。你还是需要去看文档、扫教程、装 SDK、配置参数、写代码,然后在最后 10% 调试通了才能跑起来。

于是我们尝试了另一种思路:把远程 MCP 服务器作为 Logto 的 IDE 内控制平面。客户不再需要点来点去地操作管理后台,而是直接在开发应用的 IDE 接口,通过对话配置 Logto 并生成集成代码。

只需一个提问就能让你从零到集成上线。Agent 不仅会生成代码,还会在你的租户中同步创建并配置 Logto 应用,全程都在 IDE 内完成。(试用 Logto MCP 服务器)

这篇文章会分享我们在构建 Logto MCP 服务器时的经验与思考,包括:

  • MCP 与 Agent Skills:为何我们选择 MCP
  • 实际部署 MCP 服务器时遇到的问题及我们的解决方案
  • 我们是如何设计 MCP 工具的,以及你应该如何设计自己的工具
  • 我们对 MCP 未来的展望

MCP vs. Agent Skills:我们为何选择 MCP

在决定 AI 应该如何访问 Logto 之前,我们评估了两种方案:MCP 服务器和 Agent Skills。

MCP 服务器有本地和远程两种形态。

本地 MCP 服务器运行在用户的本机上。需要安装服务、配置环境、输入凭据或走特殊登录流程。在使用体验和部署上,它和 Skills 很像。

远程 MCP 服务器部署在服务端,用户通过 URL 连接并用 OAuth 授权。这种模式更像是 SaaS 服务的扩展入口。

从结构上看,Agent Skill 是“业务逻辑 + 底层能力”的组合。这些能力可以是工具、CLI 或 API 调用。MCP 工具可以用统一的方式承载这层能力。

所以核心问题不是能力怎么实现的,而是怎么交付给用户。

  • Agent Skills 的交付模式是:一整套本地工具链(Skill 包 + 本地运行时 + API key 或平台凭据 + CLI 工具 + 安装、配置、升级、维护流程)。
    本质上,是把能力直接交到用户手里自己跑。

  • 远程 MCP 服务器的交付模式是:一个远程服务入口(URL + OAuth 登录)。
    本质上,是把能力以服务方式交付。

下面我们从用户体验、生态覆盖、交付与维护成本三方面来对比它们。

用户体验

Agent Skills 通常依赖平台 API 或 CLI。用户需先生成 API key 或安装并登录 CLI。虽然操作不复杂,但确实提高了门槛。

MCP 服务器支持 OAuth,可以直接用 SaaS 账号登录。体验就像“用 Google 登录”。

对于用户而言,远程 MCP 服务器的使用非常简单:输入 URL、登录、连接。就是我们理想的那种体验。

生态覆盖

MCP 官网 上,已有 104 个支持 MCP 的 AI 应用,包括 VS Code、Cursor、Windsurf 等工具。

Agent Skills 仍是平台特定的,即使很多平台都支持了 Skills,但当我们上线 MCP 服务器时,所有支持 MCP 的应用用户都能马上用;而如果上线 Skill,只有在对应平台的用户能用。

此外,MCP 还是 Agentic AI Foundation (AAIF) 的协议级标准,生态会继续壮大。对我们来说,MCP 值得长期投入。

交付与维护成本

Agent Skills 依赖平台 API 或 CLI,很快会碰到这些问题:

  • 如果 API 变了怎么办?
  • 如果 CLI 不兼容了呢?
  • Skill 怎么分发和升级?

你还需发放 CLI、管理分散的凭据、适配多平台、指导用户升级。ROI 很低。

MCP 服务器要简单很多,用户只需连 URL,总是最新版本。我们升级 MCP 服务器,用户下次连就自动获得新版,无需额外升级。如果 API 变了,只需在 MCP 服务器里动手就行。

大多数 SaaS 产品本身就有扎实的基础设施(完善的 API 和成熟的认证体系)。MCP 服务器完全可以作为 API 的“AI 接口”,就像后台控制台是另一个接口一样。

对 Logto 而言,选择 MCP 服务器既契合架构,也能发挥我们已有的能力。

这还能把所有请求集中在一个入口上,日志与审计更统一,权限也很清晰:AI 只能做用户授权的事。这种模式结构上更适合企业和合规应用场景。

部署 MCP 服务器时遇到的问题与解决方法

MCP 还不完美。多数问题是生态成熟度引起的,随着时间会改善。在此之前,我们用各种折衷方案解决实际需求。

MCP 特性支持碎片化

MCP 规范定义了很多能力,但客户端支持各异:

  • Tools:广泛支持
  • OAuth:VS Code 支持良好,Cursor 需靠 mcp-remote 作为桥接
  • 其它特性(Resources、Prompts、Instructions):支持不稳定

目前来看,Tools 是最可靠的公有层(可在 MCP 社区页面 查各客户端都支持哪些能力)。

所以我们的策略就是:基于 Tools 构建

LLM 不会用你的工具

这是业务层面的问题。

Agent Skills 会把业务逻辑和上下文绑定在一块,LLM 本身就会如何用。而 MCP 只是暴露一堆工具,连上后 LLM 其实并不知道:

  • 该用在哪些场景
  • 先调用哪个、再怎么组合
  • 有哪些业务约束

MCP 规范有 Instructions 这个能力,但有的客户端不支持。Instructions 也会把所有内容一次性塞进上下文,很浪费 token。

另一种办法是把引导写进工具描述里。但这样有 2 个问题:

  • 描述会变得非常复杂,多工具组合会导致描述逻辑难理顺且难维护。
  • 工具多了,描述内容就会吃掉大量上下文窗口。

我们的折衷:提供 getInstructions 工具

思路很简单:Instructions 如果支持不好,那就变成工具。

LLM 可以按需调用 getInstructions
比如做任务 A 时调用 getTaskAInstructions,MCP 服务器会返回一步步的提示、说明该如何做,以及如何用其它工具配合完成。

复杂的业务逻辑都放 instruction 工具背后,其它工具只需专注功能本身。工具描述只写核心用途。

本质上类似 Agent Skills:按需载入提示,比全局 Instructions 高效,因为不用一股脑塞进上下文。

LLM 可能泄露你的密钥

很多 SaaS 产品中,有些密钥绝不能暴露(比如 client secret、API key、webhook 签名密钥)。一旦泄漏,别人可能伪造你或获取核心资源。

LLM 的风险在于聊天通道非安全,内容可能被记录、复制、转发、出现在调试日志中。你不能假设“只有我和模型能看到”。把长期密钥交给 LLM,或让它生成密钥给用户 copy,风险极高。

这在传统 web app 集成中很常见:开发者需要 secret 时,通常丢进服务器环境变量或配置文件,用来初始化 SDK。

为兼顾上手简单又不降低密钥安全性,我们做了三件事:

  • 集成过程中只用临时密钥

    聊天式引导配置时,MCP 服务器只返回短时有效的临时密钥(比如有效期一小时),它们足以让集成跑起来,并且常常在你上线前就失效了。上线前开发者再由后台控制台生成和替换成长期生产密钥,整个过程不走聊天。

  • 明确划定安全边界

    会清晰警告用户:不要在聊天中创建、粘贴或保存生产密钥。也提醒开发者,即使是环境变量或配置文件也可能泄露,只要 agent / LLM 能用工具或间接读取。因此,生产密钥只能放在无 AI 辅助集成的环境里。

  • 生产密钥不走聊天,指引用户去后台控制台配置

    长期密钥一律不在聊天生成或传递,统一在后台凭据页面生成与管理。聊天期间只给用户一个直达控制台的链接,辅助他们补全生产密钥配置流程。

我们如何设计 MCP 工具

我们的探索路径

Logto 有完整的管理 API。最初我们的想法是:把每个 API endpoint 都做成 MCP 工具。

很快就发现这样不行。

一是上下文爆炸。Logto 的 API 很多,一一映射会把上下文窗口塞满,每个工具描述都要耗费 token。

二是丢失了业务语义。API 对开发者来说就是最小原子能力,但用 Logto MCP 服务器的大多数用户并不是要构建底层系统,他们只关心任务怎么完成,不在意有多少接口。

举例:Logto 有个 sign-in-experience API,用于品牌定制、登录方式、注册方式和安全策略。 一开始我们想让 LLM 能用全部参数,考虑怎么组合接口。

但这种思路错了。用户不是在调接口,他们只是想改品牌、设登录方式。

所以应该有 updateBrandingupdateSignInMethodupdateSignUpMethod 这样按任务设计的工具,剩下接口拼接交给 MCP 服务器内部处理。

Logto MCP 服务器应被视作一个产品,而不是裸 API 封装。它就是“另一个管理员后台”。

MCP 工具设计思路

共识就很清楚:

  • 如果用户会直接用你的服务(像操作后台那样),工具就该面向任务、业务化。
  • 如果是给别人搭建能力底座,工具就应保持原子化简单。比如文件系统 MCP 服务器,只提供 read_filewrite_file,让 coding agent 自己组合。

补充原则:

  • 工具逻辑和描述要尽量简洁省上下文。
  • 复杂流程用 getInstructions 工具,按需加载指引,工具本身描述也要简单。

对 MCP 未来的期待

构建 MCP 服务器过程中我们也思考了生态未来有哪些可改进之处。

Skill 级能力交付

有时 MCP 服务器不仅要给工具,还需提供如何组合完成任务的业务指引,类似 Agent Skills。

在 SaaS 里很常见,比如:GitHub MCP 服务器、Logto MCP 服务器或数据分析平台。用户需要的是工作流,不是接口调用。

getInstructions 工具是一种折中,协议层支持会更好。

会话粒度的 MCP 启用

客户端常常连多个 MCP 服务器,但每个会话其实未必全都用得上。会话级启用/关闭可节约上下文空间。

MCP 工具调用的上下文隔离

工具调用占用大量上下文。如果 MCP 交互交给子 agent 来处理,主聊天里只显示精简后的结果即可。

总结

以上就是我们在构建远程 MCP 服务器方面的经验分享。

如果你也在探索这个方向,可以试用 Logto MCP 服务器,或者加入我们的 Discord ,和社区伙伴交流更真实的落地经验。

后续,我们还会分享架构设计和 OAuth 流程的细节,敬请期待。