MCP服务器部署工具

一个基于Python的MCP服务器部署指南,涵盖本地测试、容器化及Azure部署,适用于AI助手与外部工具连接。

  • by Roelzz
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Roelzz/RRS_Jokes_MCP

使用说明

基于Python的MCP服务器教程 - 部署到Azure

一份简洁明了的指南,教你如何在Python中构建你的第一个模型上下文协议(MCP)服务器,进行本地测试,使用Podman将其容器化,并部署到Azure容器应用中。没有废话,只有行之有效的步骤。灵感来源于我同事的一个代码库 丹尼尔,但用Python重新构建。 链接。

本教程以一个玩笑服务器为例,但这种方法适用于你想搭建的任何MCP服务器。

什么是MCP?

模型上下文协议(MCP)是一种标准,它允许人工智能助手连接到外部工具和数据源。可以将其视为人工智能模型与您自定义功能之间的桥梁。

MCP服务器可以提供:

  • 工具 - AI可以调用的功能(例如,获取数据、执行计算、触发操作)
  • 资源 - AI可读取的数据(例如,文件、数据库、API)
  • 提示 - 为常见任务预设的提示模板

目前,您可以将MCP服务器连接到Microsoft Copilot Studio。未来将会有更多集成功能推出——这只是个开始。

你将要构建的内容

完成本教程后,您将掌握:

  1. 本地运行的一个工作中的MCP服务器
  2. 服务器已打包容器化,准备部署
  3. 服务器运行在Azure容器应用上
  4. 与Microsoft Copilot Studio集成进行测试

先决条件

你需要:

  • Python 3.11及以上版本 (推荐3.11版本 - 如需具体细节,请查看Dockerfile)
  • UV(紫外线) 包管理器(我们将安装这个)
  • Podman(注:Podman是一个用于容器管理的开源工具,直接音译为“波丹”或保留原英文名“Podman”在中文语境中均可,具体使用哪种表述取决于上下文和读者的熟悉程度。) 用于容器化(Docker 也适用,只需替换命令即可)
  • VS Code(Visual Studio Code,简称VS Code) (可选,但对端口转发很有用)
  • Azure 订阅 用于部署
  • Microsoft Copilot Studio(微软Copilot工作室) 用于测试的访问权限

仓库内容

.
├── server.py              # Your MCP server code
├── requirements.txt       # Python dependencies
├── Dockerfile            # Container definition
├── docker-compose.yml    # Podman/Docker compose configuration
└── README.md            # This file

第一部分:本地构建和运行

步骤1:安装UV

UV 是一个快速的 Python 包管理器。请先安装它。

macOS 或 Linux:

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

Windows PowerShell:

irm https://astral.sh/uv/install.ps1 | iex

验证安装:

uv --version

步骤2:设置您的项目

mkdir joke-mcp
cd joke-mcp

步骤3:使用UV安装Python

列出可用版本:

uv python list

安装 Python 3.11:

uv python install 3.11

步骤4:创建虚拟环境

uv venv .venv --python 3.11

激活它:

macOS 或 Linux:

source .venv/bin/activate

Windows PowerShell:

.venv\Scripts\Activate.ps1

确认它已正常工作:

python --version
which python   # macOS or Linux
where python   # Windows

步骤5:添加您的服务器代码

创建 server.py 与您的MCP服务器实现相关。关键部分是HTTP传输配置:

# At the bottom of your server.py
if __name__ == "__main__":
    import sys
    print("Starting Joke MCP Server with HTTP transport on http://localhost:2009/mcp", file=sys.stderr)
    mcp.run(transport="http", host="0.0.0.0", port=2009, path="/mcp")

步骤6:安装依赖项

uv add mcp

这会产生 uv.lock 并将所有内容安装到您的虚拟环境中。

步骤7:运行服务器

uv run python server.py

你应该能看到关于localhost:2009上HTTP的启动消息。如果你看到的是堆栈跟踪信息,那么服务器出问题了。请检查你的代码。

步骤8:快速合理性检查

打开另一个终端并测试端点:

curl -i http://localhost:2009/mcp

你不会看到一个漂亮的页面。这是一个MCP(可能是指某种特定的网络或系统协议)终端,静默或结构化响应是正常现象。


