a2db MCP sunucusu
✓ DoğrulandıYapay zeka ajanlarına, toplu sorgular ve yapılandırılmış TSV çıktısı kullanarak birden fazla veritabanına güvenli ve salt okunur erişim sağlar.
Ayrıca bilinen adı agentic-eng/a2db
- Yıldızlar
- 2
- Araçlar
- 5
- İndirmeler, 30 gün
- 173
- En son sürüm
- 0.2.1
- Son commit
- 13 Nis 2026
- Lisans
- Apache-2.0
a2db MCP nedir?
a2db bir MCP sunucusudur. Yapay zeka ajanlarına, toplu sorgular ve yapılandırılmış TSV çıktısı kullanarak birden fazla veritabanına güvenli ve salt okunur erişim sağlar. 5 araç sunar; örneğin login, logout, list_connections.
Özet, projenin README dosyasından oluşturuldu
a2db MCP sunucusu hakkında
a2db; yapay zeka ajanlarına PostgreSQL, SQLite, MySQL, Oracle ve SQL Server dahil olmak üzere beş farklı veritabanı türüne güvenli ve salt okunur erişim sağlar. Ajanların tek bir araç çağrısında birden fazla isimlendirilmiş sorgu çalıştırmasına izin vererek, tekli sorgu yürütme verimsizliğini çözmek için tasarlanmıştır. Bu sunucu, stdio üzerinden yerel olarak çalışır ve bir yapılandırma dosyası kullanılarak Claude Code, Claude Desktop veya Cursor gibi istemcilere entegre edilebilir.
Güvenlik temel odak noktasıdır; veritabanı kullanıcısı bu yetkilere sahip olsa bile INSERT veya DELETE gibi tüm yazma işlemlerini engellemek için SQLGlot AST ayrıştırmasını kullanır. Token kullanımını optimize etmek için sunucu, verileri yapılandırılmış bir JSON zarfı içinde kompakt bir TSV formatında döndürür; bu da standart JSON satırlarına kıyasla bağlam penceresi tüketimini %40-60 oranında azaltabilir. Kullanıcılar, ortam değişkeni genişletme özelliğini kullanarak hassas kimlik bilgilerini güvende tutarken, bağlantıları bir CLI aracılığıyla yönetebilir veya --register bayrağını kullanarak MCP yapılandırmalarında önceden kaydedebilirler.
Neler yapabilirsiniz
- 1Toplu veritabanı sorguları yürütmeBir yapay zeka ajanı, aktif kullanıcılar ve onların son siparişleri gibi birbiriyle ilişkili birden fazla veri kümesini tek bir istekte alabilir.
- 2LLM token maliyetlerini düşürmeSunucu, yapay zeka modeline gönderilen metin miktarını en aza indirmek için düz bir ızgara (grid) formatı kullanır.
Projenin README dosyasından alınmıştır. Her kullanım durumu, oradaki bir alıntı ile kontrol edilir.
a2db MCP nasıl yüklenir
Biçimler 10 Kas 2026 tarihinde doğrulandıCursor'a ekleGoose'a eklea2db MCP'yi Claude Code içine yükleyin
$ claude mcp add a2db -- uvx a2dba2db MCP'yi Cursor içine yükleyin
~/.cursor/mcp.json
{
"mcpServers": {
"a2db": {
"command": "uvx",
"args": [
"a2db"
]
}
}
}a2db MCP'yi VS Code içine yükleyin
.vscode/mcp.json
{
"servers": {
"a2db": {
"type": "stdio",
"command": "uvx",
"args": [
"a2db"
]
}
}
}a2db MCP'yi VS Code CLI içine yükleyin
$ code --add-mcp '{"name":"a2db","type":"stdio","command":"uvx","args":["a2db"]}'a2db MCP'yi Claude Desktop içine yükleyin
claude_desktop_config.json
{
"mcpServers": {
"a2db": {
"command": "uvx",
"args": [
"a2db"
]
}
}
}a2db MCP'yi Codex içine yükleyin
$ codex mcp add a2db -- uvx a2dba2db MCP'yi Codex config.toml içine yükleyin
~/.codex/config.toml
[mcp_servers.a2db] command = "uvx" args = ["a2db"]
a2db MCP'yi Gemini CLI içine yükleyin
$ gemini mcp add -s user a2db uvx -- a2dba2db MCP'yi Gemini settings.json içine yükleyin
~/.gemini/settings.json
{
"mcpServers": {
"a2db": {
"command": "uvx",
"args": [
"a2db"
]
}
}
}a2db MCP araçları 5
README dosyasından algılandıloginlogoutlist_connectionsexecutesearch_objects
| login | — | |
| logout | — | |
| list_connections | — | |
| execute | — | |
| search_objects | — |
Yapılandırma
DB_PASSWORD
| Ad | Açıklama | Sunucu |
|---|---|---|
| DB_PASSWORD | — |
Otomatik kontroller
Çalıştırıldı 14 Kas 2026Tam rapor →Otomatik kontrollerimizden geçti. Bu bir güvenlik denetimi değildir: kodu okuyun ve sunucuya ihtiyaç duyduğu en dar erişimi verin. Kontroller nasıl çalışır
- Kaynak deposu bağlantılı ve erişilebiliragentic-eng/a2db is public and reachablegithub.com/agentic-eng/a2db ↗Geçti
- Paket, bu depoyu kaynağı olarak gösteriyorKontrol edilmedi
- Derleme kökeni (Sigstore onayı)Sigstore attestation for a2dbpypi.org/project/a2db/ ↗Geçti
- Açık kaynak lisansı (OSI)Apache-2.0spdx.org/licenses/Apache-2.0.html ↗Geçti
- Son bir yıl içinde commit veya sürüm mevcutLast commit or release 2026-04-13github.com/agentic-eng/a2db ↗Geçti
- OpenSSF ScorecardKontrol edilmedi
- Paket adı popüler bir pakete yakın değilNo popular package one edit away from a2dbGeçti
- Pakette veya bağımlılıklarında kritik uyarı yok43 resolved dependencies checked; no critical advisoryosv.dev ↗Geçti
- Modele yönelik gizli talimat yok5 tool descriptions and the README read; no override phrases, credential paths or hidden charactersGeçti
- Yıkıcı araçlar etiketlenmişKontrol edilmedi
- Uzak uç nokta MCP el sıkışmasına yanıt veriyorKontrol edilmedi
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"
Why a2db?
Most database MCP servers make you run one query at a time, repeat connection details on every call, and return results double-encoded inside JSON strings. a2db fixes all of that:
- Pre-configured connections — define databases in
.mcp.jsonwith--register, agent queries immediately - Batch queries — run multiple named queries in a single tool call
- Default connection — set connection once, use it across all queries in a batch
- Clean output — structured JSON envelope with compact TSV data and per-query timing (see why TSV?)
- Read-only enforced — SQLGlot AST parsing blocks all write operations
- All drivers bundled —
pip install a2dband you're done - Secrets stay in env —
${DB_PASSWORD}in DSNs, expanded only at connection time
Supported Databases
| Database | Driver | Async |
|---|---|---|
| PostgreSQL | asyncpg | native |
| SQLite | aiosqlite | native |
| MySQL / MariaDB | mysql-connector-python | wrapped |
| Oracle | oracledb | wrapped |
| SQL Server | pymssql | wrapped |
Quick Start
pip install a2db
As an MCP Server (recommended)
Claude Code (with pre-configured connection):
claude mcp add -s user a2db -- a2db-mcp \
--register myapp/prod/main 'postgresql://user:${DB_PASSWORD}@host/mydb'
Claude Code (minimal — agent calls login on demand):
claude mcp add -s user a2db -- a2db-mcp
Claude Desktop / Cursor / any MCP client (.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"
}
}
}
}
Multiple databases:
{
"args": [
"a2db-mcp",
"--register", "myapp/prod/main", "postgresql://user:${DB_PASSWORD}@host/maindb",
"--register", "myapp/prod/analytics", "postgresql://user:${DB_PASSWORD}@host/analytics"
]
}
--register pre-registers connections at server startup — the agent can query immediately. Passwords use ${ENV_VAR} syntax and are expanded at connection time, never stored in plaintext.
As a 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 Tools
| Tool | Description |
|---|---|
login |
Save a connection — validates by connecting first |
logout |
Remove a saved connection |
list_connections |
List connections (no secrets exposed) |
execute |
Run named batch queries with pagination |
search_objects |
Explore schema — tables, columns, with detail levels |
execute — the core tool
Named dict with default connection (preferred):
{
"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"}
}
}
List format (auto-named 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"}
]
}
Response (TSV format — default):
{
"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
}
}
No ::text casts needed — integers, floats, timestamps, arrays, NULLs all work natively.
Error context
When a query fails with a column error, a2db enriches the message:
column "nme" does not exist
Did you mean: name?
Available columns: id (integer), name (text), email (text), active (integer)
Why TSV?
LLM context windows are expensive. JSON row data is verbose — every row repeats every column name, adds braces, commas, and quotes. TSV is a flat grid: one header row, then just values separated by tabs.
For a 100-row, 5-column result set, TSV typically uses 40-60% fewer tokens than JSON row format. The structured JSON envelope still gives you metadata (row count, truncation status) — only the row payload is TSV.
Set format="json" if you need full structured output with column names on every row.
Security
Read-Only Enforcement
Every query is parsed by SQLGlot before execution:
- Blocked: INSERT, UPDATE, DELETE, DROP, TRUNCATE, ALTER, CREATE, GRANT, REVOKE
- Bypass-resistant: multi-statement attacks and comment-wrapped writes are caught at the AST level, not just keyword matching
- Allowed: SELECT, UNION, EXPLAIN, SHOW, DESCRIBE, PRAGMA
This is defense-in-depth — you should also use a read-only database user, but a2db won't let writes through even if the user has write permissions.
Write support is implemented in the core but not yet exposed via MCP. Planned: per-connection write permissions, explicitly enabled by the human operator — not the agent. See TODO.md.
Credential Storage
Connections are saved in ~/.config/a2db/connections/ as TOML files.
${DB_PASSWORD}syntax — environment variable references are stored literally and expanded only at connection time. Secrets stay in your environment, not on disk.- No secrets in list output —
list_connectionsshows project/env/db and database type, never DSNs or passwords - Connection files are local to your machine and outside any repository
Deployment Scope
a2db currently runs as a local stdio MCP server. It inherits environment variables from the process that launches it (your shell, Claude Code, Docker). This is the standard model for local MCP servers — the same approach used by DBHub, Google Toolbox, and others.
Planned: remote HTTP transport with OAuth 2.1 per the MCP spec. For now, if running in Docker, inject secrets via environment variables at container runtime.
Comparison
| Feature | a2db | DBHub | Google Toolbox | PGMCP | Supabase MCP |
|---|---|---|---|---|---|
| Databases | 5 (PG, SQLite, MySQL, Oracle, MSSQL) | 5 (PG, MySQL, MSSQL, MariaDB, SQLite) | 40+ (cloud + OSS) | PG only | PG (Supabase) |
| Batch queries | Named dict + list | Semicolon-separated | No | No | No |
| Default connection | Set once, use for all | Per-query | N/A | Single DB | Single project |
| Read-only | SQLGlot AST (enforced) | Keyword check (config) | Hint/annotation | Read-only tx + regex | Config flag |
| Write support | Planned (per-connection) | Config flag | Via tool definition | No | Config flag |
| Output | JSON + TSV data | Structured text | MCP protocol | Table / JSON / CSV | JSON |
| Schema discovery | 3 detail levels | Dedicated tool | Prebuilt tools | Via NL-to-SQL | Dedicated tools |
| Pre-configured | --register in MCP config |
Config file | YAML config | Env var | Cloud-managed |
| Credentials | ${ENV_VAR} in DSN |
DSN strings | Env vars + GCP IAM | Env var | OAuth 2.1 |
| Drivers bundled | All included | All included | Varies | Built-in | Managed |
| CLI | Yes | No | Yes | Yes | No |
| Error context | Column suggestions + types | No | No | No | No |
| License | Apache 2.0 | MIT | Apache 2.0 | Apache 2.0 | Apache 2.0 |
When to use what:
- a2db — multi-DB batch queries with clean output, agent-first design, fast setup
- DBHub — custom tools via TOML config, web workbench UI
- Google Toolbox — GCP ecosystem, IAM integration, 40+ sources
- PGMCP — natural-language-to-SQL for PostgreSQL (requires OpenAI key)
- Supabase MCP — full Supabase platform management (edge functions, branching, storage)
Setup by Environment
Local (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
Secrets are injected as environment variables at runtime — never baked into the image.
CI / Automation
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"
Development
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
License
Apache 2.0
a2db MCP soruları
a2db MCP'yi Claude Code'a nasıl eklerim?
Terminalinizde claude mcp add a2db -- uvx a2db komutunu çalıştırın. Her projede kullanılabilir olması için --scope user ekleyin.
a2db MCP'yi Cursor'a nasıl eklerim?
~/.cursor/mcp.json dosyasını açın ve yukarıdaki yükleme bölümünde gösterilen Cursor yapılandırmasını kullanarak sunucuyu mcpServers altına ekleyin.
a2db MCP hangi araçları sunar?
5 araç sunar; bunlar arasında login, logout, list_connections, execute, search_objects yer alır.
a2db veritabanı güvenliğini nasıl sağlar?
INSERT, UPDATE ve DELETE gibi tüm yazma işlemlerini engellemek için SQLGlot AST ayrıştırmasını kullanarak sorguların salt okunur kalmasını sağlar.
Veritabanı kimlik bilgileri nasıl yönetilir?
Sırlar, ${ENV_VAR} sözdizimi kullanılarak ortam değişkenlerinde tutulur ve yalnızca bağlantı sırasında genişletilir; asla açık metin olarak saklanmaz.
Sunucu sorgu sonuçları için neden TSV formatını kullanıyor?
TSV, JSON satır formatına göre %40-60 daha az token kullanarak LLM bağlam pencereleri (context window) için daha verimli hale gelir.