前言

学习 UP 主 马克的技术工作坊MCP终极指南 - 从原理到实战,带你深入掌握MCP(基础篇) 视频,了解下 MCP 的一些基本概念,记录下个人学习笔记,仅供自己参考😄

videoMCP终极指南 - 从原理到实战,带你深入掌握MCP(基础篇)

codehttps://github.com/MarkTechStation/VideoCode

1. MCP 简要介绍

MCP 全称是 Model Context Protocol,是 Anthropic 公司在 2024 年 11 月 25 号发布的一个协议

在这里插入图片描述

Model Context Protocol 翻译成中文是模型上下文协议,你可能会觉得这个名字起的有点奇怪,实际上 MCP 领域还有很多这种故弄玄虚的词汇,我们后面都会一一解释

我们暂时先不纠结 MCP 到底是什么意思,我们先来看看 MCP 能做什么

在这里插入图片描述

简单来说,MCP 就是能够让大模型更好地使用各类工具的一个协议。比如借助 MCP 我们可以让模型使用浏览器上网查询信息,可以让模型操作 Unity 编写游戏,也可以让模型查询实时路况,总之 MCP 能干的事情可太多了,这些可都不是什么小事情

要知道大模型本身其实只会问答,它自己并不会使用外部工具,而 MCP 的出现就等于是让大模型拥有了使用各种外部工具的能力

要想使用 MCP,你还得用到一个东西叫做 MCP Host,它本质上就是一个支持 MCP 协议的软件,常见的 MCP Host 包括 Claude Desktop、Cursor、Cline、Cherry Studio 等等

在这里插入图片描述

下面我们就以 Cline 为例给大家讲讲 MCP 的使用方法

2. 安装 MCP Host(Cline)

Cline 其实是 vscode 的一个插件,我们可以在扩展应用商店搜索安装:

在这里插入图片描述

安装完成之后在最左侧会出现一个 Cline 的图标,我们点击下,这里就是使用 Cline 的地方了

在这里插入图片描述

Note:这里博主安装的是插件是 Cline Chinese

3. 配置 Cline 用的API Key

紧接着我们需要配置模型,Cline 支持不同的 API 接入方和不同的模型

在这里插入图片描述

目前对 MCP 支持最好的模型是 Claude 3.7 Sonnet,不过这个模型也挺贵的,这里博主选择的是 DeepSeek

在这里插入图片描述

设置完成之后我们点击保存,之后会引导我们来到聊天页面,我们随便问它一个问题,给它打个招呼,看它能不能够正常回复

在这里插入图片描述

可以看到它正常回复了,那就基本上没有什么问题了

4. 第一个 MCP 问题

一切都准备就绪,那我们就试着问它一个真正的问题:明天纽约的天气怎么样?

在这里插入图片描述

它给我们的建议呢,是要创建一个天气的 MCP 服务器。好,这里面又来了一个新的名词,叫做 MCP 服务器,我们来详细探讨下这个名词到底是什么意思

5. 概念解释:MCP Server 和 Tool

MCP 服务器的英文原名是叫做 MCP Server(可能翻译成 MCP 服务更好一些),这个名字听起来好像很高大上的样子,而且好像是跟我们传统网络协议里面的 server 有点联系,似乎是一个远程服务器,必须要联网才能使用

在这里插入图片描述

比如说我们打开 google 的首页,就是访问了 google 的服务器,不过实际上 MCP Server 跟我们传统意义上的 server 并没有什么太大的关系,它就是一个程序而已,只不过这个程序的执行是符合 MCP 协议的

比如说,大部分的 MCP Server 都是本地通过 Node 或者 Python 启动的,只不过在使用的过程中可能会联网,当然它也可能不联网,纯本地使用也是可以的。不管是联不联网,它都可以叫做 MCP Server,所以 MCP Server 的这个名字里面带 server 这个词是有一定的误导性的。

在这里插入图片描述