第二部分:使用 Microsoft Copilot Studio 进行测试

选项A:本地直接测试(快速)

如果你在同一台机器上运行所有内容,只需将Claude、VS-Code或具备MCP功能的代理指向:

http://localhost:2009/mcp

选项B:使用VS Code端口转发进行远程测试(更优)

如果您的服务器运行在远程机器上、开发容器中,或者您想要一个公共URL:

  1. 运行你的服务器 在偏远环境中
  2. 打开 VS Code - 端口面板应自动检测到端口2009
  3. 端口转发 - 在端口面板中点击“转发端口”
  4. 公开它 如果你想要一个可分享的URL
  5. 复制转发的URL (例如。, https://xyz.devtunnels.ms)

连接到Copilot Studio

  1. 打开或创建您的代理在 Microsoft Copilot Studio(微软Copilot工作室)
  2. 首选 工具 → 添加一个工具 → + 新工具
  3. 选择 模型上下文协议
  4. 配置:
    • 名字像某种清澈的东西 joke-mcp-local-test
    • 描述要具体明确——这有助于代理了解何时使用您的工具
    • 终端点URL您转发的URL + /mcp (例如。, https://xyz.devtunnels.ms/mcp)
    • 认证:无(目前 - 详见下文说明)
  5. 点击 创建
  1. 检查连接 在连接管理器中再次(进行操作)
  2. 在测试面板中进行测试

认证说明:
这个示例跳过了身份验证步骤以保持简洁。对于生产环境, 你绝对应该添加身份验证我会编写这个教程的第二版,加入正确的身份验证实现。在此之前,请不要将未经过身份验证的服务器暴露在互联网上。

常见的本地测试问题

问题 解决方法
端口已被使用 更改配置中的端口 server.py或者终止正在使用2009的进程
未找到包 请确保您已运行 uv add mcp 带有正确的包名
Windows 防火墙提示 允许本地访问,除非你享受网络调试
Copilot Studio 连接被拒绝 检查您的端口转发设置,并确保 /mcp 路径已包含

第三部分:使用 Podman 进行容器化

步骤1:创建您的容器文件

你需要三个文件(请查看此仓库以获取示例):

  1. server.py 翻译成中文是:“服务器.py” 或者更自然地表达为 “服务器端程序(文件名:server.py)”。不过,在技术文档或编程语境中,通常直接保留“server.py”作为文件名,不进行翻译。所以,简洁的翻译可以是“服务器.py”或直接说明其为“服务器端程序的文件名” - 您的MCP服务器代码
  2. requirements.txt(需求文件) - 你的Python依赖项
  3. Dockerfile(注:Dockerfile是一个文本文件,其中包含了一系列指令,用于自定义Docker镜像的构建过程。) - 容器构建说明
  4. docker-compose.yml(文件名,通常用于定义Docker容器服务的编排配置) - 组合配置

步骤2:构建容器

导航到您的项目文件夹:

cd joke-mcp

使用 Podman 构建:

podman-compose build

步骤3:本地运行

podman-compose up

服务器应在容器内部启动。测试方法与之前相同。


第四部分:多架构构建并推送到Docker Hub

如果您希望支持Intel/AMD(amd64)和ARM(arm64)两种处理器,那么请构建一个多架构镜像。

步骤1:为每种架构构建镜像

podman build --platform=linux/amd64 -t localhost/jokes-mcp_joke-mcp:amd64 .
podman build --platform=linux/arm64 -t localhost/jokes-mcp_joke-mcp:arm64 .

步骤2:为Docker Hub打标签

替换 roelzz/jokes-mcp_joke-mcp 使用您的 Docker Hub 用户名和仓库名:

podman tag localhost/jokes-mcp_joke-mcp:amd64 docker.io/roelzz/jokes-mcp_joke-mcp:amd64
podman tag localhost/jokes-mcp_joke-mcp:arm64 docker.io/roelzz/jokes-mcp_joke-mcp:arm64

步骤3:登录Docker Hub

podman login docker.io

步骤4:推送每个架构

podman push docker.io/roelzz/jokes-mcp_joke-mcp:amd64
podman push docker.io/roelzz/jokes-mcp_joke-mcp:arm64

第五步:创建清单列表

这个功能将两张图片归为一个标签下:

podman manifest create docker.io/roelzz/jokes-mcp_joke-mcp:latest
podman manifest add docker.io/roelzz/jokes-mcp_joke-mcp:latest docker.io/roelzz/jokes-mcp_joke-mcp:amd64
podman manifest add docker.io/roelzz/jokes-mcp_joke-mcp:latest docker.io/roelzz/jokes-mcp_joke-mcp:arm64

步骤6:推送清单文件

podman manifest push docker.io/roelzz/jokes-mcp_joke-mcp:latest

现在任何人都可以参加:

docker pull roelzz/jokes-mcp_joke-mcp:latest

Docker/Podman 会自动为您的 CPU 拉取合适架构的镜像。


第5部分:将应用部署到Azure容器应用

步骤1:访问Azure门户

  1. 导航至 portal.azure.com(直接翻译为中文即“门户.azure.com”,但通常我们保留其英文原样,因为它是特定服务的网址,直接翻译并无实际意义,只是说明其指向的是微软Azure的门户网站)
  2. 点击 创建资源
  3. 搜索并选择 容器应用

步骤2:配置容器应用

  1. 基础:

    • 选择您的订阅服务
    • 选择或创建一个资源组
    • 选择一个区域(靠近您的用户)
    • 给它起个名字
  2. 容器:

    • 部署源容器镜像
    • 图片来源Docker Hub(或您的注册表)
    • 注册表docker.io
    • 镜像和标签: roelzz/jokes-mcp_joke-mcp:latest (使用你的路径)
  3. 入侵(或:入境):

    • 启用入口(Ingress)
    • 将目标端口设置为 2009
    • 启用外部流量
  4. 审查并创建

步骤3:获取您的公开URL

一旦部署:

  1. 在 Azure 门户中转到您的容器应用
  2. 找到 应用程序URL 在概述中
  3. 您的MCP终端节点是: https://your-app-url.azurecontainerapps.io/mcp

步骤4:更新Copilot Studio

回到Copilot Studio中的MCP工具配置,并将终端节点URL更新为您的新Azure URL(别忘了包含 /mcp (在最后)。

再次测试。如果一切正常,恭喜你——你刚刚将你的第一个MCP服务器部署到了生产环境中。


故障排除

常见问题

服务器无法在本地启动:

  • 检查Python版本是否符合要求
  • 验证所有已安装的依赖项 uv add
  • 查找打字错误 server.py

容器构建失败:

  • 检查 Dockerfile 语法
  • 确保 requirements.txt 文件完整
  • 验证基础镜像是否可访问

Azure 部署问题:

  • 确认镜像已成功推送到注册表
  • 检查入口设置(端口2009,外部启用)
  • 在 Azure 门户中查看容器日志

Copilot Studio 无法连接:

  • 验证终端URL是否包含 /mcp 路径
  • 检查服务器是否确实在运行
  • 首先使用curl测试终端点
  • 对于Azure:确保入口允许外部流量

随着常见问题的出现,将增加更多故障排除技巧。


接下来怎么办?

这是版本1——功能齐全但较为基础。未来改进方向:

  • V2:认证 添加适当的API密钥或OAuth实现
  • 先进的MCP功能 - 更复杂的工具和资源
  • 监测 - 添加日志记录和健康检查
  • CI/CD(持续集成/持续交付) - 自动化构建和部署流水线

未来MCP支持

Microsoft Copilot Studio 目前支持 MCP 服务器,并且未来可能会有更多人工智能平台加入支持。该协议设计为平台无关型,因此,当其他工具采用 MCP 时,您的服务器应该能够与其他工具协同工作。


贡献;助力

尽情发挥吧。克隆这个仓库,修改它,破坏它,修复它,让它变得更好。如果你有改进意见或发现了问题,请随时联系或提交拉取请求。我们的目标是帮助人们轻松构建MCP服务器,无需烦恼。


许可证

这个项目遵循MIT许可协议,这意味着你可以随意使用它。你可以使用它、修改它、出售它、用它来教学。但如果出了什么问题,可别怪我哦。


作者

查看我在其他平台上的项目 GitHub


资源


构建时绝不容忍复杂性。如果它不起作用,那很可能比你想象的要简单。