Token导航 LogoToken导航

MCP Server · 数据服务

Mysql MCP Only Read

一个基于Python的MCP服务器,提供对MySQL数据库的只读访问,支持stdio和HTTP/SSE两种传输方式。

stdio官方级别未说明来源级核验工具 3
数据分析PythonCursorToken认证

快速开始

作者 / 组织
IBeanCN
提供方
IBeanCN
运行时
Python

工具数量

3

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

0

仓库热度

收录来源

1 个

MCP World

选型结论

Mysql MCP Only Read 属于数据服务类 MCP Server,公开资料标注 3 个工具,通过stdio 本地进程接入,适配 Cursor,有可以直接复制的安装命令;接入前要先准备 访问 Token。

分类

数据服务

传输方式

stdio

认证方式

访问 Token

部署方式

公开资料未说明

安装与配置

安装命令

python3 install.py

客户端配置示例

{
  "mcpServers": {
    "mysql-mcp-only-read": {
      "command": "python3",
      "args": [
        "install.py"
      ]
    }
  }
}

按公开安装命令拼出来的示例,字段名和参数以仓库 README 为准;带 YOUR_API_KEY 这类占位符的位置记得换成自己的值。

上手步骤

  1. 1

    准备运行环境

    stdio 服务在本地起进程,需要先装好 Python,再按安装命令拉取依赖。

  2. 2

    安装服务

    复制下面的安装命令执行;命令里带占位符的位置换成自己的密钥或路径。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 3 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

详细介绍

MySQL只读MCP服务器

Python MCP(模型上下文协议)服务器,提供 只读 访问MySQL数据库。

  • 中文文档: README.zh-CN.md
  • 运输: 标准 (建议MCP客户使用)和 HTTP/SSE (独立服务)
  • 安全:仅 SELECT, SHOW, DESCRIBE, DESC,以及 EXPLAIN 允许发表声明
  • 配置: 标准 --MySQL设置通过 mcp.json env; 上海证券交易所 --进程启动时的环境,可选 MCP_BEARER_TOKEN 用于HTTP身份验证
  • 表黑名单: QUERY_TABLE_BLACKLIST 块 数据 通过以下方式访问 query; describe_table 仍然有效 用于列出表上的模式

______________________________________________________________________

需求

  • 安装程序和MCP运行时: python 3.10+. install.py 检查口译员

就是这样 之前 任何其他步骤;如果版本太低,它会立即退出 (使用 python3.12 install.py, py -3.12 install.py等等)。

  • 可选: install.py --python /path/to/python3.12 创造 .venv 说完这个

二进制而不是 sys.executable (该二进制文件也必须为3.10+)。

  • 一个可访问的MySQL实例。

安装

首次安装(推荐)

跑 install.py 带着一个 3.10+ 口译员(python, python3,或 py -3).

脚本创建 .venv 和 python -m venv那么 python -m pip install -r requirements.txt.

成功安装后 交互式向导 (如果stdin是TTY)要求: 运输(标准 或 SSE)、核心MySQL字段, 查询表黑名单 (总是), 可选超时/ QUERY_DEFAULT_LIMIT /TLS路径,以及SSE MCP_HOST / MCP端口 / MCP_ber_TOKEN。它打印一个 完成 mcp.json 片段 (和为 SSE,外壳 export 行加上服务器命令)。使用 --no-wizard 跳过(CI/ 自动化)。非交互式stdin会自动跳过向导。

视窗 (CMD或在资源管理器中双击):

cd \path\to\MySQL_MCP
install.bat

macOS/Linux:

cd /path/to/MySQL_MCP
python3 install.py

有用的标志:

标志含义
--recreate删除 .venv 并重新安装
--dry-run仅显示计划的venv/pip步骤(仍需要3.10+才能运行脚本)
--no-wizard不要运行安装后配置向导
--python EXE创建 .venv 使用3.10+解释器(EXE 在PATH或完整路径上)

如果Windows上缺少Python启动器,请从以下位置安装Python 3.10+ python.org 并启用“添加到PATH”。

手动安装(无脚本)

cd /path/to/MySQL_MCP
python3 -m venv .venv
# Windows: .venv\Scripts\pip install -r requirements.txt
# Unix:    .venv/bin/pip install -r requirements.txt

在任一方法之后,设置 mcp.json command 到 venv python / python.exe 绝对路径——不是裸露的 python 在PATH上。

______________________________________________________________________

通过mcp.json配置

所有MySQL连接参数都通过标准MCP配置文件传递。 选择 选项A (stdio)或 选项B (SSE)取决于您的客户。