你不要觉得这个玩意儿很高端很玄妙,它其实本质上就是一个程序,跟你手机上面的应用没有太大的区别,不管是 MCP Server 还是手机应用,它们都内置了一些功能模块来解决你的问题

在这里插入图片描述

用 iphone 上面的时钟进行举例,它内置了四个功能模块,分别是世界时钟,闹钟,钟表,计时器,分别可以给我们解决四个场景的诉求。而刚才 Cline 想要给我们安装的这个 OpenWeather 的 MCP Server 也内置了一些模块,这些模块在 MCP 领域的专业名词叫做 Tool,翻译成中文就是工具

Tool 这个词也不太好理解,换个词你马上就明白了,函数,没错,一个 Tool 其实就是编程语言里面的一个函数。

在这里插入图片描述

比如一个处理天气的 MCP Server,它内部可能会包含两个函数,分别是 get_forecastget_alerts,如上图所示

前者的功能是传入经纬度返回未来几天的天气,后者的功能则可能是传入地区,返回未来几天的气象预警。我们不是想查纽约明天的天气吗?那就可以让 Cline 安装这个处理天气的 MCP Server,并且让它使用其中的 get_forecast 就能够拿到纽约明天的天气了

当然 Cline 想要给我们创建的这个天气 MCP Server 可能里面还有别的 Tool,不过不管怎么样,其中的 get_forecast 这个 Tool 一定是可以解决我们获取天气数据的这个问题的

6. 配置 MCP Server

那讲完了 MCP Server 和 Tool 的概念,我们再回到 Cline 这里继续实操

前面我们讲到了 Cline 希望我们安装一个查询天气用的 MCP Server,你此时可以提供相关的密钥让它创建并且安装。除此之外,我们也可以点击右上角的 MCP 服务器自己查找

在这里插入图片描述

这是一个 MCP Server 的市场,和我们手机的应用市场有点像,这里的 MCP Server 也是可以直接点击安装的,点击 Install 就可以

不过要注意的是,不管是我在原来的聊天界面里面让它去创建对应的 MCP Server 还是说在这个应用市场里面让它去安装 MCP Server,这两种办法本质上都是让模型自己去主导整个安装过程

每一个 MCP Server 都有一个对应的 github 仓库,每个 github 仓库都有一个说明文档告诉大家如何去安装这个 MCP Server,例如下图中展示的就是 File System 这个 MCP Server 的安装文档:

在这里插入图片描述

模型呢就是通过阅读这个说明文档来运行程序,新增文件,从而完成 MCP Server 的安装

不过大家可能对安装的程序路径、版本等有一定的要求,不希望模型在自己的电脑里面乱搞,何况模型还有可能安装失败,不对安装过程上心的话你可能连模型干了什么都不知道

而且最重要的是,虽然 Cline 是支持这种自动安装的方式,但是呢有些 MCP Host 是不支持的,只能够手动处理,所以这里我们使用一种更加通用,确定性更高的办法

我们回到 Cline 这边,点击上面的 Installed,然后再点击 Configure MCP Servers,之后 Cline 就会给我们打开一个文件:

在这里插入图片描述

这个文件是 JSON 格式的,如果我们想新增一个 MCP Server 的话,我们只需要在里面填入对应的启动命令就行了,比如说我们仿照官方示例写一个查询天气的 MCP Server,内容如下:

{
  "mcpServers": {
    "weather": {
      "disabled": false,
      "timeout": 60,
      "command": "E:\\anaconda3\\envs\\yolov8\\python.exe",
      "args": [
        "C:\\Users\\lenovo\\Downloads\\videos\\weather.py"
      ],
      "transportType": "stdio"
    }
  }
}

Note:博主是在 Windows 下操作的,所以 Json 文件的内容和 UP 主的不太一样

其中 commond 字段博主选择的是 anaconda 中的一个 python 虚拟环境,args 参数是 weather.py 的 python 脚本文件路径

weather.py 的具体内容可以在 UP 提供的 GitHub 仓库 https://github.com/MarkTechStation/VideoCode 中找到,如下所示:

from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP


# Initialize FastMCP server
mcp = FastMCP("weather", log_level="ERROR")


# Constants
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"


async def make_nws_request(url: str) -> dict[str, Any] | None:
    """Make a request to the NWS API with proper error handling."""
    headers = {
        "User-Agent": USER_AGENT,
        "Accept": "application/geo+json"
    }
    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(url, headers=headers, timeout=30.0)
            response.raise_for_status()
            return response.json()
        except Exception:
            return None


def format_alert(feature: dict) -> str:
    """Format an alert feature into a readable string."""
    props = feature["properties"]
    return f"""
Event: {props.get('event', 'Unknown')}
Area: {props.get('areaDesc', 'Unknown')}
Severity: {props.get('severity', 'Unknown')}
Description: {props.get('description', 'No description available')}
Instructions: {props.get('instruction', 'No specific instructions provided')}
"""


@mcp.tool()
async def get_alerts(state: str) -> str:
    """Get weather alerts for a US state.

    Args:
        state: Two-letter US state code (e.g. CA, NY)
    """
    url = f"{NWS_API_BASE}/alerts/active/area/{state}"
    data = await make_nws_request(url)

    if not data or "features" not in data:
        return "Unable to fetch alerts or no alerts found."

    if not data["features"]:
        return "No active alerts for this state."

    alerts = [format_alert(feature) for feature in data["features"]]
    return "\n---\n".join(alerts)


@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
    """Get weather forecast for a location.

    Args:
        latitude: Latitude of the location
        longitude: Longitude of the location
    """
    # First get the forecast grid endpoint
    points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"
    points_data = await make_nws_request(points_url)

    if not points_data:
        return "Unable to fetch forecast data for this location."

    # Get the forecast URL from the points response
    forecast_url = points_data["properties"]["forecast"]
    forecast_data = await make_nws_request(forecast_url)

    if not forecast_data:
        return "Unable to fetch detailed forecast."

    # Format the periods into a readable forecast
    periods = forecast_data["properties"]["periods"]
    forecasts = []
    for period in periods[:5]:  # Only show next 5 periods
        forecast = f"""
{period['name']}:
Temperature: {period['temperature']}°{period['temperatureUnit']}
Wind: {period['windSpeed']} {period['windDirection']}
Forecast: {period['detailedForecast']}
"""
        forecasts.append(forecast)

    return "\n---\n".join(forecasts)


if __name__ == "__main__":
    # Initialize and run the server
    mcp.run(transport='stdio')

这里还需要注意一个点,那就是你需要确保你的虚拟环境能执行 weather.py 脚本,换而言之,你需要安装 weather.py 运行时的第三方库,指令如下:

# yolov8 为虚拟环境名
conda activate yolov8
pip install httpx
pip install mcp

保存之后 Cline 就会自动识别并且加载对应的 MCP Server,如下图所示:

在这里插入图片描述

大家不要被这些配置所吓倒,其实很简单的,下面我们简要的解释下 json 文件各个字段代表的含义:(from ChatGPT)

  • mcpServers:可以在同一个 cline_mcp_settings.json 里定义不止一个 “服务实例”,用 key(如 "weather")区分不同的服务
  • disabled:代表这个 MCP Server 是否被禁用,如果设置 false 代表不禁用,启用该服务,同时能看到 weather 这个服务的绿色的开关,显示已经启动了
  • timeout:Cline 在后台会做心跳或等 RPC 返回,如果这个时间里都没收到任何有效应答,就会判定这个子进程 “死掉” 并报错(结合 stdio 通道断开或进程退出的场景)
  • command:告诉操作系统 “我想要 spawn 一个什么可执行程序出来”,在 Linux 下常见的是 uv(其实就是 uvicorn 的简写),也可以是 pythonnodego 编译后的可执行文件,只要是能响应 JSON-RPC 协议的进程都可以填这里
  • argscommand 后面跟的命令行参数列表

在 UP 教程示例里,用的是:

