数据库代理服务

本地运行的MCP服务器,为AI代理和LLM提供安全的数据库访问,无需暴露凭证。

  • by SedlarDavid
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 SedlarDavid/localdb-mcp

使用说明

本地数据库mcp

v1.2.0版本 --本地 主控程序 服务器,允许AI代理和LLM(例如Cursor、Claude Code、其他MCP客户端)访问您的数据库 不公开凭据 到模型。服务器在您的计算机上运行,从env或config读取连接详细信息,并公开一组固定的工具(请参阅 工具 在......下面代理人按名称调用工具;连接字符串保留在服务器进程中。

与代理/LLM一起使用

  • Cursor、Claude Code或任何MCP客户端: 在MCP设置中添加此服务器。客户端运行服务器(例如。 ./localdb-mcp 或 go run ./cmd/server).代理只看到工具名称和JSON输入/输出;它永远看不到连接字符串或凭据。
  • 工作流程: 您可以配置数据库(Postgres、SQL Server、通过Docker的MySQL或本地SQLite文件),并通过env或config将服务器指向它们。当你要求代理“添加测试数据”或“更新时间戳”时,它会调用以下工具 list_tables, describe_table, run_query, insert_test_row,或 update_test_row。代理不需要知道主机、端口、用户或密码。
  • 典型用途: 仅限本地或开发数据库——生成测试数据、检查模式、运行只读查询。不用于生产(见下文免责声明)。

为什么

  • 凭据仅在env或 ~/.localdb-mcp/config.yaml --永远不要出现在IDE/MCP配置或工具响应中。
  • 修复了代理不需要主机/端口/用户/密码的工具集。
  • 支持PostgreSQL、SQL Server、SQLite和MySQL作为命名连接 postgres, sqlserver, sqlite,以及 mysql.

需求

  • 转到1.25+
  • PostgreSQL、SQL Server、MySQL可访问(例如Docker)用于数据库工具,或SQLite文件/:memory:.

快速开始

  1. 构建并运行

    go build -o localdb-mcp ./cmd/server
    ./localdb-mcp
    

    或者: go run ./cmd/server

  2. 配置 (可选用于 ping 和 list_connections;需要 list_tables, describe_table等等)

    • Env或 .env:参见 .env.示例 为了 MCP_DB_POSTGRES_URI, MCP_DB_SQLSERVER_URI, MCP_DB_SQLITE_URI,以及 MCP_DB_MYSQL_URI。服务器加载 .env 如果存在,则从其工作目录中删除;否则,导出到您的shell中。
    • 可选文件: ~/.localdb-mcp/config.yaml 随着 connections: { postgres: "uri", sqlserver: "uri", sqlite: "/path/to/db.sqlite", mysql: "user:pass@tcp(host:3306)/db" }.ev覆盖文件。
  3. 添加到您的MCP客户端 --配置示例见下文。

客户端配置

光标

首选 设置 > 特性 > MCP服务器 > +添加新的MCP服务器:

  • 姓名: localdb (或任何名称)
  • 类型: command
  • 命令: 二进制文件的绝对路径(例如。 /Users/me/dev/localdb-mcp/localdb-mcp)或 go run ...
  • Args: (如果使用二进制,请留空,或使用 run /path/to/cmd/server 如果使用 go)

或手动编辑 .cursor/mcp.json (如果项目特定):

{
  "mcpServers": {
    "localdb": {
      "command": "/Users/me/dev/localdb-mcp/localdb-mcp",
      "args": [],
      "env": {
        "MCP_DB_POSTGRES_URI": "postgres://user:pass@localhost:5432/db",
        "MCP_DB_SQLSERVER_URI": "sqlserver://sa:Pass@localhost:1433"
      }
    }
  }
}

注: 游标也可以读取 .env 如果您从服务器的工作目录运行该文件,则可以将其保存在该目录中,但在配置中显式设置环境变量通常更可靠。

克劳德桌面版

编辑配置文件:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 窗户: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "localdb": {
      "command": "/Users/me/dev/localdb-mcp/localdb-mcp",
      "env": {
         "MCP_DB_POSTGRES_URI": "postgres://user:pass@localhost:5432/db"
      }
    }
  }
}

