loading…
Search for a command to run...
loading…
A lightweight, multi-environment MySQL MCP server that provides secure, policy-gated database access through simplified query and execution tools. It enables AI
A lightweight, multi-environment MySQL MCP server that provides secure, policy-gated database access through simplified query and execution tools. It enables AI agents to interact with multiple database environments safely using environment-based routing and strict security constraints.
轻量级多环境 MySQL MCP Server。
A lightweight multi-environment MySQL MCP server.
vmysql-mcp 是一个基于 stdio 的 MySQL MCP Server,目标不是做一个“大而全”的数据库平台,而是提供一个足够轻、足够稳、足够可控的数据库工具入口。
它当前只暴露两个工具:
mysql_query:只读查询工具 / read-only query toolmysql_exec:受策略约束的执行工具 / policy-gated execution tool核心设计原则:
env 路由,而不是为每个环境暴露一套工具。stdio 传输 / uses stdio transportmysql_query、mysql_execdev、stg、prod_romysql_query 支持顶层 WITH ... SELECTmysql_exec 继续拒绝顶层 WITH 语句dist 目录npm run build如果你只是使用这个 MCP 给 Agent 自动拉起,推荐走 npm 包模式,而不是先手动 npm run start。
If you only want an MCP client or agent to auto-start this server, prefer the npm package flow instead of manually running npm run start.
发布到 npm 后,推荐通过下面任一方式使用。
前提条件:
VMYSQL_CONFIG_PATHMYSQL_*_DSN否则,vmysql-mcp 会因为缺少配置文件或连接串而启动失败。
After publishing to npm, this is the recommended path for agent-managed auto-start.
Prerequisites:
VMYSQL_CONFIG_PATH must point to a valid config file, or the current working directory must already contain vmysql.config.jsonMYSQL_*_DSN environment variables must already be availablenpx -y vmysql-mcp
或者全局安装:
npm install -g vmysql-mcp
vmysql-mcp
这类模式最适合 OpenCode、Codex、Claude Code 这类会自动拉起本地 stdio MCP 进程的 Agent。
npm install
npm run build
vmysql-mcp 的运行配置来自一个 JSON 文件,默认读取当前工作目录下的 vmysql.config.json。如果你想指定其他路径,可以通过环境变量 VMYSQL_CONFIG_PATH 覆盖。
vmysql-mcp reads runtime config from a JSON file. By default it uses vmysql.config.json in the current working directory. Override it with VMYSQL_CONFIG_PATH if needed.
示例 vmysql.config.json:
{
"server": {
"name": "vmysql-mcp",
"version": "0.1.0",
"defaultQueryLimit": 200,
"hardMaxRows": 1000,
"defaultTimeoutMs": 10000,
"hardTimeoutMs": 30000,
"maxConnectionsPerEnv": 2,
"logLevel": "info"
},
"environments": {
"dev": {
"dsnEnv": "MYSQL_DEV_DSN",
"defaultDatabase": "app_dev",
"allowedDatabases": ["app_dev"],
"readOnly": false,
"allowWrite": true,
"allowDDL": false,
"maxRows": 500,
"defaultTimeoutMs": 10000
},
"prod_ro": {
"dsnEnv": "MYSQL_PROD_RO_DSN",
"defaultDatabase": "app",
"allowedDatabases": ["app"],
"readOnly": true,
"allowWrite": false,
"allowDDL": false,
"maxRows": 200,
"defaultTimeoutMs": 8000
}
}
}
示例环境变量:
export MYSQL_DEV_DSN='mysql://user:[email protected]:3306/app_dev'
export MYSQL_PROD_RO_DSN='mysql://readonly:[email protected]:3306/app'
注意:
vmysql.config.json。dsnEnv 这样的引用名。@、:、/ 等字符,请先做 URL 编码再拼接 DSN。Do not commit secrets into vmysql.config.json. Store only secret references such as dsnEnv names.
如果你是在本地开发这个项目,或者想手动调试进程启动行为,可以再执行:
If you are developing this project locally or want to debug the server process manually, you can then run:
npm run start
mysql_query执行单条只读 SQL。
Run one read-only SQL statement.
支持范围:
SELECTSHOWDESCRIBEEXPLAINWITH ... SELECT行为约束:
mysql_exec在环境策略允许的前提下执行单条写操作 SQL。
Run one write-capable SQL statement when environment policy allows it.
支持范围:
INSERTUPDATEDELETEREPLACEDDL,前提是环境显式允许行为约束:
WITH 语句 / rejects top-level WITHprod_ro下面分成两类:
如果你是正常接入 Agent,优先用 npm 包方式;只有在本地开发或排障时,才需要用 node dist/index.js 这种源码路径方式。
For normal agent integration, prefer the npm package flow. Use direct node dist/index.js only for local development or debugging.
下面的例子统一假设:
/absolute/path/to/vmysql-mcp/absolute/path/to/vmysql-mcp/dist/cli.js/absolute/path/to/vmysql-mcp/vmysql.config.json请使用绝对路径。相对路径是最容易制造“我这里能跑、别人那里不行”假象的坑。
Use absolute paths. Relative paths are a common source of fake “works on my machine” setups.
OpenCode 使用 opencode.json 或 opencode.jsonc。
推荐配置(npm 包方式)/ recommended package-based example:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"vmysql": {
"type": "local",
"enabled": true,
"command": [
"npx",
"-y",
"vmysql-mcp"
],
"environment": {
"VMYSQL_CONFIG_PATH": "/absolute/path/to/vmysql-mcp/vmysql.config.json",
"MYSQL_DEV_DSN": "mysql://user:[email protected]:3306/app_dev",
"MYSQL_PROD_RO_DSN": "mysql://readonly:[email protected]:3306/app"
},
"timeout": 10000
}
}
}
本地源码调试示例 / local source debugging example:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"vmysql": {
"type": "local",
"enabled": true,
"command": [
"node",
"/absolute/path/to/vmysql-mcp/dist/cli.js"
],
"environment": {
"VMYSQL_CONFIG_PATH": "/absolute/path/to/vmysql-mcp/vmysql.config.json",
"MYSQL_DEV_DSN": "mysql://user:[email protected]:3306/app_dev",
"MYSQL_PROD_RO_DSN": "mysql://readonly:[email protected]:3306/app"
},
"timeout": 10000
}
}
}
建议:
opencode mcp list 验证。Codex CLI 使用 ~/.codex/config.toml。
推荐配置(npm 包方式):
[mcp_servers.vmysql]
command = "npx"
args = ["-y", "vmysql-mcp"]
[mcp_servers.vmysql.env]
VMYSQL_CONFIG_PATH = "/absolute/path/to/vmysql-mcp/vmysql.config.json"
MYSQL_DEV_DSN = "mysql://user:[email protected]:3306/app_dev"
MYSQL_PROD_RO_DSN = "mysql://readonly:[email protected]:3306/app"
本地源码调试示例:
[mcp_servers.vmysql]
command = "node"
args = ["/absolute/path/to/vmysql-mcp/dist/cli.js"]
[mcp_servers.vmysql.env]
VMYSQL_CONFIG_PATH = "/absolute/path/to/vmysql-mcp/vmysql.config.json"
MYSQL_DEV_DSN = "mysql://user:[email protected]:3306/app_dev"
MYSQL_PROD_RO_DSN = "mysql://readonly:[email protected]:3306/app"
如果包已经发布,也可以先用命令注册,再手动补环境变量:
codex mcp add vmysql --command npx --args -y vmysql-mcp
建议:
~/.codex/config.toml 后重启 Codex。Claude Code 支持命令行注册,也支持配置文件方式。
CLI 示例(npm 包方式):
claude mcp add vmysql -- npx -y vmysql-mcp
项目级 .mcp.json 示例(npm 包方式):
{
"mcpServers": {
"vmysql": {
"command": "npx",
"args": [
"-y",
"vmysql-mcp"
],
"env": {
"VMYSQL_CONFIG_PATH": "/absolute/path/to/vmysql-mcp/vmysql.config.json",
"MYSQL_DEV_DSN": "mysql://user:[email protected]:3306/app_dev",
"MYSQL_PROD_RO_DSN": "mysql://readonly:[email protected]:3306/app"
}
}
}
}
本地源码调试 CLI 示例:
claude mcp add vmysql -- node /absolute/path/to/vmysql-mcp/dist/cli.js
本地源码调试 .mcp.json 示例:
{
"mcpServers": {
"vmysql": {
"command": "node",
"args": [
"/absolute/path/to/vmysql-mcp/dist/cli.js"
],
"env": {
"VMYSQL_CONFIG_PATH": "/absolute/path/to/vmysql-mcp/vmysql.config.json",
"MYSQL_DEV_DSN": "mysql://user:[email protected]:3306/app_dev",
"MYSQL_PROD_RO_DSN": "mysql://readonly:[email protected]:3306/app"
}
}
}
}
建议:
.mcp.json 适合项目共享。~/.claude.json 适合个人全局配置。.claude/settings.local.json 适合本地私有配置,不应提交到 Git。prod_roallowDDL = false在 MCP 客户端接入完成后,建议先跑一条最简单的只读查询:
SELECT DATABASE() AS db, 1 AS ok
再跑一条只读 CTE,确认 WITH ... SELECT 支持正常:
WITH cte AS (SELECT DATABASE() AS db, 1 AS ok)
SELECT * FROM cte
如果你还想验证策略边界,可以尝试对只读环境发起写操作,确认它被拒绝。
仓库现在已经带有两类 GitHub Actions:
CI:在 push / pull_request 时执行 npm ci、npm run typecheck、npm run buildPublish:用于 npm 发布前 dry-run 校验,以及 tag 触发的正式发布推荐发布流程:
package.json 和 package-lock.json 中的版本号。main。Publish workflow 的 dry-run 通过。git tag v0.1.1
git push origin v0.1.1
push 这个 tag 后,GitHub Actions 会校验:package.json 一致typecheck、build、packnpm publish --provenance --access public注意:
--access public;当前 workflow 已经包含这个参数。NPM_TOKEN。Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"vmysql-mcp": {
"command": "npx",
"args": []
}
}
}