"command": "uv",
"args": [
  "--directory",
  "/Users/joeygreen/PycharmProjects/weather",
  "run",
  "weather.py"
]

这意味着最终执行的命名行相当于:

uv --directory /home/jarvis/project/mcp/weather run weather.py

uv 通常就是一个 CLI(绝大多数人安装了 uvicorn 后,会把可执行文件命名为 uv),它会切换到 --directory 指定的目录,再用某种方式去 run weather.py,并且暴露一个符合 MCP/JSON-RPC 协议的交互接口

而博主在 Windows 下改成了:

"command": "E:\\anaconda3\\envs\\yolov8\\python.exe",
"args": [
  "C:\\Users\\lenovo\\Downloads\\videos\\weather.py"
]

就是告诉 Cline 用 E:\\anaconda3\\envs\\yolov8\\python.exe 去执行 C:\\Users\\lenovo\\Downloads\\videos\\weather.py 这个脚本。这时,只要 weather.py 里是一段不断监听 stdin 并写回 JSON-RPC 的代码,Cline 就能一直保持 stdio 的沟通

  • transportType: "stdio":Cline 只支持用标准输入/输出做 JSON-RPC 通信(也可以用 TCP,但常用的是 stdio),配置了 stdio,Cline 会把它当成:
    • 1. 打开一个子进程(spawn)
    • 2. 通过它的 stdio 发 JSON 请求(method、params 等等)
    • 3. 等待它从 stdout 回 JSON 响应
    • 4. 如果 stdout 或子进程挂掉,Cline 会报 Connection closed 或超时之类的错误。

如果你还是对 transportType 一知半解的话,不要急,你先大体有个印象就行,之后会有演示,看完你就明白了

所以你也看到了一个 MCP Server 背后只是一个程序而已,只不过这个程序的运行符合 MCP 规范,下面我们说说这个 MCP Server 里面到底写了些什么,注意这里会展示一些代码,你不用细究代码的详细含义,有个概念就可以,代码后面会带着大家来写

我们刚才填入的这个 MCP Server 呢,它内部包含了两个 Tool,其中一个叫 get_forecast,实现如下:

@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
    """Get weather forecast for a location.

    Args:
        latitude: Latitude of the location
        longitude: Longitude of the location
    """
    # First get the forecast grid endpoint
    points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"
    points_data = await make_nws_request(points_url)

    if not points_data:
        return "Unable to fetch forecast data for this location."

    # Get the forecast URL from the points response
    forecast_url = points_data["properties"]["forecast"]
    forecast_data = await make_nws_request(forecast_url)

    if not forecast_data:
        return "Unable to fetch detailed forecast."

    # Format the periods into a readable forecast
    periods = forecast_data["properties"]["periods"]
    forecasts = []
    for period in periods[:5]:  # Only show next 5 periods
        forecast = f"""
{period['name']}:
Temperature: {period['temperature']}°{period['temperatureUnit']}
Wind: {period['windSpeed']} {period['windDirection']}
Forecast: {period['detailedForecast']}
"""
        forecasts.append(forecast)

    return "\n---\n".join(forecasts)

它接受两个参数,分别是 latitudelongitude 也就是纬度和经度,传入后它会调用天气相关的 API 返回所传经纬度地区未来几天的天气

另一个 Tool 叫做 get_alerts,实现如下:

@mcp.tool()
async def get_alerts(state: str) -> str:
    """Get weather alerts for a US state.

    Args:
        state: Two-letter US state code (e.g. CA, NY)
    """
    url = f"{NWS_API_BASE}/alerts/active/area/{state}"
    data = await make_nws_request(url)

    if not data or "features" not in data:
        return "Unable to fetch alerts or no alerts found."

    if not data["features"]:
        return "No active alerts for this state."

    alerts = [format_alert(feature) for feature in data["features"]]
    return "\n---\n".join(alerts)

它接收的参数是美国的州代码,返回这个州的气象预警信息

这两个 Tool 背后调用的 API 都是美国气象局提供的,所有目前只有美国的数据,这可能对你用处不是很大,不过我们测试还是需要它们的

