一文搞懂 MCP Servers

什么是MCP

MCP概念

MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 提出并于 2024 年 11 月开源的一种通信协议,旨在解决大型语言模型(LLM)与外部数据源及工具之间无缝集成的需求。

它通过标准化 AI 系统与数据源的交互方式,帮助模型获取更丰富的上下文信息,从而生成更准确、更相关的响应。

主要功能

  • 上下文共享:应用程序可以通过 MCP 向模型提供所需的上下文信息(如文件内容、数据库记录等),增强模型的理解能力。
  • 工具暴露:MCP 允许应用程序将功能(如文件读写、API 调用)暴露给模型,模型可以调用这些工具完成复杂任务。
  • 可组合的工作流:开发者可以利用 MCP 集成多个服务和组件,构建灵活、可扩展的 AI 工作流。
  • 安全性:通过本地服务器运行,MCP 避免将敏感数据上传至第三方平台,确保数据隐私。

MCP架构

MCP 采用客户端-服务器架构:

  • MCP 客户端(Client):通常是 AI 应用程序(如 Claude Desktop 或其他 LLM 工具),负责发起请求并与服务器通信。
  • MCP 服务器(Server):轻量级程序,负责暴露特定的数据源或工具功能,并通过标准化协议与客户端交互。

通信格式:基于 JSON-RPC 2.0,支持请求、响应和通知三种消息类型,确保通信的标准化和一致性。

MCP Servers主要功能

MCP Servers 作为一个轻量级的本地服务,旨在为客户端提供数据访问和功能执行的接口。

1. 资源暴露(Resource Exposure)

资源是服务器提供给客户端的数据实体,可以是文件、数据库记录、内存中的对象等。

例如:

  • 文件资源:file:///home/user/report.txt
  • 内存资源:memo://recent-insights

2. 工具提供(Tool Provisioning)

工具是服务器暴露的可执行功能,客户端可以通过调用这些工具完成特定任务。

例如:

  • 查询数据库:query_database(参数:SQL 语句,返回:查询结果)
  • 文件写入:write_file(参数:文件路径、内容)

3. 动态通知(Dynamic Notification)

当资源发生变化时,服务器可以通过通知机制(如 notification 消息)主动推送更新到客户端。

4. 会话管理(Session Management)

处理客户端的连接初始化、能力协商和会话关闭。

自定义 MCP Servers

  1. 本地实现一个文件资源服务,创建 mcp_server.py 文件。
import json
import sys # 处理客户端请求
def handle_request(request):
method = request.get("method")
params = request.get("params", {})
request_id = request.get("id") if method == "initialize":
return {
"jsonrpc": "2.0",
"result": {"version": "1.0", "capabilities": ["resources", "tools"]},
"id": request_id
}
elif method == "read_resource":
uri = params.get("uri")
with open(uri.replace("file:///", ""), "r") as f:
content = f.read()
return {"jsonrpc": "2.0", "result": content, "id": request_id}
elif method == "call_tool":
tool_name = params.get("name")
if tool_name == "echo":
return {"jsonrpc": "2.0", "result": params.get("message"), "id": request_id}
else:
return {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": request_id} # 主循环:通过 Stdio 通信
def main():
while True:
# 从 stdin 读取请求
raw_input = sys.stdin.readline().strip()
if not raw_input:
break
request = json.loads(raw_input) # 处理请求并返回响应
response = handle_request(request)
sys.stdout.write(json.dumps(response) + "\n")
sys.stdout.flush() if __name__ == "__main__":
main()
  1. 通过 python 启动服务
python mcp_server.py
  1. 在相同的目录下创建 test.txt 文件。
Hello, this is a test file!
  1. 另外启动一个命令窗口,输入:
echo '{"jsonrpc": "2.0", "method": "read_resource", "params": {"uri": "file:///D:/path/to/test.txt"}, "id": 2}' | python mcp_server.py

{"jsonrpc": "2.0", "result": "Hello, this is a test file!", "id": 2}

注:此处使用的是 PowerShell,我们看到服务返回了文件的内容。

使用现有 MCP Servers

GitHub:在 GitHub 上查找 MCP servers:

网站:通过下面的网站查找 MCP servers:

UI自动化相关的 MCP servers

我们以 Playwright 项目为例子。

playwright 项目:https://github.com/AutoTestClass/playwright-mind

在项目里添加 playwright-mcp-server

git clone https://github.com/AutoTestClass/playwright-mind
cd playwright-mind
npm install -g @executeautomation/playwright-mcp-server # <--添加--

MCP Client

MCP client 一般选用 AI 应用程序(如 Claude Desktop、cline 或其他 LLM 工具),负责发起请求并与服务器通信。

我们这里选用 VSCode + cline 的组合,关于二者的使用,铺天盖地都是使用的文章,这里就不介绍了。

  1. 首先,在 VSCode 中打开 cline 插件,在 MCP servers 中搜索 playwright 插件安装。

  1. 然后,配置 playwright mcp servers 的启动配置。

{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@executeautomation/playwright-mcp-server"]
}
}
}
  1. 最后,通过 LLM 大模型,描述需求(UI 自动化相关操作),LLM 大模型会通过 playwright MCP servers 启动浏览器完成一些 UI 自动化操作。

