什么是MCP?
MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 公司于 2024 年 11 月 26 日 推出的一项技术协议。其主要目的是解决 AI 助手与外部数据源隔离的问题,使 AI 能够连接并访问外部资源。
关键点:
- MCP 不是用户隐私协议,而是一种技术协议,类似于 WiFi 或蓝牙。
- 它定义了 AI 助手与外部资源之间的通信规则。
MCP 的三大核心组件:
- MCP 主机:你与 AI 互动的应用程序,比如 Claude Desktop,相当于 AI 的“大本营”。
- MCP 服务器:专门的小程序,提供特定功能(如访问文件或调用 API),就像为 AI 服务的“专业导游”。
- MCP 客户端:连接主机和服务器的桥梁,确保通信顺畅,通常无需用户直接操作。
为什么需要 MCP?
传统的 AI 助手(如 Deepseek 等预训练模型)通常存在知识截止日期的限制,无法直接访问外部最新信息。MCP 的出现正是为了突破这一限制,通过定义通用的通信规则,让 AI 助手能够连接到外部资源,获取更多实时信息和功能。
MCP的作用:
- 统一接口:LLM 只需理解 MCP,无需学习各种 API。
- 可插拔架构:新功能只需添加 MCP 服务器。
- 工作流自动化:多个服务器可串联成复杂流程。
MCP的传输模式
MCP 支持多种传输模式,主要有 stdio 和 SSE 两种模式,下面我们分别介绍。
stdio 模式概念
stdio(标准输入输出)模式是 MCP 的一种基本传输方式,它通过标准输入输出流与 MCP 服务器进行通信。
特点:
- MCP 客户端通过子进程启动 MCP 服务器。
- 通过标准输入(stdin)向服务器发送请求。
- 通过标准输出(stdout)接收服务器的响应。
- 适合在本地开发环境中使用,无需额外的网络配置。
优缺点:
- 优点:设置简单,无需额外的网络配置。
- 缺点:只能在本地使用,不适合分布式环境。
SSE 模式
SSE(Server-Sent Events)模式是一种基于 HTTP 的单向通信机制,允许服务器向客户端推送数据。
特点:
- MCP 服务器以独立进程运行,监听 HTTP 请求。
- 客户端通过 HTTP 连接到服务器。
- 服务器可以持续向客户端推送事件和数据。
- 适合在分布式环境中使用,支持多客户端连接。
优缺点:
- 优点:支持分布式部署,可以被多个客户端同时访问。
- 缺点:配置相对复杂,需要额外的网络设置。
image.png
MCP能干什么?
image.png
可以看出,通过这种设计,MCP 让 AI 助手从单纯的对话工具,进化成能操作现实世界的强大助手。
MCP server 客户端配置
目前支持 MCP-Server 的客户端有 Cursor、Claude、Cline 等。从 Windows 使用体验来说,Cursor(0.47.8)需要保持 cmd 窗口常开,体验较差,而 Claude 依赖 Claude 大模型,因此更推荐使用 VSCode 的 Cline 插件,可以通过 OpenRouter + deepseek-chat/free 免费使用。
配置步骤:
- 安装 Cline 插件:通过最新版本的 VSCode 安装 Cline 插件。
image-20250324083411655
- 注册并登录 OpenRouter:访问 (https://openrouter.ai),在右上角 Keys 处创建 API Keys。此 Key 只显示一次,请妥善保存。
- 配置 API Provider:在 Cline 设置处配置 API Provider,选择 OpenRouter,并填写刚刚设置的 Key,选择对应的大模型,可通过 free 关键词进行过滤。
完成上述配置后即可通过 Cline 配置 MCP-Server。
MCP-SERVER配置
在 Cline 右上角点击 MCP Servers 进行配置,通过点击 Configure MCP Servers 打开 MCP-Server 配置文件 cline_mcp_setting.json,此时就可以按需添加 MCP-Server 了。
image-20250324084419184
示例配置文件:
复制{ "mcpServers": { "filesystem": { "command": "cmd", "args": [ "/c", "npx", "-y", "@modelcontextprotocol/server-filesystem", "E:\\personal\\javadaily" ] }, "sequential-thinking": { "command": "cmd", "args": [ "/c", "npx", "-y", "@modelcontextprotocol/server-sequential-thinking" ] } }, "spring-ai-mcp-server": { "command": "cmd", "args": [ "/c", "java", "-Dspring.ai.mcp.server.stdio=true", "-Dspring.main.web-application-type=none", "-Dlogging.pattern.cnotallow=", "-jar", "D:\\GitSpace\\JavaSpace\\mozi-mcp\\mozi-mcp-server\\target\\mozi-mcp-server.jar" ], "env": { "appId":"12121212", "appSecret":"" }, "enabled": true }, "fetch": { "command": "uvx", "args": [ "mcp-server-fetch" ] } }
大模型如何选择工具?
大模型基于以下几点决定调用哪个工具:
- 具描述分析:每个工具在初始化时都提供了详细的描述和参数要求。大模型会分析这些描述来了解工具的具体功能、使用场景和限制。
- 任务需求匹配:大模型会将用户请求分解为具体任务,然后寻找最直接匹配这些任务的工具。例如,创建文件时,大模型会寻找专门用于文件创建的工具。
- 上下文理解:大模型会考虑整个对话的上下文和具体操作的环境,选择最适合当前情境的工具。
工作流程:
- 用户在客户端提出请求。
- 客户端将请求发送给大模型。
- 大模型理解请求并决定使用哪些工具。
- 大模型调用 MCP 服务提供的 API。
- MCP 服务执行操作并返回结果。
- 大模型解析结果并提供响应。
- 客户端显示响应给用户。
效果演示
在网页上随便找一篇文章,让 CLine 使用 fetch 工具爬取并生成对应的 Markdown 文件。
示例指令:
帮我 fetch https://juejin.cn/post/7457366224823124003 这篇文章并在 javadaily 下生成 Markdown 文件。
image-20250324093252381