MCP安全系列之MCP基础
MCP安全系列之MCP基础
Section titled “MCP安全系列之MCP基础”什么是MCP
Section titled “什么是MCP”Agent有一个重要的组成,就是它可以调用外部的很多工具来完成任务,比如让一个Agent规划一下明天从A到B的路线,途中有哪些美食和景点,完事把结果存到数据库,同时把结果整理成详细文档发到自己邮箱。在整个过程中,大模型是做不到的,大模型需要调用外部工具来完成,比如路线规划需要查地图,存储需要调用数据库,发邮箱需要邮箱等等。
这种外部工具调用有很多形式,比如工具形式的调用、API形式的调用、数据库访问、代码执行等等,既然大模型要对接外部程序,那么此时就需要开发一个对接程序,将Agent和外部工具对接起来,其实就是代码开发,去相互调用,那此时就有个问题,每个Agent都是不一样的,多个Agent需要调用多个工具时,同一套调用代码不一定可以适配所有Agent,另外如果一个工具对接了多个Agent,当工具有变更时,可能多个Agent都需要进行改动,不仅麻烦且代码耦合度也高。
针对这种问题,一个很好的解决机制就是统一标准化,其实就是协议,这个协议就是MCP。简单理解就是MCP将调用格式给统一了,Agent调用工具时,以及工具对接Agent时,都按这个标准去开发,做到通用。

所以MCP就是大模型连接万物的一个接口。类似于USB接口,电脑想连外部很多工具比如鼠标,键盘,充电线,小风扇等等,大家这些工具生产时,都统一按USB标准来开发,这样工具在A电脑也能插,B电脑也能插,同时A电脑不仅可以插鼠标,也能插键盘,还能插很多其它工具。
这里可以用网上一个经典的图来辅助理解:

所以说MCP是大模型统一调用外部接口的协议,但本质上也是统一标准的思想,这个思想在很多方面中都有应用,比如开发中RESTful规范,电脑中的USB接口,甚至插座规范,以及媒体中的视频、照片格式等等,都有这种思想的存在。
MCP全称是Model Context Protocol,叫做模型上下文协议。它是Anthropic公司推出的,在MCP的整个过程中,MCP架构和C/S比较像,这里会涉及到几个概念。
1、MCP主机(MCP Hosts):其实就是运行MCP的主应用程序,比如Cursor、Claude Desktop、Cline、Cherry Studio等,它们本身都是一个大型的工具,可以接入模型,可以配置Skill,可以配置MCP,所以MCP相当于这些工具中的一个功能,此时这些工具就是主机的角色。
2、MCP客户端(MCP Clients):其实就是主机中用来配置MCP的相关功能,比如Cursor中配置MCP的功能,这个具体的功能就是客户端,所以客户端是嵌入在主机程序中的,主要负责大模型和服务端的桥梁,它会将大模型请求转到对应的MCP服务上,并把MCP服务的结果返回给大模型。
3、MCP服务器(MCP Servers):MCP服务本质就是一个程序,使用TypeScript编写的可以用npx来运行,使用Python编写的可以用uvx来运行,或者其它语言编写的程序等,这个程序可以被调用,调用形式可以分为本地和远程,本地就是把程序下载到当前电脑上,远程就是通过HTTP形式调用远程服务器上的代码。
4、本地资源(Local Resources):MCP服务程序需要下载到本地,运行在本机,可直接操作本地的相关资源。
5、远程资源(Remote Resources):MCP服务程序是运行在远程服务器,客户端通过URL形式访问进行调用。
所以MCP整个流程简单说就是某个软件中的MCP功能,通过MCP协议和服务端进行通信,将结果给到大模型,而服务端的相关资源可以分为本地或远程,如下图。

整个通信过程可以参考下面这个更详细点的图:

MCP服务端资源越来越多,覆盖了很多场景,这里列举了几个平台,搜索相关服务端时,可以在这几个平台上搜索:
1、MCP官方资源:https://github.com/modelcontextprotocol/servers2、MCP热门资源:https://github.com/punkpeye/awesome-mcp-servers3、glama平台:https://glama.ai/4、smithery平台:https://smithery.ai/5、curosr平台:https://cursor.directory/6、mcp平台https://mcp.so/上面了解了MCP相关信息后,下面来具体测试下,这里分为两个场景,一个偏向于开发的,用的是vscode的cline插件,另一个是偏向于非开发的cherrystudio。
先来看下vscode的cline插件,cline插件可以配置大模型、MCP,然后用于AI开发,这里cline就相当于是主机,其中的MCP功能配置就相当于客户端。
需求是通过MCP去连接数据库进行操作,我们直接在vscode插件市场中下载cline插件,下载后找到MCP配置图标(下图标号为1的位置),点击Configure MCP Servers会打开一个json文件,这个文件就是配置MCP的配置文件。
比如我们要配置Mysql工具,就需要去上一节提到的MCP平台中搜索Mysql的服务端,上面会给配置示例,我们只需要把那个配置示例复制过来即可。

这里用的Mysql工具是benborla29/mcp-server-mysql,这个工具之前在相关MCP平台上可以搜到,但现在搜不到了,需要到npm官网上去搜(https://www.npmjs.com/),因为它是用nodejs开发的,本质属于npm的一个包,它给的配置示例如下:
{ "mcpServers": { "mcp_server_mysql": { "command": "npx", "args": ["-y", "@benborla29/mcp-server-mysql"], "env": { "MYSQL_HOST": "127.0.0.1", "MYSQL_PORT": "3306", "MYSQL_USER": "root", "MYSQL_PASS": "your_password", "MYSQL_DB": "your_database" } } }}上面配置中需要把相关信息换成自己的,可以看出来它本质是运行了一个npx命令,也就是说通过npx去运行了一个node程序,当我们大模型需要调用数据库工具时,这个命令就会运行,然后具体操作数据库的代码就放在这个node程序中。
下面来测试一下,例如让大模型创建一个三国人物关系表,之后存为一个html页面,提示词如下:
我想设计一个三国人物关系库。
请使用 MySQL MCP 工具在当前的 test 数据库中设计并创建一张人物关系表 character_relations,包含源人物、目标人物、关系类型(如结义、夫妻、主仆、宿敌)、关系描述等字段,并插入至少 8 组典型的三国人物关系(如刘关张、曹操与荀彧等)。
查询刚刚插入的数据,验证读取是否正常。
在当前项目根目录下生成一个漂亮的 index.html 页面,用图表或卡片形式展示这些三国人物关系,并保存文件。最终效果很不错,这里不再截图展示了。
下面再来看下cherrystudio是怎么配置的,实际上都大同小异,下载cherrystudio后在设置中找到MCP服务器选项,点击编辑功能,可以直接编辑json的配置文件,和刚才cline是一样的配置文件,如下图:

配置好后确保MCP服务端开启,之后在聊天界面就可以选择MCP工具了,可以选择自动,即大模型根据任务情况选择调用哪个工具,也可以手动配置,即给大模型一个MCP名单,大模型只能调用名单内的工具,如下图。

这里简单测试下,让大模型查看下数据库中的表都有哪些,效果如下:

以上就是关于MCP的一些基础知识,便于我们后续了解MCP安全的相关内容,感谢阅读。