掘金 人工智能 前天 16:28
03-mcp-server案例分享-手搓一个MCP-server拥有属于自己的MCP
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了如何构建和部署MCP-Server,这是一个基于MCP协议的轻量级服务,旨在连接大型语言模型(LLM)与外部资源。文章从MCP协议的基础知识出发,逐步引导读者使用Python SDK和UV工具,在VSCode中开发、测试MCP-Server,并通过Cherry Studio进行客户端验证。最后,文章还展示了如何将MCP-Server部署到云服务器上,并验证了其在Dify和N8N平台上的SSE调用。通过本文,读者可以轻松搭建自己的MCP-Server,实现LLM与外部数据源和工具的集成。

💡MCP-Server是基于MCP协议构建的轻量级服务,用于实现LLM与外部资源的高效连接,解决AI应用中数据分散、接口不统一的问题。

🛠️文章演示了使用Python SDK和UV工具开发MCP-Server的过程,包括创建项目、添加依赖、编写代码以及在VSCode中进行开发。

💻通过Cherry Studio进行客户端测试,验证了MCP-Server的功能,并介绍了两种传输方式:stdio和sse。

🚀文章详细介绍了将MCP-Server部署到云服务器的步骤,并演示了在Dify和N8N平台上验证SSE服务的过程。

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等多款工具

安装 uv (Windows为例)

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

安装完成后

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

uv python list

mcp-server-demo初始化

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

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

cd F:\work\code\AIcode\mcp-server-demof:uv python install 3.13uv init mcp-server-demo

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

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

MCP 依赖添加

cd mcp-server-demouv add "mcp[cli]"

3.vscode 开发

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

导入上面的项目工程文件

我们打开main.py

def main():    print("Hello from mcp-server-demo!")if __name__ == "__main__":    main()

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

点击运行 看到下面出现

Hello from mcp-server-demo!

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

简单的MCP服务器

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

# server.pyfrom mcp.server.fastmcp import FastMCP# Create an MCP servermcp = 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.

参数内容如下:

--directoryF:\work\code\AIcode\mcp-server-demo\mcp-server-demorun 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

# server.pyfrom mcp.server.fastmcp import FastMCP# Create an MCP servermcp = 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 安装

 curl -LsSf https://astral.sh/uv/install.sh | sh

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

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

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

mkdir mcp-server-democd mkdir mcp-server-demo

修改代码

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

main.py

# server.pyfrom mcp.server.fastmcp import FastMCP# Create an MCP servermcp = 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虚拟环境

uv  venv

依赖环境安装

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

uv pip install .

启动服务

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

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日,全国高考第二天,高考加油,愿所有努力不被辜负,青春梦想就此启航✨。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MCP-Server LLM Python SDK UV SSE
相关文章