简介:MCP让AI以标准化方式接入外部工具与数据源,但当多个MCP Server同时在线时,AI如何知道该用哪一个?本文完整拆解从宿主应用注册配置、连接建立、能力协商,到工具清单注入上下文、模型语义匹配决策,再到调用路由与执行的选型链路,并梳理stdio与HTTP两类传输方式的适用边界与工程实践要点。
MCP(Model Context Protocol,模型上下文协议)是一套面向AI应用的标准化通信协议,用于让大模型以统一、规范的方式接入并使用外部工具、数据源与服务。每一个按协议封装好的能力单元,就是一个MCP Server。
所谓“AI如何确定应使用的MCP Server”,并不是一个孤立动作,而是贯穿一次完整调用流程的两层决策问题:
简言之:宿主应用负责“把选项摆上桌”,模型负责“从选项中挑对的”。两层机制缺一不可,理解了这一点,后续的机制拆解就会非常清晰。
在MCP出现之前,让AI使用工具是一件“组合爆炸”的事情:M个模型对接N个工具,理论上需要M×N次适配。各家模型的函数调用机制在格式、字段与能力上并不一致,工具开发者不得不为每个模型单独编写适配器,模型侧也要为每类工具逐一对接。这与早期每种数据库都要单独配一套驱动的困境类似。
MCP的核心思路是把“工具侧封装”与“模型侧调用”解耦:工具、数据源统一按MCP规范封装成Server,任何支持该协议的大模型和宿主应用都能直接使用,适配成本从M×N大幅降低为M+N。
但解耦之后,一个新的工程问题随之浮现:一个AI应用往往同时需要文件读写、数据库查询、知识检索、内部业务接口等多类能力,而这些能力可能来自多个不同的MCP Server。于是产生了三个具体问题:
这三个问题合起来,就是“确定应使用的MCP Server”的完整含义。它是MCP从“能接工具”走向“可规模化落地”的关键环节。
Host并不会在环境中“自动扫描”Server,而是依赖显式配置。宿主应用通常提供JSON等格式的统一配置入口,每条记录声明Server的名称、传输方式、启动命令或服务地址、环境变量等。示意如下:
{"servers": [{ "name": "本地文档工具", "transport": "stdio", "command": "启动命令", "args": [] },{ "name": "数据查询服务", "transport": "http", "url": "服务地址" }]}
这份清单回答了“可选项有哪些”。某个Server被写入清单,它才有资格进入后续流程——这本身就是第一道“选择”。
MCP的传输层目前主要有三类,适用边界分明:
选型逻辑与数据库连接方式的选择类似:本地场景用管道或套接字最简单直接,跨网络场景则必须走HTTP。本地测试、IDE插件内嵌工具用stdio,启动即用、部署更新方便;服务端或云端部署则采用HTTP类传输。
连接建立后,Client与Server先完成初始化握手:确认协议版本、交换各自支持的能力范围,避免版本不兼容造成歧义。随后Host通过每条连接查询该Server的能力清单,重点是工具列表——每个工具的名称、自然语言功能描述与参数结构。这一步是后续一切选择的信息基础:模型能“看见”什么,完全取决于这里收集到了什么。
Host将来自所有Server的工具汇总为一份统一的“工具目录”,按模型可理解的结构化格式注入上下文。此后每当用户发起请求:
这里有两点值得强调:第一,模型的选择依据主要是工具的文字描述与参数定义,描述质量直接决定选择准确率;第二,模型全程不接触网络与进程,它只“点名”,不“动手”。
Host根据内部维护的“工具→Server”归属映射,找到被选中工具所属的连接,把调用请求经对应Client转发给正确的Server;Server执行后将结果沿原路返回,Host再交给模型组织最终回答。完整闭环如下:
用户请求 → 模型读取工具目录 → 语义匹配选定工具→ Host按归属路由 → 对应Server执行 → 结果返回 → 模型生成回答
AI确定应使用的MCP Server,是“宿主应用注册、连接、发现能力”与“模型基于工具描述做语义选择”两层机制协同的结果。其核心链路可以浓缩为一句话:配置注册 → 建立连接 → 握手协商 → 工具注入 → 模型挑选 → 路由执行。工程配置决定了“有哪些可选项”,模型的语义能力决定了“选哪个”,路由机制保证了“调用被送到正确的执行方”。理解这条链路,也就理解了MCP从协议规范走向实际应用的关键一环。