Subscribe Now
Trending News
Shorts

postgres-ro: read-only PostgreSQL pro coding agenty

postgres-ro: read-only PostgreSQL pro coding agenty

postgres-ro je malý Python MCP server, který dává Codexu a dalším MCP klientům řízený přístup k PostgreSQL databázi. Jeho hlavní smysl není nahradit běžného databázového klienta, ale umožnit coding agentovi ověřovat si strukturu tabulek, sloupců a dat přímo proti databázi. Server umí vypsat viditelná schémata, vypsat tabulky a views v konkrétním schématu, popsat sloupce tabulky nebo view a spouštět read-only SQL dotazy. Prakticky to řeší situaci, kdy agent píše nebo kontroluje backendový kód a místo hádání nad názvy tabulek se může podívat na skutečný stav databáze.

Za projektem stojí vývojář vystupující na GitHubu jako eduardtomasek. Repozitář je veřejný a popisuje postgres-ro jako MCP server pro read-only přístup coding agenta k PostgreSQL. Projekt zapadá do širšího modelu MCP, tedy otevřeného standardu pro připojování AI aplikací k externím systémům, jako jsou databáze, soubory nebo specializované nástroje. To je důležité hlavně u vývojářských agentů, protože bez podobného rozhraní musí uživatel často ručně kopírovat schéma, ukázky dat nebo výstupy z dotazů.

postgres-ro is a small Python MCP server for Codex and other MCP clients. It provides read-only access to a PostgreSQL database.

Server vystavuje čtyři nástroje: list_schemas, list_tables, describe_table a query_readonly. Typický tok práce začíná orientací ve schématech, pokračuje výběrem tabulek a kontrolou jejich sloupců, a teprve potom agent skládá SQL dotaz. query_readonly vrací sloupce, řádky a informaci o limitu výsledků, přičemž běžné SELECT a WITH dotazy jsou omezené na maximálně 200 řádků. EXPLAIN se spouští přímo, takže nástroj může pomoct i při základním ověřování plánů dotazů.

Read-only část není postavená jen na tom, že se uživateli řekne, aby neposílal zápisové dotazy. postgres-ro povoluje SELECT, WITH a EXPLAIN, odmítá běžné zápisové a DDL příkazy jako INSERT, UPDATE, DELETE, DROP, ALTER nebo CREATE a blokuje i víc SQL statementů v jednom vstupu. Navíc odmítá konstrukce jako SELECT INTO, locking klauzule typu FOR UPDATE a některé známé PostgreSQL funkce se side effecty. Implementace kombinuje SQL AST validaci přes sqlglot s vynuceným default_transaction_read_only = on, ale sama dokumentace projektu zdůrazňuje, že skutečná bezpečnostní hranice má být pořád samostatná PostgreSQL role s read-only oprávněním.

Technicky jde o lokální stdio MCP server, který se spouští přes Python z virtuálního prostředí. Používá mcp[cli] pro vystavení MCP nástrojů, psycopg[binary] pro komunikaci s PostgreSQL a sqlglot pro parsování SQL před spuštěním. Připojovací řetězec může načíst z DATABASE_URL_SECRET, DATABASE_URL_SECRET_FILE, DATABASE_URL nebo DATABASE_URL_FILE, takže se dá držet mimo repozitář v lokálním secret souboru. Pro Codex se konfiguruje přes ~/.codex/config.toml, což odpovídá tomu, že uživatelská konfigurace Codexu podle oficiální dokumentace žije právě v tomto souboru.

Podobné PostgreSQL MCP servery už existují, včetně balíčku @modelcontextprotocol/server-postgres, který také poskytuje read-only přístup ke schématům a dotazům. postgres-ro je ale zaměřený na velmi konkrétní vývojářský workflow: lokální server pro coding agenta, omezené nástroje, explicitní whitelist SQL typů, limit výsledků a doporučení použít dedikovanou databázovou roli. Pro tým, který chce agentovi dát možnost kontrolovat staging databázi bez rizika zápisu, je to jednoduchý stavební blok místo obecného databázového asistenta.

Zdroje:

Related posts