03-mcp-server案例分享-手搓一个MCP-server拥有属于自己的MCP

0.前言

MCP Server(模型上下文协议服务器)是一种基于模型上下文协议(Model Context Protocol,简称MCP)构建的轻量级服务程序,旨在实现大型语言模型(LLM)与外部资源之间的高效、安全连接。MCP协议由Anthropic公司于2024年11月开源,其核心目标是解决AI应用中数据分散、接口不统一等问题,为开发者提供标准化的接口,使AI模型能够灵活访问本地资源和远程服务,从而提升AI助手的响应质量和工作效率。

前期也给大家介绍过关于MCP-Server案例。mcp-server案例分享-即梦AI文生视频mcp-server案例分享-Excel 表格秒变可视化图表 HTML 报告,就这么简单。之前有小伙伴给我提过,能不能自己制作一个MCP-server并把它发布出去,然后让其他MCP-Client来调用呢?(Cherry Studio、cursor、cline、dify、fastgpt、N8N等支持MCP-Client工具),今天就带大家手搓一个MCP-server发布,并实现MCP-Client工具 调用,话不多下面看一下如果手搓。

1.modelcontextprotocol

The Model Context Protocol (MCP) 是一个开放协议,使大型语言模型应用与外部数据源和工具的无缝集成成为可能。无论是构建基于人工智能的集成开发环境 (IDE),增强聊天界面,还是创建自定义AI工作流,MCP 都提供了一种标准化的方式将大型语言模型与所需上下文连接起来。

github项目地址github.com/modelcontex...

我们选择 python-sdk 开发包

2.python-sdk

我们进入python-sdk 开发包的项目地址:github.com/modelcontex...

uv

我们使用UV 来实现python包的依赖管理。

什么是UV?一个用 Rust 编写的极速 Python 包和项目管理工具,可替代pippoetrypyenv等多款工具

  • 核心优势
    • 速度极快 :比pip快 10-100 倍,依赖解析和安装效率显著提升。
    • 功能集成:整合包管理、环境管理、脚本运行、Python 版本管理等多功能于一体。
    • 轻量高效:全局缓存实现依赖去重,节省磁盘空间;支持 Cargo 风格工作区,适合大型项目。
    • 跨平台兼容:支持 macOS、Linux、Windows 系统,安装无需 Rust 或 Python 环境。

安装 uv (Windows为例)

shell 复制代码
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

安装完成后

使用下面命令列举出我电脑上安装的python 版本

shell 复制代码
uv python list

mcp-server-demo初始化

我们在 F:\work\code\AIcode 文件夹下新建一个 mcp-server-demo的文件件(后面存放代码)

我们在CMD命令行窗口按照下面命令输入命令

vbscript 复制代码
cd F:\work\code\AIcode\mcp-server-demo
f:
uv python install 3.13
uv init mcp-server-demo

这样我们就创建了一个 mcp-server-demo项目工程

接下来将MCP添加到项目依赖中:

MCP 依赖添加

shell 复制代码
cd mcp-server-demo
uv add "mcp[cli]"

3.vscode 开发

我们使用vscode 来开发一个MCP-server,打开桌面的vscode

导入上面的项目工程文件

我们打开main.py

python 复制代码
def main():
    print("Hello from mcp-server-demo!")


if __name__ == "__main__":
    main()

上面是一个最基本python代码,我们运行一下,确保代码是可以运行的。(关于vscode 安装python依赖环境这里就不做详细展开,不会的同志可以搜索一下)

点击运行 看到下面出现

csharp 复制代码
Hello from mcp-server-demo!

说明我们的运行环境是OK的。

简单的MCP服务器

复制下面的代码覆盖上面的main.py

python 复制代码
# server.py
from mcp.server.fastmcp import FastMCP

# Create an MCP server
mcp = FastMCP("Demo")


# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b


# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"

if __name__ == "__main__":
    mcp.run(transport="stdio")

客户端(Cherry Studio)配置

这里我们使用Cherry Studio来做测试

点开这里,我们添加一个服务器,我们选择stdio,命令选择UV.

参数内容如下:

shell 复制代码
--directory
F:\work\code\AIcode\mcp-server-demo\mcp-server-demo
run 
main.py

点击保存按钮完成设置。成功后我们也可以看到下面出现可用工具

客户端(Cherry Studio)测试

我们回到cherry studio 聊天窗口中,MCP服务器中勾选我们刚才的增加的mcp-server-demo

模型这里选择 qwen3-235B-A22B模型

我给出的问题是

55+60 等于多少?

以上我们就实现了一个最简单的MCP-Server

目前MCP-Server 支持三种方式(stdio、sse、streamableHttp)

我们在实际项目中sse 方式也比较多,下面在介绍一下sse 方式。(streamableHttp 和sse方式类似)

简单的MCP服务器-SSE

这里我们修改一下代码transport 换成SSE

python 复制代码
# server.py
from mcp.server.fastmcp import FastMCP

# Create an MCP server
mcp = FastMCP("Demo")


# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b


# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"

if __name__ == "__main__":
    mcp.run(transport="sse")

在vscode程序运行启动一下

程序运行起来 对外提供一个http://127.0.0.1:8000 对外服务。