选项A-stdio传输(推荐)

MCP客户端启动 server.py 作为子流程,并通过 env 块。不需要单独的服务器进程。

将以下块复制到客户的MCP设置中(例如Cursor mcp.json, 克劳德桌面 claude_desktop_config.json,或项目级别 .cursor/mcp.json):

{
  "mcpServers": {
    "mysql-readonly": {
      "command": "/absolute/path/to/MySQL_MCP/.venv/bin/python",
      "args": ["/absolute/path/to/MySQL_MCP/server.py"],
      "env": {
        "MYSQL_HOST": "127.0.0.1",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your_mysql_user",
        "MYSQL_PASSWORD": "your_mysql_password",
        "MYSQL_DATABASE": "your_database_name",
        "MYSQL_CONNECT_TIMEOUT": "10",
        "MYSQL_SSL": "false",
        "QUERY_DEFAULT_LIMIT": "100",
        "QUERY_TABLE_BLACKLIST": "sensitive_table,internal_audit_log"
      }
    }
  }
}

args 必须包含 绝对路径 到 server.py.\ 在Windows上,使用 "command": "C:\\path\\to\\MySQL_MCP\\.venv\\Scripts\\python.exe" (在JSON中转义反斜杠)。

替换 env 值与您的实际MySQL凭据。

选项B——HTTP/SSE传输

首先将服务器作为独立的HTTP服务启动。MySQL设置来自 进程环境(或您的shell/systemd/Docker) environment 块)。

export MYSQL_HOST=127.0.0.1
export MYSQL_PORT=3306
export MYSQL_USER=your_mysql_user
export MYSQL_PASSWORD=your_mysql_password
export MYSQL_DATABASE=your_database_name

# Default bind is 127.0.0.1 (safer). Use 0.0.0.0 only on trusted networks or
# behind a reverse proxy; set MCP_BEARER_TOKEN so clients must send
# Authorization: Bearer  on SSE and message requests.
export MCP_BEARER_TOKEN=your-long-random-secret   # optional but recommended if exposed

# Use the venv interpreter (from repo root after install):
# Unix/macOS:  .venv/bin/python server.py --transport sse --port 8000
# Windows:     .venv\Scripts\python.exe server.py --transport sse --port 8000
.venv/bin/python server.py --transport sse --port 8000

然后将MCP客户端指向SSE端点(并配置客户端以发送 如果 MCP_BEARER_TOKEN 已设置):

{
  "mcpServers": {
    "mysql-readonly": {
      "url": "http://localhost:8000/sse"
    }
  }
}

______________________________________________________________________

环境变量引用

变量必填默认描述
MYSQL_HOST没有127.0.0.1MySQL主机名或IP
MYSQL_PORT没有3306MySQL端口
MYSQL_USER是--MySQL用户名
MYSQL_PASSWORD没有""MySQL密码
MYSQL_DATABASE是--目标数据库名称
MYSQL_CONNECT_TIMEOUT没有10TCP连接超时(秒)
MYSQL_READ_TIMEOUT没有30套接字读取超时(秒)
MYSQL_WRITE_TIMEOUT没有30套接字写入超时(秒)
MYSQL_MAX_EXECUTION_TIME没有30000每个查询服务器限制(毫秒); SET SESSION MAX_EXECUTION_TIME
MYSQL_SSL没有false启用MySQL的TLS: "true" / "false"
MYSQL_SSL_CA没有""CA证书的路径(使用TLS时)
MYSQL_SSL_CERT没有""客户端证书的路径
MYSQL_SSL_KEY没有""客户端私钥路径
MYSQL_SSL_VERIFY_CERT没有true设置 "false" 跳过服务器证书验证(不建议)
QUERY_DEFAULT_LIMIT没有100行上限为 SELECT;明确的 LIMIT 也受此限制(在应用 limit 工具论证)
QUERY_TABLE_BLACKLIST没有""以逗号分隔的表名。这 query 工具 拒绝引用它们的SQL(包括 JOIN); describe_table 仍然返回模式 对于那些桌子。不能替代DB赠款。
MCP_HOST没有127.0.0.1绑定SSE传输地址(CLI --host 运行时覆盖)
MCP_PORT没有8000绑定SSE端口(CLI --port 覆盖)
MCP_BEARER_TOKEN没有""如果非空,则SSE HTTP请求需要 Authorization: Bearer

______________________________________________________________________

可用工具

query

执行只读SQL语句,并将结果作为结构化JSON返回。

参数类型默认值说明
sqlstr--SQL语句(SELECT / SHOW / DESCRIBE / EXPLAIN)
limitintQUERY_DEFAULT_LIMIT上限为 QUERY_DEFAULT_LIMIT;结合服务器重写 SELECT 返回的行数永远不会超过此有效上限(即使SQL包含更大的 LIMIT)

退货:

{
  "columns": ["id", "name", "email"],
  "rows": [
    {"id": 1, "name": "Alice", "email": "alice@example.com"}
  ],
  "row_count": 1
}

list_tables

列出已配置数据库中的所有表。

退货:

{
  "database": "mydb",
  "tables": ["users", "orders", "products"],
  "count": 3
}

describe_table

获取特定表的列架构。

对于以下表格 QUERY_TABLE_BLACKLIST,将此工具用于模式-- query 工具 拒绝任何SQL(包括 DESCRIBE)它引用了这些表格。

参数类型说明
table_namestr表名(仅限字母、数字、下划线)

退货:

{
  "table": "users",
  "columns": [
    {"Field": "id",    "Type": "int",          "Null": "NO",  "Key": "PRI", "Default": null, "Extra": "auto_increment"},
    {"Field": "name",  "Type": "varchar(255)", "Null": "YES", "Key": "",    "Default": null, "Extra": ""},
    {"Field": "email", "Type": "varchar(255)", "Null": "YES", "Key": "UNI", "Default": null, "Extra": ""}
  ]
}

______________________________________________________________________

安全——只读执行

服务器通过两级保护在应用层强制执行只读访问:

  1. 白名单 --第一个关键字必须是以下之一 SELECT, SHOW, DESCRIBE, DESC, EXPLAIN.
  2. 黑名单 --扫描完整语句以查找禁止的模式: INSERT, UPDATE,

DELETE, DROP, ALTER, CREATE, TRUNCATE, REPLACE, GRANT, REVOKE, COMMIT, ROLLBACK, LOAD DATA, INTO OUTFILE, SLEEP, BENCHMARK以及更多。

  1. 多语句拒绝 --任何包含以下内容的SQL ; (剥离一条拖尾后

分号)被拒绝。

  1. 标识符验证 --传递给的表名 describe_table 已验证包含

仅 [A-Za-z0-9_] 字符插入查询之前。

  1. 表黑名单 --表列在 QUERY_TABLE_BLACKLIST 不能用于 数据

通过访问 query 工具(包括子查询/ JOIN是指他们)。 这 describe_table 工具仍然被允许 对于这些名称,代理可以检查模式。 错误使用双语JSON有效负载(message_en / message_zh).

对于生产使用,还可以配置MySQL用户 SELECT-只有特权在 数据库级别作为额外的防御层。将应用程序级黑名单视为 便利性,而不是主要的授权边界。

______________________________________________________________________

验证

配置后,使用以下查询测试服务器:

-- Should succeed
SHOW TABLES
SELECT * FROM your_table LIMIT 5
DESCRIBE your_table
EXPLAIN SELECT id FROM your_table

-- Should be rejected with an error
DELETE FROM your_table WHERE id = 1
INSERT INTO your_table (name) VALUES ('x')
SELECT 1; DROP TABLE your_table
SELECT SLEEP(5)

______________________________________________________________________

本地运行(无MCP客户端)

您可以使用MCP CLI直接从命令行测试服务器:

# Install dev dependency
pip install "mcp[cli]"

# stdio mode — interactive inspector
MYSQL_HOST=127.0.0.1 MYSQL_USER=root MYSQL_PASSWORD=secret MYSQL_DATABASE=mydb \
  mcp dev server.py

# SSE mode — start server, then open http://localhost:8000/sse in a browser or curl
MYSQL_HOST=127.0.0.1 MYSQL_USER=root MYSQL_PASSWORD=secret MYSQL_DATABASE=mydb \
  .venv/bin/python server.py --transport sse

______________________________________________________________________

项目结构

MySQL_MCP/
├── server.py            # MCP server: tools, SQL guard, MySQL connector
├── install.py           # First-time setup: venv + pip install (all platforms)
├── install.bat          # Windows launcher for install.py
├── mcp.json             # MCP configuration template (stdio + SSE examples)
├── requirements.txt     # Python dependencies
├── pyproject.toml       # Package metadata
├── Dockerfile           # Container image definition
├── docker-compose.yml   # Compose file (MCP server + optional local MySQL)
└── README.md            # This file

______________________________________________________________________

Docker部署

使用Docker Compose构建和运行

创建一个 .env 使用MySQL凭据在项目根目录中创建文件:

