a2db
OfficialAgent: "Show me active users and their recent orders"
↓
a2db execute → 2 queries, 1 call, structured results
↓
Agent: "Got it — 847 active users, avg order $42.50"为什么选择 a2db?
大多数数据库 MCP 服务器要求您一次运行一个查询,在每次调用时重复连接详细信息,并将结果双重编码在 JSON 字符串中。a2db 解决了所有这些问题:
预配置连接 — 通过
--register在.mcp.json中定义数据库,代理可立即查询批量查询 — 在单个工具调用中运行多个命名查询
默认连接 — 设置一次连接,即可在批处理中的所有查询中使用
整洁的输出 — 带有紧凑 TSV 数据和每个查询耗时的结构化 JSON 信封(参见 为什么选择 TSV?)
强制只读 — SQLGlot AST 解析会阻止所有写操作
捆绑所有驱动程序 —
pip install a2db即可完成密钥保留在环境变量中 — DSN 中的
${DB_PASSWORD}仅在连接时展开
Related MCP server: MCP Universal DB Client
支持的数据库
数据库 | 驱动程序 | 异步 |
PostgreSQL | asyncpg | 原生 |
SQLite | aiosqlite | 原生 |
MySQL / MariaDB | mysql-connector-python | 封装 |
Oracle | oracledb | 封装 |
SQL Server | pymssql | 封装 |
快速入门
pip install a2db作为 MCP 服务器(推荐)
Claude Code(带预配置连接):
claude mcp add -s user a2db -- a2db-mcp \
--register myapp/prod/main 'postgresql://user:${DB_PASSWORD}@host/mydb'Claude Code(最小化 — 代理按需调用 login):
claude mcp add -s user a2db -- a2db-mcpClaude Desktop / Cursor / 任何 MCP 客户端 (.mcp.json):
{
"mcpServers": {
"a2db": {
"command": "uvx",
"args": [
"a2db-mcp",
"--register", "myapp/prod/main", "postgresql://user:${DB_PASSWORD}@host/mydb"
],
"env": {
"DB_PASSWORD": "your-password-here"
}
}
}
}多个数据库:
{
"args": [
"a2db-mcp",
"--register", "myapp/prod/main", "postgresql://user:${DB_PASSWORD}@host/maindb",
"--register", "myapp/prod/analytics", "postgresql://user:${DB_PASSWORD}@host/analytics"
]
}--register 在服务器启动时预注册连接 — 代理可以立即查询。密码使用 ${ENV_VAR} 语法,并在连接时展开,绝不会以明文形式存储。
作为 CLI
# Save a connection (validates immediately)
a2db login -p myapp -e prod -d main 'postgresql://user:${DB_PASSWORD}@localhost/mydb'
# Query
a2db query -p myapp -e prod -d main "SELECT * FROM users LIMIT 10"
# JSON output
a2db query -p myapp -e prod -d main -f json "SELECT * FROM users LIMIT 10"
# Explore schema
a2db schema -p myapp -e prod -d main tables
a2db schema -p myapp -e prod -d main columns -t users
# List / remove connections
a2db connections
a2db logout -p myapp -e prod -d mainMCP 工具
工具 | 描述 |
| 保存连接 — 通过先连接进行验证 |
| 删除已保存的连接 |
| 列出连接(不暴露密钥) |
| 运行带分页的命名批量查询 |
| 探索模式 — 表、列,具有详细级别 |
execute — 核心工具
带默认连接的命名字典(首选):
{
"connection": {"project": "myapp", "env": "prod", "db": "main"},
"queries": {
"active_users": {"sql": "SELECT id, name FROM users WHERE active = true"},
"recent_orders": {"sql": "SELECT id, total FROM orders ORDER BY created_at DESC LIMIT 5"}
}
}列表格式(自动命名为 q1, q2, ...):
{
"connection": {"project": "myapp", "env": "prod", "db": "main"},
"queries": [
{"sql": "SELECT COUNT(*) AS cnt FROM users"},
{"sql": "SELECT AVG(total) AS avg_order FROM orders"}
]
}响应(TSV 格式 — 默认):
{
"active_users": {
"data": "id\tname\n1\tAlice\n2\tBob\n3\tCharlie",
"rows": 3,
"truncated": false,
"time_ms": 12
},
"recent_orders": {
"data": "id\ttotal\n501\t129.00\n500\t49.99",
"rows": 2,
"truncated": false,
"time_ms": 8
}
}无需 ::text 转换 — 整数、浮点数、时间戳、数组、NULL 均可原生工作。
错误上下文
当查询因列错误而失败时,a2db 会丰富错误消息:
column "nme" does not exist
Did you mean: name?
Available columns: id (integer), name (text), email (text), active (integer)为什么选择 TSV?
LLM 上下文窗口很昂贵。JSON 行数据非常冗长 — 每一行都会重复每个列名,并添加大括号、逗号和引号。TSV 是一个扁平网格:一个标题行,然后是仅由制表符分隔的值。
对于 100 行、5 列的结果集,TSV 通常比 JSON 行格式少使用 40-60% 的 token。结构化 JSON 信封仍然为您提供元数据(行数、截断状态) — 只有行有效载荷是 TSV。
如果您需要每行都带有列名的完整结构化输出,请设置 format="json"。
安全性
只读强制
每个查询在执行前都会由 SQLGlot 解析:
已阻止: INSERT, UPDATE, DELETE, DROP, TRUNCATE, ALTER, CREATE, GRANT, REVOKE
防绕过: 多语句攻击和注释包装的写入在 AST 级别被捕获,而不仅仅是关键字匹配
允许: SELECT, UNION, EXPLAIN, SHOW, DESCRIBE, PRAGMA
这是纵深防御 — 您还应该使用只读数据库用户,但即使该用户具有写入权限,a2db 也不会允许写入通过。
写入支持已在核心中实现,但尚未通过 MCP 公开。计划:按连接的写入权限,由人类操作员明确启用 — 而非代理。参见 TODO.md。
凭据存储
连接以 TOML 文件形式保存在 ~/.config/a2db/connections/ 中。
${DB_PASSWORD}语法 — 环境变量引用按字面存储,仅在连接时展开。密钥保留在您的环境中,而不是磁盘上。列表输出中无密钥 —
list_connections显示项目/环境/数据库和数据库类型,绝不显示 DSN 或密码连接文件位于您的本地机器上,且在任何存储库之外
部署范围
a2db 目前作为本地 stdio MCP 服务器运行。它从启动它的进程(您的 shell、Claude Code、Docker)继承环境变量。这是本地 MCP 服务器的标准模型 — 与 DBHub、Google Toolbox 等使用的方法相同。
计划: 根据 MCP 规范进行带 OAuth 2.1 的远程 HTTP 传输。目前,如果在 Docker 中运行,请在容器运行时通过环境变量注入密钥。
对比
特性 | a2db | DBHub | Google Toolbox | PGMCP | Supabase MCP |
数据库 | 5 (PG, SQLite, MySQL, Oracle, MSSQL) | 5 (PG, MySQL, MSSQL, MariaDB, SQLite) | 40+ (云 + OSS) | 仅 PG | PG (Supabase) |
批量查询 | 命名字典 + 列表 | 分号分隔 | 无 | 无 | 无 |
默认连接 | 设置一次,全部使用 | 每个查询 | N/A | 单个 DB | 单个项目 |
只读 | SQLGlot AST (强制) | 关键字检查 (配置) | 提示/注释 | 只读事务 + 正则表达式 | 配置标志 |
写入支持 | 计划中 (按连接) | 配置标志 | 通过工具定义 | 无 | 配置标志 |
输出 | JSON + TSV 数据 | 结构化文本 | MCP 协议 | 表 / JSON / CSV | JSON |
模式发现 | 3 个详细级别 | 专用工具 | 预构建工具 | 通过 NL-to-SQL | 专用工具 |
预配置 | MCP 配置中的 | 配置文件 | YAML 配置 | 环境变量 | 云管理 |
凭据 | DSN 中的 | DSN 字符串 | 环境变量 + GCP IAM | 环境变量 | OAuth 2.1 |
驱动程序捆绑 | 全部包含 | 全部包含 | 各异 | 内置 | 已管理 |
CLI | 是 | 否 | 是 | 是 | 否 |
错误上下文 | 列建议 + 类型 | 否 | 否 | 否 | 否 |
许可证 | Apache 2.0 | MIT | Apache 2.0 | Apache 2.0 | Apache 2.0 |
何时使用什么:
a2db — 具有整洁输出的多数据库批量查询,代理优先设计,快速设置
DBHub — 通过 TOML 配置的自定义工具,Web 工作台 UI
Google Toolbox — GCP 生态系统,IAM 集成,40+ 数据源
PGMCP — PostgreSQL 的自然语言转 SQL(需要 OpenAI 密钥)
Supabase MCP — 完整的 Supabase 平台管理(边缘函数、分支、存储)
按环境设置
本地 (macOS / Linux)
pip install a2db
# CLI
a2db login -p myapp -e dev -d main 'postgresql://user:pass@localhost/mydb'
# Or add as MCP server (see Quick Start)Docker
FROM python:3.12-slim
RUN pip install a2db
CMD ["a2db-mcp", "--register", "myapp/prod/main", "postgresql://user:${DB_PASSWORD}@host/mydb"]docker run -e DB_PASSWORD=secret -i my-a2db-image密钥在运行时作为环境变量注入 — 绝不会烘焙到镜像中。
CI / 自动化
pip install a2db
# Pre-configured — no login needed
a2db-mcp --register myapp/ci/main "postgresql://ci_user:${CI_DB_PASSWORD}@db-host/mydb"
# Or use CLI directly
a2db login -p myapp -e ci -d main "postgresql://ci_user:${CI_DB_PASSWORD}@db-host/mydb"
a2db query -p myapp -e ci -d main "SELECT COUNT(*) FROM migrations"开发
make bootstrap # Install deps + hooks
make check # Lint + test + security (full gate)
make test # Tests with coverage (90% minimum)
make lint # Lint only (never modifies files)
make fix # Auto-fix + lint许可证
Apache 2.0
This server cannot be deployed
Maintenance
Related MCP Connectors
- dataOAuthco.thinair
PostgreSQL, MySQL, and SQL Server in one session. 26 read-only MCP tools for AI agents.
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceThe Multi DB MCP Server is a high-performance implementation of the Database Model Context Protocol designed to revolutionize how AI agents interact with databases. Currently supporting MySQL and PostgreSQL databases.436MIT
- AlicenseAqualityCmaintenanceEnables connecting to and querying multiple database types (PostgreSQL, MySQL, SQLite) through a unified interface. Supports managing multiple concurrent database connections with connection pooling and SQL query execution through MCP tools.518 npmMIT
- AlicenseAqualityAmaintenanceZero-config MCP server that empowers AI agents to safely query SQL and NoSQL databases like PostgreSQL, MySQL, SQLite, MongoDB, and Redis.5123 npm1MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that provides database operations as tools for LLM-powered applications. Supports PostgreSQL, MySQL, and MongoDB databases with connection pooling and flexible result formatting.-