远程 MCP 服务器:连接之前该检查什么

本地 MCP 服务器和远程 MCP 服务器一旦跑起来,看上去完全一样:客户端里同一份工具 清单、同一段对话、同一个结果。区别在于您为此交出了什么。本地服务器是您自己机器 上的一个程序,由客户端启动并通过标准输入输出与它对话,您交出的是一行命令。远程 服务器是别人的 HTTPS 端点,您交出的是一份凭证——连同它所解锁的一切,直到您把它 撤销为止。

所以,在把 URL 粘进连接器对话框之前,有用的问题不是“这台服务器可信吗”——没有人 能从一个上架页面回答它。有用的是三个更窄、而且查得到答案的问题:令牌被限定在 什么范围、去哪里把它收回,以及您找到这台服务器的那个目录究竟核实了什么。下面的 答案依据 MCP 规范和厂商文档在 2026 年 8 月 16 日的状态。

本地与远程是两种信任判断,不是两套安装步骤

当前的规范修订版 2026-07-28 把这两种传输当作不同的安全上下文。授权在 MCP 里是 可选的,而它在哪里适用写得很明确:使用 HTTP 传输的实现应当遵循 OAuth 规范, stdio 的实现则完全不应遵循,而是从环境中取得凭证。较旧的远程传输 HTTP+SSE 已被 弃用;应当预期的是 Streamable HTTP。

本地(stdio) 远程(Streamable HTTP)
您交出的东西 客户端将要运行的一条命令 一个 URL,通常还有一份 OAuth 授权
代码在哪里运行 您的机器、您的用户账号 由别人运营的基础设施
凭证 从环境中取得 绑定到那一台服务器的访问令牌
“断开连接”做了什么 不再启动进程 删除客户端那份令牌副本;授权可能仍然存在
作者怀有恶意时的最坏情况 以您的权限运行任意代码 已批准的 scopes 所能触及的一切

哪一列都不是安全的那一列。本地服务器是以您的身份运行的任意代码——正因如此,规范 要求提供一键本地配置的客户端必须完整显示它将执行的确切命令,不得截断,并先取得 明确许可。远程服务器不会往您机器上放代码,但它把您的数据挪到一个运营方那里,并 留下一条比您的注意力活得更久的访问路径。两者朝不同方向失效;我们的 两类服务器各能看到什么的对比讲得更细。

令牌实际允许什么

授权模型是 OAuth 2.1,作为用户值得弄懂的部分是受众绑定。客户端必须实现 Resource Indicators for OAuth 2.0(RFC 8707):resource 参数必须在授权请求和 令牌请求中都发送,指明这枚令牌是给哪一台服务器的。服务器必须验证令牌确实是发给 自己的,只接受对自身资源有效的令牌,并且不得接受或转发其他任何令牌。把客户端的 令牌原样传给下游 API——也就是“token passthrough”——是被直接禁止的。

所以,一枚实现正确的令牌在别的服务器上毫无用处。这堵住了重放、跨服务复用凭证, 以及一类混淆代理人攻击——却完全没有堵住运营方本身。受众绑定说的是令牌在哪里 有效,而不是另一端的公司拿它的工具代您取回的东西做什么。回答后者的是他们的 隐私政策,不是协议。

真正决定您暴露面的是 scopes。规范把服务器往最小权限推:scopes_supported 的 本意是基本功能所需的最小集合,超出的部分应在首次尝试特权操作时逐步申请。照做的 服务器一开始要得很少;不照做的,会给出一屏列满一切的授权确认页。那一屏,是决定权 还在您手上的最后一个位置。

真正该在哪里撤销

撤销有两个面,多数人只用第一个。