客户端(Cherry Studio)配置-SSE

我们在上面的Cherry Studio 配置修改一下 换成SSE ,地址填写 http://127.0.0.1:8000/sse

后面的测试和前面一样,这里就不做详细展开了。点击测试 后端服务可以收到MCP-client发送的消息

4.打包发布

打包方式分2种,1种是使用代码打包成stdio方式上传的pypi.org/ 里面提供python依赖包提供下载

这里就需要把把刚才的python打包依赖上传。上传后用户就可以通过UV 命令或者 pip install 下载这个依赖包了。这里我们就不做详细展开,本次是使用第二种方式,就是打包成SSE服务的方式部署在云服务器上方便客户端SSE 使用。

云服务器安装

​ 我有一台基于Ubuntu的云服务器,下面介绍一下在上面部署MCP-Server。

登录云服务器

UV 安装

shell 复制代码
 curl -LsSf https://astral.sh/uv/install.sh | sh

​ 服务器上执行下面命令实现UV安装

​ 安装完成后,我们使用 uv -V 检查确保安装完成

​ 接下来我们创建一个mcp-server-demo文件夹

shell 复制代码
mkdir mcp-server-demo
cd mkdir mcp-server-demo

修改代码

我们把上面的main.py代码修改增加0.0.0.0端口访问,端口我们指定8002

main.py

python 复制代码
# server.py
from mcp.server.fastmcp import FastMCP

# Create an MCP server
mcp = FastMCP("Demo")


# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b


# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"

if __name__ == "__main__":
    mcp.settings.host  = "0.0.0.0"
    mcp.settings.port = 8002
    mcp.run(transport="sse")

把上面的main.py 代码和pyproject.toml 文件复制到服务器对应的mcp-server-demo文件夹

UV虚拟环境创建

接下来我们再服务器创建 UV虚拟环境

shell 复制代码
uv  venv

依赖环境安装

接下来我们在按照python 运行依赖包

shell 复制代码
uv pip install .

启动服务

接下来我们启动 SSE 服务,输入下面命令行启动服务

shell 复制代码
uv run  main.py

这样我们就部署了一个云服务SSE服务了。 我们也可以在浏览器输入地址 http://14.103.204.132:8002/sse

当然上面直接访问对外提供服务一点都不安全,是的没错,这里的确不安全,不过本次主要是讲基础知识不做安全方面的控制和管理。(主要担心增加安全方面知识很多小白就听不懂了。)

5.验证云服务SSE

​ 我们这里使用2种工作流采用SSE方式验证测试一下。

dify

​ 我们使用dify平台配置一个带有SSE 的服务端调用,详细的工作流配置这里就不做详细展开了。

​ 工作流截图如下

验证测试效果

后端服务接受响应

以上我们就完成了手搓的一个最简单的MCP-Server 给dify实现调用

N8N 调用

我们使用N8N平台配置一个带有SSE 的服务端调用,详细的工作流配置这里就不做详细展开了。

​ 工作流截图如下

​ 我们看到在N8N 中也是可以实现这个简单SSE的调用的,服务端同样显示了调用记录

以上我们也就完成了N8N的 MCP-client sse的调用了。

5.总结

今天主要带大家了解并实现了 MCP-Server 的搭建与部署,包括使用 Python SDK 开发包,借助 UV 进行依赖管理,在 VSCode 中开发 MCP 服务器,通过 Cherry Studio 进行客户端测试,以及将其打包部署到云服务器并验证 SSE 服务。借助 MCP-Server,我们可以实现简单的工具和资源调用,如加法工具和动态问候资源。同时,通过不同的传输方式(如 stdio、sse 等),满足不同场景下的使用需求。并且,MCP-Server 可以部署到云服务器上,方便客户端调用,如在 dify 和 N8N 平台中验证的那样。

感兴趣的小伙伴可以按照本文步骤去尝试搭建自己的 MCP-Server,体验其在大型语言模型应用与外部数据源和工具集成方面的强大功能。今天的分享就到这里结束了,我们下一篇文章见。

今天是2025年6月8日,全国高考第二天,高考加油,愿所有努力不被辜负,青春梦想就此启航✨。

相关推荐
技术爬爬虾6 小时前
从零开始编写Mcp Server, 发布上线,超简单全网最细
mcp
SelectDB技术团队8 小时前
Apache Doris + MCP:Agent 时代的实时数据分析底座
人工智能·数据挖掘·数据分析·apache·mcp
CoderJia程序员甲9 小时前
MCP 技术完全指南:微软开源项目助力 AI 开发标准化学习
microsoft·ai·开源·ai教程·mcp
大模型真好玩9 小时前
可视化神器WandB,大模型训练的必备工具!
人工智能·python·mcp
小溪彼岸10 小时前
【MCP】从零开始了解模型上下文协议MCP
mcp
掘我的金1 天前
MCP生产部署实战:从开发到上线的完整指南
llm·mcp
bytebeats1 天前
在本地 LLM 上运行MCP
mcp
bytebeats1 天前
MCP + A2A 可能是自互联网以来软件领域最大的变革
mcp
bytebeats1 天前
强大的代理通信其实是 A2A + MCP + LangChain
langchain·mcp