Pod

Yes, this is on purpose. Pod is built for agents, so the default page is plain HTML.
Human? View the normal website.
Agent? You probably prefer /mcp/io-github-pgedge-postgres-mcp/issues.md or /mcp/io-github-pgedge-postgres-mcp/issues.json, or Pod over MCP.

Reported issues for io.github.pgEdge/postgres-mcp

Pod holds 24 of 62 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to io.github.pgEdge/postgres-mcp.

Most discussed

Need some help to setup a pgedge postgres MCP Server

Hi,

I am trying to set up your MCP Server but it does not seem to start properly. I do not have enough logs to tell me whats wrong

Here is the log I can get:

pgedge-postgres-mcp  | Starting pgEdge Natural Language Agent...
pgedge-postgres-mcp  | Data directory: /var/lib/pgedge/mcp-server
pgedge-postgres-mcp  | Starting MCP server
pgedge-postgres-mcp  | Connected to database: xxx_reader@xxx:5432/xxx
pgedge-postgres-mcp  | Authentication: DISABLED
pgedge-postgres-mcp  | Starting MCP ser

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/145) · 2026-05-06 · closed · external user · 4 comments

### Add multi-host connection support for high availability and failover

## Summary

Add support for libpq multi-host connection strings, enabling automatic failover and read-write routing across multiple PostgreSQL servers.

## Motivation

Production PostgreSQL deployments commonly use streaming replication with multiple nodes. The MCP server currently accepts a single host and port per database connection, requiring users to point at a single server with no failover capability. Adding multi-host support lets pgx try each configured host in order and connect to whic

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/96) · 2026-03-10 · closed · outside contributor · 11 comments

### Server should not exit when one of multiple configured databases is unreachable at startup

**Describe the bug**

When multiple databases are configured, the MCP server attempts to connect to all of them at startup. If any single database is unreachable (network issue, VPN not connected, temporary outage), the entire server exits with an error. This makes the server unusable in environments where not all databases are always accessible.

**To Reproduce**