这两个 Tool 里面,我们真正需要的是 get_forecast 这个 Tool,因为它可以给我们解答纽约明天的天气这个问题

7. 使用 MCP Server

好,说了这么多,我们回到 Cline 这里,确认一下我们已经开启了这个 MCP Server,我们再问问 Cline 相同的问题:

在这里插入图片描述

可以看到 Cline 确实是发现了 weather 这个 MCP Server,而且也发现了其中的 get_forecast Tool 是可以解决我们的问题的,它帮我们填入了纽约的经纬度信息,需要让我们确认一下是否同意它执行这个 Tool,我们点击批准:

在这里插入图片描述

可以看到调用已经完成了,它拿到了未来几天的天气信息,这个时候呢模型会总结给出一个符合我们问题的答案

我提问的日期是 6 月 7 日,它把纽约明天 6 月 8 日 的天气信息都总结出来了,包括白天夜间以及相关的建议,可以看到效果还是不错的

8. MCP 交互流程详解

我们刚才配置了一个 MCP Server 并且使用了它,不过到底内部发生了什么呢?我们把 UP 绘制的图拿过来给大家讲解下,大家就明白了:

在这里插入图片描述

首先我们用 JSON 配置好一个 MCP Server 并且保存之后,Cline 就会使用配置中的命令去执行这个程序,执行了之后,这个程序就会等待 Cline 的指令,Cline 首先跟它说:“你好呀,我是 Cline”,然后 MCP Server 回答道:“你好呀,我是 weather”

寒暄之后,Cline 继续问:“你有什么 Tool 可供我使用啊”,MCP Server 回答道:“我有两个 Tool,一个是 get_forecast,你给我经纬度,这个 Tool 就可以告诉你对应地区的天气预报,另外一个是 get_alerts,你传入美国的州名,我就可以告诉你对应州的实时预警信息”

Cline 记住了 MCP Server 的回答,因为后面可能会用到,到此为止,MCP Server 的注册就结束了,这些事情都发生在开启这个 MCP Server 的一瞬间

然后我们不是问问题了吗?纽约明天的天气怎么样?Cline 拿到问题之后,把这个问题传给模型,让它解答,与往常不同的是,Cline 发给模型的除了用户问题,还有注册好的 MCP Server 以及每个 MCP Server 所包含的 Tool 列表,Cline 告诉模型,这些 Tool 可能会帮助你解决用户的问题,需要调用哪个,跟我说,我来帮你调

模型一看用户的问题,我回答不了啊,我哪知道纽约明天的天气,我的知识到去年 12 月就截止了,不过 weather 这个 MCP Server 里面有个叫做 get_forecast Tool 好像是可以回答这个问题,要不就让 Cline 调用一下这个 Tool 试试,因此模型告诉 Cline 我要调用这个 get_forecast,参数是北纬 40°,西经 74°

Cline 拿到模型的请求之后,紧接着就跟 weather 这个 MCP Server 沟通,你不是说你有 get_forecast 这个 tool 吗,那给我调用一下,参数是北纬 40°,西经 74°,weather 接收到 Cline 请求之后,用指定的参数调用了 get_forecast 这个函数,拿到了结果,并且把它传给了 Cline,Cline 继而把结果再传回给了模型,告诉它你要的 Tool 结果到了

模型接到后根据结果回答了用户问题,并且把它的答案发回给了 Cline,Cline 把结果再发回给用户,这个呢就是我们最终看到的结果了

没错,这个就是整个过程了

9. 如何使用他人制作的 MCP Server:uvx部分

前面我们说的 MCP Server 是 UP 主仿照官方案例写的,那如何使用别人写的呢,在哪里能找到别人写的 MCP Server 呢?

目前呢有很多的 MCP Server 市场,比如说 mcp.somcpmarket.comsmithery.ai 等等,大家需要的话可以去这几个网站找找看

