MCP:标准化连接外部系统
建议用时:25 分钟(含练习)
学习目标
能够说明 MCP client、server、tools、resources 和 prompts 的基本关系与信任边界。
本节产出
一张 MCP 连接与权限图
核心知识:共同协议不等于共同权限
MCP
MCP 的全称是 Model Context Protocol。它为 AI 应用与外部能力之间的上下文交换提供共同协议。应用可以通过它发现可用能力、读取资源或调用工具,但协议本身不会自动决定某个用户有权访问什么,也不会保证每个服务实现都安全可靠。
先区分三个参与者:Host 是组织交互的 AI 应用;Client 是应用中与某个服务通信的组件;Server 是提供能力的程序。一个 Host 可以管理多个 Client,各自连接不同 Server。Server 可以在本机运行,也可以是远程服务,不应把这个词简单理解成一台云服务器。
图中的无箭头连线说明连接与能力归属,不表示调用顺序,也不代表已经授予全部权限。应用身份、服务身份和下游系统身份可能不同。诊断访问问题时,要明确是哪一段拒绝了请求:应用到服务、服务到数据库,还是具体业务规则。
三类能力分别解决什么问题
MCP 的三类能力
| 能力 | 主要作用 | 练习中的例子 |
|---|---|---|
| Tools | 执行一个定义好的动作 | 查询指定文档的可用版本 |
| Resources | 提供可读取的上下文资料 | 文档目录或数据结构说明 |
| Prompts | 提供可复用的交互模板 | 按固定问题组织阅读任务 |
这些是协议中的能力类别,不代表每个 Server 都实现全部类别。应用也可能只支持其中一部分。课程以官方架构文档为基础;具体版本的发现、传输和授权细节可能变化,实际连接应核对双方支持的版本,而不是照抄旧教程中的调用顺序。
官方文档介绍本地 stdio 与远程 Streamable HTTP 等传输方式。传输解决消息怎样到达,并不能替代业务权限判断。本地服务可能拥有进程用户的文件访问能力,远程服务则可能接收发送给它的数据,两者都需要明确范围。
案例:连接公开课程目录
假设一个练习 Server 只提供已公开课程的目录和正文,不允许写入。应用先了解它的能力,再按课程标识读取内容。若服务同时暴露删除课程工具,虽然模型当前只需要读取,额外写能力仍然扩大了风险,应在配置与账号层面限制。
接入前可以填写一张边界表:程序来源与版本、运行位置、读取范围、写入范围、联网目标、凭证由谁保管,以及如何停止服务。这不是形式化的安装清单,而是帮助你解释“接上以后究竟发生什么”。不知道这些信息,就无法判断一次调用会影响哪些系统。
故障应该沿连接分段检查
如果应用看不到任何工具,先确认服务是否启动、协议是否兼容,以及它实际发布了哪些能力。若工具可见但调用被拒绝,检查认证和业务授权。若调用成功但没有数据,检查查询参数、可见数据范围和返回结果是否被截断。
不要把所有问题都归结为模型不聪明,也不要为了修复读取问题直接开放全部目录或管理员权限。先用最小、无敏感信息的公开样例验证链路,能更清楚地区分连接问题与资料问题。
服务返回的文本仍然可能不可信。一个资源中包含“忽略任务限制”并不能改变用户授权。工具定义与服务更新也值得关注:能力清单变化后,原有评测和权限假设可能需要复核,不能只在首次安装时检查一次。
动手练习
- 画出练习目录服务的 Host、Client、Server 和实际资料存储位置。
- 各设计一个 Tool、Resource 和 Prompt,并说明为什么选择这一类别。
- 对“看不到工具”“调用被拒绝”“成功但为空”分别写出第一项检查。
参考答案与推演
Host 是学习者使用的 AI 应用,Client 是其中的协议连接组件,Server 提供目录能力,资料存储可以独立于 Server。查询版本可设计为 Tool,课程正文可作为 Resource,阅读问题清单可作为 Prompt;具体选择还要结合应用支持情况,并非唯一答案。
看不到工具先核对连接与能力发布;被拒绝先定位哪一层授权失败;空结果先检查参数和数据可见范围。合格设计应说明服务只能访问公开练习数据,没有因为采用 MCP 就获得其他项目权限。
完成检查
- 能区分 Host、Client、Server 与外部数据系统。
- 不把协议兼容、认证成功和业务授权混为一谈。
- 接入范围来自实际配置与文档,而不是服务名称。
- 故障排查按链路分段,使用最小公开样例。
参考与来源
- MCP:Architecture overview:参与者、能力类别与传输方式的官方说明。
- MCP:Security best practices:核对接入时的信任与授权边界。
MCP:标准化连接外部系统
3 道题 · 及格分 60 分