MySQL模型上下文协议服务器
该项目实现了 模型上下文协议(MCP) 暴露的服务器 MySQL数据库操作工具。它封装了MySQL连接池 并将传入的MCP请求转换为SQL语句,返回 结构化格式中的结果或错误。
服务器是用纯JavaScript编写的,并使用 @modelcontextprotocol/sdk 实现MCP规范的软件包。代码是这样组织的 它可以从以下任一位置进行开发和调试 Visual Studio Code 或 智能J IDEA。它依赖于环境变量来配置 数据库连接,并公开了一组用于只读查询的工具, 表创建、数据插入、更新、删除和通用SQL 声明。
入门指南
- 使用首选的包管理器安装依赖项。对于
示例,使用 npm:
npm install- 通过环境变量或以下方式配置MySQL连接
创建一个 .env 文件。识别以下变量:
| 变量 | 默认值 | 描述 |
|---|---|---|
MYSQL_HOST | localhost | MySQL服务器的主机名 |
MYSQL_PORT | 3306 | MySQL服务器的端口 |
MYSQL_USER | username | 用于身份验证的用户名 |
MYSQL_PASSWORD | password | 用于身份验证的密码 |
MYSQL_DATABASE | database_name | 查询的默认数据库 |
- 通过运行以下命令启动服务器:
npm start服务器通过以下方式进行通信 标准,这是默认传输方式 对于MCP。当与更大的应用程序集成时,MCP运行时 将自动生成此进程并处理I/O通道。
支持的工具
服务器公开了六个工具,每个工具对应一个不同的类 SQL语句:
| 工具名称 | 描述 |
|---|---|
run_sql_query | 执行只读 SELECT 查询并返回结果集。 |
create_table | 执行a CREATE TABLE 声明。 |
insert_data | 执行一个 INSERT INTO 声明。 |
update_data | 执行一个 UPDATE 声明。 |
delete_data | 执行a DELETE FROM 声明。 |
execute_sql | 执行任何非-SELECT 声明(例如。, ALTER, DROP等等) |
每个工具接受一个参数, query,这是SQL 声明运行。服务器执行基本验证以确保 语句被路由到正确的处理程序并防止 意外误用(例如,呼叫 run_sql_query 带着一个 非-SELECT 声明)。
项目布局
mysql-server-mcp/
├── package.json – project metadata and dependencies
├── .gitignore – ignore common development artifacts
├── README.md – this file
└── src
└── index.js – main entrypoint implementing the MCP server代码有意保持简单和自包含。你可以跑 并通过使用VS Code或IntelliJ直接调试它 Node.js运行配置。服务器使用现代ECMAScript 模块,因此请确保您的编辑器已相应配置。
如何在本地环境中使用此MCP服务器
这个MySQL MCP服务器可以与支持模型上下文协议的各种AI编码助手和工具集成。下面是不同环境的详细说明。
先决条件
在配置任何客户端之前,请确保:
- MySQL服务器正在运行:确保MySQL服务器可访问
# Test connection
mysql -h localhost -u -p
- 已安装依赖项:运行
npm install在项目目录中
- 服务器路径:记下您的完整路径
index.js文件
# Get the full path
pwd # Run this from the project root
# Example: /Users/username/projects/mysql-server-mcpClaude桌面配置
Claude Desktop原生支持MCP服务器。要添加此MySQL服务器:
- 查找或创建配置文件:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json - 视窗: %APPDATA%\Claude\claude_desktop_config.json - Linux: ~/.config/Claude/claude_desktop_config.json
- 添加服务器配置:
{
"mcpServers": {
"mysql-server": {
"command": "node",
"args": [
"/absolute/path/to/mysql-server-mcp/src/index.js"
],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "username",
"MYSQL_PASSWORD": "password",
"MYSQL_DATABASE": "database_name"
}
}
}
}- 重新启动克劳德桌面:关闭并重新打开应用程序
- 验证MySQL工具应该出现在Claude的可用工具列表中
使用GitHub Copilot配置VS代码
VS Code与GitHub Copilot可以通过MCP扩展使用MCP服务器:
- 安装MCP扩展 (如果尚未安装):
- 打开VS代码 - 转到扩展(Cmd+Shift+X或Ctrl+Shift+X) - 搜索“模型上下文协议” - 安装官方MCP扩展
- 配置MCP服务器:
- 选项A:用户设置 (适用于所有工作区)
- 打开命令面板(Cmd+Shift+P或Ctrl+Shift+P) - 键入“首选项:打开用户设置(JSON)” - 添加以下配置:
{
"mcp.servers": {
"mysql-server": {
"command": "node",
"args": [
"/absolute/path/to/mysql-server-mcp/src/index.js"
],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "username",
"MYSQL_PASSWORD": "password",
"MYSQL_DATABASE": "database_name"
}
}
}
}- 选项B:工作区设置 (仅适用于当前工作区)
- 创建或编辑 .vscode/settings.json 在您的项目中 - 添加与上述相同的配置
- 重新加载VS代码:从命令面板运行“开发人员:重新加载窗口”
- 使用GitHub Copilot:
- 打开GitHub Copilot聊天(Cmd+I或Ctrl+I) - MySQL MCP工具将可供AI使用 - 示例提示:“显示数据库中的所有表”
Cline(前身为Claude Dev)的配置
如果你在VS Code中使用Cline扩展:
- 找到临床MCP设置:
- 在macOS上: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json - 在Windows上: %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json - 在Linux上: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
- 添加服务器配置:
{
"mcpServers": {
"mysql-server": {
"command": "node",
"args": [
"/absolute/path/to/mysql-server-mcp/src/index.js"
],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "username",
"MYSQL_PASSWORD": "password",
"MYSQL_DATABASE": "database_name"
}
}
}
}- 重新启动Cline:重新加载VS代码窗口
其他MCP兼容客户端的配置
对于通过stdio传输支持MCP的任何其他工具:
- 基本命令:
node /path/to/mysql-server-mcp/src/index.js- 使用环境变量:
MYSQL_HOST=localhost \
MYSQL_PORT=3306 \
MYSQL_USER=username \
MYSQL_PASSWORD=password \
MYSQL_DATABASE=database_name \
node /path/to/mysql-server-mcp/src/index.js- 使用.env文件 (创建
.env在项目根目录中):
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=username
MYSQL_PASSWORD=password
MYSQL_DATABASE=database_name测试MCP服务器
您可以使用MCP检查器手动测试服务器:
- 安装MCP检查器:
npm install -g @modelcontextprotocol/inspector- 运行检查器:
mcp-inspector node /path/to/mysql-server-mcp/src/index.js- 测试工具:检查器提供web UI来测试所有可用工具
故障排除
服务器无法启动:
- 检查是否安装了Node.js:
node --version(需要v16+版本) - 验证MySQL凭据是否正确
- 检查MySQL服务器是否正在运行且可访问
工具未出现:
- 验证到的绝对路径
index.js是正确的 - 检查配置文件语法(有效的JSON)
- 完全重新启动客户端应用程序
- 检查客户端日志中的连接错误
连接错误:
- 验证MySQL连接字符串和凭据
- 独立测试MySQL连接:
mysql -h localhost -u username -p - 如果使用远程MySQL,请检查防火墙设置
- 确保配置中指定的数据库存在
权限错误:
- 确保MySQL用户具有适当的权限:
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
FLUSH PRIVILEGES;安全考虑
用于生产用途:
- 从不将凭据提交到版本控制
- 使用环境变量或安全密钥管理
- 将MySQL用户权限限制为所需的最小值
- 考虑使用MySQL SSL/TLS连接
- 实施额外的查询验证和清理
- 添加速率限制和查询超时
- 记录所有数据库操作以供审计
促进地方发展:
- 使用专用开发数据库
- 不使用生产凭据
- 考虑对独立的MySQL实例使用Docker
示例使用场景
配置后,您可以自然地与AI助手交互:
查询数据:
- “显示用户表中的所有记录”
- “统计上个月下了多少订单”
- “查找价格高于100美元的所有产品”
创建表格:
- 创建一个名为customers的表,其中包含id、name和email列
- “添加新表以存储产品评论”
修改数据:
- “插入具有姓名和电子邮件的新用户”
- “更新产品ID的价格”
- “删除所有超过2年的订单”
- 等等
架构操作:
- “在users表中添加created_at时间戳列”
- “显示订单表的结构”
- “在电子邮件列上创建索引”
AI助手将自动使用适当的MCP工具来执行这些操作并返回结果。
延伸
如果您希望用附加功能扩展服务器, 考虑添加新的处理程序并将其注册到 src/index.js。您还可以将验证助手修改为 强制执行更严格的模式或与查询解析器集成。
