Python 开发 MongoDB 数据库 MCP Server 实战指南
模型上下文协议(MCP)为大模型提供工具链能力。介绍两种 Python 实现方式:基于官方 FastMCP 库的简单服务器,以及结合 FastAPI 的集成方案。通过 FastAPI-MCP 将本地业务接口(如 MongoDB 查询、化合物属性计算)注册为 MCP 服务,使大模型能调用企业数据。此外还演示了如何搭建本地 MCP Hub 统一管理多个服务,助力企业接入 AI 能力。

模型上下文协议(MCP)为大模型提供工具链能力。介绍两种 Python 实现方式:基于官方 FastMCP 库的简单服务器,以及结合 FastAPI 的集成方案。通过 FastAPI-MCP 将本地业务接口(如 MongoDB 查询、化合物属性计算)注册为 MCP 服务,使大模型能调用企业数据。此外还演示了如何搭建本地 MCP Hub 统一管理多个服务,助力企业接入 AI 能力。

目前 MCP(Model Context Protocol)协议是给大模型插上工具链的翅膀,让大模型不仅拥有超高的推理和文本生成能力,还能具备执行大脑意识的工具能力。
MCP 是一种协议,指的是模型上下文协议 (Model Context Protocol)。
安装依赖:
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 的基本用法。
mcp.server.fastmcp 模块中导入了 FastMCP 类。@mcp.tool() 是一个装饰器,它将 crawl 函数注册为一个可供客户端调用的工具。mcp.run(transport='stdio') 启动 MCP 服务器,进入监听状态。transport='stdio' 指定了通信方式为标准输入输出,适合本地开发和测试。安装依赖:
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}", tags=["items"])
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))
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 服务,可以配置 MCP 服务调用的路由为 http://localhost:8000/mcp。最后导入 uvicorn 库,正常启动 FastAPI 的服务;可以无缝地将代码转成 MCP Server。
以上两种实现 MCP 服务的方式,都可以学习下。尤其是如果你本身对 FastAPI 比较熟练,那么可以直接使用 fastapi-mcp 将服务注册为 MCP Server。如果熟悉 Python 但是不熟悉 FastAPI,也可以使用官方推荐的 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
from typing import Optional
app = FastAPI()
# TODO: 在此处初始化 MongoDB 连接
# client = motor.motor_asyncio.AsyncIOMotorClient("mongodb://localhost:27017/")
# db = client["your_database"]
# 定义响应模型占位符
class ResponseModel(BaseModel):
data: dict
message: str
class ErrorResponseModel(BaseModel):
error: str
code: int
message: str
# 根据结构式获取化合物计算属性的值
@app.get("/api/computes/", status_code=status.HTTP_200_OK, summary="根据结构式获取化合物计算属性的值")
async def computed(smiles: Optional[str] = Query(None, description="Search smiles string")):
# result = await chemical_get_data(casno=smiles)
# 模拟返回结果
result = {"code": 200, "data": {"property": }}
result result.get() == :
result[]
ResponseModel(data=result, message=)
ErrorResponseModel(error=result.get(), code=status.HTTP_404_NOT_FOUND, message=result.get())
():
result = {: casno, : }
result:
ResponseModel(data=result, message=)
ErrorResponseModel(error=, code=status.HTTP_404_NOT_FOUND, message=)
():
(filename)
image_content =
image_content:
Response(content=image_content, media_type=)
mcp_server = add_mcp_server(
app,
mount_path=,
name=,
description=,
base_url=,
describe_all_responses=,
describe_full_response_schema=,
)
__name__ == :
uvicorn.run(app, host=, port=)
以上就可以把企业本地查询数据的一般能力集成到大模型中了!让企业赶上 AI 的快车。
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/
目前仅支持 stdio 的输出协议!
Ubuntu 安装:
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online