dynamic-db-mcp-server
Allows MySQL databases to be registered as data sources, with MCP tools for listing tables, describing schemas, running read-only queries, sampling rows, and executing writes when authorized.
Allows PostgreSQL databases to be registered as data sources, with MCP tools for listing tables, describing schemas, running read-only queries, sampling rows, and executing writes when authorized.
Allows SQLite database files to be registered as data sources, with MCP tools for listing tables, describing schemas, running read-only queries, sampling rows, and executing writes when authorized.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dynamic-db-mcp-servershow me the first 10 rows from the customers table"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Dynamic DB MCP Server
把已有关系数据库通过简单配置变成安全的 MCP Server:API Key 授权、读/写控制、表级黑白名单、AST 级 SQL 校验、Key 有效期与限流/熔断、审计日志、Web 管理控制台。
📖 管理员操作手册见 docs/usage.md(功能使用说明)。
支持 PostgreSQL / MySQL / SQLite / SQL Server / Oracle,适配器接口化可继续扩展。
快速开始(开发模式)
1. 环境要求
Node.js ≥ 20(推荐 24,内置
node:sqlite,项目零原生依赖)npm(随 Node 自带)
无需安装任何数据库——配置存储用内置 SQLite
2. 安装依赖
# 后端依赖(在根目录,后端依赖已合并进根 package.json)
npm install
# 前端依赖
npm --prefix web install3. 启动
npm run dev # 后端(8787) + 前端(Vite 3000) 一起启动
npm run dev -- --port 7100 # 指定前端端口(参数会转发给 Vite)前端控制台:http://localhost:3000 (Vite 已配置
/api、/mcp代理到后端)后端 API:http://localhost:8787/api
4. 首次使用
打开前端地址 → 引导页创建管理员账号(单管理员,密码 ≥ 6 位)
系统已内置 SQLite 演示库
demo(只读,user_passwords在黑名单),可直接体验「数据源」页添加真实数据库(PostgreSQL / MySQL / SQLite / SQL Server / Oracle),点「测试连接」确认
SQL Server:默认端口 1433;内网实例已默认
trustServerCertificateOracle:默认端口 1521,「数据库名」填服务名或 SID(如
ORCL、XEPDB1);连接串可填host:1521/服务名或完整 connect descriptor;使用 oracledb Thin 模式,服务器无需安装 Oracle 客户端
「API Keys」页创建密钥,勾选可访问数据源及读/写权限,按需设置有效期与限流/熔断(完整 Key 只显示一次)
「MCP 接入」页复制端点与客户端配置片段,粘贴到 Cursor / Claude Desktop 等
「模拟检验」页以 Key 视角验证有效表清单和 SQL 放行/拦截
「审计日志」页查看全部调用流水(本地时间显示)
Related MCP server: MCP Databases Server
生产模式部署
生产模式下后端单进程托管一切:管理 API + MCP 端点 + 前端静态文件,只暴露一个端口(默认 8787)。
0. Docker 部署(最省心)
# 构建镜像(多阶段:前端构建 + 后端运行时,单容器全托管)
docker build -t dynamic-db-mcp-server .
# 运行(data 卷持久化配置/审计,首次启动在控制台创建管理员)
docker run -d --name dmcp -p 8787:8787 -v dmcp-data:/app/data dynamic-db-mcp-server
# 或 docker compose
docker compose up -d访问 http://<服务器>:8787/。镜像基于 node:24-alpine,内置健康检查(/health);自定义端口用 -e PORT=9000 -p 9000:9000。注意:容器内连接数据库时,主机地址不能用 localhost(指容器自身),请用数据库实际 IP;SQLite 数据源的文件路径需位于挂载进容器的目录中。
1. npm 包安装(免构建)
项目可作为单个 npm 包分发:包内已含预构建的前端控制台,安装方只需 Node.js ≥ 20,无需 clone 仓库、无需构建。
# 在仓库内打包(prepack 钩子会自动构建前端,产出 dynamic-db-mcp-server-x.y.z.tgz)
npm pack
# 目标机器安装(tgz 直接分发,或先 npm publish 到公网/私有 registry)
npm i -g ./dynamic-db-mcp-server-0.3.0.tgz
# 或:npm i -g dynamic-db-mcp-server
# 在任意目录启动;配置与审计数据落在当前目录 ./data(可用 DMCP_DATA_DIR 覆盖)
mkdir dmcp && cd dmcp
dynamic-db-mcp-server # 或简写 dmcp;dmcp --port 9000 自定义端口(--host/--data-dir 见 dmcp --help)也可以作为项目依赖安装后用 npx dynamic-db-mcp-server 启动,效果相同。
2. 源码构建与启动
# 安装依赖(后端只装生产依赖,在根目录)
npm install --omit=dev
npm --prefix web install
# 构建前端产物到 web/dist(后端会自动托管)
npm run build
# 启动生产服务
npm start
# 或自定义监听地址与端口
PORT=9000 HOST=0.0.0.0 npm start # Linux/macOS
set PORT=9000 && npm start # Windows cmd
$env:PORT=9000; npm start # Windows PowerShell启动后访问:
入口 | 地址 |
Web 控制台 |
|
管理 API |
|
MCP 端点 |
|
健康检查 |
|
环境变量:
变量 | 默认 | 说明 |
|
| 监听端口 |
|
| 监听地址;仅本机使用可设 |
| 自动生成 | 数据源密码加密主密钥。不设置时首次启动生成随机密钥存入 |
| 见说明 | 数据目录(config.db / demo.db / .secret)。 |
3. 数据与备份
所有配置(管理员、数据源、Key 哈希、审计日志)在
data/config.db,演示库在data/demo.db数据源密码落盘加密:
config_json中的password/connectionString以 AES-256-GCM 加密存储(enc:v1:前缀),主密钥不入库——来自环境变量DMCP_SECRET,或首次启动自动生成到data/.secret(权限 600)。旧版本写入的明文会在启动时自动迁移为密文备份 = 复制
data/目录(务必包含data/.secret);若主密钥通过DMCP_SECRET注入,则需单独妥善保管该值。丢失主密钥 = 所有数据源密码无法还原(其余数据不受影响)数据库密码等敏感配置只存在服务端,API 返回一律脱敏(
••••••••);编辑数据源时不改密码则保留原密码
4. 进程常驻
Linux(systemd) /etc/systemd/system/dmcp.service:
[Unit]
Description=Dynamic DB MCP Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/dynamic_mcp_server
Environment=PORT=8787 HOST=0.0.0.0
ExecStart=/usr/bin/node server/src/index.js
Restart=always
RestartSec=3
User=dmcp
[Install]
WantedBy=multi-user.targetsudo systemctl enable --now dmcp跨平台(pm2):
npm install -g pm2
pm2 start server/src/index.js --name dmcp
pm2 save && pm2 startup # 开机自启Windows:推荐用 NSSM 注册为系统服务(GUI 操作)。
NSSM 安装为 Windows 服务:
下载 NSSM(https://nssm.cc/download),解压后使用
win64\nssm.exe以管理员身份打开 cmd / PowerShell,执行:
nssm install DynamicMCPServer在弹出的图形界面中填写:
页签 | 字段 | 值 |
Application | Path |
|
Application | Startup directory |
|
Application | Arguments |
|
Details | Display name / Description |
|
Details | Startup type | Automatic |
I/O | Output / Error |
|
Environment | 环境变量 |
|
点击 Install service 完成注册,然后启动:
nssm start DynamicMCPServer验证:浏览器打开 http://<服务器>:8787/health 返回 {"ok":true,...} 即成功;后续可在「服务」(services.msc)中管理 DynamicMCPServer,卸载用 nssm remove DynamicMCPServer confirm。
注意:SQLite 数据源里的文件路径是服务器本机路径,服务默认以 LocalSystem 运行;如需访问网络共享盘上的库文件,在 NSSM 的 Log on 页签指定有权限的域/本机账号。
npm 全局安装的场景(npm i -g dynamic-db-mcp-server):命令入口在 npm 全局前缀下,直接用 NSSM CLI 注册(无需 GUI):
:: 1. 查 node 与 npm 全局前缀的实际路径
where.exe node
npm config get prefix
:: 2. 注册服务(路径按上一步输出替换;--port 等参数直接跟在入口脚本后)
nssm install DynamicDBMCPServer "C:\Program Files\nodejs\node.exe" "C:\Users\<你>\AppData\Roaming\npm\node_modules\dynamic-db-mcp-server\bin\dmcp.js" --port 8787
:: 3. 工作目录即数据根目录:服务启动后数据在 D:\apps\dmcp\data
nssm set DynamicDBMCPServer AppDirectory D:\apps\dmcp
:: 4. 可选:日志落盘 / 显式指定数据目录
nssm set DynamicDBMCPServer AppStdout D:\apps\dmcp\data\service.log
nssm set DynamicDBMCPServer AppStderr D:\apps\dmcp\data\service.log
nssm set DynamicDBMCPServer AppEnvironmentExtra DMCP_DATA_DIR=D:\dmcp-data
:: 5. 启动
nssm start DynamicDBMCPServer提示:npm 全局前缀默认在安装用户的目录下(C:\Users\<你>\AppData\Roaming\npm),服务以 LocalSystem 运行通常也能读取;若希望路径与具体用户解耦,先执行 npm config set prefix D:\npm-global 再全局安装,入口路径相应变为 D:\npm-global\node_modules\dynamic-db-mcp-server\bin\dmcp.js。
5. 反向代理 + HTTPS(推荐)
MCP 客户端跨机访问时建议在前面挂 Nginx/Caddy 终止 TLS。注意 Streamable HTTP 需要关闭响应缓冲:
server {
listen 443 ssl;
server_name mcp.example.com;
ssl_certificate /etc/nginx/certs/mcp.pem;
ssl_certificate_key /etc/nginx/certs/mcp.key;
location / {
proxy_pass http://127.0.0.1:8787;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off; # MCP/SSE 必需
proxy_read_timeout 3600s;
}
}此时后端可只绑本机:HOST=127.0.0.1 npm start,MCP 客户端配置 https://mcp.example.com/mcp。
6. 客户端接入(生产)
{
"mcpServers": {
"dmcp-prod": {
"url": "https://mcp.example.com/mcp",
"headers": { "Authorization": "Bearer <API_KEY>" }
}
}
}不支持自定义 Header 的客户端用 URL 形式:https://mcp.example.com/mcp/key/<API_KEY>。
客户端连接后看到的工具按授权动态生成:<数据源slug>_list_tables / _describe_table / _query / _sample_rows,有写权限时另有 <数据源slug>_execute,外加全局 list_datasources。
7. 上线安全检查清单
修改初始管理员密码(侧栏底部「修改密码」)
每个客户端一个独立 API Key,最小化授权数据源与读/写
敏感表加入黑名单(如
*.user_passwords、sys.*)生产数据源尽量用只读数据库账号连接(双保险)
跨机访问走 HTTPS 反代;仅本机使用设
HOST=127.0.0.1定期备份
data/目录(含.secret主密钥文件);审计日志可在控制台导出核查生产环境用
DMCP_SECRET显式管理加密主密钥,并将其纳入密钥管理/灾备流程
权限模型
数据源级:启用开关、只读/允许写、表白名单/黑名单(每条按正则整体匹配表名或
schema.table,如orders、^order_.*$、^public\..*;单独的*表示全部;非合法正则按*通配的 glob 处理,如*.user_passwords;黑名单优先)、行数上限、查询超时Key 级:逐数据源读/写授权;写工具需「Key 授权写」且「数据源允许写」双条件;支持有效期(到期自动失效)、每分钟限流与超限熔断(熔断期返回 429 +
Retry-After,冷却自动恢复)、终端 IP 黑/白名单(*通配,命中返回 403 并记审计)异常预警:概览页自动识别多终端使用(24h ≥ 3 个不同 IP)、访问频率过高(1h ≥ 600 次)、熔断中的 Key,并给出控制建议
SQL 校验:node-sql-parser AST 分类 + 表名提取;单语句限制;解析失败时写一律拒
验证
npm test # 28 条端到端用例(setup/认证/MCP 全链路/权限拦截/审计/模拟器)目录
dev.mjs # 根 dev 启动器(转发 CLI 参数给 Vite)
bin/dmcp.js # npm 包全局命令入口(dynamic-db-mcp-server / dmcp)
scripts/publish-readme.md # npm 发布页专用简介(pack 时替换 README.md,由 scripts/pack-readme.mjs 驱动)
server/ # 后端:Express API + MCP 端点 + node:sqlite 配置存储
web/ # 前端:React + shadcn/ui 管理控制台
data/ # 运行时生成:config.db、demo.db
Dockerfile # 多阶段一体化镜像(前端构建 + 后端单端口托管)
docker-compose.yml # compose 编排(data 卷持久化)
docs/design.md # 需求分析与设计方案(v0.2)
docs/usage.md # 功能使用说明(管理员操作手册)开源许可
本项目以 MIT License 开源:允许自由使用、复制、修改、分发(包括商用),须保留版权声明;软件按"现状"提供,不附带任何担保。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityCmaintenanceEnables read-only interaction with SQL databases through MCP, providing database metadata exploration, sample data retrieval, and secure query execution. Supports MySQL with multiple transport options and built-in security features including SQL injection protection and data sanitization.Last updated195MIT
- Flicense-qualityCmaintenanceEnables LLMs and agents to interact with relational databases (SQL Server, MySQL, PostgreSQL) through MCP tools. Supports executing queries, inserting records, listing tables, and exposing database schemas with secure credential management.Last updated
- Flicense-qualityDmaintenanceA versatile MCP server that connects to multiple relational databases (MySQL, PostgreSQL, Oracle, SQL Server, SQLite) and enables secure read-only SQL query execution and metadata access.Last updated4
- Flicense-qualityCmaintenanceEnables remote database access (RDBMS and MongoDB) through MCP tools, supporting read/write queries, schema management, and more.Last updated
Related MCP Connectors
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
Butterbase MCP server — manage your backend: schemas, auth, functions, storage, RAG, deploys.
GibsonAI MCP server: manage your databases with natural language
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hand-by-hand/dynamic-db-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server