简介

这是一篇介绍如何从零开始构建 MCP server 的简单说明。本说明由三部分组成:UV 介绍、代码开发和部署。

UV 简介

UV是一个基于 rust 的 Python 软件包和项目管理器。除了 UV 非常快之外,UV 与其他管理器没有什么区别。此外,MCP 使用 UVX(运行 python 包的 UV 工具)来运行服务器。因此,在本说明中,我们将使用 UV 来管理我们的项目。

安装

UV 现在可以使用 PyPi 进行安装:

1
pip install uv

[optional] 更改源代码

由于特殊的网络环境,我们有时需要更改 UV 的源。需要在环境中添加下面的命令。

1
export UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple

此命令将 UV 的源从官方网站暂时改为 TUNA。可以参考文档来彻底对源的使用路径进行彻底修改。

Python 设置

为方便起见,我们使用 UV 设置 python 解释器。

1
uv python install

然后,我们使用下面的命令在一个目录中设置一个 Python 项目。

1
2
3
4
mkdir note # build a new directory for our code
uv init ./note # setup the direcory as our workspace
cd note # get into the workspace
uv venv # starts a new virtual environment

如果成功,UV 会生成一些新文件,如下图所示:

总结

我们已经安装了 UV,设置了解释器,并为我们的项目初始化了一个新的工作区。下一步,我们将完成项目,并实现一个非常简单的 MCP 服务器。

代码开发

在本节中,我们将开始实现一个非常简单的 MCP 服务器。首先,我们将浏览 workspace,安装一些项目以来,执行一些代码来验证 pipeline 是否通畅。

浏览工作区

我们可以在这里看到我们的项目结构。工作区中有一些由 UV 生成的文件。不过不用担心。我们只需注意三个文件:main.py、README.md 和 pyproject.toml。

  • main.py文件是执行代码的地方。
  • 在README.md文件中,你可能想写下一些关于代码的内容。
  • pyproject.toml 是打包时管理项目的文件,稍后会介绍。

安装依赖项

在本项目中,我们主要使用 FastMCP 。有关该 python 软件包的信息,请点击此处。简而言之,FastMCP 是使用 python 实现 MCP 服务器的一个简单但非常有用的工具。这里直接使用 uv 来进行安装。

1
uv pip install fastmcp

执行代码

安装好 FastMCP 后,我们就可以像下面这样执行代码了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from fastmcp import FastMCP  # Import the FastMCP class from the fastmcp module

# Create a FastMCP server instance with the name "note"
server = FastMCP("note")

# Register a tool/endpoint named "hello_world" using the @server.tool() decorator
@server.tool()
def hello_world():
    return "Hello World"  # The function returns "Hello World" when called

def main():
    server.run()

# Standard Python idiom to check if the script is being run directly
if __name__ == "__main__":
    main()  # Start the FastMCP server

如何运行代码

在终端中,我们可以使用 fastmcp 命令运行代码。

1
2
3
# in our project directory
source .venv/bin/activate #activate the virtual environment we built
fastmcp dev main.py # run the code in development code

如果运行顺利,你会在终端中看到一些信息。

这些信息告诉你,mcp inspector 正在 6274 端口运行,你可以通过它提供的 URL 链接访问。MCP inspector 是我们验证服务器是否起来的工具。我们不会花太多时间来介绍。

访问检查器服务器后,你会看到如下界面。点击左侧的连接按钮。

连接建立后,界面会变成这样。

我们首先点击 “工具 “按钮,然后选择 “列表工具”,检查我们所使用的工具。然后运行。

如果工具执行成功,就会看到如下界面的结果。那么你就成功运行了一个 mcp 工具。

调试代码

我个人建议使用 UT、AT 或回归测试等各种测试在本地测试代码。因为这样更方便我们使用。MCP inspector 提供的工具不太好用。

一些建议

  1. 给函数写一些详细的注释,这样 llm 方便理解这个函数是什么「可以用 LLM 来生成」。
  2. 在输入跟输出中添加所期望的类型信息,可以避免一些因为输入类型带来的错误。

软件包部署

在本节中,我们可以部署 mcp 服务器供 LLM 使用。我们需要更新之前提到的 pyproject.toml 以打包我们的代码。

更新可执行信息

在我们的项目中,在 pyproject.toml 中添加以下几行:

1
2
[project.scripts]
note = "main:main"  # Executes the `main()` function in `main.py`

添加依赖项信息

我们还需要为软件包添加依赖项,可以使用以下命令将我们使用的软件包添加到 pyproject.toml 中

1
uv add fastmcp

当然,如果我们有很多软件包需要依赖,这看起来会很不舒服。我们也可以使用其他工具来实现这一点。

部署代码

我们使用以下命令打包代码并运行。

1
2
3
uv build --wheel # packaging your code into wheel
uv install ${PATHTOYOURPACKAGE} # install the packaged code
uvx --python=$(which python) ${PACKAGE} # run the package using specific python interpreter

如果一切顺利,你会在 CLI 中看到以下信息。它会告诉你 MCP 服务器正在运行。