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 渲染模型返回的最终结果到聊天窗口。

流程图解


相关推荐
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz2 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈2 天前
Unix 与 Linux 异同小叙
linux·服务器·unix
施努卡机器视觉2 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
程序猿阿伟2 天前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome