MySQL MCP服务器

一个用于Claude Code的只读MySQL MCP服务器,通过SSH隧道安全连接远程数据库,提供查询、表列表和表结构描述功能。

  • by valcicivo
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 valcicivo/mysql-mcp

使用说明

MySQL MCP Server

A read-only MySQL MCP server for Claude Code that connects to remote databases over an SSH tunnel. The tunnel opens on-demand and closes automatically after 5 minutes of inactivity.

Features

  • Read-only queries — Only SELECT, SHOW, and DESCRIBE are allowed
  • SSH tunnel — Connects securely to remote databases through SSH
  • On-demand connection — Tunnel opens only when a query is made, closes after 5 min idle
  • Auto-reconnect — Retries automatically if the connection drops mid-query
  • Zero credentials in code — All configuration via environment variables

Setup

1. Install

git clone https://github.com/valcicivo/mysql-mcp.git
cd mysql-mcp
npm install
npm run build

2. Add to Claude Code

claude mcp add mysql-db node /path/to/mysql-mcp/dist/index.js \
  -e DB_HOST=localhost \
  -e DB_PORT=33061 \
  -e DB_USER=your_db_user \
  -e DB_PASSWORD=your_db_password \
  -e DB_NAME=your_database \
  -e SSH_HOST=your-server.com \
  -e SSH_PORT=22 \
  -e SSH_USER=your_ssh_user \
  -e SSH_KEY_PATH=/path/to/your/ssh_key \
  -e SSH_LOCAL_PORT=33061

Or create a .env file in the project root (see .env.example). MCP env vars take priority over .env.

3. Use multiple databases

Add separate MCP servers for each database — same code, different env vars:

claude mcp add production-db node /path/to/mysql-mcp/dist/index.js \
  -e DB_NAME=production_db -e SSH_HOST=prod.example.com ...

claude mcp add staging-db node /path/to/mysql-mcp/dist/index.js \
  -e DB_NAME=staging_db -e SSH_HOST=staging.example.com ...

Available Tools

Tool Description
read_query(sql) Execute a read-only SELECT query
list_tables() List all tables in the database
describe_table(table) Show the schema of a table
connect_db() Test connection health and tunnel status

Environment Variables

Variable Required Default Description
DB_HOST No localhost Database host (relative to SSH server)
DB_PORT No 3306 Database port (relative to SSH server)
DB_USER Yes — Database username
DB_PASSWORD Yes — Database password
DB_NAME Yes — Database name
SSH_HOST Yes — SSH server hostname
SSH_PORT No 22 SSH server port
SSH_USER Yes — SSH username
SSH_KEY_PATH Yes — Path to SSH private key
SSH_LOCAL_PORT No 33061 Local port for the SSH tunnel
SSH_DST_HOST No localhost Tunnel destination host, as seen from the SSH server. Use 127.0.0.1 if the server restricts forwarding (e.g. permitopen="127.0.0.1:3306")
SSH_DST_PORT No 3306 Tunnel destination port, as seen from the SSH server

Security

  • Only SELECT, SHOW, and DESCRIBE queries are allowed
  • Table names are sanitized to prevent injection
  • SSH tunnel is only open while queries are active (5 min idle timeout)
  • No credentials stored in code — everything is configured via environment variables
  • .env file is gitignored

Development

npm run watch    # Auto-rebuild on changes
npm run build    # Manual build

License

MIT