Windows 10/11下用Python快速搭建Cursor的MySQL MCP服务(含环境变量安全配置)
如果你是一名在Windows上使用Python进行开发的工程师,并且日常重度依赖Cursor这样的AI编程助手,那么你很可能遇到过这样的场景:正在编写一段业务逻辑,突然需要查询一下数据库里的某个字段定义,或者验证一下刚刚插入的数据。这时候,你不得不切换到另一个终端,连接数据库,执行SQL,然后再切回编辑器。整个过程打断了流畅的编程心流,效率大打折扣。
有没有一种方法,能让数据库查询像调用一个函数那样自然,直接在Cursor的聊天窗口里完成?答案就是MCP。Model Context Protocol,这个听起来有点技术化的名词,本质上是一个让AI助手(如Cursor)能够安全、标准化地调用外部工具和数据的桥梁。通过为MySQL数据库搭建一个MCP服务,你可以用自然语言向Cursor提问,让它直接为你执行查询、查看表结构,甚至进行简单的数据分析。
市面上已经有不少现成的MySQL MCP服务包,但它们大多基于Node.js。对于Python技术栈的开发者来说,这意味着需要额外管理Node环境。更重要的是,很多教程在配置数据库连接时,直接将密码以明文形式写在配置文件里,这无疑是一个巨大的安全隐患。想象一下,如果你不小心把这个配置文件提交到了Git仓库,后果不堪设想。
因此,本文将聚焦于一个更贴合Python开发者习惯、且将安全置于首位的方案:使用纯Python快速构建一个MySQL MCP服务,并彻底告别密码硬编码,采用环境变量进行安全配置。 我们不仅会完成基础的搭建,还会深入探讨在Windows环境下如何优雅地管理服务、处理依赖,以及如何将这个服务无缝集成到你的日常开发工作流中。
1. 环境准备与核心依赖安装
在开始编写代码之前,我们需要确保Windows开发环境已经就绪。与Node.js方案不同,Python方案对系统环境的要求更为简洁,核心是Python解释器和几个关键的库。
首先,确认你的Python版本。MCP相关的库通常要求Python 3.8或更高版本,为了获得最佳兼容性和性能,我推荐使用Python 3.10或3.11。你可以在命令提示符或PowerShell中运行以下命令来检查:
python --version
# 或
python3 --version
如果系统提示未找到命令,你需要前往Python官网下载并安装适合你系统(Windows 10/11)的安装包。在安装时,务必勾选“Add Python to PATH” 选项,这样系统才能识别python命令。
接下来是安装核心的Python包。我们将使用两个库:
mcp:这是实现MCP服务器协议的核心库,提供了构建和运行MCP服务所需的所有工具。pymysql:一个纯Python的MySQL客户端库,用于连接和操作MySQL数据库。你也可以根据喜好选择mysql-connector-python,但pymysql的兼容性通常更好。
打开你的终端(推荐使用Windows Terminal或PowerShell),执行以下pip命令进行安装:
pip install mcp pymysql
注意:如果你在团队项目或虚拟环境中工作,强烈建议先创建一个独立的虚拟环境(
python -m venv venv),然后在激活的环境中进行安装,以避免污染全局的Python包环境。
为了验证安装是否成功,可以尝试导入这两个库:
python -c "import mcp; import pymysql; print('所有依赖已就绪!')"
如果没有任何错误输出,那么基础环境就已经搭建完成了。这个过程相比Node.js方案需要安装npm包和可能的全局工具,要轻量得多。
2. 构建你的第一个Python MySQL MCP服务
有了环境,我们就可以动手编写MCP服务了。我们将创建一个Python脚本,它利用mcp库来暴露工具,并利用pymysql来执行实际的数据库操作。关键在于,数据库的连接信息(如主机、密码)绝对不能写死在代码里。
首先,在你的项目目录下创建一个新文件,例如 mysql_mcp_server.py。我们将采用面向对象的方式组织代码,这样结构更清晰,也便于后续扩展。
# mysql_mcp_server.py
import os
from typing import Any, Dict, List, Optional
import pymysql
from pymysql.err import MySQLError
from mcp.server import Server
from mcp.server.models import InitializationOptions
import mcp.server.stdio
class MySQLMCPServer:
"""一个安全的MySQL MCP服务器实现类"""
def __init__(self):
# 从环境变量读取数据库配置,这是安全配置的核心
self.db_config = {
'host': os.getenv('MYSQL_HOST', 'localhost'), # 默认本地
'port': int(os.getenv('MYSQL_PORT', '3306')), # 默认端口
'user': os.getenv('MYSQL_USER', 'root'), # 强烈建议创建专用用户
'password': os.getenv('MYSQL_PASSWORD', ''), # 密码必须通过环境变量传入
'database': os.getenv('MYSQL_DATABASE', 'test'), # 默认数据库
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor # 返回字典格式的结果,更易读
}
self._validate_config()
def _validate_config(self):
"""验证必要的环境变量是否已设置"""
if not self.db_config['password']:
raise ValueError(
"数据库密码未设置!请通过 MYSQL_PASSWORD 环境变量提供。"
"切勿在代码中硬编码密码。"
)
print(f"配置加载成功,将连接数据库: {self.db_config['database']}@{self.db_config['host']}")
def _get_connection(self):
"""建立并返回一个数据库连接"""
try:
connection = pymysql.connect(**self.db_config)

1万+

被折叠的 条评论
为什么被折叠?