1. Configure multiple databases, where one is temporarily unreachable:
```yaml
databases:
  - name: "local_db"
    host: "localhost"

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/82) · 2026-02-25 · closed · external user · 4 comments

### `default_transaction_read_only` startup parameter breaks connections through PgBouncer/HAProxy

**Describe the bug**

The MCP server sends `default_transaction_read_only` as a PostgreSQL startup parameter when connecting to databases, even when `allow_writes: true` is configured. This causes connections through PgBouncer or HAProxy (in transaction/statement pooling mode) to fail, as these proxies do not support this startup parameter.

**Error message:**

ERROR: Failed to connect to database: unable to ping database: failed to connect to user=user_admin database=delivery_db: 10.246.0.

Read the thread · 2026-02-25 · closed · external user · 3 comments

Need a script and clear "quick start" documentation for running the MCP server standalone

There are scripts and getting started instructions for running the MCP with both the web and CLI clients, but not standalone. Maybe the quick start should be titled something like "Running the MCP server with other clients and agents".

Read the thread · 2026-02-25 · closed · outside contributor · 4 comments

CLI does not display database write mode status on connection

When connecting to the MCP server, the CLI displays the active database name but does not show the allow_writes status. As a result, users cannot determine whether write operations are permitted until they attempt one and encounter a failure.

Current Behavior

./pgedge-nla-cli -mcp-mode http -mcp-url http://localhost:8080/
Username: imtiaz
Password: 

          _
   ______/ \-.   _           pgEdge Natural Language Agent
.-/     (    o\_//           CLI: v1.0.0-beta3  Server: v1.0.0-bet

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/58) · 2026-01-27 · closed · outside contributor · 4 comments

### Web GUI Loses Connection When Switching Between Multiple Databases in MCP Server

I have observed a bug in the MCP Server Web GUI when configuring and switching between multiple databases.

Issue Summary
When multiple databases are configured in the MCP server YAML file, switching from the default database to another database via the Web GUI causes the connection to drop and results in a JSON parsing error.

Configuration Details
The MCP server is configured with two databases in the YAML file, for example:

databases:
  - name: "default"
    host: localhost
    port: 543

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/43) · 2026-01-20 · closed · outside contributor · 7 comments

### Usability Issue: add-user / add-token Command Does Not Respect Server Configuration File Path

I have identified a usability issue with the add-user command that could lead to user confusion and potential misconfiguration.

Issue Summary
When the add-user command is executed without the --user-file flag, it uses a hardcoded default path instead of reading the user file path from the MCP server’s YAML configuration.

Current Behavior
The --user-file flag is optional and defaults to an empty string.

When omitted, the command falls back to GetDefaultUserPath(), which checks:

/etc/pgedge/p

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/42) · 2026-01-20 · closed · outside contributor · 3 comments

## Most recent

### pgedge-postgres-mcp server reports MCP protocol version 2024-11-05, incompatible with Streamable HTTP-only clients (e.g., OpenAI Codex)

The MCP server's initialize response always returns "protocolVersion": "2024-11-05", regardless of what protocol version the client requests. Confirmed via direct initialize calls:

- Cloud endpoint (server v1.0.0): reports 2024-11-05
- Upgraded staging test build (server v1.1.0-beta1): also reports 2024-11-05

So this isn't fixed by the version upgrade already in progress, it's present in every build tested so far.

Why it matters: "Streamable HTTP" as an MCP transport was introduced in protoco

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/277) · 2026-08-24 · closed · outside contributor · 1 comment

### Default knowledgebase config in RPM ships enabled with invalid path

The default postgres-mcp.yaml shipped with the pgedge-postgres-mcp RPM package has the knowledgebase feature enabled with a hardcoded path that does not exist:

knowledgebase: enabled: true database_path: /usr/share/pgedge/pgedge-ai-kb/kb.db

The actual KB database filename is provider and model specific. For example:

kb-openai-text-embedding-3-small.db kb-gemini-gemini-embedding-001.db

The file kb.db is never created by any package, so the server starts with a broken knowle

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/272) · 2026-08-17 · closed · outside contributor · 1 comment

### GET /api/user/info panics on a nil UserStore when HTTP auth is disabled

## Summary

`GET /api/user/info` with any `Authorization: Bearer <token>` header panics with a nil pointer dereference when the server is started with HTTP auth disabled (`-no-auth`, or any config with `http.auth.enabled: false`).

## Steps to reproduce

./bin/pgedge-postgres-mcp -http -addr localhost:8080 -no-auth -debug curl -H "Authorization: Bearer anything" http://localhost:8080/api/user/info


Server log shows:

panic: runtime error: invalid memory address or nil pointer derefer

Read the thread · 2026-08-13 · closed · outside contributor · 0 comments

Feature request: metadata-only trace mode (no query text or results)

Context: drydock (pgEdge Cloud's multi-tenant platform) wants a per-token/per-user audit trail for MCP tool calls — "which bearer token ran this query, when, did it succeed." The existing trace_file / -trace-file mechanism already logs exactly that shape of event (session ID, token hash, tool name, duration, success/failure), which is why it looked like the right fit at first.

The problem: LogToolCall/LogToolResult currently also serialize the full tool arguments and full tool r

Read the thread · 2026-08-12 · closed · outside contributor · 0 comments

Simple deployment mode writes the database password to a plain-text, overly-readable file

Priority: Low

One deployment mode (multi-database setup via environment variables, not the mode our main hosted deployments use) writes a config file that contains a real database password in plain text, and that file ends up more widely readable than it needs to be.

This does not affect our main hosted deployments, which deliver the password a safer way. It only matters for anyone using the simpler, environment-variable-driven deployment mode.

Read the thread · 2026-08-12 · closed · outside contributor · 0 comments

Query results aren't actually capped, despite the safety limit

Priority: High

The query tool is supposed to cap results at 1,000 rows for safety. It doesn't.

If a query happens to contain the word "limit" or "offset" anywhere in the text — even in an unrelated phrase like "credit limit" — the tool wrongly assumes a cap is already in place and returns the whole table instead of the requested number of rows.

Confirmed with a real test: asked for 5 rows back, got 387 instead.

There's also a related issue where the tool can tell the user the wrong page

Read the thread · 2026-08-12 · closed · outside contributor · 1 comment

Web client does not support MCP 2026-07-28 protocol

The server already supports both the old and new MCP protocols, but the web client is stuck on the old one. It always sends the legacy initialize handshake with protocolVersion: 2024-11-05 and never includes the modern protocol headers. The only way to test the 2026-07-28 path right now is through curl.

Steps to reproduce:

  1. Open the GUI and check the browser Network tab
  2. All requests to /mcp/v1 use the old handshake with protocolVersion: 2024-11-05
  3. No MCP-Protocol-Version header is pres

Read the thread · 2026-08-12 · closed · outside contributor · 1 comment

OpenAI embedding provider fails when no model is configured

When embedding.provider is set to openai without specifying a model, the server starts successfully but generate_embedding fails with "model parameter is required." The OpenAI embedding case in embed_client.go passes the model value directly to the API without applying a default. Every other provider (Voyage, Gemini, Ollama) has a built-in fallback model, but OpenAI does not. The fix is to add text-embedding-3-small as the default when no model is configured.

Steps to reproduce:

  1. Set emb

Read the thread · 2026-08-12 · closed · outside contributor · 1 comment

Connection list shows contradictory status after successful connect

The connection list shows "connected to testdb" and "currently unavailable" for the same entry at the same time. The server checks connection health at startup and caches the result, but never refreshes it. So even after successfully switching to a connection, the list still shows the stale startup state.

Steps to reproduce:

  1. Configure a secondary database connection and start the server
  2. Notice secondary shows as unavailable in the connection list
  3. Switch to the secondary connection — i

Read the thread · 2026-08-12 · closed · outside contributor · 1 comment

fix(chat): model fallback can select an embedding-only model for chat

Summary

selectModel (internal/chat/client.go) falls back to availableModels[0] with no capability check when a saved/default model isn't available. If an embedding-only model sorts first, every chat message fails.

Reproduction

Ollama with only nomic-embed-text (embedding) and llama3.2 (chat) installed, saved preference pointing at a model no longer present:

Error: LLM error: ollama (400): "nomic-embed-text:latest" does not support chat

llama3.2 was available the wh

Read the thread · 2026-08-12 · closed · outside contributor · 0 comments

Gemini model list includes non-chat-capable models (TTS, preview), confusing error if selected

Gemini's model list (as surfaced in the web client's Model dropdown) includes models that cannot actually be used for chat/tool-calling, leading to a confusing error if selected.

Confirmed examples

Selecting any of these and sending a message fails with:

gemini (400): Multiturn chat is not enabled for models/<model-name>

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/246) · 2026-08-11 · closed · outside contributor · 2 comments

### Fast provider switch can pair the new provider with the previous provider's model name

Switching providers in the web client sends a request paired with the
*previous* provider's model name, if you send a message before the new
provider's model list finishes loading.

## Root cause

`useLLMProviders`'s model-list fetch is asynchronous (`fetchModels`, in
`web/src/hooks/useLLMProviders.js`) — switching `selectedProvider` triggers
a re-fetch of that provider's model list, but `selectedModel` is not cleared
until the fetch resolves. `ChatInterface.jsx`'s `handleSend` (and
`handlePromp

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/245) · 2026-08-11 · closed · outside contributor · 0 comments

