基于Python的MCP服务器教程 - 部署到Azure
本教程以一个玩笑服务器为例,但这种方法适用于你想搭建的任何MCP服务器。
什么是MCP?
模型上下文协议(MCP)是一种标准,它允许人工智能助手连接到外部工具和数据源。可以将其视为人工智能模型与您自定义功能之间的桥梁。
MCP服务器可以提供:
- 工具 - AI可以调用的功能(例如,获取数据、执行计算、触发操作)
- 资源 - AI可读取的数据(例如,文件、数据库、API)
- 提示 - 为常见任务预设的提示模板
目前,您可以将MCP服务器连接到Microsoft Copilot Studio。未来将会有更多集成功能推出——这只是个开始。
你将要构建的内容
完成本教程后,您将掌握:
- 本地运行的一个工作中的MCP服务器
- 服务器已打包容器化,准备部署
- 服务器运行在Azure容器应用上
- 与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 | shWindows 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:
- 运行你的服务器 在偏远环境中
- 打开 VS Code - 端口面板应自动检测到端口2009
- 端口转发 - 在端口面板中点击“转发端口”
- 公开它 如果你想要一个可分享的URL
- 复制转发的URL (例如。,
https://xyz.devtunnels.ms)
连接到Copilot Studio
- 打开或创建您的代理在 Microsoft Copilot Studio(微软Copilot工作室)
- 首选 工具 → 添加一个工具 → + 新工具
- 选择 模型上下文协议
- 配置:
- 名字像某种清澈的东西 joke-mcp-local-test - 描述要具体明确——这有助于代理了解何时使用您的工具 - 终端点URL您转发的URL + /mcp (例如。, https://xyz.devtunnels.ms/mcp) - 认证:无(目前 - 详见下文说明)
- 点击 创建
- 检查连接 在连接管理器中再次(进行操作)
- 在测试面板中进行测试
认证说明:\ 这个示例跳过了身份验证步骤以保持简洁。对于生产环境, 你绝对应该添加身份验证我会编写这个教程的第二版,加入正确的身份验证实现。在此之前,请不要将未经过身份验证的服务器暴露在互联网上。
常见的本地测试问题
| 问题 | 解决方法 |
|---|---|
| 端口已被使用 | 更改配置中的端口 server.py或者终止正在使用2009的进程 |
| 未找到包 | 请确保您已运行 uv add mcp 带有正确的包名 |
| Windows 防火墙提示 | 允许本地访问,除非你享受网络调试 |
| Copilot Studio 连接被拒绝 | 检查您的端口转发设置,并确保 /mcp 路径已包含 |
______________________________________________________________________
第三部分:使用 Podman 进行容器化
步骤1:创建您的容器文件
你需要三个文件(请查看此仓库以获取示例):
- server.py 翻译成中文是:“服务器.py” 或者更自然地表达为 “服务器端程序(文件名:server.py)”。不过,在技术文档或编程语境中,通常直接保留“server.py”作为文件名,不进行翻译。所以,简洁的翻译可以是“服务器.py”或直接说明其为“服务器端程序的文件名” - 您的MCP服务器代码
- requirements.txt(需求文件) - 你的Python依赖项
- Dockerfile(注:Dockerfile是一个文本文件,其中包含了一系列指令,用于自定义Docker镜像的构建过程。) - 容器构建说明
- 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:latestDocker/Podman 会自动为您的 CPU 拉取合适架构的镜像。
______________________________________________________________________
第5部分:将应用部署到Azure容器应用
步骤1:访问Azure门户
- 导航至 portal.azure.com(直接翻译为中文即“门户.azure.com”,但通常我们保留其英文原样,因为它是特定服务的网址,直接翻译并无实际意义,只是说明其指向的是微软Azure的门户网站)
- 点击 创建资源
- 搜索并选择 容器应用
步骤2:配置容器应用
- 基础:
- 选择您的订阅服务 - 选择或创建一个资源组 - 选择一个区域(靠近您的用户) - 给它起个名字
- 容器:
- 部署源容器镜像 - 图片来源Docker Hub(或您的注册表) - 注册表docker.io - 镜像和标签: roelzz/jokes-mcp_joke-mcp:latest (使用你的路径)
- 入侵(或:入境):
- 启用入口(Ingress) - 将目标端口设置为 2009 - 启用外部流量
- 审查并创建
步骤3:获取您的公开URL
一旦部署:
- 在 Azure 门户中转到您的容器应用
- 找到 应用程序URL 在概述中
- 您的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许可协议,这意味着你可以随意使用它。你可以使用它、修改它、出售它、用它来教学。但如果出了什么问题,可别怪我哦。
______________________________________________________________________
作者
查看我在其他平台上的项目
______________________________________________________________________
资源
______________________________________________________________________
构建时绝不容忍复杂性。如果它不起作用,那很可能比你想象的要简单。
