在谈论 MCP 服务器时,本地和云端这两个词常被当成隐私问题的答案。它们不是。 它们准确回答的只有一个问题——服务器进程跑在哪里——而人们真正在意的那个问题 原封未动:最后谁能读到您的数据。
一句话概括:本地 MCP 服务器能让您的数据不进入厂商的基础设施,却不能让它不 进入对话。 无论本地还是云端,助手通过任何 MCP 服务器读到的内容,都会发送给 您正在对话的那个模型。本地改变的是谁存放、谁能触及您的数据,改变不了模型看到 什么。
本文把这两件事分开来讲。如果您对这套协议本身还不熟悉,可以先看 什么是 MCP 服务器打个底。
MCP 规范的 2026-07-28 修订版恰好定义了两种标准传输方式,而它们与这两个词一一对应。
stdio——本地的那种。 客户端把 MCP 服务器作为子进程启动,双方通过该进程的 标准输入输出通信,每行一条以换行分隔的 JSON-RPC 消息。没有网络连接,也没有 端口。客户端退出时会关闭服务器的输入流,进程随之结束。这就是“跑在您机器上”的 具体含义。
Streamable HTTP——云端的那种。 服务器是一个独立进程,对外暴露单个 HTTP
端点,每条消息都是发往该端点的 HTTP POST。客户端通过网络访问形如
https://mcp.example.com/mcp 的地址。每一个“连接您的账号”按钮背后,都是这种
传输方式。
这个区别是部署方式的选择,不是能力上的差异。规范明确写道,协议语义在任何传输 方式上都是一致的:传输方式规定的是消息如何封装和送达,而不是消息的含义。一个 读取会议转写文本的工具,在两种方式下做的是同一件事。
这才是那两个词通常在代替回答的问题,而它的答案不止两个。可能读到 MCP 连接中 流转内容的,一共有四方。
| 谁 | 本地服务器(stdio) | 云端服务器(HTTPS) |
|---|---|---|
| MCP 厂商 | 拿不到数据 | 存放数据并响应每次请求 |
| 您的模型提供方 | 看到助手读到的一切 | 看到助手读到的一切 |
| 您的 AI 客户端 | 在本地读取以拼装提示词 | 同上 |
| 任何持有令牌的人 | 没有令牌可偷 | 在令牌被吊销前都能读到同样的数据 |
让人意外的是中间那一行,而它在两列里是一样的。MCP 服务器并没有给模型开一条 私密的旁路。它取回文本交给客户端,客户端把文本放进提示词。从那一刻起,无论 服务器跑在哪里,数据都已经离开了您的机器。
第一行和最后一行才是本地真正胜出的地方。用 stdio 时没有账号,没有留在别人硬盘 上的副本,也没有可被窃取或在泄露事件中外流的凭据——因为压根没有需要授权的东西。
这里的形态有三种,不是两种,而厂商很少把中间那一种单独拎出来说。
云端服务器、云端数据。 厂商托管服务器,您在浏览器里用 OAuth 授权,客户端 需要什么就发一次 HTTPS 调用。当数据本来就存放在该厂商云端时,这是最自然的 形态。
本地进程、云端数据。 厂商提供一台由您自己运行的服务器:一条由 AI 客户端
拉起、持有 API 密钥的 npx、uvx 或 docker 命令。但这并不会让数据变成本地
的。进程跑在您的笔记本上,然后每次请求都要通过网络去调用厂商的 API。当有人
告诉您他们的 MCP 服务器是本地的,这正是需要先排除的情况。
本地进程、本地数据。 数据本来就在机器上,服务器根本无需任何网络请求即可 读取。只有这一种形态里,“本地”描述的是数据,而不只是进程。
真正的线索是凭据,不是命令。浏览器登录意味着数据归厂商所有,由您来授权。粘贴 进配置文件的 API 密钥意味着一个本地进程代表您去调用他们的 API。两者都不是本地 数据。
当您为一台云端 MCP 服务器点完 OAuth 授权页,其实是针对自己的账号签发了一份 凭据,而这份凭据能做什么值得了解。
MCP 规范把这一层建立在 OAuth 2.1 之上。客户端必须发送来自
RFC 8707 的 resource 参数,
使令牌绑定到某一台特定服务器;服务器必须校验令牌是否是签发给自己的,且不得
接受或转发其他令牌。这套机制的存在,是为了防止签发给某个服务的令牌被拿去对
另一个服务重放使用。
三个现实后果:
这些对 stdio 全都不适用。授权规范明确说明它覆盖的是基于 HTTP 的传输方式,使用 stdio 的实现不应遵循它,而应改从环境变量中获取凭据。
本地不是安全的同义词,而这个论证要讲得诚实,就得说清楚您让渡了什么。
通常根本没有权限层。 由于授权规范不适用,stdio 服务器一般没有用户和 scope 的概念。以您的用户账号运行的任何程序,基本都能启动它并调用它的工具。在共用或 受管的机器上,这是要紧的。
监听端口的本地服务器是另一回事。 有些被称作本地的服务器其实在 HTTP 上监听。
规范直接处理了这一点:服务器必须校验 Origin 头以防范 DNS 重绑定攻击,本地
运行时应只绑定 127.0.0.1 而不是 0.0.0.0。规范警告说,缺少这些保护,攻击者
可以利用 DNS 重绑定,从远程网站与本地的 MCP 服务器交互。
供应链变成了您的事。 用 npx 启动的服务器会以您的权限在您机器上拉取并执行
代码。OWASP MCP Top 10 截至 2026 年
仍处于 beta 阶段,它在十个类别中列出了供应链攻击与依赖篡改(MCP04:2025)以及
工具投毒(MCP03:2025)——这些是本地安装要承担、而托管端点不必承担的风险。对于
一般情况,规范说得毫不含糊:工具本质上就是任意代码执行,而对工具行为的描述,
除非来自可信的服务器,否则都应视为不可信。
MCP 并不为您的数据添加权限模型。它规范化的是工具如何被描述和调用;某个工具被 允许触碰什么,是服务器作者做的决定。由此可得两条结论,与传输方式无关:
四个问题,从任何厂商的设置页面上大约一分钟就能答完。
https:// 开头的 URL 是云端服务器。npx、uvx
或 docker 命令是一个跑在您机器上的进程。直说,因为这个选择并非一边倒:
云端只在一个维度上输,但本文谈的正是这个维度:您数据的一份副本放在别人的基础 设施上,凭一份凭据就能读到。
请把一个问题拆成两个来问。服务器跑在哪里,告诉您谁存放数据、谁能凭令牌读到 它。助手读了什么,告诉您有什么会送到模型提供方——而这个答案在两种形态下都 一样。
如果您想要的正是本地进程读本地数据这一形态,那就是
Speak-Y 的 MCP 服务器:它是桌面应用的一部分,从
设置 → 集成一键安装,读取的是您机器上已有的录音,无需账号、
无需 API 密钥,也不留任何托管副本。读取在应用关闭时也能工作;会改动数据的工具都
经由应用,并在执行前征求确认,加上 --read-only 可把某个客户端限定为只读。所有
套餐都免费包含该服务器。
MCP 文档介绍了手动配置,隐私政策写明了哪些内容存放
在哪里;如果您想看看其他会议记录工具是怎么回答同一个问题的,我们
对比过它们的 MCP 服务器。
本地服务器是一个由 AI 客户端在您自己电脑上启动的程序,双方通过该进程的标准输入输出通信,完全不经过网络。云端服务器则是一个网络服务,客户端通过 HTTPS 访问,并用 OAuth 授权。在 MCP 规范里,这两者分别叫 stdio 传输和 Streamable HTTP 传输。
不能。本地服务器让数据不落在厂商的服务器上,但助手通过它读到的一切,都会作为对话的一部分发送给您的模型提供方,和您自己粘贴进去完全一样。本地决定的是存放和访问,而不是模型看到什么。
它更私密,但并不自动更安全。MCP 的授权规范只适用于 HTTP 传输;对 stdio 服务器,规范要求改从环境变量中取凭据,因此本地服务器通常没有自己的权限层。以您的用户身份运行的任何程序,一般都能访问到它。
看安装说明。https:// 开头的 URL 加上浏览器登录,意味着厂商云端。npx、uvx 或 docker 这类命令,意味着一个跑在您机器上的进程。但持有 API 密钥的本地进程照样会去调用厂商的 API,所以光看命令并不能说明数据在哪。
Claude Desktop 可以直接运行本地服务器,以桌面扩展的形式安装。ChatGPT 在开发者模式下连接的是远程 HTTPS 端点,因此本地的 stdio 服务器需要先通过隧道暴露出去。同一台服务器在一个客户端上是本地的,在另一个客户端上可能就是远程的。