MCP 从入门到实战:让大模型真正「动手」

简介: 本文系统讲解MCP(模型上下文协议)原理与实战,厘清Host、Server、Tool角色分工,解析AI如何基于描述与Schema智能选工具,并提供可直连Cherry Studio的Python监控服务示例,助你让大模型真正“动手”。

MCP 从入门到实战:让大模型真正「动手」

本文基于个人学习与实践整理,面向希望在 Cherry Studio、Cursor 等客户端中使用 MCP 的读者。
重点讲清 协议是什么模型如何决定调用哪个工具,并附带一个可直接接入 Cherry Studio 的 Python 示例。


目录

  1. 为什么需要 MCP
  2. 三个核心角色:Host、Server、Tool
  3. 一次完整对话里发生了什么
  4. AI 如何「听懂」你的问题并选对工具
  5. MCP 协议分两层,别混在一起
  6. 在 Cherry Studio 里接入 MCP
  7. 动手:用 Python 写一个标准 MCP 工具服务

1. 为什么需要 MCP

大语言模型擅长理解和生成文字,但默认情况下它:

  • 不能直接读你电脑上的文件;
  • 不能实时查天气、股价、新闻;
  • 不能替你执行搜索、发邮件、操作数据库。

过去每一家 AI 产品都要单独对接每一种能力,接口五花八门,开发和维护成本都很高。

MCP(Model Context Protocol,模型上下文协议) 由 Anthropic 在 2024 年底提出,目标很简单:用一套统一规范,让「AI 客户端」和「外部能力程序」对话

你可以把它理解成:

类比 含义
USB 接口 不同设备(键盘、U 盘)只要符合标准,就能插到电脑上
MCP 不同工具(查时间、读文件、调 API)只要实现 MCP Server,就能被各种 Host 调用

对使用者来说:在客户端里配置好 MCP Server 后,用自然语言提问,模型会在需要时自动选用合适的工具,再把结果组织成回答。


2. 三个核心角色:Host、Server、Tool

2.1 MCP Host(宿主 / 客户端)

Host 是你日常打交道的 AI 应用,负责:

  • 启动、管理 MCP Server 进程;
  • 把用户问题和「当前有哪些工具」一起交给大模型;
  • 按模型的指示去调用 Server,并把结果再喂回模型。

常见 Host:Cherry Studio、Cursor、Claude Desktop 等。本文以 Cherry Studio 为例演示配置与使用。

2.2 MCP Server(能力提供方)

Server 是一个按 MCP 规范运行的程序,名字里虽有 “Server”,但多数是 在你本机通过子进程启动 的(例如 Python / Node 脚本),而不是必须部署在远程机房。

它向 Host 声明:

  • 有哪些 Tool(可执行函数);
  • 可选的 Resource(可读数据);
  • 可选的 Prompt(预设提示模板)。

2.3 Tool(工具)

Tool 就是 Server 暴露给模型的一条「可调用能力」,在代码里通常对应一个带类型注解的函数。

每个 Tool 会带有:

  • name:工具名,如 get_cpu_status
  • description:自然语言说明(常来自函数的 docstring);
  • inputSchema:参数的 JSON Schema,约束模型填什么字段。

模型靠 description + inputSchema 判断「该不该用、参数怎么填」。


3. 一次完整对话里发生了什么

下面用「用户问:我电脑现在卡不卡?内存占用多少?」且已接入系统性能 MCP 为例,说明数据流:

image.png


4. AI 如何「听懂」你的问题并选对工具

很多人以为 MCP 规定了「模型怎么思考」。实际上:MCP 只规范 Host 与 Server 之间怎么通信模型与 Host 之间用什么格式(Function Calling、XML 工具块等),由各家客户端自己实现。

但对使用者,理解下面这条链路就够了。

4.1 Host 在每次请求里多塞了什么

当你开启 MCP 并选中某个 Server 后,Host 大致会做:

  1. tools/list 拿到的信息,转成模型能识别的 工具定义列表(名称、描述、参数 schema);
  2. 把你的 用户消息 和这段工具定义 一起发送 给大模型 API;
  3. 若模型返回「需要调用某工具 + JSON 参数」,Host 去执行 tools/call,再把结果作为 工具结果消息 追加到对话,再次请求模型 生成最终回复。

所以:模型并不是事先“安装”了 MCP,而是在每一轮里看到「当前会话可用工具说明书」,再自己做选择。

4.2 模型靠什么做决策

模型主要依据三类信号:

信号 作用
用户意图 「内存占用多少」→ 内存类;「C 盘还剩多少」→ 磁盘类
Tool 的 description 说明这个函数解决什么问题,避免误用
inputSchema 规定参数名、类型、是否必填,模型从中 抽取或推断 参数值

例如工具描述写「查询物理内存占用」,用户说「我电脑内存还剩多少」,模型更可能调用 get_memory_status

4.3 为什么有时不调用、有时乱调用

