MCP 服务器的接入方式与安全边界
把它接到你已经在用的系统上。接之前先想清楚一件事——你接进来的那个东西,能替你读到什么、又能替谁说话。
MCP 是让 Claude 连上外部系统的那套标准。它是什么、Anthropic 为什么把它捐出去,见第 01 章的 MCP 与 Anthropic 的开放标准布局。
这一节只讲操作和边界。
先想清楚要不要接
接一个 MCP 服务器 = 给它开一扇新的门。
值得接的:你每天都要去查、去填的那个系统。比如项目管理工具、数据库、你们内部的资料库。
不值得接的:一年用两次的东西。每个连上的服务器都在占你的启动时间和上下文空间。
怎么接
远程服务(最常见)
claude mcp add --transport http notion https://mcp.notion.com/mcp
很多服务需要登录。加完之后在会话里输入 /mcp,里面有登录入口,走一遍浏览器授权就行。
也可以在命令行完成:
claude mcp login notion
需要 API key 的
claude mcp add --transport http secure-api https://api.example.com/mcp \
--header "Authorization: Bearer 你的 token"
跑在你自己电脑上的
claude mcp add --env API_KEY=你的key --transport stdio airtable \
-- npx -y airtable-mcp-server
注意那个
--。 它把 Claude 自己的参数和要执行的命令分开,--后面的原样传给那个程序。少了它,Claude 会试图把对方的参数当成自己的来解析。
装在哪一层
三个范围,选错了要么别人看不到,要么该私密的进了版本库。
| 范围 | 谁能用 | 存在哪 |
|---|---|---|
| local(默认) | 只有你,只在当前项目 | ~/.claude.json |
| project | 团队(跟着版本库走) | 项目根目录的 .mcp.json |
| user | 只有你,所有项目 | ~/.claude.json |
加 -s 参数指定:
claude mcp add -s user --transport http notion https://mcp.notion.com/mcp
怎么选:
- 只有你自己用的(比如你的个人笔记系统)→
user- 整个团队都该有的(比如公司的资料库)→
project- 拿不准 → 先用默认的 local,好用了再挪
同名的话,local 覆盖 project 覆盖 user。
常用命令
| 命令 | 做什么 |
|---|---|
claude mcp list |
列出所有服务器和连接状态 |
claude mcp get <名字> |
看某一个的详情 |
claude mcp remove <名字> |
删掉 |
/mcp(会话内) |
状态、登录、按项目开关 |
claude mcp list 会在每个服务器旁边标状态:
| 标记 | 含义 |
|---|---|
✔ Connected |
好的 |
! Needs authentication |
需要登录,用 /mcp |
✘ Failed to connect |
连不上 |
⏸ Pending approval |
等你批准,见下面 |
安全边界:这一节的重点
① 接进来的东西不是中立的
官方页面顶部的警告是:连接之前确认你信任这个服务器。会抓取外部内容的服务器,会让你暴露在提示词注入风险下。
「提示词注入」的意思是:它读到的某段内容里,藏着写给它看的指令。
这件事有一个已经被总结成规律的判断标准——当三个条件同时成立时风险最高:接触私密数据、接触不可信内容、能对外发送。见致命三要素。
落到 MCP 上就是一条实际的纪律:
一个能读你私密材料的服务器,和一个能上网抓东西的服务器,尽量不要在同一个会话里同时开着。
② 项目里带的服务器需要你批准
从版本库里 clone 下来一个项目,它的 .mcp.json 里可能已经写好了几个服务器。
Claude Code 不会自动连,会先问你。你会看到那个 ⏸ Pending approval 状态。
批准过的选择想重置:
claude mcp reset-project-choices
这个设计防的是一类具体的事:一个下载来的项目,配置文件里预先写好连到某个外部服务器。不批准就不连。
③ 有些工具每次都会问你
服务器可以声明「我这个工具必须每次都让人确认」。
这类工具在任何权限模式下都会问你——包括 bypassPermissions,而且不给「以后别问」的选项。
这是一个好设计。 涉及发送、支付、删除这类不可逆动作的工具,就该每次都问。
④ 用只读的凭据
接数据库时,官方示例里明确用的是只读用户。
这一条应该扩展成通则:给 MCP 服务器的凭据,能只读就只读。它不需要写权限的时候,不要给它写权限。
它接进来的工具怎么称呼
mcp__服务器名__工具名
比如 mcp__github__list_prs。
这个完整名字用在权限规则里,比如你想禁掉所有 MCP 工具:
{
"permissions": {
"deny": ["mcp__*"]
}
}
三个不那么明显的机制
工具定义是按需加载的
默认情况下,启动时只加载工具的名字,完整说明等它用到时才拉。
这是为你省上下文。 一个服务器可能有几十个工具,全部展开会占掉很大一块。
代价是它第一次用某个工具时会多一步。 想让某个服务器一直完整加载,在配置里加 "alwaysLoad": true——但这会拖慢启动,因为要等它连上。
跑太久的会自动转后台
主对话里超过两分钟的 MCP 调用会转成后台任务,你继续干别的,结果回来时通知你。
在 /tasks 里能看到。
输出太多会被截断
超过 25,000 token 的返回会被限制。 超过 10,000 就开始警告。
实际含义:让它「把整个数据库导出来」这类活儿,不要指望一次 MCP 调用完成。分批,或者让它写到文件里。
一份接入清单
接一个新服务器之前,问自己四个问题:
| 问题 | |
|---|---|
| ① | 这个服务器是谁做的? 官方的、还是网上找的? |
| ② | 它能读到什么? 给它的凭据能不能收窄成只读? |
| ③ | 它会不会抓外部内容? 会的话,别和敏感材料同场使用 |
| ④ | 我一周会用到几次? 少于一次就别接 |
第四个问题最容易被忽略。 接进来的东西不用也在占地方。定期用
/mcp关掉不用的。
本节事实查证日期:2026-08-05。 依据:官方 Connect Claude Code to tools via MCP。