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

Python 开发 MongoDB 数据库 MCP Server 实战指南

MCP(Model Context Protocol)是连接大模型与外部工具的关键协议。本文通过 Python 演示两种 MCP 服务器实现方式:官方 FastMCP 库与 FastAPI 集成方案。内容涵盖基础爬虫工具封装、FastAPI 路由注册以及结合 MongoDB 的本地数据查询实战。同时介绍 MCP Hub 搭建及 1Panel 部署方法,帮助开发者将企业本地能力无缝接入大模型生态。

asphyx_a发布于 2026/3/16更新于 2026/6/1423 浏览
Python 开发 MongoDB 数据库 MCP Server 实战指南

Python 开发 MongoDB 数据库 MCP Server 实战指南

前言

MCP(Model Context Protocol)协议相当于给大模型装上了工具链的翅膀。它不仅让模型拥有强大的推理和文本生成能力,还能赋予其执行具体任务的工具调用能力。

如何开发一个 MCP 服务?

MCP 是一种协议,全称为 Model Context Protocol。官方 SDK 仓库位于:https://github.com/modelcontextprotocol/python-sdk

方案一:使用官方 FastMCP 库

这是最轻量级的实现方式,适合快速验证想法。

pip install mcp
from mcp.server.fastmcp import FastMCP
import requests

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

@mcp.tool()
def crawl(url: str) -> str:
    """获取网页的源代码"""
    response = requests.get(url)
    return response.text

if __name__ == "__main__":
    # stdio 模式适合本地开发和测试
    mcp.run(transport='stdio') 
    # 如需远程通信,可更改为 sse 模式
    # mcp.run(transport="sse") 

代码解析: 这里我们导入了 FastMCP 类并实例化了一个名为 spider 的服务器。核心在于 @mcp.tool() 装饰器,它将 crawl 函数注册为一个可供客户端调用的工具。函数的文档字符串会被客户端(如 MCP Inspector)展示,帮助用户理解功能。

启动时指定 transport='stdio',意味着服务器通过标准输入输出与客户端通信,非常适合本地调试。如果需要对外提供服务,可以切换到 sse(Server-Sent Events)传输方式。

方案二:基于 FastAPI 集成

如果你已经在使用 FastAPI 构建后端,可以直接利用 fastapi-mcp 库将现有服务注册为 MCP 服务,无需重复造轮子。

pip install fastapi-mcp
import requests
from fastapi import FastAPI, HTTPException, Query
from pydantic import BaseModel
from typing import Optional
from fastapi_mcp import add_mcp_server

# 创建 FastAPI 应用
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: Optional[str] = Query(None, description="get websource from url")) -> dict:
    """获取网页的源代码"""
    try:
        response = requests.get(url)
        return {"response": response.text}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

# 将 FastAPI 服务挂载为 MCP 服务
mcp_server = add_mcp_server(
    app, 
    mount_path="/mcp",      # 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)

分析: 这个案例展示了如何将现有的 FastAPI 接口无缝转换为 MCP 服务。配置中 mount_path 决定了客户端访问 MCP 接口的路由。最后通过 uvicorn 启动服务即可。如果你熟悉 FastAPI,这种方式能极大降低接入成本。

实战:编写 MongoDB 数据库查询 MCP 服务

下面是一个结合 FastAPI、Motor(异步 MongoDB 驱动)以及化学数据处理的实际案例。虽然业务逻辑涉及化合物属性计算,但核心架构展示了如何将本地数据查询能力封装进 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()

# ... 省略部分数据库连接及辅助类定义 ...

# 根据结构式获取化合物计算属性的值
@app.get("/api/computes/", status_code=status.HTTP_200_OK, summary="根据结构式获取化合物计算属性的值")
async def computed(smiles: Optional[str] = Query(None, description="Search smiles string")):
    result = ChemRdkit(smiles=smiles).computed
    if result and result.get("code") == 200:
        del result["code"]
        return ResponseModel(data=result, message="success")
    return ErrorResponseModel(error=result.get("error"), code=status.HTTP_404_NOT_FOUND, message=result.get("message"))

# 获取单个化合物
@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, message="数据不存在")