MCP Servers的作用

最后,我们再来总结 MCP Servers 的作用。懒得画图了,下面是我网上找的一张图。结合前面的操作流程,相信你已经知道 MCP Servers 可以做什么了。

MCP Servers 真正的价值不在于我们传统的 UI 自动化测试,因为它是通过文字描述操作浏览器去完成一些工作。并没有自动化的脚本沉淀,当然,如果你把 Prompt 沉淀下来当作自动化脚本也是可以的,这确实颠覆了我们写自动化脚本的形式。

当然,MCP Servers 更多的价值不是浏览器自动化,而是利用 LLM 操作本地资源,例如,本地文件,数据库、git 等。想想 你不需要写复杂的 SQL 语句,通过自然语言描述就可以轻松完成本地数据库的操作。 这种效率的提升是非常明显。

一文搞懂 MCP Servers的更多相关文章

  1. 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质

    一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...

  2. 基础篇|一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  3. 一文搞懂 Prometheus 的直方图

    原文链接:一文搞懂 Prometheus 的直方图 Prometheus 中提供了四种指标类型(参考:Prometheus 的指标类型),其中直方图(Histogram)和摘要(Summary)是最复 ...

  4. Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!

    本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...

  5. 一文搞懂vim复制粘贴

    转载自本人独立博客https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/ 概述 复制粘贴是文本编辑最常用的功能,但是在vim中复制粘贴还是有点麻 ...

  6. 三文搞懂学会Docker容器技术(中)

    接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...

  7. 三文搞懂学会Docker容器技术(下)

    接着上面一篇:三文搞懂学会Docker容器技术(上) 三文搞懂学会Docker容器技术(中) 7,Docker容器目录挂载 7.1 简介 容器目录挂载: 我们可以在创建容器的时候,将宿主机的目录与容器 ...

  8. 一文搞懂所有Java集合面试题

    Java集合 刚刚经历过秋招,看了大量的面经,顺便将常见的Java集合常考知识点总结了一下,并根据被问到的频率大致做了一个标注.一颗星表示知识点需要了解,被问到的频率不高,面试时起码能说个差不多.两颗 ...

  9. 一文搞懂 js 中的各种 for 循环的不同之处

    一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...

  10. 一文搞懂如何使用Node.js进行TCP网络通信

    摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...

随机推荐

  1. 中电金信:ChatGPT一夜爆火,知识图谱何以应战?

              随着ChatGPT的爆火出圈     人工智能再次迎来发展小高潮      那么作为此前搜索领域的主流技术          知识图谱前路又将如何呢?   事实上,ChatGPT也 ...

  2. 【Javaweb】在项目中添加MyBatis依赖等

    pom.xml 仓库 如果你没有配置阿里云仓库镜像源,可以到这里来找 https://mvnrepository.com/ 如果你配置了阿里云仓库镜像源,可以来这里找 https://develope ...

  3. Qt/C++开源作品45-CPU内存显示控件/和任务管理器一致

    一.前言 在很多软件上,会在某个部位显示一个部件,专门显示当前的CPU使用率以及内存占用,方便用户判断当前程序或者当前环境中是否还有剩余的CPU和内存留给程序使用,在不用打开任务管理器或者资源查看器的 ...

  4. linux下VEP的安装

    VEP(Variant Effect Predictor)作为Ensembl官方推出的变异影响预测软件,被广泛使用,以下内容也来自Ensembl 软件包下载(ZIP格式): curl -L-Ohttp ...

  5. PHP 安装启用openssl(解决 wordpress可选的模组openssl未被安装或已被禁用)

    本教程仅适用Windows Servier IIS网站服务器. 我的博客使用IIS搭建,相比Linux,相关的教程格外少.因此让以后的小伙伴也能马上解决问题,分享此方法. 首先需要下载php对应版本的 ...

  6. ATM 管理系统的设计与实现(类似毕业设计,附源代码)

    ATM 管理系统的设计与实现 作者前言:本系统通过基本规范化的设计,简单的利用了java基本功能实现了ATM系统,本系统虽然简单,但是逻辑很严密,对于有一定java知识的读者有较大帮助,可以用作参考. ...

  7. CDS标准视图:功能位置种类描述 I_FlocCategoryText

    视图名称:功能位置种类描述 I_FlocCategoryText 视图类型:基础 视图代码: 点击查看代码 @EndUserText.label: 'Functional Location - Tex ...

  8. 工作流调度器-Azkaban

    1.工作流调度器 1.为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 各任务单元之间存在时间先后 ...

  9. Nukem pg walkthrough Intermediate

    nmap 扫描 ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.157.105 Starting Nmap 7.94SVN ( https://nmap.org ...

  10. CudaSPONGE与PySAGES初步性能测试

    技术背景 在前面的一篇博客中,我们介绍过CudaSPONGE的基础使用方法.CudaSPONGE调用Python接口函数以及CudaSPONGE结合增强采样软件PySAGES的使用方法.在这篇文章中, ...