当前位置: 首页 > news >正文

从零开始:构建你的第一个MCP服务器

摘要

在当今快速发展的网络环境中,网络自动化和智能运维已成为提升效率、降低成本的关键。模型上下文协议(Model Context Protocol, MCP)是一套开放标准,用于在客户端与服务器之间标准化工具调用、资源读取和提示交互,让大语言模型安全、可控地访问外部能力,从而支撑网络自动化的智能化实践。

本文旨在通过一个简单易懂的Python示例,引导您从零开始构建一个基本的MCP服务器。我们将使用 FastMCP 框架,并结合 uv 工具进行环境管理,最终在 CherryStudio 客户端中验证其功能。无论您是网络工程师、开发人员,还是对网络自动化感兴趣的初学者,本文都将为您提供一个快速入门MCP的实践指南。

第一部分:MCP服务器核心概念

什么是MCP(Model Context Protocol,模型上下文协议)?

MCP是Anthropic公司开源的一个通用的、开发的标准,用于打通大模型(人工智能体)与各个数据源的交互,习惯把mcp server叫做usb接口,即插即用的功能。

所以看这张图会更清晰,mcp server可以看作是一个python的脚本(获取或配置数据)。

MCP在网络自动化中的作用

  • 标准化工具接入: 将设备查询、网络资源查询及配置下发等能力封装为MCP工具,便于模型调用。

  • 一致的资源读取: 以URI形式暴露资产清单、拓扑、日志等数据,提升可观察性。

  • 安全与可控: 通过权限与输入校验,让模型在受控边界内执行操作。

  • 可组合工作流: 将多工具、多资源的操作编排为可复用流程,加速自动化。

  • 易于集成: 与MCP客户端(如CherryStudio)和LLM快速对接,缩短落地时间。

为什么选择Python和FastMCP?

  • Python: 作为一种通用编程语言,Python拥有丰富的库生态系统和简洁的语法,非常适合快速开发和原型设计。

  • FastMCP: 是一个基于Python的轻量级MCP框架,它简化了MCP服务器的构建过程,提供了清晰的API来定义工具(Tools)、资源(Resources)和提示(Prompts),使得开发者可以专注于业务逻辑而非底层通信细节。

第二部分:环境准备

在开始构建MCP服务器之前,我们需要准备好Python开发环境并安装必要的库。

1. Python环境安装

建议安装Python 3.9+以上。如果您尚未安装,请访问Python官方网站下载并安装最新版本。

2. uv 工具的安装与使用

uv 是一个现代化的Python包管理器和项目管理工具,它提供了比 pip 和 venv 更快的性能。

安装 uv
pip install uv
创建项目目录

首先,创建一个新的项目目录,例如 mcp-server

# -p 指定python版本
C:\>uv init mcp-server -p 3.13
Initialized project `mcp-server` at `C:\mcp-server`
创建虚拟环境

进入项目目录,并使用 uv 创建虚拟环境:

C:\mcp-server>uv venv

3. fastmcp 库的安装

激活虚拟环境,然后安装 fastmcp 库:

# 激活虚拟环境
C:\mcp-server>.\.venv\Scripts\activate
# 安装fastmcp库
(mcp-server) C:\mcp-server>uv add fastmcp

第三部分:构建你的第一个MCP服务器

现在,我们将在 main.py 文件中编写MCP服务器的核心代码。

1. 基础代码结构解析

一个 FastMCP 服务器通常包含以下几个核心组件:

  • FastMCP 实例: 服务器的入口点。

  • @mcp.tool() 定义可供客户端调用的函数,执行特定操作。

  • @mcp.resource() 定义可供客户端查询或操作的数据资源。

  • @mcp.prompt() 定义用于生成文本或与大型语言模型交互的提示。

2. 示例代码:main.py

在项目根目录下创建 main.py 文件,并写入以下代码:

