从零编写一个MCP Server


1. Mcp python-sdk

链接了解MCP的python-sdk

(1) 安装uv

uv是高效的python环境管理工具

Windows系统为例,在PowerShell中执行 powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" 安装uv
安装完成后,注意在继续运行 $env:Path = "C:\Users\你的用户名\.local\bin;$env:Path" ,将uv添加到环境变量

(2) 创建一个uv管理的项目

① 通过uv查看python版本

通过运行 uv python list 可以查看当前已经安装的python版本,以及uv提供的可通过uv命令直接下载的python版本:

> uv python list
cpython-3.14.0b3-windows-x86_64-none                 <download available>
cpython-3.14.0b3+freethreaded-windows-x86_64-none    <download available>
cpython-3.13.5-windows-x86_64-none                   <download available>
cpython-3.13.5+freethreaded-windows-x86_64-none      <download available>
cpython-3.12.11-windows-x86_64-none                  <download available>
cpython-3.12.1-windows-x86_64-none                   AppData\Local\Programs\Python\Python312\python.exe
cpython-3.11.13-windows-x86_64-none                  <download available>
cpython-3.11.7-windows-x86_64-none                   D:\anaconda\python.exe
cpython-3.11.4-windows-x86_64-none                   AppData\Local\Programs\Python\Python311\python.exe
cpython-3.10.18-windows-x86_64-none                  <download available>
cpython-3.10.0-windows-x86_64-none                   AppData\Local\Programs\Python\Python310\python.exe
cpython-3.9.23-windows-x86_64-none                   <download available>
cpython-3.8.20-windows-x86_64-none                   <download available>
pypy-3.11.11-windows-x86_64-none                     <download available>
pypy-3.10.16-windows-x86_64-none                     <download available>
pypy-3.9.19-windows-x86_64-none                      <download available>
pypy-3.8.16-windows-x86_64-none                      <download available>
graalpy-3.11.0-windows-x86_64-none                   <download available>
graalpy-3.10.0-windows-x86_64-none                   <download available>

如需下载python-3.13.5,运行 uv python install 3.13.5 即可:

> uv python install 3.13.5
Installed Python 3.13.5 in 5.55s
 + cpython-3.13.5-windows-x86_64-none

② 创建项目

新建一个文件夹命名为“MCP_Server”并在PowerShell中切换到该路径,然后依次执行:

  • uv init . -p 3.13.5
  • uv add "mcp[cli]"

分别用于初始化一个uv管理的python项目,以及添加 MCP 到项目依赖

2. 编写MCP Server

以官方提供的一个简单的MCP_Server加法运算示例
在编程IDE中打开MCP_Server文件夹并切换到 main.py ,将其中的内容清除并替换为以下内容:

# 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')

3. 在Cherry Studio中测试

首先下载Cherry Studio

(1)Cherry Studio配置

点击左下角的设置按钮,进入配置界面

① 模型服务配置

左下角设置⚙图标 → 模型服务,配置好API

② MCP服务器配置

左下角设置⚙图标 → MCP服务器 → 右上角⚠ → 安装uv和bun

(2)使用开源的MCP Server

① 搜索:Fetch

使大模型从网页中获取并处理内容

复制:

"fetch": {
     "command": "uvx",
     "args": ["mcp-server-fetch"]
   }

在Cherry Studio → 左下角设置⚙图标 → MCP服务器 → 铅笔icon,点击后进入编辑Json页面,插入上面的内容。
导入开源MCP
确定后,fetch被添加到列表中,点击“启用”按钮,配置成功。

② 地图:Baidu

必须认证才能拿到API,但是有点慢。高德好像也有类似的可以试试

③ 浏览器自动化:mcp-playwright

先在命令行执行下面的命令,下载包:

npm install -g @executeautomation/playwright-mcp-server

复制:

"playwright": {
      "command": "npx",
      "args": ["-y", "@executeautomation/playwright-mcp-server"]
    }

在Cherry Studio → 左下角设置⚙图标 → MCP服务器 → 铅笔icon,点击后进入编辑Json页面,插入上面的内容。
注意:在原先的mcp server后加一个英文逗号,再在后面粘贴新的

④ 搜索:duckduckgo

注意:我自己用的时候没搜索成功过

复制:

"duckduckgo-search": {
       "command": "npx",
       "args": [
         "-y",
         "duckduckgo-mcp-server"
       ]
   }

其他操作同上。

⑤…

原理got了后面就可以随便找然后加了

(3)测试刚才编写的简易MCP Server

先切换至Cherry Studio → 左下角设置⚙图标 → MCP服务器 → 添加服务器
服务器配置
然后直接调用即可。

(4)把编写的MCP Server改为SSE协议

在Server的 main.py 中,更改最后的transport为sse
在Cherry Studio中,更改MCP服务器的类型为sse
运行 main.py 后,直接在Cherry Studio中与模型对话,调用即可

(5)把MCP Server发布到公网

以打包成python包上传到Pypi为例:

  • 新建一个文件夹并在命令行cd到该文件夹
  • 执行 uv init . --package -p 3.13.5uv add "mcp[cli]"
  • 用编程IDE打开文件夹中的 __init__.py 文件
    • 保留其内容,把之前编写好的MCP Server的 main.py 的内容粘贴在原内容上
    • 剪切刚才粘贴进来的 main.py 中最后一行的 mcp.run() 函数,粘贴至 __init__.py 原来的main函数中。
    • 删除 __init__.py 原来的main函数的内容,删除 "if __name__ == "__main__":
    • 注意在 mcp.run() 中,transport一定是stdio
  • 执行 uv build 打包
  • Pypi注册并验证邮箱,然后在"Account Settings"里点击生成恢复码"generate recovery codes",保存第一行恢复码并输入。完成后点击"Add with authentication application"
  • 在手机下载"Microsoft Authenticator",登录后,点击上方+ → 个人账户 → 扫描QR Code,扫描屏幕二维码,把手机上生成的验证码填写到网站
  • 在"Account Settings"里下滑找到 “Add API token”,添加名字和范围,然后生成了API(只出现一次,保存好)
  • 执行 uv publish --token <your api token> ,其中<your api token>为刚才的token
  • 在Pypi的"your projects"中可以找到刚才上传的MCP Server

(6)使用上传到公网的MCP Server

以刚才的Pypi为例:
在Cherry Studio → 左下角设置⚙图标 → MCP服务器 → 添加服务器
命令:uvx
参数:包名【为了避免包名冲突,建议在最开始设置包名时以自己的用户名开头】

开源MCP Server聚合网站

Smithery
Awesome-MCP-Servers


文章作者: Fetyloi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Fetyloi !
  目录