### sseChat.js drops Gemini tool-call arguments and signatures, breaking Gemini tool use in the web client

Two distinct bugs in `web/src/utils/sseChat.js`'s `tool_use_start` handler
that together make Gemini tool-calling not work through the web client, even
though the underlying library (`pgedge-go-llm-lib`) is correct.

## Bug 1: tool-call arguments are silently dropped

`tool_use_start`'s handler only ever populates its argument buffer from
later `tool_use_delta` chunks:

```js
pendingTools.set(id, {
    name: tu.name || '',
    partial: '',
});

It never reads tu.input, even when the start

Read the thread · 2026-08-11 · closed · outside contributor · 0 comments

add Gemini LLM provider support to the CLI client

The MCP server supports Gemini as an LLM provider (provider: gemini in YAML config, PGEDGE_GEMINI_API_KEY env var), but the CLI client (pgedge-pg-mcp-cli) does not expose it. The --llm-provider flag only accepts anthropic, openai, or ollama. There is no --gemini-api-key flag and /set provider gemini is not available in the interactive CLI.

Expected fix:

Add --gemini-api-key / --gemini-api-key-file CLI flags Add gemini to --llm-provider accepted values Add gemini to /set provider in the int

Read the thread · 2026-08-07 · closed · outside contributor · 1 comment

add sslcert/sslkey/sslrootcert fields to example config files

The sslcert, sslkey, and sslrootcert database config fields are not present in any example configuration file. The examples only show sslmode, making the client certificate fields undiscoverable for users browsing examples.

Affected files:

examples/pgedge-postgres-mcp-http.yaml.example examples/pgedge-postgres-mcp-stdio.yaml.example examples/.env.example (missing PGEDGE_DB_SSLCERT, PGEDGE_DB_SSLKEY, PGEDGE_DB_SSLROOTCERT) Expected fix:

Add commented-out sslcert, sslkey, sslrootcert fields nex

Read the thread · 2026-08-07 · closed · outside contributor · 0 comments

Connection pool never succeeds when the role is restricted by pgedge_safesession (default_transaction_read_only reassertion gets blocked)

Summary

When a database connection is protected by the pgedge_safesession extension (which enforces a hard read-only restriction on a given role at the Postgres level), the MCP server cannot establish a working pooled connection at all. AllowWrites: false (the default) makes every connection fail at AfterConnect, so the pool never has a usable connection to hand out.

Reproduction

Config (allow_writes omitted, so it defaults to false):

databases:
    - name: "safesessi

[Read the thread](https://github.com/pgEdge/pgedge-postgres-mcp/issues/236) · 2026-08-06 · closed · outside contributor · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/pgEdge/pgedge-postgres-mcp/issues).