5.2 MCP服务器

MCP 服务器介绍

MCP 服务端是什么

  • 角色定位:MCP Server 是跑在本地或远程的"轻量级能力插件",向上为 LLM/Agent 暴露标准化的 资源(Resources)、工具(Tools)、提示(Prompts)三类能力,向下则安全地访问文件、数据库、API 等实际数据源。
  • 架构位置:整个 MCP 采用经典 C/S 架构------Host(Claude Desktop、IDE 等)→ MCP Client(1:1 连接)→ MCP Server → 本地/远程资源。

服务端种类

当下主流的与大模型交互的三要素无非是:工具、资源、提示词,而mcp针对这三类均做了标准化处理。 以下是几个重要的功能:

  • Resouces :定制化地请求和访问本地的资源,可以是文件系统、数据库、当前代码编辑器中的文件等等原本网页端的app 无法访问到的 静态资源。额外的 resources 会丰富发送给大模型的上下文,使得 AI 给我们更加精准的回答。
  • Prompts :定制化一些场景下可供 AI 进行采纳的 prompt,比如如果需要 AI 定制化地返回某些格式化内容时,可以提供自定义的 prompts。
  • Tools :可供 AI 使用的工具,它必须是一个函数,比如预定酒店、打开网页、关闭台灯这些封装好的函数就可以是一个 tool,大模型会通过 function calling 的方式来使用这些 tools。 Tools 将会允许 AI 直接操作我们的电脑,甚至和现实世界发生交互。

UV 工具介绍

MCP开发要求借助uv进行虚拟环境创建和依赖管理。uv 是一个Python 依赖管理工具,类似于 pipconda,但它更快、更高效,并且可以更好地管理 Python 虚拟环境和依赖项。它的核心目标是替代 pipvenvpip-tools,提供更好的性能和更低的管理开销。uv 具体使用可参考文档:https://www.cuiliangblog.cn/detail/section/228701279

MCP 服务器开发

功能说明

以之前开发的天气查询助手为例演示如何进行开发,MCP 基本执行流程如下:

代码编写

复制代码
import json
import os
from typing import Any
import httpx
import dotenv
from mcp.server.fastmcp import FastMCP
from loguru import logger

# 加载环境变量配置
dotenv.load_dotenv()

# 初始化 MCP 服务器,命名为 WeatherServer
mcp = FastMCP("WeatherServer")


@mcp.tool()  # 将函数注册为MCP工具
async def get_weather(city: str) -> dict[str, Any] | None:
    """
    查询指定城市的即时天气信息。

    :param city: 必要参数,字符串类型,表示要查询天气的城市名称。
                 注意:中国城市需使用其英文名称,如 "Beijing" 表示北京。
    :return: 返回 OpenWeather API 的响应结果,URL 为
             https://api.openweathermap.org/data/2.5/weather。
             响应内容为 JSON 格式的字典,包含详细的天气数据;
             如果请求失败则返回 None。
    """
    # 构建请求 URL
    url = "https://api.openweathermap.org/data/2.5/weather"

    # 设置查询参数
    params = {
        "q": city,  # 城市名称
        "appid": os.getenv("OPENWEATHER_API_KEY"),  # 从环境变量中读取 API Key
        "units": "metric",  # 使用摄氏度作为温度单位
        "lang": "zh_cn"  # 返回简体中文的天气描述
    }

    # 发起异步 HTTP GET 请求并处理响应
    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(url, params=params, timeout=30.0)
            response.raise_for_status()
            logger.info(f"查询天气结果:{json.dumps(response.json())}")
            return response.json()
        except Exception as e:
            logger.error(f"查询天气失败:{e}")
            return None


if __name__ == "__main__":
    # 启动 MCP 服务器,使用标准输入输出方式进行通信
    logger.info("启动 MCP 服务器...")
    mcp.run(transport='stdio')

运行服务