在助手里。 在 Claude 中,自定义连接器位于 Customize > Connectors,在那里 粘贴服务器 URL 来添加;Free 用户限一个。同一个页面也是断开它的地方,并且可以 逐个启用或停用该服务器的工具,而不是照单全收。Anthropic 在帮助中心把信任立场 写得很直白:自定义连接器让您把 Claude 连到未经 Anthropic 验证的任意服务。在 ChatGPT 中,远程服务器通过开发者模式进入——网页端的 Settings → Security and login,接受 SSE 和 streaming HTTP 端点。OpenAI 自己的 文档称之为强大但危险,把提示注入和破坏性写入操作列为风险,并默认对写入操作要求 确认。

在您用来授权的那个服务里。 这一步才是被跳过的。删除连接器只是移走您客户端 那份令牌副本;记录在您 Google、GitHub、Atlassian 或 Notion 账号里的授权是另一个 对象,有自己的生命周期,附在它上面的刷新令牌可能比连接器活得久得多。Anthropic 的指引也是这么说的——在 Claude 的设置里断开连接器或者在第三方服务的安全设置里 撤销。两边都做,并且在连接之前就先找到那个已连接应用的页面。

五分钟检查清单

  1. 这个端点由谁运营? 把主机名对应到一家公司。如果 URL 的域名和产品的公司 对不上,就到此为止。
  2. 主机名稳定吗,是 HTTPS 吗? 一个您打算长期用下去的东西,却给出隧道 URL 或裸 IP 地址,说明这项服务还没准备好成为一项服务。
  3. 您用哪个账号授权? 授权会继承那个账号所能触及的一切——工作用的 Google 账号和个人账号,在同一个按钮背后是完全不同的波及范围。
  4. 申请的 scopes 和这件事相称吗? 一个做会议纪要的工具要求整个邮箱的写入 权限,这不是细节,这就是答案。
  5. 能关掉不需要的工具吗? 在第一次提问之前就关掉。
  6. 撤销页面在哪? 现在就去提供方那里找到它。
  7. 运营方保留什么? 留存是政策问题,协议对此没有意见。
  8. 有没有本地的替代方案? 如果数据本来就在您的磁盘上,远程服务器是在一个 原本没有运营方的问题上添了一个运营方。

一条注册表条目说明了什么,又没说明什么

registry.modelcontextprotocol.io 上的官方 MCP 注册表是找服务器的自然去处,而 一条条目的含义很容易被读多。它的工作组章程写得很具体。发布与信任覆盖的是认证 流程——GitHub OAuth、GitHub OIDC、DNS 与 HTTP 验证——外加命名空间归属、审核工具 和社区举报。明确排除在范围之外的是:代客户端或最终用户对 MCP 服务器实现进行排名 或挑选,以及托管、分发或执行服务器代码,因为该注册表是一份元数据目录,不是软件包 注册表。

所以,一个通过验证的命名空间证明的是:发布这条记录的人控制着其名字里的那个 GitHub 组织或域名。这是实实在在的信号:它让抢注拼写相近的名字更难,也给了您一个 可以追责的对象。它不是代码审查,不是安全审计,也不是背书——身份确认了,行为依然 未知。

就算服务器规规矩矩,它也是输入,不是权威

规范里有一条原则值得带进每一次连接:对工具行为的描述,包括注解在内,除非来自 可信的服务器,否则都应视为不可信;并且宿主在调用任何工具之前必须取得用户的明确 同意。工具描述是远端一方写、您的模型读的文本——这正是不可信输入的定义,也是 “服务器说它是只读的”算不上一项安全控制的原因。

具体的先例是 CVE-2025-6514,于 2025 年 7 月 9 日公布,针对的是许多客户端用来 连到远程服务器的代理 mcp-remote。评分 9.6,它让一台恶意服务器可以通过 OAuth 流程中构造过的 authorization_endpoint 值,在发起连接的机器上实现操作系统命令 注入——影响 0.0.5 至 0.1.16 的版本,在 0.1.16 中修复。聊天里不需要批准任何东西: 连接本身就是全部攻击过程。远程服务器送来的一切都是您的软件要解析的数据,而连接 本身就是攻击面的一部分。

