MySQL MCP 服务器
用于 MySQL 数据库与 AI 代理器集成的制作准备的模型背景协议服务器
最后更新 : 2026-10-26 16:39:47 (英语)
TL; DR - 快速设置
直接运行 npx数字 :
npx @berthojoris/mcp-mysql-server mysql://user:pass@localhost:3306/mydb "list,read,utility"
添加到您的 AI 代理配置( N).mcp.json, (中文(简体) ), .cursor/mcp.json等 :
{
"mcpServers": {
"mysql": {
"command": "npx",
"type": "stdio",
"args": [
"-y",
"@berthojoris/mcp-mysql-server",
"mysql://user:pass@localhost:3306/mydb",
"list,read,utility"
]
}
}
}
关于双层和环境可变配置,见 文件.md-配置。通过 HTTP 连接 ChatGPT 等远程客户端,参见 远程访问。 。 。 .
安装
备选案文1:用npx快速启动(建议)
不需要安装 - 直接运行 :
npx @berthojoris/mcp-mysql-server mysql://user:pass@localhost:3306/db "list,read,utility"
备选办法2:全球安装
npm install -g @berthojoris/mcp-mysql-server
mcp-mysql mysql://user:pass@localhost:3306/db "list,read,utility"
带有特殊字符的证书: 如果您的用户名或密码包含在 URL 有特殊含义的字符(
@, (中文(简体) ),:, (中文(简体) ),/, (中文(简体) ),?, (中文(简体) ),#, (中文(简体) ),%, (中文(简体) ),&),在将它们放入连接字符串之前,URL-encode它们. 例如,密码p@ss:w0rd变成p%40ss%3Aw0rd,给出mysql://user:p%40ss%3Aw0rd@host:3306/db。服务器在连接前同时解码用户名和密码.
快速启动
1. 建立环境(备选)
创建 .env 用于本地开发的文件 :
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=yourpassword
DB_NAME=yourdatabase
MCP_CONFIG=list,read,utility
2. 建设项目(如果当地克隆)
npm install
npm run build
3. 配置您的人工智能代理
见 AI 代理配置 下节.
4. 恢复你的人工智能代理
完全重新启动您的 AI 代理应用程序来加载 MCP 服务器 .
5. 测试它!
试着问你的人工智能:
"有什么数据库可用?" "给我看看数据库里的所有表格" "用户表的结构是什么" "给我看用户的头五张唱片"
AI 代理配置
标准 JSON 配置
大多数AI代理都使用类似的JSON配置格式(文件位置因工具而异).
下面的例子使用默认的 stdio 传输,即AI代理启动服务器本身. 远程客户端通过 HTTP 连接; 参见 远程访问。 。 。 .
通用配置模板 :
备选方案1:单层(仅允许)-简单设置
{
"mcpServers": {
"mysql": {
"command": "npx",
"type": "stdio",
"args": [
"-y",
"@berthojoris/mcp-mysql-server",
"mysql://user:password@localhost:3306/database",
"list,read,utility,create,update,ddl"
]
}
}
}
备选案文2:双层(排放+类别) -- -- 建议进行精细控制
{
"mcpServers": {
"mysql": {
"command": "npx",
"type": "stdio",
"args": [
"-y",
"@berthojoris/mcp-mysql-server",
"mysql://user:password@localhost:3306/database_name_here",
"list,read,utility,create,update,ddl,transaction",
"database_discovery,crud_operations,custom_queries,schema_management,index_management,constraint_management,table_maintenance,query_optimization,analysis,seed_operations"
]
}
}
}
QQ 提示 : 双层方法提供颗粒控制. 第4个参数(permissions)控制了广泛的访问级别,而第5个参数(类别)则对哪些特定工具可用进行微调.
环境变量配置
使用环境变量而不是连接字符串的替代方法 :
备选案文1:只允许(简单)
{
"mcpServers": {
"mysql": {
"command": "npx",
"type": "stdio",
"args": ["-y", "@berthojoris/mcp-mysql-server"],
"env": {
"DB_HOST": "localhost",
"DB_PORT": "3306",
"DB_USER": "root",
"DB_PASSWORD": "your_password",
"DB_NAME": "your_database",
"MCP_PERMISSIONS": "list,read,utility,create,update,delete"
}
}
}
}
备选案文2:许可+类别(建议)
{
"mcpServers": {
"mysql": {
"command": "npx",
"type": "stdio",
"args": ["-y", "@berthojoris/mcp-mysql-server"],
"env": {
"DB_HOST": "localhost",
"DB_PORT": "3306",
"DB_USER": "root",
"DB_PASSWORD": "your_password",
"DB_NAME": "your_database",
"MCP_PERMISSIONS": "list,read,utility,create,update,delete",
"MCP_CATEGORIES": "database_discovery,custom_queries,analysis"
}
}
}
}
更多配置细节在其中 文件.md-配置。 。 。 .
光标兼容性桥
如果光标 MCP 包可以调用工具但不能发送 arguments,使用无参数 cursor_execute_request 桥。 创建 .cursor/mysql-mcp-request.json 在工作区,然后呼叫 cursor_execute_request数字 :
{
"tool": "execute_ddl",
"arguments": {
"query": "DROP TABLE IF EXISTS spark_processes;"
}
}
对于直接的SQL,桥可以推断出正确的SQL工具:
{
"query": "DROP TABLE IF EXISTS spark_processes;",
"mode": "auto"
}
设定 MYSQL_MCP_CURSOR_REQUEST_FILE 以覆盖请求文件路径.
AI 代理工具发现
对于Codex, Claude Code CLI, Cursor, Droid CLI, 以及其他MCP代理, 呼叫 list_all_tools 先说 它返回实时运行时目录、启用/失效状态、活动权限/类别配置以及用于计划探索、安全SELECT查询、CSV导出、交易和数据变化的建议工作流程.
使用 export_table_to_csv 基于表格的导出和 export_query_to_csv 用于 SELECT 查询导出.
远程访问( ChatGPT 和其他远程 MCP 客户端)
stdio 保持默认值 。 对于ChatGPT连接器/开发者模式等远程客户端,您可以启用此功能 可流取的 HTTP 带有旗帜或环境变量的运输,与设置权限的方式相同。 删除旗帜, 或设置 MCP_TRANSPORT=stdio再关掉一次.
# Read-only MySQL account + bearer token, bound to localhost
export MCP_HTTP_AUTH=token
export MCP_HTTP_AUTH_TOKENS=$(openssl rand -hex 32) # give this token to your clients
npx -y @berthojoris/mcp-mysql-server mysql://mcp_reader:pass@localhost:3306/app "list,read,utility" --transport=http --port=3000
- 终点数字 :
http://127.0.0.1:3000/mcp附加时GET /health在 HTTPS 上以反向代理或隧道发布,并设定MCP_HTTP_PUBLIC_URL。 。 。 . - 认证数字 :
MCP_HTTP_AUTH=token(承接者指使)或oauth(OAuth 2.1 JWT针对您的授权服务器进行验证,根据ChatGPT的需要,使用RFC 9728元数据).none只能做回转. - 隔离数字 :
Host编号 :Origin检查(DNS-有约束力保护)。 每次交易都取决于其身份,每次交易都取决于其身份。 一个会话的开放式交易在关闭或到期时会回滚. - 启动检查: 无效或不安全的 HTTP 设置以出错停止服务器 .
MCP_HTTP_*设置在 stdio 上被忽略 . - 工具说明: 每个工具报告
readOnlyHint财务报告和审定财务报表destructiveHint。 。 。 .
保护默认
保护是 在 HTTP 模式下默认关闭, 在 stdio 上默认关闭,所以现有的stdio设置 行为如前。 每一种值都可以被两种运输方式上的环境变量所压倒.
| 变量 | stdio 默认 | HTTP 默认 | 它会做什么 |
|---|---|---|---|
MCP_QUERY_TIMEOUT_MS | 0 (关闭) | 30000 | 取消 MySQL 服务器上更长的语句 KILL QUERY。在交易卷回交易时,有超时声明 |
MCP_RATE_LIMIT_PER_MINUTE | 0 (关闭) | 60 | 每名客户每分钟打一个电话 客户端是认证身份, 或者当不存在时是IP |
MCP_MAX_RESULT_BYTES | 0 (关闭) | 524288 | 最大结果大小 。 行数组被切换以适应; 其他超大小的结果返回一个错误 |
MCP_AUDIT_LOG | off | stderr | off, (中文(简体) ), stderr,或文件路径。 每个工具调用, 认证失败, 和会话打开/ 关闭 。 SQL 文本被记录; 其他参数值不是 |
MCP_REQUIRE_READONLY_DB_USER | false | false | true 如果 MySQL 用户可以写入, 则启动失败 。 在 HTTP 模式中, 警告总是被记录 |
HTTP 设置
| 变量/ 旗帜 | 默认 | 它会做什么 |
|---|---|---|
MCP_TRANSPORT 编号 : --transport=stdio|http, (中文(简体) ), --http | stdio | 打开或关闭 HTTP 传输 |
MCP_HTTP_HOST 编号 : --host= | 127.0.0.1 | 绑定地址 |
MCP_HTTP_PORT 编号 : --port= | 3000 | 端口 |
MCP_HTTP_PATH | /mcp | 终点路径 |
MCP_HTTP_PUBLIC_URL | – 说吧 – | 公共HTTPS基础 URL. 所需经费 oauth |
MCP_HTTP_AUTH | none | none (只回转), token,或 oauth |
MCP_HTTP_AUTH_TOKENS | – 说吧 – | 逗号分隔的无记名符号,每个至少32个字符 |
MCP_OAUTH_ISSUER 编号 : MCP_OAUTH_AUDIENCE 编号 : MCP_OAUTH_JWKS_URI 编号 : MCP_OAUTH_REQUIRED_SCOPES | -/资源 URL/已发现 /- | OAuth 2.1 符号验证 |
MCP_HTTP_ALLOWED_HOSTS | 绑定回回转时回转名称 | Host 许可列表 。 关闭(警告),当它被绑在非移动地址上,而这个地址和 MCP_HTTP_PUBLIC_URL 设定 |
MCP_HTTP_ALLOWED_ORIGINS | 绑定回放时回放源头 | 浏览器 Origin 许可列表 。 请求无 Origin 总是允许 |
MCP_HTTP_TRUST_PROXY | false | 将客户端IP从 X-Forwarded-For |
MCP_HTTP_ALLOW_UNAUTHENTICATED | false | 允许 none 外部回转( 不推荐) |
MCP_HTTP_MAX_SESSIONS | 100 | 最多同时举行的会议0 = 无限制) |
MCP_HTTP_SESSION_IDLE_TIMEOUT_MS | 1800000 | 之后会场关闭,其交易回滚(0 =从来没有) |
MCP_HTTP_MAX_BODY_BYTES | 1048576 | 最大请求体积( E)0 = 无限制) |
在 HTTP 模式中, 服务器作为独立服务运行, 因此将设置放入 .env (或您的流程管理器) 而不是 MCP 客户端的 command 配置 :
DB_HOST=localhost
DB_USER=mcp_reader
DB_PASSWORD=pass
DB_NAME=app
MCP_PERMISSIONS=list,read,utility
MCP_TRANSPORT=http
MCP_HTTP_PORT=3000
MCP_HTTP_AUTH=token
MCP_HTTP_AUTH_TOKENS=<64-hex-token>
MCP_QUERY_TIMEOUT_MS=15000
MCP_AUDIT_LOG=logs/mcp-audit.log
从持有的目录 .env开头 node dist/mcp-server.js (从克隆人)或 npx 命令上方 (连接字符串参数覆盖 DB_* 页:1 然后指点在URL支持远程MCP服务器的客户端. 例如,在克洛德代码中 .mcp.json数字 :
{
"mcpServers": {
"mysql-remote": {
"type": "http",
"url": "http://127.0.0.1:3000/mcp",
"headers": { "Authorization": "Bearer <64-hex-token>" }
}
}
}
完整细节( OAuth 设置、 会话、 只读用户 SQL) 包含在 文件.md-远程访问。 。 。 .
权限系统
控制数据库访问 a 双层过滤系统 提供广泛和精细控制:
- 第1层(许可): 使用遗留类别进行广泛的操作控制
- 第2层( 类别): 使用文档类别进行可选精细化工具级过滤
过滤逻辑数字 : Tool enabled = (Has Permission) AND (Has Category OR No categories specified)
权限
| 权限 | 业务 | 使用大小写 |
|---|---|---|
list | 列表数据库、表格、计划 | 数据库勘探 |
read | SELECT 查询, 读取数据 | 分析、报告 |
create | INSERT 新记录 | 数据条目 |
update | 更新现有记录 | 数据维护 |
delete | DELETE 记录 | 数据清理 |
execute | 执行自定义 INSERT/UPDate SQL( DELETE 要求) delete 也允许) | 复杂的写入操作 |
ddl | CREATE/ALTER/DROP表格;优化、修理和冲出表格 | 司马管理 |
procedure | 存储程序(CREATE/DROP/EXECUTE) | 程序管理 |
transaction | 开始,承诺,罗巴克 | ACID业务 |
utility | 连接测试、诊断 | 解决问题 |
V1.46.0中的安全变化(升级前的审查):
optimize_table, (中文(简体) ),repair_table, (中文(简体) ),flush_table,以及optimize_fulltext现在需要ddl改为utility,因此只读默认不再包括它们.flush_table仅限于连接的数据库,不再接受with_read_lock。 。 。 .run_select_query丢弃无效的优化器提示值,并在提示应用后再次验证查询.- 系统计名被检测出在点周围有白空间(例如.
mysql . user) (中文(简体) ).
V1.44.0 (升级前的审查) 的变化 :
- 默认只读: 没有权限和分类, 现在服务器只启用
list,read,utility(以前每个工具). 为了保持全程通行,通过list,read,create,update,delete,execute,ddl,utility,transaction,procedure。 。 。 . - 无隐含
mysql计划: 在连接字符串中没有数据库或DB_NAME,数据库范围的工具报告“没有指定数据库”而不是使用mysql系统计划. - 默认查询缓存: 选择使用
CACHE_ENABLED=true。任何书面和每笔交易承诺现在都清除缓存. - SQL 验证数字 :
#, (中文(简体) ),;,以及--内字符串值(例如).'#fff')不再被拒绝.WITH(CTE) 查询得到支持,与衍生表格一样,需要execute在读取询问中.
V1.43.4中的安全变化 :
EXPLAIN ANALYZE运行它包裹的语句(MySQL 8.0.18+),所以现在它需要该语句的许可:delete为迪莱特,update或者说execute为更新,read为SELECT。 只计划EXPLAIN还是需要list或者说read。 。 。 .
V1.43.3中的安全变化:
- CSV出口需要两者兼有
utility财务报告和审定财务报表read; 启用utilities类别. - 交易中的SQL需要相应的操作许可.
transaction单凭自己是不允许阅读或写作的. execute_write_query只接受Insert/UpDate/DELET。 DDL需要启用 DDL 工具.- 无法直接或通过光标桥调用已禁用的工具 。 大桥需要
utility和一个启用的目的地工具. execute不绕过强制的 SQL 安全限制,包括文件访问和账户/特权更改.
过滤规则和每个许可的细节记录在 文件.md-许可系统。 。 。 .
文件类别(建议)
使用文档类别来微调哪些工具被曝光(Layer 2):
| 类别列表 | 使用大小写 | 列表工具 |
|---|---|---|
database_discovery | 探索数据库、表格和计划结构 | get_all_tables_relationships, list_databases, list_tables, read_table_schema |
crud_operations | 创建、读取、更新、删除数据操作 | create_record, delete_record, read_records, update_record |
bulk_operations | 高性能分批处理业务 | bulk_delete, bulk_insert, bulk_update |
seed_operations | FK- 认识关系假数据种子 | execute_seed_plan, generate_seed_preview, infer_seed_rules, plan_seed_data, seed_from_template, validate_seed_integrity |
custom_queries | 执行自定义 SQL 查询和高级操作 | execute_write_query, run_select_query |
schema_management | 管理数据库计划、表格和结构 | alter_table, create_table, drop_table, execute_ddl |
utilities | 数据库设施、诊断和辅助功能 | cursor_execute_request, describe_connection, export_query_to_csv, export_table_to_csv, list_all_tools, read_changelog, test_connection |
transaction_management | 处理ACID交易和回滚操作 | begin_transaction, commit_transaction, execute_in_transaction, get_transaction_status, rollback_transaction |
stored_procedures | 创建、执行和管理存储程序 | create_stored_procedure, drop_stored_procedure, execute_stored_procedure, get_stored_procedure_info, list_stored_procedures, show_create_procedure |
views_management | 创建和管理数据库视图 | alter_view, create_view, drop_view, get_view_info, list_views, show_create_view |
triggers_management | 创建和管理数据库触发器 | create_trigger, drop_trigger, get_trigger_info, list_triggers, show_create_trigger |
index_management | 优化索引和全文管理 | analyze_index, create_fulltext_index, create_index, drop_fulltext_index, drop_index, fulltext_search, get_fulltext_info, get_fulltext_stats, get_index_info, list_indexes, optimize_fulltext |
constraint_management | 管理数据完整性限制 | add_check_constraint, add_foreign_key, add_unique_constraint, drop_constraint, drop_foreign_key, list_constraints, list_foreign_keys |
table_maintenance | 表格优化、维修和维护 | analyze_table, check_table, flush_table, get_table_size, get_table_status, optimize_table, repair_table, truncate_table |
query_optimization | 分析和优化 SQL 查询 | analyze_query, get_optimization_hints, repair_query |
analysis | 数据分析、计划发现和报告工具 | find_tables_by_keyword, get_column_statistics, get_database_summary, get_schema_erd, get_schema_rag_context, search_data_across_tables, search_schema |
复制/粘贴列表( comma 分隔, 无空格)
database_discovery,crud_operations,bulk_operations,seed_operations,custom_queries,schema_management,utilities,transaction_management,stored_procedures,views_management,triggers_management,index_management,constraint_management,table_maintenance,query_optimization,analysis
按类别分列的工具说明 文件.md-工具类别。 。 。 .
可用工具
服务器曝光 88个工具 分为类别(CRUD、种子、计划、发现和公用事业).
- 完整的工具列表 : 文件.md-工具类别
- 每个工具都带有MCP说明(
readOnlyHint, (中文(简体) ),destructiveHint, (中文(简体) ),idempotentHint; 见 文件.md-工具说明
详细文档
综合文件见 文件.md数字 :
-
远程访问 - 可流式HTTP运输、无记名/授权认证、会话、保护设置、审计日志
-
DDL 操作 - 创建、修改和删除表格
-
数据导出工具 - 将数据导出为 CSV 格式
-
关系数据搜索器 - 计划、预览、执行、验证、推断规则和FK-意识假数据模板
-
全文搜索 - 创建和搜索具有多种搜索模式的FulLTEXT索引
-
交易管理 - ACID交易
-
存储程序 - 用IN/OUT/INOUT参数创建和执行
-
视图触发( T) - 管理数据库视图和触发器
-
索引约束管理( C) - 优化性能并强化数据完整性
-
表 维护 - 分析、优化、检查和修理表格
-
查询日志 - 参见所有自动执行的 SQL 查询
-
安全特性 - 内部安全和最佳做法
-
散装操作 - 高性能批量处理
-
解决问题 - 共同问题和解决办法
MySQL MCP vs 手动数据库访问
这个 MySQL MCP 是 强大的中间层 在 AI 助手和 MySQL 数据库之间.
关于全部专题报道和使用实例,见 文件.md。 。 。 .
许可证
麻省理工学院执照 - 看 自由主义 详细文件.