哈喽,大家好,我是狗哥!
这是Ai Coding系列的又一篇干货,今天咱们来聊一聊如何通过MCP让AI变得更加强大。
前言
虽然之前狗哥已经写了好几篇介绍MCP工具的文章,但是基本都是直接介绍如何配置使用,太偏实践,会让大家有种知其然,不知其所以然的感觉。
所以本文将先尽量用相对通俗的语言和图形介绍基本的理论,然后通过实操开发一款自定义MCP工具,让大家能更好地理解和掌握 MCP。
什么是MCP?
模型上下文协议(MCP) ,听起来好像挺唬人的,但是简单来说大家可以认为它其实就是 AI 应用程序的USB端口,为 AI 模型连接不同数据源和工具提供了标准化方法。
从技术角度来看,MCP 采用经典高效的客户端-服务器架构,通过标准化协议实现 LLM 与外部资源的高效互联,其中主机应用可以连接到多个服务器。
其通常包含三个部分:
- • MCP Host: 它代表的是需求方,是 MCP Client 的运行时环境,负责协调用户、LLM 与外部资源之间的交互。代表任何提供 AI 交互环境的应用程序(如 Claude 桌面版、Cursor)
- • MCP Client: Host 内部负责与 MCP Server 交互的组件。Client 由 Host 创建并与 Server 建立一对一的有状态会话,会将 Host 的请求转换为符合 MCP 标准的消息发送给 Server,再将 Server 的响应解析为 Host 可以理解的格式。
- • MCP Server: 暴露特定功能给LLM并提供数据访问。这里指的能力可以是读取本地磁盘文件,写入本地数据库,查询天气/股票价格等等,但 Server 不是能力/资源本身,Server 是通过统一的标准协议将能力对外暴露的代理。
上面三个部分,咱们可以看出MCP Server 是其中的关键部分,而Server 本身对外暴露的能力又分为三种:
- • Resources: 向 LLM 公开服务器中的数据和内容。一般是静态或者半动态的原始数据,这些数据可以直接被 LLM 理解并放在上下文中用于推理。比如是日志或配置等基础信息,类似于一个只读的文件或者数据库。
- • Tools: 使 LLM 能通过Server执行操作。当 LLM 将用户需求拆分为多个具体的子步骤时,可以通过调用 Tools 实现其中的一步或者多步,可以是写入数据库的操作,可以是基于敏感信息进行计算然后输出脱敏信息。
- • Prompts: 可复用的 LLM 提示模板。通常 LLM 在处理不同任务时会使用预定义的 Prompt 模板进行引导,但当处理一些私域场景时可能需要一些特化逻辑,比如输入/输出格式或上下文片段等,这些逻辑可以固化为 Prompts 保存在 MCP Server 中。
另外 MCP Server 的通信方式也有多种,这里咱们主要介绍两种:基于标准输入输出(stdio)的本地通信和基于SSE(Server-Sent Events)的远程通信。
-
• 本地通信:通过 stdio 传输数据,适用于在同一台机器上运行的客户端和服务器之间的通信,最常见的是命令行调用Command。这种通信方式需要咱们将代码下载到本地后在配置执行,对新手可能不太友好。
-
• 远程通信:利用 SSE 与 HTTP 结合,实现跨网络的实时数据传输,适用于需要访问远程资源或分布式部署的场景。这种配置起来最简单。
MCP 相比传统 API 的优势
看到这里,估计有人要问了:"这不就是API调用吗?有啥新鲜的?"
嘿,这问题问到点子上了!咱们来举个例子哈:
传统API的痛点:
比如你现在有一个天气API,最初只需要两个参数(例如位置和日期),应用程序会携带这两个参数进行请求,然后收到响应结果。
但是如果API需要添加第三个必需参数,那么应用程序就必须更新代码以包含新参数。如果不更新,请求可能失败、返回错误或提供不完整结果。
MCP的优势:
MCP相对来说就灵活了很多,当客户端(如 Cursor)连接到 MCP 服务器时,它会发送初始请求以了解服务器的能力。
这里可以理解为每次请求时客户端都会问一句 : "兄弟,你现在支持什么功能?"
这样就算功能升级了,也无需我们人工干预,可以直接无缝链接。
MCP 是怎么干活的?
整个流程其实很简单:
-
- 用户提出问题
-
- AI 选择合适的MCP工具
-
- 征求用户同意(可设置自动同意)
-
- 调用MCP服务执行任务
-
- 返回结果给AI
-
-
AI整理答案给用户
-
实战:自己动手做个MCP服务
说了这么多,是不是已经跃跃欲试了?来,跟着狗哥实际操作一波!
文档准备
在开始之前,收集必要的文档来帮助大模型理解 MCP:
官方文档: 直接去 https://modelcontextprotocol.info/llms-full.txt 把整个文档复制下来
选择 SDK: 复制 README 文件和其他相关文档
- • TypeScript: MCP TypeScript SDK
- • Python: Python SDK
环境准备: 将上面的文档粘贴到你与大模型的对话中;我这里直接使用Cursor进行开发。
开发你的MCP服务
接下来,你需要向AI说清楚你想要啥功能的MCP。大家可以从如下几点进行描述:
-
• 你的服务器将暴露哪些资源
-
• 它将提供什么工具
-
• 它应该提供什么提示
-
• 它需要与哪些外部系统交互
这里狗哥来演示开发一个能操作本地数据库的MCP:
构建一个 MCP 服务器,它能:- 连接到我本地的数据库- 将表结构作为资源暴露- 提供运行只读 SQL 查询的工具
接下来把需求丢给Cursor,让它开始给你打工吧。
测试和调试
代码出来以后,咱们按文档跑一下,如果没生成的话,可以让cursor帮你生成一份详细的markdown文档。
如果有问题的话,也可以让Cursor帮我们处理。
很好,上来就给我报错了。
问题不大,谁写的bug谁解决。咱们直接把错误日志扔给Cursor,它会帮我们解决的 。几轮调试下来后:
搞定!服务器跑起来了。
配置Cursor使用你的MCP服务
最后一步,在Cursor中配置你的MCP服务:
配置完成后,让我们来试试效果:
完美~从此以后,我的Cursor也能直接帮我操作数据库了。
写在最后
其实狗哥第一次接触MCP的时候,也觉得这玩意儿太复杂了。但是现在呢?MCP简单吧?相信大家现在应该都能有个大致的认识了。
现在轮到你了,快按照上面的教程动手开发一个自己的MCP服务试试呢,让你的AI助手变得更加强大。
如果这篇文章对你有帮助,不知道大家能否点个关注,顺便给我个三连击:点赞、转发和再看。有什么问题也欢迎在评论区留言,我会一一回复的~
我是狗哥,关注我获得更多优质内容。