from fastmcp import FastMCP# 创建一个MCP服务器实例,命名为"Demo"
mcp = FastMCP("Demo")# 添加一个加法工具
@mcp.tool()
def add(a: int, b: int) -> int:"""Add two numbers"""return a + b# 添加一个动态问候资源
# 资源路径支持变量,例如这里的{name}
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:"""Get a personalized greeting"""returnf"Hello, {name}!"# 添加一个Prompt,用于生成问候语
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:"""Generate a greeting prompt"""styles = {"friendly": "Please write a warm, friendly greeting","formal": "Please write a formal, professional greeting","casual": "Please write a casual, relaxed greeting",}returnf"{styles.get(style, styles['friendly'])} for someone named {name}."if __name__ == '__main__':# 运行MCP服务器,使用stdio传输模式mcp.run(transport="stdio")

3. 代码详解

  • mcp = FastMCP("Demo") 初始化一个名为 "Demo" 的MCP服务器实例。

  • @mcp.tool() 装饰器将 add 函数注册为一个MCP工具。客户端可以通过MCP协议调用此函数,并传递参数 a 和 b

  • @mcp.resource("greeting://{name}") 装饰器将 get_greeting 函数注册为一个MCP资源。客户端可以通过访问 greeting://<name> 这样的URI来获取个性化问候语。

  • @mcp.prompt() 装饰器将 greet_user 函数注册为一个MCP提示。这通常用于与大型语言模型(LLM)集成,根据提供的 name 和 style 生成相应的问候语提示。

  • mcp.run(transport="stdio") 启动MCP服务器。transport="stdio" 表示服务器将通过标准输入/输出进行通信,这是一种常见的本地调试和集成方式。

第四部分:集成与测试:CherryStudio配置

CherryStudio 是一个强大的MCP客户端,可以方便地连接和测试您的MCP服务器。

1. CherryStudio简介

CherryStudio提供了一个友好的图形界面,允许您发现、调用MCP服务器上的工具、资源和Prompt,并与大型语言模型进行交互。

2. 配置MCP服务器连接(以stdio模式为例)

步骤一:添加MCP服务器

打开CherryStudio,找到设置-MCP,点击“添加”并选择“快速创建”。

步骤二:配置服务器参数

按照以下配置填写服务器信息:

  • 名称: 自定义一个名称,例如 "MyMCPDemo"

  • 类型: 选择 stdio 模式

  • 参数: 填写以下内容,指定MCP服务器的运行方式和代码路径。请确保 C:\mcp-server 替换为您实际的项目路径。

    --directory
    C:\mcp-server
    run
    main.py
    
步骤三:保存并启用

点击保存并启用。

3. 在CherryStudio中测试MCP服务器

步骤一:选择MCP和大模型

返回到CherryStudio首页,在聊天界面选择您刚刚配置的MCP服务器(map-add-server)和大模型。

步骤二:调用工具进行测试

在聊天输入框中输入 100+100,然后查看效果。CherryStudio将通过MCP服务器调用 add 工具并返回结果。

第五部分:探索不同的传输模式(可选/进阶)

FastMCP 支持多种传输模式,以适应不同的部署和集成场景。除了 stdio,常用的还有 sse (Server-Sent Events) 和 streamable-http

1. SSE模式

SSE模式适用于需要服务器向客户端单向推送事件的场景。

代码修改

在 main.py 中,将 mcp.run() 的 transport 参数修改为 sse

# ...这块代码不变...
if __name__ == '__main__':mcp.run(transport="sse")
CherryStudio配置调整

在CherryStudio的MCP设置中,将类型改为 sse

2. Streamable-HTTP模式

Streamable-HTTP模式通常用于更复杂的HTTP通信场景,支持流式传输。

代码修改

在 main.py 中,将 mcp.run() 的 transport 参数修改为 streamable-http

# ...这块代码不变...
if __name__ == '__main__':mcp.run(transport="streamable-http")
CherryStudio配置调整

在CherryStudio的MCP设置中,将类型改为 streamable-http

