
Anthropic 于2024 年11 月正式发表了一项名为Model Context Protocol(MCP)的开源标准,目标是为AI 模型与外部系统之间的连接建立统一的通讯协议。这项标准被业界比喻为「AI 界的USB-C」,因为它解决的问题本质上与USB-C 统一充电介面的逻辑相同— 让所有AI 应用程式透过同一套标准化的接口,与各种外部工具、资料库和服务沟通,而不需要为每一个整合对象重新开发客制化的连接方式。
MCP 的出现标志着AI 应用开发进入一个新阶段。过去几年,大型语言模型的能力突飞猛进,但它们与真实世界系统的互动方式却始终缺乏统一标准。 MCP 正是为了填补这个缺口而诞生的。本文将完整介绍MCP 的运作原理、核心架构、支持生态系以及实际应用方式,帮助开发者与关注AI 发展的读者全面理解这项协议的意义与潜力。
MCP 解决了什么问题
在MCP 出现之前,AI 应用程式要与外部系统互动面临一个根本性的挑战:每一个AI 工具与每一个外部服务之间的整合,都需要从头开发专属的连接逻辑。假设市场上有10 个AI 应用程式,同时有10 个外部服务需要串接,理论上就需要开发100 组不同的整合方案。这种M×N 的组合爆炸问题,不仅浪费大量开发资源,也让整个生态系的发展速度受到严重制约。
具体来说,这些问题体现在几个层面。首先是重复劳动。每当一个新的AI 应用程式想要支援GitHub 整合,开发团队就必须从零开始撰写与GitHub API 对接的程式码,即使其他AI 应用程式已经做过完全相同的事情。其次是维护成本。当外部服务的API 更新时,所有依赖该API 的客制化整合都需要同步修改。第三是品质参差不齐。不同开发者实作的整合方案,在安全性、效能和稳定性方面往往存在显着差异。
更深层的问题在于,这种碎片化的整合方式严重限制了AI 应用程式的实用性。一个AI 助理如果只能读取文字输入、产出文字回复,却无法存取使用者的档案、查询资料库或操作开发工具,那它能提供的价值就被大幅缩限。使用者期待AI 能够真正融入工作流程,而不是作为一个孤立的对话窗口存在。
MCP 的提出正是要从根本上改变这个局面。透过建立一套标准化的通讯协议,MCP 将M×N 的复杂度降低为M+N — 每个AI 应用程式只需实作一次MCP 客户端,每个外部服务只需建置一个MCP 伺服器,两者之间就能透过统一的协议自由互通。
USB-C 类比的深层意义
「AI 界的USB-C」这个比喻并非随意选取,它精确地捕捉了MCP 的核心设计理念。回顾USB-C 出现之前的消费电子市场,每家手机厂商都有自己的充电接口— Apple 用Lightning、Samsung 用Micro USB、部分笔电用DC 圆孔接头。消费者的抽屉里堆满了各种不同的充电线,出门时还得烦恼要带哪几条。
USB-C 的出现改变了这一切。一个统一的接口标准,让所有装置都能使用同一条线充电、传输资料、甚至输出影像讯号。装置制造商不再需要设计自己的专属接口,配件厂商也不需要为每款装置生产不同的线材。整个生态系因此变得更加高效、开放且对使用者友善。
MCP 在AI 领域扮演的角色与此完全对应。在MCP 之前,每个AI 应用程式与每个外部服务之间的连接,就像是一条专用的充电线— 只能用在特定的组合上。 MCP 则提供了一个通用的「接口」,让任何支援MCP 的AI 应用程式都能与任何提供MCP 伺服器的外部服务连接,不需要额外的客制化开发。
这个类比也延伸到了更深的层面。就像USB-C 定义了电力传输、资料传输和影像讯号的标准规范一样,MCP 也定义了三种核心的互动模式— 工具呼叫、资源存取和提示范本。这三种「通道」涵盖了AI 应用程式与外部系统互动的主要需求,确保协议的通用性和完整性。
三大核心原语
MCP 的设计围绕三种核心原语(Primitives)展开,每一种都对应AI 与外部系统互动的一种基本模式。理解这三种原语,就能掌握MCP 的运作逻辑。
| 原语 | 英文名称 | 功能描述 | 典型用途 |
|---|---|---|---|
| 工具(Tools) | Tools | 可执行的函式,AI 模型可以主动呼叫来完成特定动作 | 发送讯息、建立档案、查询API、执行程式码 |
| 资源(Resources) | Resources | 结构化的资料来源,AI 模型可以读取但不会修改 | 读取档案内容、查询资料库纪录、取得系统状态 |
| 提示范本(Prompts) | Prompts | 预先定义的互动范本,引导AI 模型以特定方式处理任务 | 程式码审查范本、文件摘要范本、翻译工作流程 |
工具(Tools)
工具是MCP 中最直觉的原语。它代表一个具体的、可执行的函式,AI 模型可以决定何时以及如何呼叫它。每个工具都有明确的名称、描述和参数定义,AI 模型会根据使用者的需求判断应该呼叫哪个工具,并自动组装适当的参数。
举例来说,一个GitHub MCP 伺服器可能会暴露以下工具:create_issue(建立新的Issue)、list_pull_requests(列出Pull Request)、merge_branch(合并分支)。当使用者对AI 助理说「帮我在my-project 这个repo 建立一个关于登入页面bug 的Issue」时,AI 模型会自动选择create_issue 这个工具,填入适当的repository 名称、标题和描述,然后透过MCP 协议将这个呼叫传送到GitHub MCP 伺服器执行。
工具的设计哲学是「模型控制」— AI 模型拥有主动权,可以根据上下文和使用者意图自主决定是否呼叫工具以及如何使用工具。这与传统的API 呼叫不同,传统方式需要开发者在程式码中明确指定何时呼叫哪个API,而MCP 的工具机制让AI 模型能够灵活地在对话过程中动态调用功能。
资源(Resources)
资源代表AI 模型可以存取的结构化资料。与工具不同,资源是唯读的— AI 模型可以读取资源的内容,但不会对资料来源进行任何修改。这种设计确保了资料存取的安全性,同时让AI 模型能够获得完成任务所需的上下文资讯。
资源的运作方式类似于REST API 中的GET 端点。每个资源都有一个唯一的URI(统一资源识别符),AI 模型可以透过这个URI 请求特定的资料。例如,一个档案系统MCP 伺服器可能会将每个档案暴露为一个资源,URI 格式为file:///path/to/document.txt。 AI 模型在需要参考某个档案内容时,就可以透过对应的URI 读取它。
资源的设计哲学是「应用程式控制」— 由MCP 主机(Host)决定哪些资源要提供给AI 模型。这意味着应用程式可以根据安全政策和使用者权限,精确控制AI 模型能够存取哪些资料,避免敏感资讯被不当存取。
提示范本(Prompts)
提示范本是三种原语中最容易被忽略、但实务上极其实用的一种。它允许MCP 伺服器预先定义一组互动范本,引导AI 模型以特定的方式处理某类任务。
例如,一个程式码审查的提示范本可能会指示AI 模型:先读取指定的程式码档案(使用资源),然后按照特定的检查清单逐项审查,最后以固定的格式输出审查结果。这种范本化的做法确保了一致性和品质,同时也降低了使用者的学习成本— 使用者不需要自己设计复杂的提示词,只需选择适当的范本即可。
提示范本的设计哲学是「使用者控制」— 最终是由使用者决定要启用哪个范本。这让使用者对AI 的行为模式有更精确的掌控力。
MCP 架构详解
MCP 的架构设计遵循客户端-伺服器模式,但加入了「主机」这个额外的层级,形成一个清晰的四层结构。理解这个架构是掌握MCP 运作方式的关键。
整体架构的资料流向如下:
MCP 主机(Host)→ MCP 客户端(Client)→ MCP 伺服器(Server)→ 外部服务(External Service)
以下逐一说明每个层级的角色与责任。
MCP 主机(Host)
主机是使用者直接互动的应用程式,也是整个MCP 架构的最外层。常见的主机包括Claude Desktop 桌面应用程式、VS Code 等程式码编辑器、或是任何内建AI 功能的应用程式。主机的主要职责是管理使用者介面、处理AI 模型的推理过程,以及协调一个或多个MCP 客户端的运作。
重要的是,主机同时也是安全的最后一道防线。它负责执行使用者的权限控制政策,决定哪些MCP 伺服器可以被连接、哪些工具可以被呼叫、哪些资源可以被存取。在许多实作中,主机会在AI 模型要求执行某个工具之前,先向使用者显示确认对话框,确保使用者知悉并同意即将执行的动作。
MCP 客户端(Client)
客户端是嵌入在主机应用程式内部的通讯模组,负责与MCP 伺服器建立和维护连线。每个客户端通常对应一个MCP 伺服器,维持一对一的连线关系。客户端处理协议层级的细节,包括讯息的序列化与反序列化、连线的生命周期管理,以及错误处理。
客户端的存在让主机不需要直接处理与MCP 伺服器通讯的复杂性。主机只需要透过一个简洁的内部介面告诉客户端「我需要呼叫这个工具」或「我需要读取这个资源」,客户端就会自动处理后续的通讯流程。
MCP 伺服器(Server)
伺服器是MCP 架构中连接AI 世界与外部系统世界的桥梁。每个MCP 伺服器都专注于暴露特定外部服务的功能,将该服务的API 转换为MCP 协议格式的工具、资源和提示范本。
例如,一个Slack MCP 伺服器会将Slack 的各种API 功能封装为MCP 工具(如send_message、list_channels)和资源(如特定频道的讯息历史)。 AI 模型不需要知道Slack API 的具体格式和认证方式,它只需要透过标准的MCP 协议与Slack MCP 伺服器沟通,伺服器会负责将MCP 请求转译为Slack API 呼叫。
MCP 伺服器可以是本地执行的程式,也可以是远端部署的服务。本地伺服器通常透过标准输入输出(stdio)与客户端通讯,适合存取本地档案系统或执行本地工具的场景。远端伺服器则透过HTTP 搭配Server-Sent Events(SSE)通讯,适合需要存取云端服务或需要多使用者共享的场景。
外部服务(External Service)
外部服务是整个链条的最末端,包括各种API、资料库、档案系统、SaaS 平台等。这些服务本身不需要知道MCP 的存在— MCP 伺服器负责处理所有的协议转换工作。这意味着任何现有的服务,只要有人为它建置一个MCP 伺服器,就能立即被整合进MCP 生态系中,而服务本身不需要做任何修改。
多伺服器并行运作
在实际使用中,一个MCP 主机通常会同时连接多个MCP 伺服器。例如,一位开发者在Claude Desktop 中可能同时启用了GitHub 伺服器、档案系统伺服器和资料库伺服器。当使用者提出一个复杂的需求,如「帮我查看最新的Pull Request,读取相关的程式码变更,然后将审查结果写入资料库」,AI 模型可以跨多个MCP 伺服器协调操作,先从GitHub 伺服器取得PR 资讯,再从档案系统伺服器读取程式码,最后透过资料库伺服器写入审查结果。
这种多伺服器并行的能力,是MCP 架构设计中一个重要的优势。它让AI 助理真正成为一个能够跨系统操作的工作伙伴,而不是只能与单一服务互动的单功能工具。
支持MCP 的主要应用程式
自2024 年11 月MCP 发表以来,愈来愈多AI 应用程式和开发工具宣布支援这项协议。以下整理截至目前的主要支援清单。
| 应用程式 | 类型 | MCP 支援方式 | 说明 |
|---|---|---|---|
| Claude Desktop | AI 桌面助理 | 原生支持 | Anthropic 官方桌面应用程式,最早支援MCP 的主机之一 |
| Claude Code | AI 命令列工具 | 原生支持 | Anthropic 的终端机AI 助理,支援透过MCP 连接各种开发工具 |
| VS Code(Copilot) | 程式码编辑器 | 透过GitHub Copilot 扩充功能 | 微软的主力编辑器,透过Copilot Agent 模式支援MCP |
| JetBrains IDE | 程式码编辑器 | 内建AI Assistant 支持 | IntelliJ IDEA、PyCharm 等JetBrains 系列IDE |
| Cursor | AI 程式码编辑器 | 原生支持 | 以AI 辅助开发为核心的编辑器,早期即导入MCP 支援 |
| Windsurf | AI 程式码编辑器 | 原生支持 | 由Codeium 开发的AI 编辑器 |
| Zed | 程式码编辑器 | 原生支持 | 高效能编辑器,内建AI 功能支援MCP |
| Sourcegraph Cody | AI 程式码助理 | 原生支持 | 程式码搜寻与理解平台的AI 助理 |
值得注意的是,这份清单持续扩大中。 MCP 作为开源标准,任何开发者或企业都可以在自己的产品中加入MCP 支援。这种开放性正是MCP 能够快速获得采用的关键因素之一。
从这份清单可以观察到一个趋势:程式码编辑器和开发工具是MCP 最早且最积极的采用者。这并不意外,因为软体开发本身就是一个高度依赖多系统协作的工作场景— 开发者日常需要在版本控制、专案管理、文件系统、资料库之间频繁切换,MCP 恰好能够将这些工具无缝整合到AI 助理的能力范围中。
热门预建MCP 伺服器
MCP 生态系的一大优势在于,社群和官方已经建置了大量预建的MCP 伺服器,覆盖了最常见的使用场景。开发者和使用者不需要从零开始建置,直接安装和设定就能使用。
| MCP 伺服器 | 对应服务 | 主要功能 |
|---|---|---|
| GitHub MCP Server | GitHub | 管理Repository、Issue、Pull Request、Actions、搜寻程式码 |
| Slack MCP Server | Slack | 发送与读取讯息、管理频道、搜寻对话纪录 |
| Google Drive MCP Server | Google Drive | 搜寻、读取和管理Google Drive 中的档案与文件 |
| PostgreSQL MCP Server | PostgreSQL | 查询资料库、执行SQL 指令、检视资料表结构 |
| SQLite MCP Server | SQLite | 操作本地SQLite 资料库,适合开发和测试环境 |
| Filesystem MCP Server | 本地档案系统 | 读写档案、目录操作、档案搜寻,限定在指定目录范围内 |
| Brave Search MCP Server | Brave Search | 透过Brave Search API 执行网页搜寻 |
| Puppeteer MCP Server | 浏览器自动化 | 控制无头浏览器,撷取网页内容、截图、自动化表单操作 |
| Git MCP Server | Git 版本控制 | 查看commit 纪录、diff、分支管理等Git 操作 |
| Memory MCP Server | 知识图谱 | 建立和查询持久化的知识图谱,让AI 模型具备长期记忆 |
这些预建伺服器覆盖了几个主要类别。开发工具类包含GitHub、Git 等,让AI 助理直接参与软体开发流程。通讯协作类如Slack,让AI 助理可以读取和发送团队讯息。资料存取类如各种资料库伺服器和档案系统伺服器,让AI 助理能够查询和管理资料。资讯检索类如搜寻引擎和浏览器自动化伺服器,让AI 助理可以从网路上获取最新资讯。
除了上述列出的伺服器之外,社群还持续开发新的MCP 伺服器。在GitHub 上可以找到涵盖Notion、Jira、Linear、Sentry、Docker、Kubernetes 等众多服务的MCP 伺服器。这种社群驱动的生态系发展模式,确保了MCP 的覆盖范围能够随着需求快速扩展。
快速入门— 以Claude Desktop 为例
对于想要立即体验MCP 的使用者来说,Claude Desktop 搭配预建MCP 伺服器是最简单的入门方式。以下以连接档案系统MCP 伺服器为例,说明完整的设定步骤。
步骤一:安装Claude Desktop
前往Anthropic 官方网站下载Claude Desktop 桌面应用程式。安装完成后,使用Anthropic 帐号登入。确认应用程式版本支援MCP 功能— 通常在设定页面中可以看到MCP 相关的选项。
步骤二:安装MCP 伺服器
大多数MCP 伺服器都以npm 套件或Python 套件的形式发布。以档案系统伺服器为例,可以透过npm 安装:
npm install -g @modelcontextprotocol/server-filesystem
如果偏好使用Python 版本,也可以透过pip 安装对应的套件。
步骤三:设定Claude Desktop
Claude Desktop 的MCP 设定档位于以下路径:
# macOS ~/Library/Application Support/Claude/claude_desktop_config.json # Windows %APPDATA%\Claude\claude_desktop_config.json
开启设定档,加入MCP 伺服器的设定。以下是一个连接档案系统伺服器的设定范例:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/Documents",
"/Users/username/Projects"
]
}
}
}
这个设定告诉Claude Desktop:启动一个名为filesystem 的MCP 伺服器,使用npx 执行@modelcontextprotocol/server-filesystem 套件,并且授权AI 模型存取/Users/username/Documents 和/Users/username/Projects 这两个目录。
步骤四:重新启动并验证
储存设定档后,重新启动Claude Desktop。如果设定正确,在对话介面的输入框附近应该会出现一个工具图示,点击后可以看到档案系统伺服器暴露的工具清单,包括read_file、write_file、list_directory 等。
此时就可以开始测试了。尝试输入「列出我Documents 目录下的所有档案」,Claude 应该会呼叫list_directory 工具并回传结果。或者输入「读取Projects 目录下的README.md 档案」,Claude 就会透过read_file 工具读取并显示档案内容。
新增更多伺服器
同一个设定档中可以加入多个MCP 伺服器。例如,想要同时连接GitHub 和资料库:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/username/Projects"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxx"
}
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
}
}
}
每个伺服器可以有自己的执行指令、参数和环境变数设定。 GitHub 伺服器需要提供Personal Access Token 进行认证,资料库伺服器则需要提供连线字串。
开发自己的MCP 伺服器
当预建的MCP 伺服器无法满足需求时,开发者可以自行建置MCP 伺服器。 MCP 提供了Python 和TypeScript 两种语言的官方SDK,大幅降低了开发门槛。
使用Python SDK
Python SDK 适合资料科学家、后端工程师以及熟悉Python 生态系的开发者。以下是一个简单的天气查询MCP 伺服器范例:
from mcp.server import Server
from mcp.types import Tool, TextContent
import httpx
server = Server("weather-server")
@server.list_tools()
async def list_tools():
return [
Tool(
name="get_weather",
description="取得指定城市的目前天气资讯",
inputSchema={
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,例如 Taipei"
}
},
"required": ["city"]
}
)
]
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "get_weather":
city = arguments["city"]
# 呼叫天气 API 取得资料
async with httpx.AsyncClient() as client:
response = await client.get(
f"https://api.weatherapi.com/v1/current.json?q={city}"
)
data = response.json()
return [TextContent(
type="text",
text=f"{city} 目前温度:{data['current']['temp_c']}°C"
)]
if __name__ == "__main__":
import asyncio
from mcp.server.stdio import stdio_server
async def main():
async with stdio_server() as (read, write):
await server.run(read, write)
asyncio.run(main())
这个范例展示了MCP 伺服器开发的基本结构。透过@server.list_tools() 装饰器定义伺服器提供的工具清单,透过@server.call_tool() 装饰器实作工具被呼叫时的处理逻辑。整个流程清晰直观,一个有基本Python 经验的开发者可以在几小时内完成一个功能完整的MCP 伺服器。
使用TypeScript SDK
TypeScript SDK 适合前端开发者和Node.js 后端开发者。以下是同样功能的TypeScript 版本骨架:
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
const server = new Server(
{ name: "weather-server", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: "get_weather",
description: "取得指定城市的目前天气资讯",
inputSchema: {
type: "object",
properties: {
city: { type: "string", description: "城市名称" },
},
required: ["city"],
},
},
],
}));
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "get_weather") {
const city = request.params.arguments?.city;
const response = await fetch(
`https://api.weatherapi.com/v1/current.json?q=${city}`
);
const data = await response.json();
return {
content: [
{
type: "text",
text: `${city} 目前温度:${data.current.temp_c}°C`,
},
],
};
}
throw new Error("Unknown tool");
});
const transport = new StdioServerTransport();
await server.connect(transport);
两种SDK 的设计理念一致,只是语法风格配合各自语言的惯例。开发者可以根据自己的技术背景和专案需求选择合适的SDK。
暴露资源
除了工具之外,MCP 伺服器也可以暴露资源。资源的定义方式与工具类似,开发者需要实作list_resources 和read_resource 两个处理函式。资源让AI 模型能够主动浏览和读取伺服器管理的资料,而不仅限于透过工具呼叫来操作。
发布与分享
完成开发后,MCP 伺服器可以发布到npm(TypeScript 版本)或PyPI(Python 版本),供其他使用者安装使用。 Anthropic 也维护了一个官方的MCP 伺服器登录册,开发者可以将自己的伺服器提交到登录册,让更多人发现和使用。
MCP 与Function Calling 的差异
许多接触过OpenAI Function Calling 或其他AI 工具呼叫机制的读者,可能会疑惑MCP 与这些既有机制之间的差异。这是一个重要的厘清,因为两者虽然表面上都是「让AI 呼叫工具」,但在设计层级和解决的问题上有根本性的不同。
Function Calling 是模型层级的能力
Function Calling(函式呼叫,也称为Tool Use)是大型语言模型本身提供的一项能力。当开发者在API 请求中定义一组函式的名称、描述和参数格式,模型会根据使用者的输入判断是否需要呼叫某个函式,并输出结构化的呼叫指令。
然而,Function Calling 本身并不执行任何操作。模型只是产出一个「我想呼叫这个函式,参数是这些」的结构化输出,实际的函式执行必须由开发者自行在应用程式的程式码中处理。模型不知道函式执行的结果,除非开发者将结果回传给模型进行下一轮对话。
MCP 是应用层级的标准协议
MCP 运作在完全不同的层级。它不是模型的能力,而是应用程式之间通讯的标准。 MCP 定义了AI 主机应用程式如何发现、连接和呼叫外部服务的完整流程,包括服务发现(这个MCP 伺服器提供哪些工具和资源)、通讯传输(如何在主机和伺服器之间传递讯息)、安全控制(权限管理和使用者同意机制),以及生命周期管理(连线的建立、维护和断开)。
两者的关系
MCP 和Function Calling 并非互斥的替代方案,而是互补的不同层级。在实际运作中,MCP 主机内部很可能使用Function Calling 作为AI 模型与MCP 客户端之间的沟通方式。流程大致如下:MCP 客户端连接到MCP 伺服器后,取得可用的工具清单。主机将这些工具以Function Calling 格式注册给AI 模型。使用者提出需求后,AI 模型透过Function Calling 产出工具呼叫指令。主机接收到呼叫指令,透过MCP 客户端将请求传送给对应的MCP 伺服器。 MCP 伺服器执行操作后回传结果,主机再将结果回馈给AI 模型。
换句话说,Function Calling 处理的是「AI 模型如何表达它想呼叫一个工具」,而MCP 处理的是「这个工具呼叫如何被路由到正确的外部服务并实际执行」。
| 比较面向 | Function Calling | MCP |
|---|---|---|
| 运作层级 | 模型层级 | 应用程式层级 |
| 定义方 | 应用程式开发者在API 请求中定义 | MCP 伺服器定义并动态暴露 |
| 工具发现 | 静态,需事先在程式码中定义 | 动态,客户端在连线时自动从伺服器取得 |
| 执行方式 | 开发者自行在应用程式中实作 | MCP 伺服器负责执行,结果透过协议回传 |
| 可重用性 | 每个应用程式各自实作 | 一个MCP 伺服器可供所有MCP 主机使用 |
| 标准化程度 | 各模型提供商格式不同 | 统一的开源标准 |
| 跨模型相容 | 通常绑定特定模型API | 与模型无关,任何支援MCP 的主机都可使用 |
MCP 的安全机制
作为一个让AI 模型与外部系统互动的协议,安全性是MCP 设计中的核心考量。 MCP 在多个层面实作了安全控制机制。
在使用者同意层面,MCP 主机在AI 模型要求执行工具呼叫时,通常会向使用者显示确认提示。使用者可以在每次呼叫前审视AI 模型要做什么,并决定是否允许。这个机制确保了人类始终保持对AI 行为的控制权。
在存取控制层面,MCP 伺服器可以限制可存取的范围。例如,档案系统伺服器可以设定只允许存取特定目录,资料库伺服器可以限制只能执行唯读查询。这种最小权限原则(Principle of Least Privilege)降低了意外操作或恶意利用的风险。
在认证层面,连接需要认证的外部服务(如GitHub、Slack)时,MCP 伺服器通常透过环境变数接收API 金钥或存取权杖。这些凭证由使用者在设定档中提供,不会经过AI 模型或MCP 主机,确保了认证资讯的安全隔离。
在传输安全层面,远端MCP 伺服器的通讯通常透过HTTPS 加密。本地伺服器透过stdio 通讯,资料不经过网路,安全性更高。
常见问题
MCP 是Anthropic 专属的技术吗
不是。 MCP 是一个完全开源的标准,任何人都可以自由使用、实作和贡献。虽然MCP 由Anthropic 提出并主导初期开发,但它被设计为一个厂商中立的协议。任何AI 模型提供商、任何应用程式开发者都可以在自己的产品中实作MCP 支援。事实上,目前已有多个非Anthropic 的产品支援MCP,包括微软的VS Code(透过Copilot)和多个独立开发的AI 编辑器。 MCP 的规格文件和参考实作都在GitHub 上公开,遵循开源授权条款。
使用MCP 需要付费吗
MCP 本身作为一个开源协议是完全免费的。官方提供的SDK(Python 和TypeScript 版本)以及大部分预建的MCP 伺服器也都是免费的开源软体。不过,使用MCP 的过程中可能涉及的费用取决于其他因素。例如,如果透过Claude Desktop 使用MCP,则需要有Claude 的使用额度。如果MCP 伺服器连接的外部服务(如某些API)有自己的收费标准,那些费用仍然适用。但MCP 协议本身不收取任何费用。
MCP 伺服器可以同时被多个主机使用吗
取决于伺服器的类型。本地MCP 伺服器(透过stdio 通讯)通常是由主机启动的独立程序,每个主机会启动自己的伺服器实例,因此不会有共享的问题。远端MCP 伺服器(透过HTTP/SSE 通讯)则可以被设计为支援多个客户端同时连接,类似于传统的Web 服务。在这种情况下,多个不同的主机应用程式可以同时连接到同一个远端MCP 伺服器。
MCP 支援哪些程式语言
目前Anthropic 官方提供Python 和TypeScript 两种语言的MCP SDK。不过,由于MCP 是一个基于JSON-RPC 的通讯协议,理论上任何能够处理JSON 和标准输入输出的程式语言都可以用来建置MCP 伺服器。社群已经出现了Rust、Go、Java、C# 等语言的非官方SDK 或参考实作。选择哪种语言主要取决于开发者的熟悉程度和专案需求。
MCP 能用在企业内部系统吗
可以,而且这正是MCP 最有价值的应用场景之一。企业可以为自己的内部系统(如内部API、私有资料库、自建工具)建置MCP 伺服器,让员工透过支援MCP 的AI 助理直接存取这些系统。由于MCP 伺服器可以在本地或企业内网部署,资料不需要经过外部服务,能够满足企业对资料安全的要求。许多企业已经开始探索这种模式,将MCP 作为AI 辅助工作流程的基础架构。
MCP 与LangChain 或LlamaIndex 等框架有什么关系
LangChain 和LlamaIndex 是AI 应用程式开发框架,它们提供了建构AI 应用程式的各种元件和抽象层。 MCP 则是一个通讯协议标准,专注于定义AI 应用程式与外部服务之间的互动方式。两者并不冲突,反而可以搭配使用。例如,一个基于LangChain 建构的AI 应用程式可以透过MCP 客户端连接到各种MCP 伺服器,借此获得存取外部工具和资料的能力。 MCP 可以被视为这些框架的「连接层」补充,让它们能够更容易地整合外部服务。
如何确保MCP 伺服器的安全性
建置和使用MCP 伺服器时,有几项安全实践值得遵循。首先,只安装来自可信来源的MCP 伺服器,检查其原始码和社群评价。其次,遵循最小权限原则— 只授予MCP 伺服器完成任务所需的最低限度权限。例如,如果AI 只需要读取档案,就不要授予写入权限。第三,妥善管理认证凭证— 使用环境变数存放API 金钥,不要将凭证写在设定档中或提交到版本控制系统。第四,定期更新MCP 伺服器版本,以获得安全修补。最后,在企业环境中,建议对MCP 伺服器进行安全审计,确保它们符合组织的安全政策。
MCP 的未来展望
MCP 的推出虽然时间不长,但已经展现出成为AI 应用程式标准互动层的潜力。从技术演进的角度来看,几个发展方向值得关注。
在协议层面,MCP 仍在持续演进。未来的版本可能会加入更完善的串流(Streaming)支援,让长时间执行的操作能够即时回传进度。认证和授权机制也在进一步标准化,特别是针对远端MCP 伺服器的场景。此外,多模态资料(如图片和音讯)的传输支援也在规划中。
在生态系层面,随着愈来愈多的AI 应用程式和外部服务加入MCP 支援,整个生态系的网路效应将不断加强。当大多数AI 应用程式都支援MCP、大多数常用服务都有对应的MCP 伺服器时,MCP 将成为AI 应用开发的事实标准,如同HTTP 之于Web 开发。
在应用场景层面,MCP 将推动AI 助理从「对话式工具」演变为「工作流程协调者」。当AI 模型能够无缝存取使用者的所有工作工具和资料时,它就能够理解完整的工作脉络,提供更精准、更有价值的协助。这对于企业生产力提升的潜力是巨大的。
MCP 的成功与否最终取决于生态系的健康程度。一个好的标准需要广泛的采用、持续的维护和社群的积极参与。从目前的发展态势来看,MCP 已经跨出了稳健的第一步,接下来的关键在于能否维持这个动能,吸引更多的开发者和企业加入。
本文链接地址:https://www.wwsww.cn/rgzn/38131.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。