# 访问结构式图片
@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")
    
    # 如果文件不存在,尝试根据 filename 获取 casno 号的基本信息,使用 rdkit 库根据 smiles 生成结构式图片
    obj = await get_smiles(casno=filename.replace("_", "-"))
    if obj:
        ChemRdkit(smiles=obj.get("smiles", "")).struct(filename=obj.get("casno"))
        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="Item API MCP", 
    description="MCP server for the Item API", 
    base_url="http://localhost:9999", 
    describe_all_responses=False, 
    describe_full_response_schema=False, 
)

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

运行结果: 该服务实现了查询 CAS 号基本信息,以及根据 SMILES 生成化合物的属性信息和结构图的能力。

查询结果示例

属性详情

图片生成

结构式

以上演示了如何将企业本地的数据查询能力集成到 DeepSeek 等大模型中,让企业能够紧跟 AI 技术发展的步伐。

搭建自己的本地 MCP Hub

Hub 服务器作为中央管理节点,负责连接并管理多个 MCP 服务器,为客户端提供统一的 API 入口。

Docker 部署

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

浏览器访问:http://localhost:3001/

Hub 界面

1Panel 部署

目前 1Panel 仅支持 stdio 输出协议。

Ubuntu 安装脚本:

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

1Panel 安装

更多资源参考

如果想探索更多现成的 MCP 服务,可以参考以下仓库: https://github.com/punkpeye/awesome-mcp-servers/tree/main

目录

  1. Python 开发 MongoDB 数据库 MCP Server 实战指南
  2. 前言
  3. 如何开发一个 MCP 服务?
  4. 方案一:使用官方 FastMCP 库
  5. 创建服务器实例,名称用于标识
  6. 方案二:基于 FastAPI 集成
  7. 创建 FastAPI 应用
  8. 将 FastAPI 服务挂载为 MCP 服务
  9. 实战:编写 MongoDB 数据库查询 MCP 服务
  10. ... 省略部分数据库连接及辅助类定义 ...
  11. 根据结构式获取化合物计算属性的值
  12. 获取单个化合物
  13. 访问结构式图片
  14. 注册 MCP 服务
  15. 搭建自己的本地 MCP Hub
  16. Docker 部署
  17. 1Panel 部署
  18. 更多资源参考
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 高校毕业论文知网 AIGC 检测标准及降低 AI 率方法
  • 网络安全核心基础知识详解
  • 毕业两年转行软件测试:从物业维修到月薪 9K 的职场逆袭之路
  • Python 常用第三方库整理:数据分析、爬虫与机器学习
  • Ubuntu 24.04 Server 系统安装及配置指南
  • 算法题解析:滑动窗口解决水果成篮问题
  • Whisper 模型微调:中文场景适配实战指南
  • 二分算法实战:查找元素首尾位置与区间查询
  • 基于 AI 智能体的 C 语言与前端实训项目快速开发指南
  • MCP Server 实现 Excel 表格一键生成可视化图表 HTML 报告
  • 国内外主流 AI 大模型盘点与技术趋势分析
  • SpringBoot 整合 Neo4j 图数据库项目实战详解
  • Vivado FPGA 开发流程详解
  • Ubuntu 22.04 安装与配置 Openclaw 教程
  • 从零搭建可落地 AI Agent 的全流程实操指南
  • 利用 AI 快速开发 Microsoft Visual C++ 应用
  • 多模态模型 Transfusion 与 Show-o 解析:Transformer 结合扩散与自回归生成
  • 元学习灵活性探索:从快速学习到 Few-Shot 能力
  • Whisper Turbo:支持 99 种语言的极速语音识别模型
  • 网络安全行业入门指南:主流认证体系与职业发展路径解析

相关免费在线工具

  • 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