3. 不同传输模式的适用场景简析

  • stdio 适用于本地开发、调试和简单的进程间通信。

  • sse 适用于需要服务器向客户端单向推送事件的场景,例如实时日志、状态更新等。

  • streamable-http 适用于需要更灵活的HTTP通信,支持长连接和流式数据传输,常用于构建高性能的API服务。

第六部分:进阶思考与最佳实践

1. MCP服务器的扩展性

  • 添加更多工具: 根据业务需求,定义更多 @mcp.tool() 函数来执行网络配置、数据查询、故障诊断等操作。

  • 定义复杂资源: 使用 @mcp.resource() 定义更复杂的网络设备状态、拓扑信息等资源。

  • 集成更多Prompt: 结合不同的LLM,定义多样化的 @mcp.prompt() 来实现智能问答、配置生成等功能。

2. 错误处理与日志记录

在实际应用中,为您的MCP工具和资源添加健壮的错误处理机制和详细的日志记录至关重要。这有助于快速定位问题并提高系统的稳定性。

3. 安全性考虑

  • 认证与授权: 确保只有经过授权的客户端才能访问您的MCP服务器。

  • 数据加密: 在传输敏感数据时,使用加密协议保护数据安全。

  • 输入验证: 对所有来自客户端的输入进行严格验证,防止注入攻击和其他安全漏洞。

4. 生产部署建议

对于生产环境,您可能需要考虑将MCP服务器部署为独立的微服务,并结合容器化技术(如Docker)和编排工具(如Kubernetes)来管理和扩展。

第七部分:总结与展望

本文带您从零开始,使用Python和FastMCP框架构建了一个简单的MCP服务器,并通过CherryStudio进行了测试。我们探讨了MCP的核心概念、环境准备、代码实现以及不同传输模式的配置。

MCP作为模型上下文协议,为将大语言模型与外部工具、数据源和运维流程连接提供了标准化路径。借助其轻量、清晰的接口,您可以逐步将智能能力融入网络自动化场景,构建更可靠、可扩展的运维体系。

http://www.dtcms.com/a/592498.html

相关文章:

  • 数据结构之二叉树-堆
  • BridgeVLA 对比 pi 0.5 有提升吗
  • 深度学习 :python水下海洋生物识别检测系统 Yolo模型 PyTorch框架 计算机 ✅
  • COM_QueryInterface
  • DeepSeek-OCR全面解析:技术原理、性能优势与实战指南
  • WebKit Insie: WebKit 调试(二)
  • 网站建设需求材料推广网店的途径和方法
  • 排名优化网站沈阳中小企业网站制作
  • 从0到1:兰亭妙微如何用“小程序思维”重构用户体验路径
  • AI重构天猫双11,一场新的效率革命
  • 智慧园区:数字中国的“微缩实验室”如何重构城市未来
  • 新技术如何重构AI营销获客的底层逻辑与竞争格局
  • [论文阅读] AI+ | AI重构工业数字孪生!新一代iDTS破解数据稀缺、智能不足难题,附3大落地案例
  • 京东的一次范围经济尝试,却改变了汽车营销游戏规则
  • 圆柱电池Pack生产线的极性与质量守护:视觉检测系统把好安全关
  • 【大数据技术03】机器学习与算法
  • A模块 系统与网络安全 第四门课 弹性交换网络-6
  • it之家网站源码wordpress门户主体
  • 浏览器访问web服务器经过了哪些过程
  • 时序数据库系列(七):性能监控实战指标收集
  • 【数据库】分布式事务篇
  • 《Windows 11 + Docker:极简DVWA靶场搭建全记录》—— 附详细排错指南与最终解决方案
  • 时序数据库系列(八):InfluxDB配合Grafana可视化
  • M3部署vllm
  • 仿新浪全站网站源码公司简介电子版宣传册模板
  • 在 Lit 应用中实现响应式布局
  • 零基础学AI大模型之向量数据库介绍与技术选型思考
  • 三次更名的背后:百度AI的定位困惑
  • StreamingT2V:从文本生成一致、动态和可扩展的长视频
  • 网站入口百度免费空间最大的网盘