MYSQL_HOST=host.docker.internal   # use host.docker.internal to reach the host machine
MYSQL_PORT=3306
MYSQL_USER=your_mysql_user
MYSQL_PASSWORD=your_mysql_password
MYSQL_DATABASE=your_database_name

取消注释 ports 挡住 (见 127.0.0.1:${MCP_PORT:-8000}:8000 示例),以便主机可以到达容器;它是 出于安全考虑,默认情况下已删除。

然后启动容器:

docker compose up -d

集 MCP_BEARER_TOKEN 在 .env 当暴露SSE时。然后,MCP SSE端点为 http://localhost:8000/sse (或您选择的映射主机/端口)。

将您的MCP客户端指向它:

{
  "mcpServers": {
    "mysql-readonly": {
      "url": "http://localhost:8000/sse"
    }
  }
}

手动构建和运行

docker build -t mysql-mcp-server .

docker run -d \
  --name mysql-mcp-server \
  -p 8000:8000 \
  -e MYSQL_HOST=host.docker.internal \
  -e MYSQL_USER=your_user \
  -e MYSQL_PASSWORD=your_password \
  -e MYSQL_DATABASE=your_db \
  mysql-mcp-server

使用本地MySQL容器

取消注释 mysql 服务块 docker-compose.yml 启动本地MySQL 在MCP服务器旁边。该服务使用 healthcheck 因此,仅MCP服务器 MySQL准备就绪后启动。

______________________________________________________________________

延伸

建议在生产使用前进行以下改进:

  • 连接池 --将按请求连接替换为 DBUtils 或 SQLAlchemy 池
  • SQL AST验证 --使用 sqlglot 或 sqlparse 用于结构分析而不是正则表达式
  • 审核日志记录 --使用时间戳、客户端标识和行数记录每个执行的查询
  • 行级速率限制 --强制每个客户端的查询频率限制
  • 边缘的TLS/mTLS --反向终止HTTPS和可选客户端证书

在上交所面前的代理人;与...结合 MCP_BEARER_TOKEN 用于纵深防御

______________________________________________________________________

许可证

该项目根据MIT许可证获得许可。看 LICENSE.

工具与能力

工具数量

3

资源数量

0

提示词数量

0

能力标签

数据库访问Python本地部署只读服务Python工具MCP协议

支持客户端

Cursor

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

用自然语言查库

不用手写 SQL,直接问数据,让模型组织查询语句。

数据巡检

定期拉指标、做对比,把异常项整理成一段说明。

打通业务数据

把数据库、数仓和接口接进同一个上下文,减少导出再上传。

选择建议

值得选的地方

  • 只提供 3 个工具,职责集中,接入后不容易误操作。
  • 有现成的安装命令,不用自己找入口,照着跑就能起服务。
  • 公开说明写得比较完整,接入前能看清能力边界。

先想清楚的地方

  • stdio 方式要求本地装好 Python,换机器要重新装一遍。
  • 需要自备访问 Token,没有凭据没法直接试。
  • 公开摘要偏短,具体能力和限制要回到仓库确认。

更适合

  • 需要在数据服务场景里让模型直接调用外部能力的人。
  • 已经在用 Cursor 的用户,接入路径最短。
  • 想先快速试一下、能接受在本地跑服务的人。

不太适合

  • 完全不想在本地装环境的人。
  • 暂时拿不到访问 Token的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
Mysql MCP Only Read

MCP World · 本页

3stdio有1 个2026-05-17
Memory 9d25f64e

MCP World

9未说明未标注1 个2026-05-17
Prisma MCP Server

MCP World

0stdio有3 个2026-05-17
Astr Bot

MCP World

0stdio有1 个2026-05-17
Getzep MCP

MCP World

9stdio有1 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

Mysql MCP Only Read 怎么安装?

公开资料给出的安装命令是 python3 install.py,运行环境为 Python。装完后按客户端要求写进 MCP 配置,重启客户端生效。

Mysql MCP Only Read 怎么在 Claude Desktop、Cursor 里配置?

它是stdio 本地进程,客户端配置里要写启动命令和参数,运行环境是 Python;保存后完全退出客户端再打开,配置才会生效。

Mysql MCP Only Read 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

Mysql MCP Only Read 需要 API Key 吗?

公开资料标注的认证方式是访问 Token,也就是要先拿到凭据才能连上;凭据只填在自己本地的配置里,不要写进公开仓库。

Mysql MCP Only Read 支持哪些客户端?

公开资料标注支持 Cursor;其他客户端只要能配置 MCP Server,也能用同样的命令或地址接入。

来源信息

继续浏览同类 MCP