MCP Server 大多是使用 Python 或者 Node 进行编写,对应的启动程序一般是 UVX 或者是 NPX,对于这两种启动方式,我们分别举一个例子,其它的大家举一反三就好了

首先是 UVX:

在这里插入图片描述

UVX 是 uv to run 这个命令的缩写,代表使用 UV 来运行一个 tool,不过大家需要注意,这里面的 tool 是 UV 领域的 tool,和我们前面所说的 MCP 的 Tool 不是一个东西

不过大家可能还会有另外一个问题,那就是 UV 是什么,简单来说 UV 就是 Python 界的一个包管理软件,而其中的 UVX 呢可以用来直接启动 Python 程序,比如 uvx ruff 就可以用来安装并且启动 ruff 这个程序,UVX 会帮你把 ruff 需要的依赖、执行环境全部都配置好,不需要你自己去处理

当然使用 UVX 之前,我们需要安装它,大家可以去 UV 的 github 仓库找到对应的安装命令,如下所示:

在这里插入图片描述

博主选择的是直接 pip 安装,指令如下:

pip install uv

安装完毕后,你可以试着执行一下 uvx pycowsay 'hello world' 这个命令,这个命令就是让 pycowsay 这个程序做一个牛在叫的图片,并且在上面显示 hello world 这句话,如下所示:

在这里插入图片描述

如果你的图片也像博主这样显示出来了,那就没问题了

接下来我们使用 fetch 这个 MCP Server 给大家演示一下,fetch 是用来抓取网页内容的,它是用 UVX 来启动的,符合我们的场景

我们首先打开 mcp.so 搜索 fetch 这个 MCP Server:

在这里插入图片描述

然后点击进入,再点击 content:

在这里插入图片描述

往下翻,找到配置的命令,我们选择 UVX:

在这里插入图片描述

然后复制里面的内容,再回到 Cline 这边,在 cline_mcp_settings.json 中添加 fetch 这个新的 MCP Server,内容如下:

{
  "mcpServers": {
    "weather": {
      "disabled": false,
      "timeout": 60,
      "command": "E:\\anaconda3\\envs\\yolov8\\python.exe",
      "args": [
        "C:\\Users\\lenovo\\Downloads\\videos\\weather.py"
      ],
      "transportType": "stdio"
    },
    "fetch": {
      "command": "E:\\anaconda3\\envs\\yolov8\\Scripts\\uvx.exe",
      "args": ["mcp-server-fetch"]
    }
  }
}

Note:由于博主在 Windows 下面测试,没有配置 UVX 的环境变量,所以这边写的绝对路径

保存之后,可以看到 Cline 已经识别并加载我们的 fetch 了:

在这里插入图片描述

Note:如果大家网不好,加载失败,可以像 UP 主一样在终端先执行 uvx mcp-server-fetch 等待安装完成后再进 Cline 加载

既然已经安装好了 fetch 这个 MCP Server,我们不妨就用用看

首先我们打开一个新的会话,输入我们的问题:请抓取下面这个网页的内容,并将其转换为 markdown 后放到项目目录里面的 guides.md 文件中:https://docs.astral.sh/uv/guides/install-python/

这里给了一个 url,这个 url 在页面展示就是下面这个样子,是 uv 的一个说明网页:

在这里插入图片描述

我们回车下看一下 Cline 会如何处理这个问题:

在这里插入图片描述

可以发现 Cline 确实是找到了我们的 fetch MCP Sever,并且开始提取参数准备调用,当然它也做了其它的准备工作,比如说文件写入,可以用它内部的 write_to_file 工具进行处理,那它现在已经拼接好工具的调用参数了,正在征得我们同意,我们点击批准:

在这里插入图片描述

可以看出它已经成功地使用了 fetch MCP Server,获取到了网页的内容,它下面呢就开始把这个网页的内容转换成 markdown 并且写入到我所规定的 guides.md 文件中

接着 Cline 询问我们是否保存,我们选择保存:

在这里插入图片描述

可以看到相应的文件保存下来了,不错,Cline 已经完成了我们的任务,而且整个过程非常丝滑,没有出现一点问题