VS代码(通用MCP扩展)

如果在VS Code中使用MCP扩展,通常会将其添加到 .vscode/settings.json 或扩展的特定配置:

"mcp.servers": {
  "localdb": {
    "command": "/path/to/localdb-mcp",
    "transport": "stdio"
  }
}

工具

工具 说明
ping 健康检查→ {"message":"pong"}
list_connections 配置的连接ID和类型(无凭据)
list_tables connection_id,可选 schema → 表名称
describe_table connection_id, table,可选 schema → 列(名称、类型、可空、is_pk)
run_query (只读) connection_id, sql,可选 params → rows.拒绝插入/更新/删除/DDL。
insert_test_row connection_id, table, row,可选 schema, return_id → 可选的 inserted_id
update_test_row connection_id, table, key (PK), set (值),可选 schema → rows_affected
export_database connection_id, path → 使用引擎本机工具将数据库导出到SQL转储文件
import_database connection_id, path, confirm_destructive → 导入SQL转储文件(破坏性)

安全

默认情况下为只读; run_query 只允许SELECT(和只读SQL)。仅通过以下方式写入 insert_test_row 和 update_test_row. update_test_row 强制只针对主键——它验证了 key 列与表的实际PK匹配,以防止大规模更新。没有DDL。凭证从不包含在工具结果或日志中。

export_database 和 import_database 使用引擎原生CLI工具(pg_dump/psql、mysqldump/mysql、sqlite3、sqlcmd)。导入需要明确 confirm_destructive=true 因为它可能会覆盖数据。SQL Server导出使用纯Go(不需要外部工具);所有其他引擎都需要在服务器上安装相应的CLI工具。


免责声明

此软件仅用于开发和测试。

  • 不要将其与生产数据库或生产机密一起使用。 仅与本地或专用的开发/测试数据库以及您可以在计算机上公开的凭据一起使用。
  • 无保修。 本软件“按原样”提供。作者和贡献者不对因使用本软件而导致的任何损坏、数据丢失或误用负责,包括(但不限于)配置错误、凭据泄露或对生产系统的使用。
  • 你有责任 关于如何配置和运行服务器,以及如何防止凭据在生产环境中使用。

持续集成

GitHub Actions在每个PR上运行 main 并推动 main:构建、测试(-race), go vet,以及 戈朗茨皮棉 静态分析。看 .github/workflows/ci.yml 和 .golangci.yml.

测试

go test ./...
go run ./cmd/mcpclient ping
go run ./cmd/mcpclient list_connections
go run ./cmd/mcpclient list_tables '{"connection_id":"postgres"}'
go run ./cmd/mcpclient describe_table '{"connection_id":"postgres","table":"users"}'
go run ./cmd/mcpclient run_query '{"connection_id":"postgres","sql":"SELECT 1"}'
go run ./cmd/mcpclient insert_test_row '{"connection_id":"postgres","table":"users","row":{"name":"Test"}}'
go run ./cmd/mcpclient update_test_row '{"connection_id":"postgres","table":"users","key":{"id":1},"set":{"name":"Updated"}}'
go run ./cmd/mcpclient export_database '{"connection_id":"postgres","path":"/tmp/dump.sql"}'
go run ./cmd/mcpclient import_database '{"connection_id":"postgres","path":"/tmp/dump.sql","confirm_destructive":true}'

布局

  • cmd/server --MCP服务器入口点(stdio)
  • cmd/mcpclient --CLI调用任何工具(用于测试)
  • internal/config --env+可选 .env (cwd)及 ~/.localdb-mcp/config.yaml
  • internal/server --MCP服务器和工具注册
  • internal/db --驱动程序接口、Postgres/SQL Server/SQLite/MySQL实现、连接管理器

贡献

欢迎捐款。请打开一个问题来讨论更大的更改,或者发送一个bug修复和小改进的拉取请求。通过贡献,您同意您的提交将获得相同的许可 麻省理工学院 这个项目的条款。

许可证

麻省理工学院.使用风险自负;请参阅上文免责声明。