什么时候更短的答案是本地服务器

以上这些,都是为了够到真正住在别人云上的东西所付的代价——您的问题追踪系统、您的 CRM、您的日历。对它们来说这个代价合理,对已经躺在您磁盘上的文件来说就很奇怪, 这也是 Speak-Y 提供本地服务器而不是托管端点的原因。

它的 MCP 服务器是一个由您的客户端在您机器上启动的进程。读取不需要别的东西在跑: 搜索结果、文字记录、会议摘要和待办事项都直接来自同一台电脑上的资料库,不发令牌, 中间也没有转发。会改动东西的命令——给录音打标签、给发言人命名、分享到团队频道 ——走的是正在运行的应用,并且会向您的客户端声明为会改动数据,所以客户端会先 询问,同时记录在您也可以把它们关掉的地方。在服务器参数里加上 --read-only,意味着那些 会改动的命令根本不会发布给该客户端——这比一句承诺守规矩的描述是更强的保证。安装 只需从设置 → 集成一键完成,在包括 Free 在内的所有套餐上都免费。

这笔交换是双向的:本地服务器无法服务浏览器标签页里的 ChatGPT,也只在应用运行的 地方运行。如果这个限制要紧,接下来该读的对比是 到底哪些客户端能启动本地服务器; 而如果问题是连接之后该允许助手改动什么, 写入权限的界线划在哪里讲的就是这个。 MCP 概览列出了 Speak-Y 的服务器提供哪些能力。

FAQ

本地 MCP 服务器和远程 MCP 服务器有什么区别?

本地服务器是您自己机器上的一个程序,由客户端启动,并通过标准输入输出与它对话——您交出的是一行命令,不会发放任何令牌。远程服务器是别人运营的一个 HTTPS 端点:您交出的是一份凭证,通常是 OAuth 2.1 的访问令牌,而工具触及的数据会流向那位运营方的基础设施。

交给远程 MCP 服务器的令牌实际允许什么?

按 MCP 的授权规范,令牌绑定到一台服务器和一组 scopes。客户端必须在授权请求和令牌请求中都发送指明该服务器的 RFC 8707 资源标识,服务器则必须验证令牌是发给自己的,不得接受或转发任何其他令牌。这挡住了把令牌拿到别的服务上重放的做法。至于运营方拿它的工具代您取回的数据做什么,这一条什么都没说。

怎样撤销远程 MCP 服务器的访问权?

要在两个地方做,而多数人只做了第一个。在助手里移除连接器,删掉的是客户端那份令牌副本;记录在您用来授权的那个服务里的 OAuth 授权是另一个对象,通常仍然存在。Anthropic 自己的指引说,撤销权限的方式是在 Claude 的设置里断开连接器,或者在第三方服务的安全设置里操作。请在连接之前就找到提供方的已连接应用页面,而不是事后再找。

在官方 MCP 注册表里有条目,是否意味着这台服务器安全?

不是。注册表核实的是命名空间归属——io.github.* 形式的名字通过 GitHub 认证核实,基于域名的名字通过 DNS 或 HTTP 验证核实——这证明发布者控制着那个名字。它的章程把对服务器实现进行排名或挑选明确列为范围之外,并说明该注册表是一份元数据目录,不是软件包注册表:它不托管、不分发、也不执行服务器代码。

远程 MCP 服务器能读到我从未发给它的数据吗?

只能读到您批准的 scopes 所触及的范围。风险在于 scopes 往往比任务更宽:一枚为整个邮箱或整个云盘签发的令牌,在授权存续期间对该服务器公开的每一个工具都可用。请读授权确认页,而不是宣传页;客户端若提供逐个工具的开关就用起来——Claude 的连接器设置允许逐个启用或停用工具,ChatGPT 的开发者模式则默认对写入操作要求确认。