10. 如何使用他人制作的 MCP Server:npx部分

聊完了 UVX,我们再来看看另外一种启动 MCP Server 的方式 NPX,NPX 和 UVX 类似也是可以自动下载并且安装下载,只不过 UVX 安装的是 Python 程序,而 NPX 安装的是 Node 程序

由于 NPX 是 Node 的一部分,所以我们直接安装 Node.js 就可以,大家打开 Node.js 的官方网址点击下载安装就行了:

在这里插入图片描述

安装的过程很简单,就跟安装正常软件一样,大家自己处理一下

安装好了,我们打开 mcpmarker.com 这样的一个网址,在里面搜索一个 MCP Server,叫做 hotnews

在这里插入图片描述

然后我们点击这个 MCP Server,它是用来给我们拉取新闻的,如果想要使用它的话,我们需要点击 README 选中 MCP Server 配置里面的对应部分复制:

在这里插入图片描述

然后来到 Cline 这边粘贴,内容如下:

{
  "mcpServers": {
    "weather": {
      "disabled": false,
      "timeout": 60,
      "command": "E:\\anaconda3\\envs\\yolov8\\python.exe",
      "args": [
        "C:\\Users\\lenovo\\Downloads\\videos\\weather.py"
      ],
      "transportType": "stdio"
    },
    "fetch": {
      "command": "E:\\anaconda3\\envs\\yolov8\\Scripts\\uvx.exe",
      "args": ["mcp-server-fetch"]
    },
    "mcp-server-hotnews": {
      "command": "cmd.exe",
      "args": [
        "/c",
        "npx",
        "-y",
        "@wopal/mcp-server-hotnews"
      ],
      "transportType": "stdio",
      "timeout": 60
    }
  }
}

Note:由于博主在 Windows 下操作,某些指令和 Linux 上不太一样,大家根据自己实际情况来即可

保存之后,Cline 就会给我们加载上这个 MCP Server 了,如下所示:

在这里插入图片描述

和之前一样,如果说你的加载过程非常长,以至于超时的话,你可以把其中的命令放到终端里面去执行,让它提前下载完,然后呢再跑到 Cline 这边再加载一次

那既然安装完了,我们就不妨来试一试,首先新建一个对话,然后我们给它问题:获取今天中国最火的新闻

在这里插入图片描述

可以看到 Cline 是发现了我们刚安装的这个 MCP 服务,并且找到了一个合适的工具在征求我们的同意,看看是否能运行这个工具,我们点击批准:

在这里插入图片描述

可以看到执行完成了,而且模型给我们总结了一下,这样的话我们就拿到了最终的结果了,这个由 NPX 安装的 MCP Server 我们也演示完了

除了 UVX 和 NPX 之外呢,可能还会有一些别的安装方式,比如 bunx 或者是直接使用 Node 启动,大家仔细看看 MCP Server 对应的安装文档都能解决

那 UP 主的 MCP 教程的第一部分也就是基础部分到这里就结束了,后面还有一个进阶教程,会给大家演示如何编写自己的 MCP Server,并通过截取 MCP Server 输入输出的方式把 MCP Server 的运行原理挖个底朝天

结语

这篇文章我们主要跟随 UP 主学习了解了 MCP 的一些基础概念,MCP 是一个能够让大模型更好地使用各类工具的通信协议,MCP Host 是指支持 MCP 协议的软件,MCP Server 是一个支持 MCP 协议的服务,每个 MCP Server 都有一些 Tool 工具供我们使用

接着 UP 带着我们利用 Cline 配置了一个天气的 MCP Server,并利用这个 MCP Server 成功获取到了纽约明天的天气,最后 UP 还分享了如何通过 uvx 和 npx 两种方式来使用他人制作的 MCP Server

整个讲解非常通俗易懂,大家感兴趣的可以多关注关注,多看看 UP 的视频

下篇文章我们来学习 MCP 的进阶教程,敬请期待🤗

参考

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