数据库MCP服务器

一个安全的PostgreSQL和MySQL MCP服务器,支持基于HTTP头的配置。

  • by DardanIsufi95
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 DardanIsufi95/mcp-sql-http-ts

使用说明

数据库MCP服务器

一个基于头部配置的、用于PostgreSQL和MySQL的安全MCP服务器。

快速入门

npm install
npm run dev

服务器运行于 http://localhost:3000

配置

所有配置均通过MCP初始化时的HTTP头进行设置:

所需请求头

x-cfg-db-type: pg or mysql
x-cfg-db-host: localhost
x-cfg-db-port: 5432 or 3306
x-cfg-db-user: your_username
x-cfg-db-password: your_password
x-cfg-db-names: database1,database2

可选头(或:可选头部)

x-cfg-db-schemas: public,other (PostgreSQL only, default: public)
x-cfg-db-ssl: true or false (default: false)
x-cfg-db-readonly: true or false (default: false)
x-cfg-db-pool: 1-20 (default: 1)
x-cfg-allow-raw-query: true or false (DANGEROUS - default: false)
x-cfg-session-timeout: milliseconds (default: 300000 = 5min)
x-cfg-tools-allowlist: tool1,tool2 (optional)

MCP客户端配置

创建 .cursor/mcp.json 或者 .vscode/mcp.json:

{
  "servers": {
    "database": {
      "url": "http://localhost:3000/mcp",
      "type": "http",
      "headers": {
        "x-cfg-db-type": "mysql",
        "x-cfg-db-host": "localhost",
        "x-cfg-db-port": "3306",
        "x-cfg-db-user": "root",
        "x-cfg-db-password": "password",
        "x-cfg-db-names": "mydb,testdb",
        "x-cfg-db-readonly": "false",
        "x-cfg-db-pool": "5"
      }
    }
  }
}

可用工具

查询工具

查询选择 - 执行SELECT查询

{
  "database": "mydb",
  "table": "users",
  "columns": ["id", "name", "email"],
  "where": [
    {"column": "status", "op": "=", "value": "active"}
  ],
  "limit": 10
}

查询插入 - 插入单行

{
  "database": "mydb",
  "table": "users",
  "data": {"name": "John", "email": "john@example.com"}
}

查询更新 - 更新单行数据(需要指定WHERE条件)

{
  "database": "mydb",
  "table": "users",
  "data": {"status": "inactive"},
  "where": [{"column": "id", "op": "=", "value": 123}]
}

查询删除 - 删除单行(需要WHERE条件)

{
  "database": "mydb",
  "table": "users",
  "where": [{"column": "id", "op": "=", "value": 123}]
}

query_raw ⚠️ 危险 - 执行原始SQL查询(必须显式启用)

{
  "database": "mydb",
  "query": "SELECT * FROM users WHERE status = ? AND age > ?",
  "params": ["active", 18]
}

警告这个工具绕过了所有的查询验证和安全防护。仅通过(特定方式)启用它 x-cfg-allow-raw-query: true 在受信任的环境中使用。切勿暴露给不受信任的用户。

元数据工具

获取数据库 - 列出允许的数据库

获取表格 - 列出数据库中的表

{
  "database": "mydb",
  "schema": "public"
}

获取表结构 - 显示包含外键的表结构

{
  "database": "mydb",
  "table": "users"
}

获取序列 - 列出序列(PG)或 AUTO_INCREMENT(MySQL)

获取自定义类型 - 列出自定义类型(仅限 PostgreSQL)

功能工具

获取函数 - 列出函数和过程

获取函数源代码 - 查看函数/过程代码

{
  "database": "mydb",
  "name": "calculate_total"
}

执行函数 - 执行函数或过程

{
  "database": "mydb",
  "name": "my_function",
  "params": [100, "value"]
}

查询操作符

=, !=, <, <=, >, >=, in, not in, like, ilike, between, is, is not

安全

  • ✅ 默认不使用原始SQL(使用Knex查询构建器)
  • ✅ 除非明确启用,否则阻止原始SQL查询
  • ✅ UPDATE/DELETE 需要 WHERE 条件
  • ✅ 仅限单行突变
  • ✅ 数据库/模式允许列表
  • ✅ 提供只读模式
  • ✅ 会话级连接池
  • ✅ 自动超时清理
  • ⚠️ 可选的原始查询工具(默认禁用以保障安全)

健康检查

curl http://localhost:3000/health

脚本

npm start     # Run with ts-node
npm run dev   # Development with nodemon
npm run build # Build to dist/
npm run serve # Run built version

许可证

ISC(注:ISC是一个缩写,具体含义需根据上下文确定,此处仅为音译)