{"_id":"@aalmix/mysql-mcp-server","_rev":"4-7fb6cbe68a9ca0aba9084b72b729d273","name":"@aalmix/mysql-mcp-server","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@aalmix/mysql-mcp-server","version":"1.0.0","keywords":["mcp","mysql","ai","claude","database","natural-language"],"author":{"name":"水果芋头"},"license":"MIT","_id":"@aalmix/mysql-mcp-server@1.0.0","maintainers":[{"name":"aalmix","email":"jxxiaobian@gmail.com"}],"bin":{"mysql-mcp-server":"dist/main.js"},"dist":{"shasum":"9aee33d1aac84654b6dafee3fc9b4788d8098828","tarball":"https://registry.npmjs.org/@aalmix/mysql-mcp-server/-/mysql-mcp-server-1.0.0.tgz","fileCount":4,"integrity":"sha512-iDyTmbuPHv5NEWyp2XI1P40Tpntb/xquWNJzEQsxrWmowAjqzEe2cRbkdRBiB/cX5gzOxbkbw+CChHabHAjOcQ==","signatures":[{"sig":"MEYCIQCFkCZwFl3QAMmgcOm0/urTglL13Y92auwxmVN/tlgdEwIhAP/O+PWIGK6UmDpRJAf/eWY/BFXvge7p9vboT0/Ay2xD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38556},"main":"dist/main.js","type":"module","gitHead":"0313a2889dfa7e2b5759ed71150bf7cfb62d80b7","scripts":{"dev":"tsx watch src/main.ts","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","start":"tsx src/main.ts","format":"prettier --write src/**/*.ts","test:watch":"vitest"},"_npmUser":{"name":"aalmix","email":"jxxiaobian@gmail.com"},"_npmVersion":"10.9.4","description":"MySQL MCP Server - 让 AI 助手通过自然语言查询和管理 MySQL 数据库","directories":{},"_nodeVersion":"22.21.0","dependencies":{"dotenv":"^16.3.1","mysql2":"^3.6.5","winston":"^3.11.0","@modelcontextprotocol/sdk":"^1.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.1.0","prettier":"^3.1.1","typescript":"^5.3.3","@types/node":"^20.10.5","@types/mysql2":"github:types/mysql2","@vitest/coverage-v8":"^1.1.0","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/mysql-mcp-server_1.0.0_1766552553601_0.27688299565461305","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aalmix/mysql-mcp-server","version":"1.0.1","keywords":["mcp","mysql","ai","claude","database","natural-language"],"author":{"name":"水果芋头"},"license":"MIT","_id":"@aalmix/mysql-mcp-server@1.0.1","maintainers":[{"name":"aalmix","email":"jxxiaobian@gmail.com"}],"bin":{"mysql-mcp-server":"dist/main.js"},"dist":{"shasum":"3423bcf40689a8c30982533047c0b9f2f91e99d2","tarball":"https://registry.npmjs.org/@aalmix/mysql-mcp-server/-/mysql-mcp-server-1.0.1.tgz","fileCount":4,"integrity":"sha512-VNvtlMAp4qSRmP7azDrXodSSLci0eGsl3PkcmrdGltKHx1Y+xM4BIuTuepQWWj4n/h/jPedLX37slcB69yamyQ==","signatures":[{"sig":"MEYCIQC5LNMbj11OQzTu58AMovdsDI8e2HYCdsySGHhrPbltigIhAINQrNYSK0zrdGbZNl4pyrsF01T2EqQ/euphBJSl3dRC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38557},"main":"dist/main.js","type":"module","gitHead":"1b0f7e6db98fa917fdabd61aea62635cd0fa231b","scripts":{"dev":"tsx watch src/main.ts","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","start":"tsx src/main.ts","format":"prettier --write src/**/*.ts","test:watch":"vitest"},"_npmUser":{"name":"aalmix","email":"jxxiaobian@gmail.com"},"_npmVersion":"10.8.2","description":"MySQL MCP Server - 让 AI 助手通过自然语言查询和管理 MySQL 数据库","directories":{},"_nodeVersion":"20.19.6","dependencies":{"dotenv":"^16.3.1","mysql2":"^3.6.5","winston":"^3.11.0","@modelcontextprotocol/sdk":"^1.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.1.0","prettier":"^3.1.1","typescript":"^5.3.3","@types/node":"^20.10.5","@types/mysql2":"github:types/mysql2","@vitest/coverage-v8":"^1.1.0","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/mysql-mcp-server_1.0.1_1766556270306_0.25761530674004307","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aalmix/mysql-mcp-server","version":"1.0.2","keywords":["mcp","mysql","ai","claude","database","natural-language"],"author":{"name":"水果芋头"},"license":"MIT","_id":"@aalmix/mysql-mcp-server@1.0.2","maintainers":[{"name":"aalmix","email":"jxxiaobian@gmail.com"}],"bin":{"mysql-mcp-server":"dist/main.js"},"dist":{"shasum":"98e3436304a20182918cefe98733a5b1505c46a1","tarball":"https://registry.npmjs.org/@aalmix/mysql-mcp-server/-/mysql-mcp-server-1.0.2.tgz","fileCount":4,"integrity":"sha512-2/ex0c2ZGiAqaPk9UVGk9e8IByFKRFhNFLwqjn64zPFLlO2+6YaL7ycvfP5GYGMBvSpdxJqIU25kySTqKN7s6A==","signatures":[{"sig":"MEUCIQDUlENlcZV7cWMGENgVz/FrzfEU28SwpN1LTysHeMdS+AIgJ8siywhymcoiic8FjjzalKNUFghNZP9BQ22LtLfsy3s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37341},"main":"dist/main.js","type":"module","gitHead":"906bf71b1cfc36e45e45afcec785e523a49448d9","scripts":{"dev":"tsx watch src/main.ts","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","start":"tsx src/main.ts","format":"prettier --write src/**/*.ts","test:watch":"vitest"},"_npmUser":{"name":"aalmix","email":"jxxiaobian@gmail.com"},"_npmVersion":"10.8.2","description":"MySQL MCP Server - 让 AI 助手通过自然语言查询和管理 MySQL 数据库","directories":{},"_nodeVersion":"20.19.6","dependencies":{"dotenv":"^16.3.1","mysql2":"^3.6.5","winston":"^3.11.0","@modelcontextprotocol/sdk":"^1.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.1.0","prettier":"^3.1.1","typescript":"^5.3.3","@types/node":"^20.10.5","@types/mysql2":"github:types/mysql2","@vitest/coverage-v8":"^1.1.0","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/mysql-mcp-server_1.0.2_1766568740318_0.9305946330495036","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aalmix/mysql-mcp-server","version":"1.0.3","description":"MySQL MCP Server - 让 AI 助手通过自然语言查询和管理 MySQL 数据库","main":"dist/main.js","type":"module","bin":{"mysql-mcp-server":"dist/main.js"},"scripts":{"build":"tsc","start":"tsx src/main.ts","dev":"tsx watch src/main.ts","test":"vitest run","test:watch":"vitest","lint":"eslint src/**/*.ts","format":"prettier --write src/**/*.ts"},"keywords":["mcp","mysql","ai","claude","database","natural-language"],"author":{"name":"水果芋头"},"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.0.3","mysql2":"^3.6.5","dotenv":"^16.3.1","winston":"^3.11.0"},"devDependencies":{"@types/node":"^20.10.5","@types/mysql2":"github:types/mysql2","typescript":"^5.3.3","tsx":"^4.7.0","vitest":"^1.1.0","@vitest/coverage-v8":"^1.1.0","eslint":"^8.56.0","@typescript-eslint/eslint-plugin":"^6.15.0","@typescript-eslint/parser":"^6.15.0","prettier":"^3.1.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_id":"@aalmix/mysql-mcp-server@1.0.3","gitHead":"80c6a5d865a85764c6f11a4f3c024c89c7f65e2e","_nodeVersion":"20.19.6","_npmVersion":"10.8.2","dist":{"integrity":"sha512-4jOLGwLCPdOHyCcRQ35fljOlDnJ5FucqgCxPnmAl5/T8TqNUeqiz49A9iwKVFFO930m3uwuBw4JcOOyY2y3NeQ==","shasum":"a65e2953bd7522d4356ac2717fb7b85f66fb293c","tarball":"https://registry.npmjs.org/@aalmix/mysql-mcp-server/-/mysql-mcp-server-1.0.3.tgz","fileCount":4,"unpackedSize":37341,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDURnl8msx6ISVSPxpQOHESuLiEQfjmfQNGRnqhNyBAuAIgeoZyzmpkyHhNvxqVopxpnWCecZNFKna4q/zrAF/+Ja4="}]},"_npmUser":{"name":"aalmix","email":"jxxiaobian@gmail.com"},"directories":{},"maintainers":[{"name":"aalmix","email":"jxxiaobian@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mysql-mcp-server_1.0.3_1766626777356_0.47461225490619774"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-24T05:02:33.505Z","modified":"2025-12-25T01:39:37.717Z","1.0.0":"2025-12-24T05:02:33.758Z","1.0.1":"2025-12-24T06:04:30.458Z","1.0.2":"2025-12-24T09:32:20.472Z","1.0.3":"2025-12-25T01:39:37.504Z"},"author":{"name":"水果芋头"},"license":"MIT","keywords":["mcp","mysql","ai","claude","database","natural-language"],"description":"MySQL MCP Server - 让 AI 助手通过自然语言查询和管理 MySQL 数据库","maintainers":[{"name":"aalmix","email":"jxxiaobian@gmail.com"}],"readme":"# MySQL MCP Server\n\n一个基于 Model Context Protocol (MCP) 的 MySQL 服务端，让 AI 助手（如 Claude、Cursor）能够通过自然语言直接查询和管理 MySQL 数据库。\n\n## 功能特性\n\n### 核心功能\n- **数据库管理**: 切换数据库、获取当前数据库、列出所有数据库\n- **表结构查询**: 列出数据库中的所有表，获取表的详细结构信息（字段、类型、键、备注等）\n- **数据查询**: 执行 SELECT 查询（只读模式安全执行）\n- **SQL 执行**: 支持执行任意 SQL 语句（INSERT、UPDATE、DELETE、DDL 等）\n- **USE 语句支持**: 在查询中直接使用 `USE dbname;` 切换数据库\n\n### 安全特性\n- **只读模式**: 默认开启，防止误删数据\n- **危险操作拦截**: DROP、TRUNCATE、DELETE FROM、ALTER TABLE 等操作需要 `confirm=true` 确认\n- **查询限制**: 默认限制 100 行，防止 Token 溢出\n- **超时控制**: 30 秒查询超时，防止慢查询阻塞\n- **连接池管理**: 高效的数据库连接管理，支持并发查询\n\n## 快速开始\n\n### 安装依赖\n\n```bash\nnpm install\n```\n\n### 配置环境变量\n\n复制 `.env.example` 到 `.env` 并配置：\n\n```bash\ncp .env.example .env\n```\n\n编辑 `.env` 文件，配置 MySQL 连接信息：\n\n```env\nMYSQL_HOST=localhost\nMYSQL_PORT=3306\nMYSQL_USER=your_username\nMYSQL_PASSWORD=your_password\nMYSQL_DATABASE=optional_default_db\n\n# 安全配置\nREAD_ONLY=true\nMAX_ROWS=100\nQUERY_TIMEOUT=30\n```\n\n### 启动服务器\n\n```bash\n# 开发模式（自动重载）\nnpm run dev\n\n# 生产模式\nnpm run build\n```\n\n### 测试连接\n\n```bash\n# 测试 MySQL 连接\nnode test-connection.js\n```\n\n## 使用方法\n\n### 方式一：本地使用\n\n克隆项目后启动：\n\n```bash\nnpm install\nnpm run build\n```\n\n在 Claude Desktop 配置中：\n\n```json\n{\n  \"mcpServers\": {\n    \"mysql\": {\n      \"command\": \"node\",\n      \"args\": [\"/your_local_directory/dist/main.js\"],\n      \"env\": {\n        \"MYSQL_HOST\": \"localhost\",\n        \"MYSQL_PORT\": \"3306\",\n        \"MYSQL_USER\": \"your_user\",\n        \"MYSQL_PASSWORD\": \"your_password\",\n        \"MYSQL_DATABASE\": \"your_database\",\n        \"READ_ONLY\": \"true\"\n      }\n    }\n  }\n}\n```\n\n### 方式二：使用 npm 包（推荐）\n\n发布到 npm 后，他人可以通过 `npx` 直接使用：\n\n```json\n{\n  \"mcpServers\": {\n    \"mysql\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@aalmix/mysql-mcp-server\"],\n      \"env\": {\n        \"MYSQL_HOST\": \"localhost\",\n        \"MYSQL_PORT\": \"3306\",\n        \"MYSQL_USER\": \"your_user\",\n        \"MYSQL_PASSWORD\": \"your_password\",\n        \"MYSQL_DATABASE\": \"your_database\",\n        \"READ_ONLY\": \"true\"\n      }\n    }\n  }\n}\n```\n\n\n## MCP 工具\n\n| 工具名称 | 参数 | 描述 |\n|---------|------|------|\n| `use_database` | `{database: string}` | 切换使用的数据库 |\n| `get_current_database` | `{}` | 获取当前正在使用的数据库 |\n| `list_databases` | `{}` | 列出所有可用数据库 |\n| `get_server_version` | `{}` | 获取 MySQL 服务器版本 |\n| `list_tables` | `{database?: string}` | 列出指定数据库中的所有表（包含表备注、引擎、行数） |\n| `describe_table` | `{database?: string, table_name: string}` | 获取表的详细结构信息和 CREATE TABLE 语句 |\n| `read_query` | `{query: string}` | 执行 SELECT 查询（只读，安全） |\n| `execute_query` | `{query: string, confirm?: boolean}` | 执行任意 SQL（危险操作需 confirm=true） |\n\n## 安全配置\n\n### 只读模式 (推荐生产环境)\n\n```env\nREAD_ONLY=true\n```\n\n在只读模式下：\n- 只允许 `SELECT` 查询\n- `execute_query` 工具将被禁用\n- `read_query` 工具仍然可用\n\n### 危险操作二次确认\n\n即使在非只读模式下，以下操作也需要 `confirm=true` 参数：\n- `DROP TABLE/DATABASE`\n- `TRUNCATE TABLE`\n- `DELETE FROM` (无 WHERE 条件)\n- `ALTER TABLE ... DROP COLUMN`\n\n## 项目结构\n\n```\nmcpDemo/\n├── src/\n│   └── main.ts              # 入口文件，包含所有 MCP 工具实现\n├── tests/                   # 测试文件\n├── scripts/\n│   ├── run-server.sh        # 服务器启动脚本\n│   └── setup-test-db.sh     # 测试数据库初始化脚本\n├── test-connection.js       # 连接测试脚本\n├── Dockerfile               # Docker 镜像构建文件\n├── docker-compose.yml       # Docker Compose 配置\n├── package.json             # 项目配置\n├── tsconfig.json            # TypeScript 配置\n└── README.md                # 项目文档\n```\n\n## 开发命令\n\n```bash\n# 安装依赖\nnpm install\n\n# 开发模式（自动重载）\nnpm run dev\n\n# 构建\nnpm run build\n\n# 运行\nnpm start\n\n# 测试连接\nnode test-connection.js\n\n# 初始化测试数据库\n./scripts/setup-test-db.sh\n```\n\n## 使用示例\n\n### 示例 1: 查询数据\n\n用户: \"查询 users 表中最近注册的 10 个用户\"\n\nAI 会自动：\n1. 调用 `list_tables` 确认表存在\n2. 调用 `describe_table` 查看表结构\n3. 调用 `read_query` 执行 `SELECT * FROM users ORDER BY created_at DESC LIMIT 10`\n4. 返回结果\n\n### 示例 2: 切换数据库并查询\n\n用户: \"切换到 myapp 数据库，查询 products 表的所有数据\"\n\nAI 会自动：\n1. 调用 `use_database` 切换数据库\n2. 调用 `list_tables` 确认表存在\n3. 调用 `read_query` 执行查询\n\n### 示例 3: 在查询中使用 USE 语句\n\n```sql\nUSE mydb; SELECT * FROM users WHERE active = 1;\n```\n\n## 限制和注意事项\n\n1. **查询结果限制**: 默认最多返回 100 行，可通过环境变量调整\n2. **超时时间**: 默认 30 秒，超时查询会被终止\n3. **只读模式**: 默认开启，生产环境强烈建议保持\n4. **需要用户权限**: 执行 SQL 需要相应的数据库权限\n\n## 故障排除\n\n### 连接失败\n\n```bash\n# 检查 MySQL 服务是否运行\nmysql -h $MYSQL_HOST -P $MYSQL_PORT -u $MYSQL_USER -p\n\n# 检查防火墙设置\n# 检查用户名密码是否正确\n```\n\n### 权限问题\n\n```sql\n-- 授予必要权限\nGRANT SELECT ON *.* TO 'user'@'host';\nGRANT SHOW DATABASES ON *.* TO 'user'@'host';\n\n-- 如果需要写操作\nGRANT INSERT, UPDATE, DELETE ON dbname.* TO 'user'@'host';\n```\n\n## 依赖\n\n- `@modelcontextprotocol/sdk`: MCP 协议实现\n- `mysql2/promise`: MySQL 客户端\n- `dotenv`: 环境变量管理\n- `zod/v4`: 参数验证\n- `tsx`: TypeScript 运行工具\n- `typescript`: TypeScript 编译器\n\n## 许可证\n\nMIT License\n","readmeFilename":"README.md"}