实战篇:Python开发monogod数据库mcp server看完你就会了

实战篇:Python开发monogod数据库mcp server看完你就会了
原创不易,请关注公众号:【爬虫与大模型开发】,大模型的应用开发之路,整理了大模型在现在的企业级应用的实操及大家需要注意的一些AI开发的知识点!持续输出爬虫与大模型的相关文章。

前言

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

如何开发一个mcp?

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

官方结成的mcp
https://github.com/modelcontextprotocol/python-sdk

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

我们先来做一个简单的案例

from mcp.server.fastmcp import FastMCP import requests mcp = FastMCP("spider") @mcp.tool() def crawl(url: str) -> int:     """获取网页的源代码""" resposne = 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 类。接着,创建了一个 FastMCP 类的实例,命名为 spider。

FastMCP 是服务器的核心类,它负责管理工具、资源和通信。参数「spider」是服务器的名称,用于标识这个 MCP 服务器。

然后,@mcp.tool() 是一个装饰器(decorator),它告诉 FastMCP 将 crawl 函数注册为一个可供客户端调用的工具。

文档字符串(“”“获取网页的源代码”“”):这是函数的描述,客户端(如 MCP Inspector)会显示这个描述,帮助用户理解工具的功能。这个工具可以被外部客户端调用!

例如通过 MCP 协议发送请求,传入url,服务器会返回它的网页源代码。

mcp.run(transport=‘stdio’) 启动 MCP 服务器,进入监听状态,等待客户端的连接和请求。transport=‘stdio’ 指定了通信方式为标准输入输出(Standard I/O)。这意味着服务器通过命令行的标准输入(stdin)和标准输出(stdout)与客户端通信,适合本地开发和测试。

mcp.run(transport=‘stdio’)启动 MCP 服务器,如果需要远程通信,可以更改为其他传输方式(如 ‘sse’,Server-Sent Events)。

fastapi-mcp库
pip install fastapi-mcp from fastapi_mcp import add_mcp_server 

