数据库查询服务

mcp-sql 是一个让LLMs查询PostgreSQL、SQLite和MySQL数据库的MCP服务器,支持单二进制文件、默认只读和多数据库操作。

  • by mehdig-dev
  • Rust
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 mehdig-dev/mcp-sql

使用说明

mcp sql

MCP服务器,允许LLM查询PostgreSQL、SQLite和MySQL数据库。单二进制,默认只读,多数据库。

安装

cargo install mcp-sql

用法

# Demo mode — try it instantly with sample data
mcp-sql --demo

# Single database
mcp-sql --url postgres://user:pass@localhost/mydb

# SQLite
mcp-sql --url sqlite:path/to/db.sqlite

# Multiple databases
mcp-sql --url postgres://localhost/app --url sqlite:analytics.db

# Enable write operations
mcp-sql --url sqlite:local.db --allow-write

# Custom row limit
mcp-sql --url mysql://user:pass@localhost/shop --row-limit 500

# Read URL from environment variable
mcp-sql --url-env DATABASE_URL

# Mix --url and --url-env
mcp-sql --url sqlite:local.db --url-env PROD_DB_URL

# Custom query timeout (default: 30s)
mcp-sql --url sqlite:local.db --query-timeout 60

配置

克劳德代码

claude mcp add sql -- mcp-sql --url sqlite:path/to/your.db

或编辑 ~/.claude.json 直接:

{
  "mcpServers": {
    "sql": {
      "type": "stdio",
      "command": "mcp-sql",
      "args": ["--url", "sqlite:path/to/your.db"]
    }
  }
}

克劳德桌面

添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):

{
  "mcpServers": {
    "sql": {
      "command": "mcp-sql",
      "args": [
        "--url", "postgres://user:pass@localhost/mydb",
        "--url", "sqlite:analytics.db"
      ]
    }
  }
}

光标/VS代码

添加到MCP配置(.cursor/mcp.json 或同等):

{
  "mcpServers": {
    "sql": {
      "command": "mcp-sql",
      "args": ["--url", "sqlite:path/to/your.db"]
    }
  }
}

工具

工具 说明
list_databases 显示所有连接的数据库及其名称和类型
list_tables 列出具有行数的表
describe_table 列详细信息:名称、类型、可空、默认值、主键、外键
show_create_table 显示表的CREATE TABLE DDL语句
show_schema 所有表格及其关系的Mermaid ER图
list_indexes 索引名称、列和唯一性约束
sample_data 以JSON格式返回表中的示例行(不需要SQL)
query 执行SQL并以JSON格式返回结果
explain 显示查询执行计划
query_dry_run 验证SQL并在不执行的情况下显示查询计划

所有工具都接受可选 database 连接多个数据库时的参数。如果只连接了一个数据库,则会自动使用它。

CLI选项

标志 默认值 描述
--url -- 数据库连接URL(可重复)
--url-env -- 从环境变量读取数据库URL(可重复)
--demo false 从预加载示例数据的演示SQLite数据库开始
--allow-write false 启用写入操作(INSERT、UPDATE、DELETE、CREATE、DROP)
--row-limit 100 每个查询返回的最大行数
--query-timeout 30 查询超时(秒)

至少一个 --url 或 --url-env 是必需的(除非使用 --demo).

安全

  • 默认情况下为只读 --只有 SELECT, WITH, SHOW, PRAGMA,以及 EXPLAIN 允许查询
  • 行限制已执行 — LIMIT 如果不存在,则注入(默认值:100)
  • 查询超时 --查询在配置的超时后被终止(默认值:30秒)
  • 已编辑凭据 --密码被屏蔽 list_databases 输出
  • PostgreSQL/MySQL --额外使用 SET TRANSACTION READ ONLY 用于数据库级别的强制执行

通过 --allow-write 启用 INSERT, UPDATE, DELETE, CREATE,以及 DROP 操作。

支持的数据库

数据库 URL方案 备注
PostgreSQL postgres:// 或 postgresql:// 全力支持
SQLite sqlite:path 或 sqlite::memory: 全力支持
MySQL mysql:// 或 mariadb:// 全力支持

许可证

根据以下任一方式获得许可 Apache许可证,版本2.0 或 MIT许可证 由您选择。