Skip to main content
Glama
yoselabs

a2db

Official
by yoselabs

Agent: "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-mcp

Claude 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 main

MCP 工具

工具

描述

login

保存连接 — 通过先连接进行验证

logout

删除已保存的连接

list_connections

列出连接(不暴露密钥)

execute

运行带分页的命名批量查询

search_objects

探索模式 — 表、列,具有详细级别

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 配置中的 --register

配置文件

YAML 配置

环境变量

云管理

凭据

DSN 中的 ${ENV_VAR}

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


Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    The 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.
    436
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    5
    18 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Zero-config MCP server that empowers AI agents to safely query SQL and NoSQL databases like PostgreSQL, MySQL, SQLite, MongoDB, and Redis.
    5
    123 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    -