跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

Python 开发 MCP Server 实战:协议集成与部署指南

综述由AI生成基于 Python 实战演示了 Model Context Protocol (MCP) 服务器的开发与集成。内容涵盖两种主流实现路径:一是使用官方 FastMCP 库构建轻量级服务,二是结合 FastAPI 框架将现有业务接口无缝转换为 MCP 服务。文章详细解析了代码逻辑、传输方式选择(stdio/SSE)以及如何在实际业务场景中封装数据库查询与文件访问功能。此外,还介绍了利用 Docker 部署 MCP Hub 及 1Panel 插件的管理方案,帮助开发者将本地能力安全接入大模型生态。

内存管理发布于 2025/11/21更新于 2026/6/1016 浏览
Python 开发 MCP Server 实战:协议集成与部署指南

Python 开发 MCP Server 实战:协议集成与部署指南

MCP(Model Context Protocol)协议相当于给大模型装上了工具链的翅膀,让它不仅拥有推理和文本生成能力,还能执行具体的任务。本文将通过实战案例,演示如何使用 Python 快速构建一个 MCP 服务器。

一、基础环境搭建

首先安装官方推荐的 SDK:

pip install mcp

1. 使用 FastMCP 快速入门

这是一个最轻量级的实现方式,适合理解 MCP 的基本工作原理。

from mcp.server.fastmcp import FastMCP
import requests

# 创建服务器实例,名称用于标识
mcp = FastMCP("spider")

# 注册工具函数
@mcp.tool()
def crawl(url: str) -> str:
    """获取网页的源代码"""
    try:
        response = requests.get(url)
        return response.text
    except Exception as e:
        return f"Error: {str(e)}"

if __name__ == "__main__":
    # transport='stdio' 表示通过标准输入输出通信,适合本地调试
    mcp.run(transport='stdio') 
    # 如需远程通信,可改为 transport="sse"

代码解析: 这里我们导入了 FastMCP 类并实例化了一个名为 spider 的服务器。@mcp.tool() 装饰器将 crawl 函数注册为外部客户端可调用的工具。文档字符串是客户端展示的工具描述。最后通过 mcp.run 启动服务,stdio 模式意味着它监听命令行输入输出,非常适合本地开发和测试。

2. 结合 FastAPI 进行深度集成

如果你已经在使用 FastAPI 构建业务接口,可以直接通过 fastapi-mcp 库将其暴露为 MCP 服务,无需重复编写逻辑。

pip install fastapi-mcp uvicorn
import requests
from fastapi import FastAPI, Query
from fastapi_mcp import add_mcp_server

app = FastAPI(
    title="Spider API",
    description="A simple example API with integrated MCP server",
    version="0.1.0",
)

@app.get("/items/{url}")
def crawl(url: str = Query(..., description="get websource from url")) -> dict:
    """获取网页的源代码"""
    response = requests.get(url)
    return {"response": response.text}

# 将 FastAPI 应用挂载为 MCP 服务
mcp_server = add_mcp_server(
    app,
    mount_path="/mcp",
    name="Item API MCP",
    description="MCP server for the Item API",
    base_url="http://localhost:8000",
    describe_all_responses=False,
    describe_full_response_schema=False,
)

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

这种方式非常灵活,可以将现有的 RESTful 接口无缝转换为 MCP 服务。配置中 mount_path 指定了 MCP 路由地址,base_url 则是服务的实际访问地址。

二、业务场景实战:数据查询服务

在实际企业应用中,我们往往需要将内部数据库或特定业务逻辑封装成 MCP 工具。下面是一个集成示例,展示了如何将复杂的业务查询(如化合物属性计算、图片获取等)封装进 MCP 服务。

注意:以下代码片段展示了核心逻辑结构,实际项目中请根据具体业务调整依赖和错误处理。

import sys
from datetime import datetime
import traceback
import uvicorn
from fastapi_mcp import add_mcp_server
from fastapi import FastAPI, status, HTTPException, Response, Query
import motor.motor_asyncio

app = FastAPI()

# ... 中间省略部分数据库连接和业务逻辑定义 ...

# 示例接口:根据 CAS 号获取化合物信息
@app.get("/api/chemicals/{casno}/", status_code=status.HTTP_200_OK, summary="根据 casno 获取单个化合物")
async def chemicals(casno: str):
    """根据 casno 获取化合物"""
    # result = await chemical_get_data(casno=casno) 
    # if result:
    #     return ResponseModel(data=result, message="success")
    # return ErrorResponseModel(error="数据不存在", code=status.HTTP_404_NOT_FOUND)
    pass

# 示例接口:访问结构式图片
@app.get("/image/{filename}/", status_code=status.HTTP_200_OK, summary="访问结构式图片")
async def get_image(filename: str):
    print(filename)
    # image_content = struct_obj.get_struct(filename)
    # if image_content:
    #     return Response(content=image_content, media_type="image/jpeg")
    return None

# 注册 MCP 服务
mcp_server = add_mcp_server(
    app,
    mount_path="/mcp",
    name="Chemical API MCP",
    description="MCP server for Chemical Data",
    base_url="http://192.168.1.250:9999",
)

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=9999)

通过这种方式,企业本地的查询能力就可以被集成到 DeepSeek 等大模型中,让 AI 能够直接调用内部数据。

三、部署与管理:搭建本地 MCP Hub

当有多个 MCP 服务器时,需要一个中央管理节点来统一路由请求。

1. 使用 Docker 部署 Hub

docker run --name=mcphub -p 3001:3000 --restart=always -d registry.cn-hangzhou.aliyuncs.com/samanhappy/mcphub

启动后访问浏览器 http://localhost:3001/ 即可看到管理界面。

2. 其他部署方案

目前 1Panel 也支持 MCP Server 插件,仅支持 stdio 输出协议。Ubuntu 安装脚本如下:

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

更多参考资源可以查看 Awesome MCP Servers 仓库。


通过以上步骤,你可以快速掌握 Python 开发 MCP Server 的核心流程。无论是简单的工具调用还是复杂的企业级数据集成,MCP 协议都能提供标准化的解决方案。

目录

  1. Python 开发 MCP Server 实战:协议集成与部署指南
  2. 一、基础环境搭建
  3. 1. 使用 FastMCP 快速入门
  4. 创建服务器实例,名称用于标识
  5. 注册工具函数
  6. 2. 结合 FastAPI 进行深度集成
  7. 将 FastAPI 应用挂载为 MCP 服务
  8. 二、业务场景实战:数据查询服务
  9. ... 中间省略部分数据库连接和业务逻辑定义 ...
  10. 示例接口:根据 CAS 号获取化合物信息
  11. 示例接口:访问结构式图片
  12. 注册 MCP 服务
  13. 三、部署与管理:搭建本地 MCP Hub
  14. 1. 使用 Docker 部署 Hub
  15. 2. 其他部署方案
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Spatial Joy 2025 全球 AR&AI 赛事参赛指南与赛道解析
  • 腾讯开源 WeKnora(IMA)企业级文档检索框架解析
  • Windows 23H2 Copilot 关闭指南:任务栏隐藏与注册表禁用
  • 鸿蒙金融理财全栈项目:生态合作、用户运营与数据变现优化
  • C++ STL 容器详解:vector 原理与使用
  • 国产复旦微 FMQL45T900 开发平台:ARM+FPGA 协同设计与工业应用
  • Transformer 20 个常见面试问题解析:从基础到高级
  • Lua 语言入门指南
  • C 语言排序算法详解:插入排序与希尔排序
  • SpringBoot 源码解析:应用上下文 AnnotationConfigServletWebServerApplicationContext 构造方法
  • Git 报错“不是内部或外部命令”的解决方案
  • 2025 年 DeepSeek 关于赚钱方法与创业十大黄金赛道建议
  • 大模型前沿论文精选:AIOS、FlashFace、SDXS 等 9 篇
  • 人工智能大模型学习路线:从入门到进阶的完整指南
  • GitHub Copilot Agent Skills 深度解析:构建跨项目 AI 专属工具箱
  • 本地部署 Flux 图像生成模型实战指南
  • 国产开源时序数据库 IoTDB 选型指南与核心功能解析
  • OpenCode 开源 AI CLI 编程工具功能与使用指南
  • VSCode Copilot 认证失败排查与修复实战
  • VS Code 中 GitHub Copilot 安装配置与高阶使用指南

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online