Serwery MCP dla baz danych: Postgres MCP Pro, DBHub, MCP Toolbox, Supabase, Neon i MongoDB
Serwer MCP dla bazy danych pozwala Claude Code, Codeksowi lub Cursorowi odczytać żywy schemat, wykonywać zapytania i sprawdzać plany zapytań zamiast zgadywać strukturę tabel. Według stanu na wrzesień 2026 najlepsze opcje to Postgres MCP Pro do strojenia Postgresa, DBHub dla kilku silników SQL, MCP Toolbox od Google oraz serwery Supabase, Neona i MongoDB. Każdy powinien działać tylko do odczytu.
Ta strona jest dla programistów i tech leadów, którzy już pracują z agentem i chcą, żeby działał na prawdziwych danych. Agent napisał zapytanie do tabeli payment, choć nazywa się payments, przyjął, że created_at to string, choć kolumna ma typ timestamptz, a potem zaproponował indeks dla zapytania, które nigdy się nie wykonuje. Każdy z tych błędów bierze się ze zgadywania. Połączenie tylko do odczytu zastępuje zgadywanie dowodami, a migracja wdrażana przez CI trzyma agenta z dala od zapisów.
Co skonfigurujesz
Dział zatytułowany „Co skonfigurujesz”- Rolę Postgresa tylko do odczytu, z limitem czasu zapytań, przez którą łączy się każdy serwer z tej strony
- Sprawdzone polecenia instalacji Postgres MCP Pro, DBHub, MCP Toolbox, Supabase, Neona i MongoDB we wszystkich trzech agentach
- Gotowy workflow, który znajduje najwolniejsze zapytania na stagingu i proponuje indeksy z planami przed i po
- Pętlę zmiany schematu, w której agent sprawdza bazę, pisze plik migracji, a wdraża go CI
- Pułapki: błędną nazwę pakietu, którą wciąż publikują starsze poradniki, i flagi, które już nie istnieją
Który serwer MCP pasuje do twojej bazy?
Dział zatytułowany „Który serwer MCP pasuje do twojej bazy?”Wybieraj najpierw według bazy, potem według zadania. Liczby gwiazdek GitHuba odczytano 26.09.2026 (API GitHuba) i zapisano w dossier badawczym MCP tej strony.
| Serwer | Bazy | Przełącznik tylko do odczytu | Wybierz, gdy | Popularność (26.09.2026) |
|---|---|---|---|---|
| Postgres MCP Pro (Crystal DBA) | PostgreSQL | --access-mode=restricted | Stroisz Postgresa: najcięższe zapytania, plany, porady indeksowe, kontrola kondycji | ★3,3 tys. |
| DBHub (Bytebase) | Postgres, MySQL, MariaDB, SQL Server, Oracle, SQLite | readonly = true dla narzędzia w dbhub.toml | Jeden serwer dla kilku silników, z limitem wierszy i czasu zapytań | ★3,6 tys. |
| MCP Toolbox for Databases (Google) | Postgres, MySQL, BigQuery, Spanner, MongoDB, Redis i inne | Brak w serwerze (sprawdzone w 1.13.1, 26.09.2026); użyj roli tylko do odczytu i wąskiego zestawu narzędzi | Chcesz gotowych narzędzi monitoringu albo własnych narzędzi w tools.yaml | ★16,5 tys. |
| Supabase MCP (Supabase) | Projekty Supabase | read_only=true w URL-u | Baza stoi na Supabase i chcesz też dokumentacji i konfiguracji | ★2,9 tys. |
| Neon MCP (Neon) | Projekty Neona | readonly=true w URL-u | Baza stoi na Neonie i chcesz gałęzi do bezpiecznych eksperymentów | ★650 |
| MongoDB MCP Server (MongoDB) | MongoDB i Atlas | --readOnly | Bazy dokumentowe i zarządzanie Atlasem | ★1,1 tys. |
Warto znać jeszcze dwa. CLI Prismy uruchamia lokalny serwer MCP poleceniem prisma mcp, ale jego narzędzia obejmują migrate-dev (które stosuje migracje; prisma@6 udostępnia też migrate-reset), więc kieruj go wyłącznie na jednorazową bazę deweloperską. SQLite nie potrzebuje osobnego serwera: DBHub przyjmuje DSN SQLite, a stary serwer referencyjny mcp-server-sqlite nie miał wydania od 25.04.2025.
Utwórz rolę tylko do odczytu, zanim cokolwiek podłączysz
Dział zatytułowany „Utwórz rolę tylko do odczytu, zanim cokolwiek podłączysz”Przełącznik w serwerze to druga linia obrony. Pierwsza to rola bazodanowa, która nie może pisać, bo rola działa nawet wtedy, gdy ktoś pomyli flagę albo serwer zmieni domyślne ustawienia. Wykonaj to raz na każdej bazie stagingowej jako właściciel, w psql:
-- Postgres: rola logowania, która czyta, widzi statystyki zapytań i nic więcejCREATE ROLE agent_ro LOGIN;\password agent_roREVOKE CREATE ON SCHEMA public FROM PUBLIC; -- Postgres 14 i starsze: PUBLIC nadal może tworzyć tabeleGRANT CONNECT ON DATABASE app TO agent_ro;GRANT USAGE ON SCHEMA public TO agent_ro;GRANT SELECT ON ALL TABLES IN SCHEMA public TO agent_ro;ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO agent_ro;GRANT pg_read_all_stats TO agent_ro; -- widzi tekst zapytań wszystkich użytkowników w pg_stat_statementsALTER ROLE agent_ro SET default_transaction_read_only = on;ALTER ROLE agent_ro SET statement_timeout = '30s';\password pyta o hasło i wysyła je zahaszowane, więc nie trafia ono do historii powłoki ani do logu serwera. Granicą są uprawnienia: rola ma SELECT i nic więcej. default_transaction_read_only to tylko druga warstwa, bo każdy klient może ją wyłączyć dla własnej sesji przez SET albo BEGIN READ WRITE. ALTER DEFAULT PRIVILEGES obejmuje tylko tabele, które później utworzy rola wykonująca to polecenie. Jeśli migracje działają jako inny właściciel, wykonaj je także jako ten właściciel, inaczej nowe tabele pozostaną dla agenta niewidoczne. Ciąg połączenia (connection string) wyeksportuj w powłoce jako STAGING_DATABASE_URL, nigdy w pliku śledzonym przez Git.
Zainstaluj Postgres MCP Pro w Claude Code, Codeksie i Cursorze
Dział zatytułowany „Zainstaluj Postgres MCP Pro w Claude Code, Codeksie i Cursorze”Postgres MCP Pro to pakiet Pythona w PyPI (postgres-mcp 0.3.0, wydany 16.05.2025), więc uruchamiasz go przez uvx. Według stanu na 26.09.2026 od 16 miesięcy nie ma nowego wydania w PyPI, więc przypnij wersję (uvx postgres-mcp==0.3.0) i traktuj zestaw postgres/monitor z Toolboksa, opisany niżej, jako utrzymywaną alternatywę dla workflow z wolnymi zapytaniami. Pakiet npm o tej samej nazwie to zupełnie inny projekt. Przykłady w README używają --access-mode=unrestricted, więc zmieniaj tę flagę za każdym razem, gdy któryś kopiujesz.
# Terminal, root repozytorium: zapisuje .mcp.json; ${STAGING_DATABASE_URL} jest rozwijane z powłoki przy starcieclaude mcp add -s project postgres -e 'DATABASE_URI=${STAGING_DATABASE_URL}' \ -- uvx postgres-mcp==0.3.0 --access-mode=restricted# ~/.codex/config.toml — env_vars przekazuje zmienną z powłoki[mcp_servers.postgres]command = "uvx"args = ["postgres-mcp==0.3.0", "--access-mode=restricted"]env_vars = ["DATABASE_URI"]Przed uruchomieniem codex wyeksportuj DATABASE_URI (ciąg połączenia roli agent_ro). codex mcp get postgres --json pokazuje sparsowany wpis.
W ~/.cursor/mcp.json zapis ${env:NAZWA} czyta zmienną z powłoki:
{ "mcpServers": { "postgres": { "command": "uvx", "args": ["postgres-mcp==0.3.0", "--access-mode=restricted"], "env": { "DATABASE_URI": "${env:STAGING_DATABASE_URL}" } } }}Porady indeksowe wymagają dwóch rozszerzeń w bazie: pg_stat_statements (statystyki zapytań; musi być w shared_preload_libraries) i hypopg (indeksy hipotetyczne). Zarządzane usługi Postgresa zwykle oferują oba. Bez nich serwer nadal czyta schematy i wykonuje explain_query, ale get_top_queries i narzędzia indeksowe nie mają na czym pracować.
Znajdź wolne zapytania na stagingu i zaproponuj indeksy
Dział zatytułowany „Znajdź wolne zapytania na stagingu i zaproponuj indeksy”Od tego przykładu zacznij, bo od początku do końca działa tylko do odczytu, a wynik da się zmierzyć. Postgres MCP Pro udostępnia get_top_queries, analyze_workload_indexes, analyze_query_indexes, explain_query i analyze_db_health. Z hypopg narzędzie explain_query potrafi zaplanować zapytanie tak, jakby indeks już istniał.
Powinieneś zobaczyć krótką tabelę z jednym wierszem na zapytanie i instrukcją CREATE INDEX CONCURRENTLY w każdym wierszu. Jeśli w każdym wierszu jest „brak poprawy”, w obciążeniu dominuje coś, czego indeks nie naprawi, na przykład skan sekwencyjny małej tabeli albo oczekiwanie na blokady. Wtedy poproś o analyze_db_health.
Drugi prompt jest ważny, bo indeks nie zawsze jest rozwiązaniem. Pętlę N+1 albo nieograniczony include taniej usunąć niż indeksować, a agent widzi to tylko wtedy, gdy ma jednocześnie statystyki zapytań i kod.
Podłącz DBHub, MCP Toolbox, Supabase, Neona i MongoDB
Dział zatytułowany „Podłącz DBHub, MCP Toolbox, Supabase, Neona i MongoDB”Poniżej reszta katalogu. Każda podsekcja podaje sprawdzone polecenie instalacji i ustawienie, które trzyma serwer w trybie tylko do odczytu.
DBHub: jeden serwer dla kilku silników SQL
Dział zatytułowany „DBHub: jeden serwer dla kilku silników SQL”DBHub 1.3.1 (npm @bytebase/dbhub) przeniósł zabezpieczenia do pliku dbhub.toml. Stare flagi --readonly i --max-rows zatrzymują teraz serwer z błędem. Odwołania ${VAR} w pliku są rozwijane ze zmiennych środowiskowych, więc plik można commitować bez hasła.
[[sources]]id = "staging"dsn = "${STAGING_DATABASE_URL}"query_timeout = 30
[[tools]]name = "execute_sql"source = "staging"readonly = truemax_rows = 500claude mcp add -s project dbhub -- npx -y @bytebase/dbhub@1.3.1 --transport stdio --config ./dbhub.toml[mcp_servers.dbhub]command = "npx"args = ["-y", "@bytebase/dbhub@1.3.1", "--transport", "stdio", "--config", "./dbhub.toml"]env_vars = ["STAGING_DATABASE_URL"]Codex 0.157.1 uruchamia serwer stdio tylko z krótką listą dozwolonych zmiennych (HOME, PATH, USER i podobne) oraz z nazwami podanymi w env_vars, więc bez tej linii ${STAGING_DATABASE_URL} nie dotrze do DBHub. Uruchamiaj codex z roota repozytorium, żeby ścieżka względna się rozwiązała.
{ "mcpServers": { "dbhub": { "command": "npx", "args": ["-y", "@bytebase/dbhub@1.3.1", "--transport", "stdio", "--config", "./dbhub.toml"] } } }Dla pojedynczego pliku SQLite możesz pominąć TOML i podać --dsn "sqlite:///absolute/path/dev.db". Bez dbhub.toml narzędzia nie mają żadnego ustawienia tylko do odczytu, więc samego DSN używaj wyłącznie na danych, które możesz stracić, albo wpisz DSN SQLite do pliku TOML powyżej.
MCP Toolbox for Databases: gotowe zestawy narzędzi
Dział zatytułowany „MCP Toolbox for Databases: gotowe zestawy narzędzi”Toolbox od Google (npm @toolbox-sdk/server 1.13.1) ładuje gotowy zestaw narzędzi dla danej bazy. README opisuje składnię --prebuilt=<database>/<toolset>. Zestaw monitor dla Postgresa zawiera list_query_stats, get_query_plan, list_database_stats, list_active_queries, long_running_transactions i list_locks, a nie ma w nim execute_sql. To najwęższa droga do opisanego wyżej przykładu z wolnymi zapytaniami. Połączenie konfigurujesz zmiennymi środowiskowymi, takimi jak POSTGRES_HOST, POSTGRES_DATABASE, POSTGRES_USER i POSTGRES_PASSWORD.
claude mcp add -s project toolbox-pg \ -e POSTGRES_HOST=staging-db -e POSTGRES_DATABASE=app -e POSTGRES_USER=agent_ro -e 'POSTGRES_PASSWORD=${AGENT_RO_PASSWORD}' \ -- npx -y @toolbox-sdk/server --prebuilt=postgres/monitor --stdio# ~/.codex/config.toml — env ustawia wartości; env_vars przekazuje nazwy zmiennych z powłoki[mcp_servers.toolbox-pg]command = "npx"args = ["-y", "@toolbox-sdk/server", "--prebuilt=postgres/monitor", "--stdio"]env = { POSTGRES_HOST = "staging-db", POSTGRES_DATABASE = "app", POSTGRES_USER = "agent_ro" }env_vars = ["POSTGRES_PASSWORD"]Wyeksportuj POSTGRES_PASSWORD w powłoce przed uruchomieniem codex. env_vars przyjmuje nazwy zmiennych, nigdy pary KEY=value.
{ "mcpServers": { "toolbox-pg": { "command": "npx", "args": ["-y", "@toolbox-sdk/server", "--prebuilt=postgres/monitor", "--stdio"], "env": { "POSTGRES_HOST": "staging-db", "POSTGRES_DATABASE": "app", "POSTGRES_USER": "agent_ro", "POSTGRES_PASSWORD": "${env:AGENT_RO_PASSWORD}" } } } }Supabase MCP: zawęź zakres w URL-u
Dział zatytułowany „Supabase MCP: zawęź zakres w URL-u”Supabase udostępnia zdalny serwer pod https://mcp.supabase.com/mcp z OAuth. Wpisz projekt i tryb tylko do odczytu w URL, żeby token wydany dla tej sesji nie sięgał innych projektów ani nie mógł pisać.
claude mcp add -s project --transport http supabase \ "https://mcp.supabase.com/mcp?project_ref=PROJECT_REF&read_only=true&features=database,docs"# następnie uruchom /mcp w Claude Code i zaloguj sięcodex mcp add supabase --url "https://mcp.supabase.com/mcp?project_ref=PROJECT_REF&read_only=true&features=database,docs"codex mcp login supabase{ "mcpServers": { "supabase": { "url": "https://mcp.supabase.com/mcp?project_ref=PROJECT_REF&read_only=true&features=database,docs" } } }PROJECT_REF to identyfikator projektu z URL-a panelu Supabase. README Supabase prosi o przeczytanie wytycznych bezpieczeństwa przed podłączeniem, a powód jest konkretny: wiersze z twoich tabel trafiają do modelu. Treść zgłoszenia supportowego „zignoruj poprzednie instrukcje” jest dla ciebie danymi, a dla agenta potencjalnym poleceniem. Podłączaj projekt deweloperski, nie produkcję. Wtyczka supabase w claude-plugins-official łączy ten serwer z dwoma skillami i 26.09.2026 miała 118 617 instalacji w katalogu Claude Marketplace. Instalujesz ją poleceniem claude plugin install supabase@claude-plugins-official w Claude Code albo codex plugin add supabase@openai-curated w Codeksie.
Neon MCP: tylko zdalnie
Dział zatytułowany „Neon MCP: tylko zdalnie”Pakiet npm Neona @neondatabase/mcp-server-neon jest przestarzały; npm odsyła do serwera zdalnego. Użyj URL-a z readonly=true i opcjonalnie projectId:
claude mcp add -s project --transport http neon "https://mcp.neon.tech/mcp?readonly=true&projectId=PROJECT_ID"# następnie uruchom /mcp w Claude Code i zaloguj sięcodex mcp add neon --url "https://mcp.neon.tech/mcp?readonly=true&projectId=PROJECT_ID"codex mcp login neon{ "mcpServers": { "neon": { "url": "https://mcp.neon.tech/mcp?readonly=true&projectId=PROJECT_ID" } } }Przy OAuth uprawnienie tylko do odczytu jest ustalane w chwili autoryzacji. Późniejsza zmiana URL-a nie rozszerza istniejącego tokenu, więc żeby zmienić tryb, autoryzujesz się ponownie. Jeśli w projekcie włączony jest IP Allow Neona, serwer MCP potrzebuje własnych wpisów na liście dozwolonych adresów, wymienionych w README Neona.
MongoDB MCP Server: --readOnly w każdym poleceniu
Dział zatytułowany „MongoDB MCP Server: --readOnly w każdym poleceniu”Serwer MongoDB (npm mongodb-mcp-server 3.0.4) czyta ciąg połączenia ze zmiennej MDB_MCP_CONNECTION_STRING. --readOnly usuwa z serwera wszystkie narzędzia tworzące, zmieniające i usuwające dane, zanim agent zobaczy ich listę.
claude mcp add -s project mongodb -e 'MDB_MCP_CONNECTION_STRING=${STAGING_MONGODB_URI}' \ -- npx -y mongodb-mcp-server@latest --readOnly# ~/.codex/config.toml — env_vars przekazuje zmienną z powłoki[mcp_servers.mongodb]command = "npx"args = ["-y", "mongodb-mcp-server@latest", "--readOnly"]env_vars = ["MDB_MCP_CONNECTION_STRING"]Przed uruchomieniem codex wyeksportuj MDB_MCP_CONNECTION_STRING (ciąg połączenia użytkownika tylko do odczytu).
{ "mcpServers": { "mongodb": { "command": "npx", "args": ["-y", "mongodb-mcp-server@latest", "--readOnly"], "env": { "MDB_MCP_CONNECTION_STRING": "${env:STAGING_MONGODB_URI}" } } } }Połącz serwer ze skillami dostawcy
Dział zatytułowany „Połącz serwer ze skillami dostawcy”Serwer MCP daje agentowi żywe dane. Skill daje mu zasady dostawcy, jak dobrze z tych danych korzystać. W pracy z bazami te dwie rzeczy się uzupełniają:
| Dostawca | Instalacja skilli | Co dodają |
|---|---|---|
| Supabase | npx skills add supabase/agent-skills | supabase (Auth, Storage, Edge Functions i inne) oraz supabase-postgres-best-practices (wydajność i RLS) |
| Neon | npx skills add neondatabase/agent-skills | Osiem skilli, w tym neon-postgres-branches i neon-postgres-egress-optimizer |
| Prisma | npx skills add prisma/skills | Dziewięć skilli, w tym prisma-cli, prisma-client-api i prisma-upgrade-v7 |
Listy skilli odczytano narzędziem skills 1.7.0 26.09.2026. Pełne porównanie skilli backendowych znajdziesz w najlepszych skillach backendowych i platformowych.
Ile kontekstu kosztuje serwer bazy danych?
Dział zatytułowany „Ile kontekstu kosztuje serwer bazy danych?”Schemat każdego narzędzia zajmuje kontekst agenta przez całą sesję. Zmierz to: uruchom /context w Claude Code przed dodaniem serwera i po nim, a dla wtyczki claude plugin details supabase@claude-plugins-official. Zawęź to, co się ładuje, przełącznikami samego serwera: sufiksem /<toolset> w Toolboksie, features=database,docs w Supabase i parametrami category w Neonie. W Codeksie enabled_tools i disabled_tools we wpisie serwera w config.toml filtrują narzędzia po stronie klienta. Więcej technik opisuje strona o ograniczaniu kosztu tokenów MCP.
Wdróż zmianę schematu bez dawania agentowi prawa zapisu
Dział zatytułowany „Wdróż zmianę schematu bez dawania agentowi prawa zapisu”Agent nigdy nie stosuje migracji. Sprawdza bazę przez serwer tylko do odczytu, pisze plik migracji, a twój pipeline CI stosuje go po przeglądzie. Zostaje jedna audytowana ścieżka do bazy, a pracę agenta najpierw weryfikują maszyny, zanim spojrzy na nią człowiek.
-
Sprawdź bazę przez MCP. Agent czyta bieżącą tabelę, jej indeksy, szacunkową liczbę wierszy i zapytania, które jej dotyczą. Nic się nie zmienia.
-
Napisz plik migracji, nie stosuj go. Plik trafia tam, gdzie oczekuje go twoje narzędzie do migracji. W Prismie
prisma migrate dev --create-onlytworzy migrację bez jej stosowania (tylko na lokalnej bazie deweloperskiej). -
Niech najpierw sprawdzą to maszyny. CI lintuje SQL, stosuje migrację na jednorazowej bazie zbudowanej z bieżącego schematu, uruchamia testy i zapisuje
EXPLAINdla zapytań, których dotyczy zmiana.npx -y squawk-cli migrations/*.sql(squawk-cli 2.66.0) wyłapuje instrukcje zakładające blokady, na przykład indeks utworzony bezCONCURRENTLY. -
Przeglądaj dowody, nie każdą linię. Recenzent czyta pull request: wynik lintera, plany przed i po oraz migrację wsteczną. Zatwierdza właściciel kodu odpowiedzialny za schemat. Zobacz, jak przeglądać pull request agenta.
-
Zastosuj w CI. Po merge’u pipeline stosuje migrację na stagingu, a potem na produkcji za osobnym zatwierdzeniem, poleceniem wdrożeniowym twojego narzędzia do migracji. Wycofanie to migracja wsteczna albo
DROP INDEX CONCURRENTLY. Wzorce zmian expand-and-contract opisują wzorce migracji baz danych.
Kroki 1 i 2 wykonuj w trybie planowania, żeby agent pokazał plan, zanim zapisze plik. Przy pracy bez nadzoru tryb -p odrzuca wywołania narzędzi, które nie zostały wcześniej dopuszczone, więc jawnie zezwól na serwer MCP i zapis w katalogu migracji:
claude -p "$(cat prompt.txt)" --allowedTools "mcp__postgres__*" "Write(migrations/**)"W CI ładuj konfigurację MCP jawnie przez --strict-mcp-config --mcp-config ci-mcp.json i dawaj zadaniu wyłącznie dane logowania tylko do odczytu.
Kroki 1 i 2 wykonuj w CLI albo aplikacji z podłączonym serwerem MCP. Po stronie CI codex exec przygotowuje migrację; żeby utworzyć plik, potrzebuje prawa zapisu w obszarze roboczym. Nadaj je profilem uprawnień :workspace (beta):
codex exec -c default_permissions=":workspace" "$(cat prompt.txt)"Starszy odpowiednik to codex exec -s workspace-write; używaj jednego albo drugiego, bo profile i starsza piaskownica się nie łączą.
Potem codex review może przejrzeć pull request jako drugi model. W CI dawaj zadaniu wyłącznie dane logowania tylko do odczytu.
Do kroków 1 i 2 użyj Plan Mode i przejrzyj nowy plik w widoku diff. Kroki CI są identyczne, bo nie zależą od agenta.
Skąd wiesz, że praca agenta na bazie jest poprawna?
Dział zatytułowany „Skąd wiesz, że praca agenta na bazie jest poprawna?”Sprawdzasz dowody, które zostawia każdy krok, a nie podsumowanie agenta:
- Każda odpowiedź pokazuje swój SQL. Poproś o dokładne instrukcje, które agent wykonał. Błędny join widać w pięciu liniach SQL, a błędnego wniosku nie widać.
- Porada indeksowa ma plany. Przyjmuj indeks tylko z
EXPLAINprzed i po ze stagingu oraz listą tabel, które spowolni. Po wdrożeniu porównaj średni czas tego samego zapytania wpg_stat_statements. - Migracje przechodzą bramki. Squawk, zastosowanie na świeżej bazie, zestaw testów i migracja wsteczna to wymagane kontrole. Zatwierdza właściciel schematu.
- Zapis jest niemożliwy z założenia. Rola tylko do odczytu razem z przełącznikiem serwera sprawiają, że destrukcyjna instrukcja kończy się błędem w bazie. Sprawdź to raz: poproś agenta o wykonanie
DELETE FROM orders WHERE falsei potwierdź, że baza odmówiła.
Co psuje się w serwerach MCP dla baz danych i jak to naprawić?
Dział zatytułowany „Co psuje się w serwerach MCP dla baz danych i jak to naprawić?”npx postgres-mcp startuje, ale nie pojawiają się narzędzia Postgresa. Pakiet npm postgres-mcp (1.0.4) to niezwiązany projekt. Starsze poradniki, w tym wcześniejsze wersje tej strony, publikują to polecenie. Usuń wpis i zainstaluj Postgres MCP Pro poleceniem uvx postgres-mcp==0.3.0 --access-mode=restricted.
DBHub kończy działanie komunikatem „—readonly flag is no longer supported”. DBHub 1.3.1 czyta zabezpieczenia wyłącznie z dbhub.toml. Przenieś readonly i max_rows do bloku [[tools]], jak powyżej, i uruchamiaj serwer z --config.
Agent może pisać, choć prosiłeś o tryb tylko do odczytu. Sprawdź każdą warstwę: flagę serwera (każdy serwer zapisuje ją inaczej i żadna nie jest wymienna), a potem uprawnienia roli. Wykonaj SELECT has_table_privilege('agent_ro', 'orders', 'INSERT');. Wynik musi brzmieć false. Domyślny tryb tylko do odczytu w sesji nie jest dowodem, bo klient może go wyłączyć.
get_top_queries nic nie zwraca albo zgłasza błąd. Brakuje pg_stat_statements w shared_preload_libraries albo statystyki właśnie wyzerowano. Włącz rozszerzenie, odczekaj, aż staging obsłuży trochę ruchu, i zapytaj ponownie.
Neon nadal pozwala pisać po dodaniu readonly=true. Token OAuth zachował uprawnienia z pierwszej autoryzacji. Wyloguj się i autoryzuj ponownie z nowym URL-em.
Zapytania przekraczają limit czasu albo zwracają ogromne wyniki. Zostaw statement_timeout na roli i max_rows w DBHub. W Codeksie tool_timeout_sec we wpisie serwera podnosi limit klienta, gdy uzasadnione zapytanie potrzebuje więcej czasu. Proś o agregaty, nie o surowe wiersze.
Agent używa starych nazw tabel po migracji. Czyta własną wcześniejszą odpowiedź, a nie bazę. Poproś go o ponowną inspekcję tabeli albo zacznij nową sesję. Problemy z połączeniem w ogóle opisuje strona o problemach z połączeniem MCP.