案例分析

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}", response_model=Item, tags=["items"]) def crawl(url: Optional[str] = Query(None, description="get websource from url")) -> dict:     """获取网页的源代码""" resposne = requests.get(url)     return {"response":response.text} mcp_server = add_mcp_server( app, mount_path="/mcp", # 挂着mcp服务器的地址 name="Item API MCP", # 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分析

上面的案例引入了fastapi和fastapi-mcp并实例化一个fastapi的类;

然后使用fastapi编写了一个方法用户获取一个url站点的源代码;

使用fastspi-mcp创建一个实例化的mcp_server,将上面的fastapi服务注册为一个mcp服务,可以配置mcp服务调用的路由为http://localhost:8000/mcp

最后导入uvicorn库,正常启动fastapi的服务;可以无缝的将代码转成mcp server!

以上两种实现MCP服务的方式,都可以学习下,尤其是如果你本身对fastapi比较的熟练,那么可以直接使用fastapi-mcp将服务注册为MCP server!如果熟悉python,但是不熟悉fastapi也可以使用官方推荐的mcp库,节省学习的成本,降低学习难度系数!

实战编写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="数据不存在") # raise HTTPException(400, "Something went wrong") # 访问结构式图片 @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_server = add_mcp_server( app, mount_path="/mcp", # 挂着mcp服务器的地址 name="Item API MCP", # 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生成化合物的属性信息

以上就可以把企业本地查询数据的一般能力集成到deepseek中了!让企业赶的上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/

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 
其他MCP服务参考

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

送书福利

DeepSeek作为开源大模型的典范,融合了Transformer架构、MoE(混合专家)机制及自监督学习等前沿技术,在性能与扩展性上优势显著。为助力技术人员系统掌握DeepSeek的开发原理与应用,笔者撰写了本书,旨在为读者提供从理论到实践的全面指导。

只要关注+点赞+评论 评论区选择2人送书

联系方式

加入星球:
原创不易,点个关注!
不会错过后面的优质文章!
觉着写的不错的可以帮忙点点赞
关注公众号:【爬虫与大模型开发】
需要以上源代码的下面关注并私信!
活跃在一线的Python工程师分享自己学习之路
我创建了【爬虫与大模型开发】的知识星球
适合爱好爬虫及从事爬虫的同学
需要代码提示词加我星球!

需要完整代码扫码星球自提!

Read more

Python中秋月圆夜:手把手实现月相可视化,用代码赏千里共婵娟

Python中秋月圆夜:手把手实现月相可视化,用代码赏千里共婵娟

文章目录 * 📖 引言 * 🎯 项目概述 * 🛠️ 技术架构解析 * 项目结构 * 💡 实现思路 * 月相计算核心 * 可视化难点 * 核心模块设计 * `moon_calculator.py` - 核心计算引擎 * 可视化渲染类 * 📊 四种图表实现详解 * 时间轴图表 - 连续月相展示 * 月相曲线图 - 数学规律可视化 * 当前月相图 * 图像Base64编码 * 🌐 HTML界面生成 * `generate_html.py` - 界面组装器 * CSS3特效设计 * JavaScript交互特效 * 🌟 结语 📖 引言 中秋节,这个承载着千年文化的传统节日,以其独特的满月寓意着团圆与和谐。我们不妨用Python这门优雅的编程语言,来创造一个富有诗意的中秋节月相可视化器。本文将带您通过代码的艺术,重现天空中月亮的盈亏变化,并在中秋节这个特殊的日子里,为我们的程序增添一抹传统文化的色彩。 🎯 项目概述 我们将构建一个功能丰富的月相可视

By Ne0inhk
Python异步编程基石:深入理解asyncio核心原理与实战

Python异步编程基石:深入理解asyncio核心原理与实战

摘要 本文深入剖析Python异步编程核心库asyncio的工作原理,从事件循环、协程、Future到Task的完整技术栈。通过真实性能对比数据、企业级案例和5个架构流程图,全面解析async/await底层机制。涵盖异步编程最佳实践、性能优化技巧和故障排查方案,帮助开发者掌握高并发程序设计精髓,提升I/O密集型应用性能数倍。 1 异步编程:为什么它是Python高性能的关键 在我13年的Python开发经验中,异步编程是性能优化的分水岭。记得曾经处理一个需要调用10个外部API的任务,同步版本需要20多秒,而改用异步后仅需2秒——这种10倍性能提升让我彻底认识到异步编程的价值。 1.1 同步 vs 异步:直观对比 想象你在餐厅点餐的场景: * 同步:点完第一个菜后站着等厨师做完,再点第二个菜,效率极低 * 异步:点完所有菜后找座位等待,厨师并行制作,服务员送餐时通知你 这就是异步编程的核心优势:避免不必要的等待,充分利用等待时间执行其他任务。 import time import asyncio # 同步版本:顺序执行,总耗时=各任务耗时之和 def

By Ne0inhk
Python 小工具实战:图片水印批量添加工具

Python 小工具实战:图片水印批量添加工具

Python 小工具实战:图片水印批量添加工具 Python 小工具实战:图片水印批量添加工具,本文详细介绍了使用 Python开发 给图片加水印的工具,该工具基于 Pillow 和 tkinter 库构建,可解决单图处理耗时、专业软件操作复杂的问题。工具支持单图与批量处理,用户能自定义水印文字、字体大小、透明度及颜色,还可选择 9 个常用水印位置或设置行列重复分布。新增的全屏水印模式可通过调整旋转角度与间距,生成铺满图片的版权保护水印,且界面采用卡片式布局,搭配浅灰背景与蓝色按钮,简洁美观,底部状态栏实时显示操作进度。文中提供完整可运行代码,并给出参数校验、字体兼容、常见报错解决等实用内容,新手按步骤即可上手,或者直接运行使用。 前言     Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是

By Ne0inhk
Python 轻量化环境管理利器 UV 入门与 Windows 下安装实战

Python 轻量化环境管理利器 UV 入门与 Windows 下安装实战

文章目录 * 一、UV是什么?解决什么问题? * 1.1 传统Python环境管理的三大痛点 * 痛点1:多工具碎片化操作,效率低下 * 痛点2:依赖冲突与环境隔离难题 * 痛点3:工具学习成本高,协作壁垒明显 * 1.2 UV如何解决?核心优势解析 * 优势1:一体化设计,命令行极简主义 * 优势2:智能环境管理,冲突预警与自动隔离 * 优势3:轻量化与高性能,适配现代开发节奏 * 优势4:渐进式迁移,兼容现有生态 * 1.3 目标用户与典型场景 * 二、Windows下UV安装实战 * 2.1 前置步骤:安装Visual C++ 2015-2022运行时 * 2.1.1 为什么必须安装? * 2.1.2 安装步骤

By Ne0inhk