在本地启动一个 MCP 服务器,运行刚刚创建的 server.py 文件,并进入一个开发模式,方便:

  1. 热加载代码(修改后不用重启整个客户端)
  2. 在终端里查看服务器和 MCP 客户端之间的通信日志(方便调试)
  3. 模拟 MCP 客户端连接到你的服务器,测试 API / 工具调用是否正常

运行Inspector

npx -y @modelcontextprotocol/inspector uv run server.py Starting MCP inspector...

⚙️ Proxy server listening on localhost:6277

🔑 Session token: c74f080a0d770ea7ae26594304ad9cc160a1a131f54f7b9db3a89f98d25cb672 Use this

token to authenticate requests or set DANGEROUSLY_OMIT_AUTH=true to disable auth

🚀 MCP Inspector is up and running at: http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=c74f080a0d770ea7ae26594304ad9cc160a1a131f54f7b9db3a89f98d25cb672 🌐 Opening browser...

也可以执行

复制代码
# mcp dev server.py

服务启动后会自动打开浏览器工具


使用mcp服务器

为方便测试 mcp 服务器,我们暂时先不开发 mcp 客户端,而是通过第三方客户端工具调用。

安装cherry studio

具体可参考文档:https://docs.cherry-ai.com/advanced-basic/mcp/config

配置 MCP 服务器

新增一个 MCP 服务器,启动参数如下

复制代码
--directory
D:\PycharmProjects\LangChainDemo # 替换为实际项目路径
run
server.py

运行测试

在 mcp 工具中启用天气查询工具

访问测试

原理分析

启用 MCP 后,Cherry Studio 不只是把用户的输入直接交给 Ollama,它会多一个 "模型中转+工具编排" 的流程:

步骤分析

  1. 用户输入

你在 Cherry Studio 输入问题,比如:

  1. Cherry Studio 请求模型(前置 MCP 拦截)
  • Cherry Studio 收到输入后,并不会立刻把它丢给 Ollama,而是先通过 MCP Client 传递给 MCP Server
  • MCP Server 里定义了可用的 Tools、Prompts、Resources(比如"天气查询工具")。
  1. 模型生成调用计划(Tool Call)
  • MCP Server 会先把你的输入传给 Ollama 模型(作为推理引擎)。
  • 模型可能返回一个 工具调用意图 (比如 call weather_tool(city="北京"))。
  • 这一部分符合 MCP 协议里的 Tool Invocation 流程
  1. MCP 调用外部工具
  • MCP Server 检查调用请求:
    • 如果是工具调用 → 执行对应的 Tool(可能是 HTTP API、本地脚本、数据库查询等)。
    • 如果是 Resource 读取 → 拉取外部文件/数据。
    • 如果是 Prompt 模板 → 组合成最终请求。
  • 工具执行完成后,把结果(比如天气 JSON)返回给 MCP Server。
  1. 再次调用模型生成最终回答
  • MCP Server 把工具返回的结果再次传给 Ollama 模型,让它生成最终的自然语言回答:
  1. Cherry Studio 显示对话结果
  • Cherry Studio 渲染模型返回的最终结果到聊天窗口。

流程图解


相关推荐
Thera77716 分钟前
【Linux C++】彻底解决僵尸进程:waitpid(WNOHANG) 与 SA_NOCLDWAIT
linux·服务器·c++
阿梦Anmory21 分钟前
Ubuntu配置代理最详细教程
linux·运维·ubuntu
呉師傅35 分钟前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
heartbeat..38 分钟前
JVM 性能调优流程实战:从开发规范到生产应急排查
java·运维·jvm·性能优化·设计规范
小Tomkk1 小时前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
赌博羊1 小时前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found
linux·运维·gnu
getapi1 小时前
Ubuntu 22.04 服务器的系统架构是否为 amd64 x86_64
linux·服务器·ubuntu
消失的旧时光-19432 小时前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
艾莉丝努力练剑2 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
小天源2 小时前
Cacti在Debian/Ubuntu中安装及其使用
运维·ubuntu·debian·cacti