MCP 接入与安全
理解 MCP 架构、传输方式和权限边界,并安全连接第三方或自建 MCP Server。
Model Context Protocol(MCP)是一套连接 AI 应用与外部系统的开放协议。兼容客户端可以通过 MCP Server 获取上下文、调用工具或使用预定义提示,而不必为每一种数据源单独设计接入协议。
MCP 与模型 API 是不同的接入层
AGTCloud API 负责模型调用;MCP Server 负责向兼容客户端暴露工具和上下文。连接 MCP 时,请使用 Server 发布者或管理员提供的安装命令、URL 和认证方式;AGTCloud 模型 API 地址不能作为 MCP Server Endpoint 使用。
MCP 如何工作
一个 MCP Host 可以连接多个 MCP Server,并为每个 Server 创建独立的 MCP Client。
| 参与者 | 主要职责 | 常见形态 |
|---|---|---|
| MCP Host | 承载 AI 应用、管理连接、权限和用户确认 | 编程智能体、IDE、桌面助手 |
| MCP Client | 与一个 MCP Server 建立专用连接,并向 Host 提供 Server 能力 | 通常内置在 Host 中 |
| MCP Server | 暴露特定工具、数据或提示模板 | 本地子进程、远程服务 |
MCP 分为数据层和传输层:数据层定义 JSON-RPC 消息、能力发现和 Primitives;传输层负责消息如何在本地进程或网络之间传递。客户端通常会封装这些协议细节,接入时应优先使用客户端提供的 MCP 配置入口。
Server 可以提供什么
MCP Server 主要暴露三类 Primitives:
| Primitive | 控制方式 | 作用 | 接入时重点检查 |
|---|---|---|---|
| Tools | 模型可选择调用,Host 负责执行策略和授权 | 执行操作或查询,例如调用 API、写入文件、查询数据库 | 输入 Schema、写操作、外部副作用、是否需要人工批准 |
| Resources | 由应用选择和管理 | 向模型提供文件、记录、API 响应等上下文 | 数据范围、敏感信息、更新频率、内容可信度 |
| Prompts | 通常由用户主动选择 | 提供可复用的交互模板和参数 | 模板来源、参数含义、是否包含外部指令 |
Server 会声明自己支持的能力,客户端再发现可用的 Tools、Resources 和 Prompts。Server 提供某项能力不代表客户端一定会启用;最终行为还取决于 Host 的版本、权限策略和用户选择。
把 Server 返回的内容视为外部输入
Resource、Tool 结果和 Prompt 都可能包含不可信内容。不要因为它们通过 MCP 返回,就自动允许其中的指令访问其他文件、凭证或系统服务。
选择传输方式
当前 MCP 规范定义了 stdio 和 Streamable HTTP 两种标准传输。
| 传输 | 工作方式 | 更适合 | 主要风险 |
|---|---|---|---|
stdio | 客户端启动本地 Server 子进程,通过标准输入输出交换逐行 JSON-RPC 消息 | 本机工具、受控目录、无需网络部署的 Server | 启动命令等同于在本机执行程序;Server 继承进程权限和部分环境信息 |
| Streamable HTTP | 客户端向单一 MCP Endpoint 发送 HTTP POST;Server 返回 JSON 或当前请求范围内的 SSE 流 | 远程服务、团队共享能力、需要网络认证的 Server | 服务身份、OAuth 或 Token、网络边界、数据外发和远程副作用 |
对于 stdio,Server 的 stdout 只能输出 MCP 消息,日志应写入 stderr。出现连接失败时,可以检查客户端捕获的 stderr 日志,但不要把包含凭证的完整日志发送给第三方。
当前 Streamable HTTP 使用单一 POST Endpoint,不需要单独配置 GET 或旧式 HTTP+SSE 地址。认证方式由 Server 决定;如果 Server 提供 OAuth 流程,应优先按照其授权页面完成认证,而不是把长期凭证直接写入共享配置。
理解配置结构
不同客户端的字段名称和配置位置并不完全相同。下面只展示常见结构,不能直接运行;请使用 Server 发布者提供的真实命令、参数、URL 和认证方式替换所有占位符。
{
"mcpServers": {
"replace-with-server-name": {
"command": "/absolute/path/to/server-command",
"args": [
"--replace-with-required-argument"
],
"env": {
"SERVICE_API_KEY": "replace-with-client-supported-secret-reference"
}
}
}
}command是客户端实际执行的程序,连接前必须核对完整路径和发布来源;args可能包含允许访问的目录、配置文件或 Server 参数;env只传递 Server 必需的最小环境变量。凭证引用语法因客户端而异。
不要直接复制未知启动命令
本地 MCP 配置中的 command 与 args 会在你的计算机上执行。不要运行来源不明的一键安装命令,也不要把整个主目录、SSH 目录或系统目录作为默认访问范围。
安全接入步骤
1. 核对客户端支持
确认客户端支持 MCP,并检查它支持 stdio、Streamable HTTP 中的哪一种。使用客户端当前版本对应的配置格式,不要根据其他客户端的示例猜测字段。
2. 核对 Server 身份
从 Server 官方仓库、服务商控制台或组织管理员处取得安装方式。检查发布者、版本、更新记录、依赖和卸载方法;远程 Server 还应核对域名、HTTPS 和认证流程。
3. 盘点能力与权限
在启用前查看 Server 暴露的 Tools、Resources 和 Prompts。记录每个 Tool 的输入、读取范围、写操作和外部副作用,禁用与当前任务无关的能力。
4. 配置最小范围
本地 Server 只开放必要目录和环境变量;远程 Server 使用最小权限账号或 Scope。不要把模型 API Key 当作通用 MCP 凭证发送给未知 Server。
5. 重新加载并检查
按客户端说明重新加载配置,确认 Server 可以连接,并检查客户端展示的能力清单与预期一致。连接成功并不等于所有 Tool 都应该启用。
6. 从只读操作开始
先列出能力、读取一项非敏感 Resource,或调用没有副作用的 Tool。确认输入、输出和日志后,再逐项允许写文件、修改数据或调用外部系统。
权限审查清单
| 范围 | 接入前确认 |
|---|---|
| 本地文件 | Server 可以读取和写入哪些目录,是否会跟随符号链接或访问目录外文件 |
| 命令执行 | Tool 会运行哪些程序,参数是否由模型或外部内容直接控制 |
| 网络访问 | Server 会访问哪些域名、内网服务和第三方 API |
| 凭证 | Key 或 Token 保存在哪里、传给哪个进程或域名、能否单独撤销 |
| 数据处理 | 输入和结果是否会离开本机,服务商如何保存日志和调用数据 |
| 写操作 | 修改、删除、提交、付款或消息发送前是否有明确确认 |
| 更新 | Server 包或远程能力发生变化时,客户端是否会重新展示权限 |
对于远程 Server,只连接可信 HTTPS 地址并按其认证流程授权。对于本地 Server,优先使用绝对命令路径、隔离目录和普通用户权限,不要为了方便直接使用管理员权限运行。
常见问题
| 现象 | 优先检查 | 处理方式 |
|---|---|---|
| Server 无法启动 | 命令路径、运行时、参数和工作目录 | 在普通终端确认程序存在,但不要绕过客户端直接执行未知命令 |
| 客户端显示已连接,但没有 Tool | Server 能力、客户端权限和版本 | 重新加载能力列表,确认客户端支持该 Primitive |
stdio 连接后立即断开 | Server 是否向 stdout 输出了普通日志 | 将日志写入 stderr,保证 stdout 只包含 MCP 消息 |
远程 Endpoint 返回 401 或 403 | Server 的认证方式、Token 和 Scope | 按 Server 文档重新授权,不要改用其他服务的 Token |
远程 Endpoint 返回 404 | URL 是否包含完整 MCP 路径 | 使用 Server 发布者提供的 Endpoint,不要自行追加模型 API 路径 |
| Tool 可以读取但无法写入 | Tool 权限、目录范围和人工确认 | 只在确实需要时扩大权限,并再次执行可撤销测试 |
| Tool 行为与描述不一致 | Server 版本、Tool Schema 和外部输入 | 立即停用该 Tool,保存脱敏证据并联系 Server 发布者 |
| 连接后出现意外外部请求 | Server 网络权限和数据流向 | 断开 Server、撤销凭证,并检查日志与主机网络活动 |
持续使用建议
- 定期复查已连接的 Server、版本、Tool 清单和授权范围;
- 为不同 Server 使用独立、可撤销、最小权限的凭证;
- 保持人工确认,尤其是删除、写入、付款、消息发送和生产系统操作;
- 不把未知 Resource 或 Tool 结果中的指令当作可信系统指令;
- 日志、截图和错误报告必须移除 Key、Token、客户数据和敏感路径;
- 停止使用 Server 时,从客户端移除配置并撤销相关凭证。
需要为模型客户端配置 AGTCloud 时,请从 CC-Switch 集成教程开始,或在左侧“第三方集成”目录中选择具体工具;需要理解模型端点和请求字段时,请查看 API Reference。MCP 的协议细节和版本变化请以 MCP 官方文档为准。