不调用 常见原因:

  • 模型认为凭自身知识就能答(历史常识类问题);
  • 没有启用 MCP,或对话里未勾选对应 Server;
  • 所用模型 不支持工具调用 / Function Calling(Cherry Studio 里应选带「工具」能力的模型)。

乱调用 常见原因:

  • Tool 描述过于笼统,多个工具边界不清;
  • 参数 schema 太宽,缺少 required 或枚举约束;
  • 用户问题模糊,模型做了猜测。

改进建议:函数名见名知意、docstring 写清「何时使用、返回什么」、参数用类型注解和枚举缩小空间。

4.4 和「RAG / 联网搜索」的区别

  • RAG:先检索文档片段,再让模型阅读总结;
  • MCP Tool:模型主动发起一次 结构化函数调用,由 Server 执行逻辑(算数、查 API、读本地文件等)。

二者可以并存:MCP 解决的是 标准化、可执行、可组合 的外部能力接口。


5. MCP 协议分两层,别混在一起

层级 谁和谁 规范什么
层 A MCP Host ↔ MCP Server 握手、列工具、调工具、传资源等(JSON-RPC 风格消息,常见传输为 stdioSSE
层 B MCP Host ↔ 大模型 API 如何把工具清单编进 prompt、如何解析模型的 tool_call(各 Host 实现不同)

MCP 只管层 A。 这也是为什么同一个 Python MCP Server,可以接到 Cherry Studio、Cursor 等不同 Host——只要对方实现了 MCP 客户端逻辑。

Model Context Protocol 里的 Context,指的是:让模型感知「外部环境里有哪些可调用能力」,从而获取实时、私有或结构化信息,而不是只靠训练数据。


6. 在 Cherry Studio 里接入 MCP

6.1 环境准备

Cherry Studio 运行 STDIO 类 MCP 时,通常需要本机有:

  • Python 3.10+(自建 Server 用);
  • uv(推荐,用于跑 Python 项目);
  • 使用社区现成的 uvx / npx 工具时,按官方文档在 Cherry Studio 设置里安装内置运行环境。

官方文档:MCP 环境安装MCP 配置说明

6.2 添加社区 Server(示例:网页抓取)

  1. 打开 设置 → MCP Server → 添加服务器
  2. 名称自定,类型选 STDIO
  3. 命令填 uvx,参数填 mcp-server-fetch(首次会下载依赖,可能较慢);
  4. 保存后在对话界面 启用该 MCP,并选择支持工具调用的模型。

等价 JSON 片段:

{
   
  "mcpServers": {
   
    "fetch": {
   
      "command": "uvx",
      "args": ["mcp-server-fetch"]
    }
  }
}

6.3 添加本文自带的 Python Server(下文第 7 节)

工作区已附带可运行项目:mcp-sys-monitor/。先在该目录执行 uv sync,再在 Cherry Studio 新增 STDIO 服务器:

{
   
  "mcpServers": {
   
    "sys-monitor": {
   
      "description": "查询本机 CPU、内存、磁盘、网络、GPU 性能",
      "isActive": true,
      "command": "uv",
      "args": [
        "--directory",
        "C:/Users/25700/Desktop/test/mcp-sys-monitor",
        "run",
        "server.py"
      ]
    }
  }
}

请将 --directory 后的路径改成你本机 mcp-sys-monitor 的实际位置(Windows 建议用正斜杠 /)。

保存后连接成功,在对话里勾选 sys-monitor,并选择支持工具调用的模型即可试用。

6.4 话术建议

  • 「帮我看一下电脑现在的整体性能状态」
  • 「CPU 占用多少?频率多少?」
  • 「内存还剩多少?有没有快满了?」
  • 「C 盘和 D 盘各用了百分之几?」
  • 「现在网速怎么样?」

image.png
image.png


7. 动手:用 Python 写一个标准 MCP 工具服务

Cherry Studio 本身不会把「任务管理器里的实时性能数据」直接交给大模型。下面这个 mcp-sys-monitor 就是一个有明确价值的例子:让 AI 能查询你这台电脑当前的 CPU、内存、磁盘、网络和 GPU 状态——类似你截图里 Windows 任务管理器的「性能」页。

7.1 这个 Server 提供什么

工具 对应任务管理器 用途
get_system_overview 性能页总览 一次返回 CPU / 内存 / 磁盘 / 网络 / GPU 摘要
get_cpu_status CPU 卡片 利用率、核心数、运行频率
get_memory_status 内存卡片 已用 / 总量 / 可用、页面文件
get_disk_status 磁盘卡片 各分区占用、短时读写速度
get_network_status 网络卡片 各网卡实时收发速率
get_gpu_status GPU 卡片 显卡名称;NVIDIA 独显可读利用率与显存

底层用 psutil 采集跨平台指标;Windows 下额外通过 WMI 补充内存频率等信息,有 nvidia-smi 时读取独显占用。

7.2 设计上的三个「标准写法」

① 按指标拆工具,同时提供总览

用户问「内存多少」时,模型应调 get_memory_status;问「电脑卡不卡」时,调 get_system_overview。粒度清晰,避免一个巨型函数难以选择。

② docstring 写清触发场景

@mcp.tool()
def get_memory_status() -> str:
    """查询物理内存与交换区占用情况。

    当用户问内存用了多少、还剩多少、内存占用率时使用。
    Windows 下会尽量补充内存频率、插槽等信息。
    """

③ 采样型指标要注明等待时间

CPU 利用率、网速需要两次采样相减。在 docstring 里说明「约 0.6 秒采样」,用户和模型才知道结果有短暂延迟,这是正常现象。

7.3 项目结构

mcp-sys-monitor/
├── pyproject.toml
└── server.py

7.4 pyproject.toml

[project]
name = "mcp-sys-monitor"
version = "0.1.0"
description = "查询本机 CPU、内存、磁盘、网络、GPU 性能的 MCP 服务"
requires-python = ">=3.10"
dependencies = [
    "mcp[cli]>=1.6.0",
    "psutil>=6.0.0",
]

[project.scripts]
mcp-sys-monitor = "server:main"

7.5 核心代码摘录

总览工具(组合多个采集函数):

@mcp.tool()
def get_system_overview() -> str:
    """获取本机性能总览,类似任务管理器「性能」页。

    当用户问「电脑现在什么状态」「性能怎么样」「卡不卡」时使用。
    一次返回 CPU、内存、磁盘、网络、GPU 的摘要。
    """
    sections = [
        ("【CPU】", _cpu_block()),
        ("【内存】", _memory_block()),
        ("【磁盘】", _disk_block()),
        ("【网络】", _network_block()),
        ("【GPU】", _collect_gpu_info()),
    ]
    # 拼接为可读文本返回给模型
    ...

CPU 采样(psutil 需短暂 interval 才准确):

def _cpu_block(interval: float = 0.6) -> list[str]:
    usage = psutil.cpu_percent(interval=interval)
    freq = psutil.cpu_freq()
    lines = [
        f"总利用率:{usage:.1f}%",
        f"物理核心:{psutil.cpu_count(logical=False)} | "
        f"逻辑核心:{psutil.cpu_count(logical=True)}",
    ]
    if freq and freq.current:
        lines.append(f"当前频率:{freq.current:.2f} GHz")
    return lines

网速(两次采样求速率):

def _network_block() -> list[str]:
    net1 = psutil.net_io_counters(pernic=True)
    time.sleep(0.6)
    net2 = psutil.net_io_counters(pernic=True)
    for nic, c2 in net2.items():
        down = (c2.bytes_recv - net1[nic].bytes_recv) / 0.6
        up = (c2.bytes_sent - net1[nic].bytes_sent) / 0.6
        # 格式化为 KB/s、MB/s 返回
        ...

7.6 本地运行

cd mcp-sys-monitor
uv sync
uv run server.py

也可在终端快速验证(不经过 MCP 协议):

uv run python -c "import server; print(server.get_system_overview())"

7.7 写好 MCP 工具的检查清单

  1. 一事一工具:总览 + 分项查询,方便模型精准调用;
  2. 返回人类可读文本:模型直接转述给用户,比裸 JSON 更自然;
  3. 注明采样耗时:实时指标有延迟,要在描述里说清楚;
  4. 平台差异做降级:GPU 读不到利用率时仍返回显卡名称,不直接崩溃;
  5. stdio 干净log_level="ERROR",不要用 print 污染协议通道。

小结

要点 一句话
MCP 是什么 AI 客户端与外部能力程序之间的统一对话协议
谁调用谁 Host 管模型和 Server;模型 决策,Host 执行
模型怎么选对工具 靠工具描述 + JSON Schema + 用户问题,在支持 tool calling 的 API 里完成
怎么落地 Cherry Studio 配置 mcp-sys-monitor,对话里问「电脑性能怎么样」即可

掌握 Host / Server / Tool「发现 → 决策 → 执行 → 总结」 四步,再做一个 Cherry Studio 本身做不到、但 MCP 很擅长 的扩展(如本机性能监控),你就能真正理解 MCP 的价值。

相关文章
|
7天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
3452 15
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
15天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
3557 12
|
9天前
|
人工智能 自然语言处理 供应链
|
18天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
3672 25
|
11天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
2912 7
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
9天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全+三种模式+记忆体系+实战工作流完整手册
Claude Code 是当前最流行的终端级 AI 编程助手,能够直接在命令行中完成代码生成、项目理解、文件修改、命令执行、错误修复等全流程开发工作。它不依赖图形界面、不占用额外资源,却能深度理解项目结构,自动生成规范代码,大幅提升研发效率。
1402 3
|
1月前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23621 15
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
16天前
|
存储 Linux iOS开发
【2026最新】MarkText中文版Markdown编辑器使用图解(附安装包)
MarkText是一款免费开源、跨平台的Markdown编辑器,主打所见即所得实时预览,支持Windows/macOS/Linux。内置数学公式、流程图、代码高亮、多主题及PDF/HTML导出,是Typora的轻量免费替代首选。(239字)

热门文章

最新文章