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