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

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

基于 Python 开发 Model Context Protocol (MCP) Server 的两种主要方式:使用官方 mcp 库和 fastapi-mcp 库。通过 FastAPI 集成本地查询能力,将企业数据服务接入大模型工具链。同时提供了搭建本地 MCP Hub 的方法,实现多个 MCP 服务器的统一管理。支持 MongoDB 等数据库的集成,帮助开发者快速构建 AI 工具服务。

安卓系统发布于 2026/2/7更新于 2026/9/103.7K 浏览
Python 开发 MongoDB 数据库 MCP Server 实战指南

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

前言

目前 MCP (Model Context Protocol) 协议是给大模型插上工具链的翅膀,让大模型不仅拥有超高的推理和文本生成能力,还能具备执行大脑意识的工具能力。

如何开发一个 MCP Server

MCP 是一种协议,指的是模型上下文协议 (Model Context Protocol)。

官方 SDK:https://github.com/modelcontextprotocol/python-sdk

使用 mcp 库

安装依赖:

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__":
    mcp.run(transport='stdio') 
    # mcp.run(transport="sse")

以上代码实现了 FastMCP 库来创建一个简单的 MCP 服务器,它提供一个基本的工具(工具名:crawl),用于实现源代码的获取。这是一个非常简单的爬虫 MCP 入门示例,适合理解 MCP 服务器的工作原理和 FastMCP 的基本用法。

代码分析
  1. 从 mcp.server.fastmcp 模块中导入了 FastMCP 类。
  2. 创建了一个 FastMCP 类的实例,命名为 spider。
  3. @mcp.tool() 是一个装饰器,将 crawl 函数注册为一个可供客户端调用的工具。
  4. 文档字符串描述了函数的功能,客户端会显示这个描述。
  5. mcp.run(transport='stdio') 启动 MCP 服务器,指定通信方式为标准输入输出,适合本地开发和测试。

使用 fastapi-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

# Create a simple FastAPI app
app = FastAPI(
    title="Spider", 
    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=400, detail=str(e))

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)

上面的案例引入了 fastapi 和 fastapi-mcp 并实例化一个 fastapi 的类;然后使用 fastapi 编写了一个方法用户获取一个 url 站点的源代码;使用 fastapi-mcp 创建一个实例化的 mcp_server,将上面的 fastapi 服务注册为一个 mcp 服务;最后导入 uvicorn 库,正常启动 fastapi 的服务;可以无缝的将代码转成 mcp server!

以上两种实现 MCP 服务的方式,都可以学习下,尤其是如果你本身对 fastapi 比较的熟练,那么可以直接使用 fastapi-mcp 将服务注册为 MCP server!

实战编写 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
from typing import Optional

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"))
    pass

# 获取单个化合物
@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="数据不存在")
    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_server = add_mcp_server(
    app, 
    mount_path="/mcp",
    name="Item API MCP",
    description="MCP server for the Item API",
    base_url="http://192.168.1.250:9999",
    describe_all_responses=False,
    describe_full_response_schema=False,
)

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

结果输出

实现查询 casno 的基本信息,以及根据 smiles 生成化合物的属性信息。

文章配图 文章配图 文章配图 文章配图

以上就可以把企业本地查询数据的一般能力集成到 AI 中了!

搭建自己的本地 MCP Hub

Hub 服务器 (MCP Hub):作为中央管理服务器,连接并管理多个 MCP 服务器。它为客户端提供统一的 API 入口,并将请求路由到相应的 MCP 服务器。

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

浏览器输入:http://localhost:3001/

文章配图

其他 MCP 服务参考

https://github.com/punkpeye/awesome-mcp-servers/tree/main

目录

  1. Python 开发 MongoDB 数据库 MCP Server 实战指南
  2. 前言
  3. 如何开发一个 MCP Server
  4. 使用 mcp 库
  5. 代码分析
  6. 使用 fastapi-mcp 库
  7. Create a simple FastAPI app
  8. 实战编写 MongoDB 数据库查询 MCP 服务
  9. ... 此处为具体的业务逻辑处理代码 ...
  10. 例如定义数据库连接、数据模型等
  11. 根据结构式获取化合物计算属性的值
  12. 获取单个化合物
  13. 访问结构式图片
  14. 搭建自己的本地 MCP Hub
  15. 其他 MCP 服务参考

更多推荐文章

查看全部
  • LLM 常见归一化方法解析:LayerNorm、RMSNorm 与 DeepNorm
  • C++ 红黑树详解与实现
  • 微搭低代码:手机号登录与RBAC路由控制
  • ERNIE-4.5-0.3B 轻量模型部署指南与性能测评
  • C++ 多态详解:概念、语法与底层实现
  • RAGFlow Python API 中文文档
  • 基于 STM32F407 与 K230 的二维云台激光打靶系统设计
  • Python 文件操作深度解析与避坑指南
  • MidJourney 创作 AI 艺术详细教程
  • VSCode Copilot 配置文件提示警告分析与解决
  • Stable Diffusion v2-1-base 模型使用指南与代码实践
  • 清华团队发布 OpenClaw 研究报告:AI 智能体生态闭环解析
  • Python 学习过程中的核心难点与分阶段突破指南
  • Ubuntu 20.04 系统下 QGroundControl 地面站安装教程
  • DockerHub 镜像加速配置指南(Windows、Mac、Linux)
  • 浏览器缓存机制详解与前端代码更新缓存解决方案
  • A* 搜索算法是什么?
  • Neo4j 从入门到实战:K8s 集群部署与 Cypher 查询
  • Java OCR 工具 RapidOCR 集成指南:从环境配置到实战应用
  • 微信开放官方 Bot API:ClawBot 插件与 iLink 协议深度解析

相关免费在线工具

  • 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