# pg.ddx.io: the PostgreSQL community's memory MCP server

Every PostgreSQL mailing list since 1991, linked to the commits, code, commitfest and docs.

## At a glance

pg.ddx.io: the PostgreSQL community's memory is an MCP server in the Databases & Storage category. It is hosted remotely and connects over HTTP, and declares no required credentials. It exposes 60 tools, including retrieve_context, animal_history and animal_owner_contributions. It scores D (33/100) on the MCP Skills Hub health score as of Oct 28, 2026.

## Install

### How to install pg.ddx.io: the PostgreSQL community's memory in Claude Code

1. Add the server

```bash
claude mcp add --transport http archive https://pg.ddx.io/mcp
```

2. Verify it's connected

```bash
claude mcp list
```

3. Sharing it with your team?

   Add `--scope project` to write it to .mcp.json in the repository root, which you can commit (with the secrets left as environment variables).

4. Use it in a session

   Ask Claude to use the tools this server exposes (e.g. retrieve_context, animal_history, animal_owner_contributions). It discovers them automatically.

### How to install pg.ddx.io: the PostgreSQL community's memory in Claude Desktop

1. Open your MCP config

   macOS: ~/Library/Application Support/Claude/claude_desktop_config.json · Windows: %APPDATA%\Claude\claude_desktop_config.json

2. Add this server

```json
{
  "mcpServers": {
    "archive": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://pg.ddx.io/mcp"
      ]
    }
  }
}
```

3. Why the wrapper?

   This is a remote (HTTP) server and Claude Desktop only launches local processes, so mcp-remote proxies the connection. It will open a browser window if the server needs OAuth.

4. Restart Claude Desktop

   The tools appear under the 🔌 menu once the app reloads.

### How to install pg.ddx.io: the PostgreSQL community's memory in Cursor

1. Create / edit .cursor/mcp.json in your project

```json
{
  "mcpServers": {
    "archive": {
      "url": "https://pg.ddx.io/mcp"
    }
  }
}
```

2. Enable it

   Cursor Settings → MCP → toggle the server on. Tools become available to the Composer/Agent.

### How to install pg.ddx.io: the PostgreSQL community's memory in Codex CLI

1. Add to ~/.codex/config.toml

```toml
[mcp_servers.archive]
command = "npx"
args = ["-y", "mcp-remote", "https://pg.ddx.io/mcp"]
```

2. Why the wrapper?

   Codex runs MCP servers as local processes, so mcp-remote bridges this HTTP endpoint to stdio.

3. Run Codex

   Codex loads MCP servers from config.toml on startup and exposes their tools to the agent.

### How to install pg.ddx.io: the PostgreSQL community's memory in Windsurf

1. Edit ~/.codeium/windsurf/mcp_config.json

```json
{
  "mcpServers": {
    "archive": {
      "serverUrl": "https://pg.ddx.io/mcp"
    }
  }
}
```

2. Reload

   Windsurf → Cascade → refresh MCP servers. Cascade can now call the tools.

### How to install pg.ddx.io: the PostgreSQL community's memory in Cline

1. Open Cline → MCP Servers → Configure

   Adds to cline_mcp_settings.json.

2. Add the server

```json
{
  "mcpServers": {
    "archive": {
      "type": "streamableHttp",
      "url": "https://pg.ddx.io/mcp"
    }
  }
}
```

### How to install pg.ddx.io: the PostgreSQL community's memory in VS Code

1. Create .vscode/mcp.json

```json
{
  "servers": {
    "archive": {
      "type": "http",
      "url": "https://pg.ddx.io/mcp"
    }
  }
}
```

2. Start it

   VS Code shows a ▶ Start action above the server entry. Agent mode (Copilot Chat) can then use the tools.

## Tools

- `retrieve_context` — START HERE for a question about PostgreSQL. Searches every mailing list (inbox narrows it) with hybrid keyword + semantic ranking and returns cited passages that fit token_budget (default 4000, max 32000): one passage per thread, each the author's own words (quotes, signature and patch removed, cut at ~1200 chars) with url, inbox, message_id, from and date. found=false with a reason when the archi
- `animal_history` — Run timeline for one animal. Filterable by branch and start cutoff; ordered newest first.
- `animal_owner_contributions` — Animals run by one owner: list, branches each tracks, last status, first_seen_at and elapsed days since first observation.
- `blame_symbol` — Show the commit history that modified a symbol's file, filtered to the symbol's line range.
- `browse_by_date` — Browse threads within a specific date range. Useful for exploring what was discussed during a particular time period.
- `build_status_freshness` — Most recent :entry/last-build-at observation across all entries. Use to detect a stalled cfbot scraper.
- `buildfarm_overview` — High-level buildfarm health: animal count, recent run counts, currently-failing animals, top owners, OS / branch breakdown, and freshness.
- `check_upstream_status` — Check whether a pull request has been merged upstream. Returns the latest patch series head commit and any merge information.
- `code_index_status` — Get code indexing statistics: files indexed, symbol counts by kind and language, edge count, community count.
- `codebase_map` — Get a directory-level overview of the codebase showing file counts and symbol counts per directory.
- `commit_buildfarm_status` — Buildfarm results for one PostgreSQL commit: every animal that built it, with branch, status (passed/failed/flapping), the failing stage and the log url, plus a {passed, failed, flapping, unknown} rollup. commit_sha is a SHA (>= 7 hex) or a branch, tag or major version (17, 9.6) for the commit it points at. Cite the commit SHA and the log urls.
- `commit_history` — Everything linked to one commit: subject, author and date with its sha, the mail thread its Discussion: link names (participants resolved to people and organizations), the commitfest entry if tracked, and Discord mentions. For postgres also first_releases (per branch the change landed on: branch, sha, release e.g. 14.23 or null when unreleased, first_version incl. betas, shipped=false when it was 
- `commitfest_stats` — Overview of all indexed commitfests: count by status, top contributors (entries authored), distinct people / commitfests / entries totals.
- `contribution_summary` — Summary of contribution counts per release: unique people, distinct commits, role breakdown (count(DISTINCT commit_sha) per role, canonical authoritative repos only), and revert-commit count. Powers the /community hero strip.
- `detect_changes` — Detect which symbols changed between two commits by comparing file content hashes.
- `discussion_links` — Discussion / Closes / Fixes / Backpatch-through trailers attached to one commit. Returns the raw trailer text and any URL extracted. For the messages those links resolve to, plus the committers announcement and messages citing the SHA, use git_search (mail_refs on each result).
- `embedding_status` — Get embedding coverage statistics: how many messages have embeddings, which model was used, and when embeddings were last generated.
- `entry_branches` — Repository branches tracked for a commitfest entry. Joins commitfest.entry_repos with ag_repositories so callers see repo name + branch_name + is_authoritative.
- `entry_history` — Status changes for a commitfest entry across commitfests. The relational table doesn't carry an audit log, so we approximate the patch's lifeline by joining on shared :entry/thread-message-id (precise) and falling back to title-prefix substring (weak).
- `find_breaks` — Animals that failed on a branch within the time window bounded by two commit SHAs. The window is defined by the earliest started_at observed for either SHA on that branch — not by git topological order, since the buildfarm tables don't carry commit ordering.
- `find_contributions` — Find raw contribution rows for one person: git commit SHAs / buildfarm animals tagged with a role + release. Useful for drill-down on a contributor's recent work.
- `find_dead_code` — Find functions/methods with zero incoming call graph edges (potentially unused code).
- `find_entries_for_author` — Find commitfest entries where the given person is an author. Looks up by email (exact) or by name (substring, case-sensitive).
- `find_entries_for_thread` — Find commitfest entries linked to a pgsql-hackers thread by Message-ID. (Returns empty until the mailing-list cross-reference scrape lands; the index attribute :entry/thread-message-id is in the schema.)
- `find_entries_with_failures_on` — Cross-domain feed: recent failed buildfarm runs for a named animal, plus commitfest entries with cfbot :failing rollups whose tracked branches overlap the animal's. Note: buildfarm runs commit SHAs and cfbot runs cf/<id> branches, so this verb correlates by branch overlap and time window — not by direct schema join.
- `find_failing_patches` — Commitfest entries whose latest cfbot build fails on at least one platform: cf_id, title, entry_status and commitfest_number. entry_status filters (default the active reviewable statuses, e.g. needs-review, ready-for-committer); platform narrows to one CI platform; limit caps the list. Cite https://commitfest.postgresql.org/patch/<cf_id>/.
- `find_failing_runs` — Most recent failing buildfarm runs across the entire fleet. Filterable by branch and start cutoff. Use to answer 'what is broken right now?'
- `find_passing_long_pending` — Green patches stuck in review: entries whose builds pass on every platform yet whose :entry/last-updated is older than N days. Useful for the 'why isn't this committed yet?' question.
- `find_patches_by_platform_status` — Patches that pass on some platforms but not others. Example: passing on linux but failing on macos -> portability bug.
- `find_pattern` — Search for a regex pattern in code symbol bodies. Uses trigram indexes for acceleration.
- `find_rebase_needed_patches` — Entries cfbot reports as no longer applying to master tip (:entry/applies-cleanly is false). These need an author rebase.
- `find_related_discussions` — Find mailing list messages related to a commit, topic, or PR. A postgres commit SHA (7-40 hex) returns the mail that refers to that commit (match_mode commit): its Discussion: threads first, then the committers announcement, then messages citing the hash, each with how_it_refers. Anything else searches subject and Message-ID fields via case-insensitive substring; if that returns no hits and an emb
- `find_similar_messages` — Find messages similar to a given message using its embedding vector. Useful for finding related discussions or duplicate threads.
- `get_animal` — Profile of one buildfarm animal: hardware/OS/compiler/owner, branches tracked, last build status, plus the last 20 runs (any branch).
- `get_attachment` — The content of one attachment of a mail message (a patch, a log, a test case), chosen by 1-based index or a filename substring, as listed in get_message/get_thread attachments. Text attachments come back as decoded text (a .patch is ready to read or `git apply`), binary ones as base64 with encoding=base64; size is the decoded byte count. Cite the message as https://postgr.es/m/<message_id>.
- `get_author_messages` — Find messages by a specific author, optionally filtered by date range. Uses the f: (from) search prefix.
- `get_callees` — Find all symbols that the given symbol calls/references (forward call graph).
- `get_callers` — Reverse call graph: the symbols that call or reference qualified_name (from search_symbols), each with its file and lines, like `git grep -w <name>` restricted to call sites. HEAD only; macro expansion and function pointers are not followed. limit caps the list. Read a caller with git_show_file at its line.
- `get_commitfest` — Get a single commitfest with entries grouped by status and the top contributors (authors with the most entries).
- `get_communities` — List Louvain community clusters detected in the call graph. Communities group related symbols by functional area.
- `get_community` — Get details and member symbols for a specific community.
- `get_contributor` — A contributor's profile by email (exact) or name (substring): canonical name, page hash, totals and per-release counts by role (authored, reviewed, committed, reported, ...), the 5 latest credited commits (commit_sha = the git SHA, roles = every role they had in it), and buildfarm animals they own. People who hid their page are excluded from name lookups. For what they did recently use whats_new. 
- `get_contributor_history` — Show all past mailing list submissions by a contributor (matched by email address or name).
- `get_dependents` — Get transitive dependents: all symbols in the blast radius if this symbol changes.
- `get_doc_page` — One PostgreSQL documentation page as text: path (e.g. "brin.html" or "sql-createtable.html") and optional version ("17", "current"; default the latest). Returns its url, path and stored text (body) with fetched_at. Use search_docs to find the path. Cite the returned url.
- `get_entry` — One commitfest entry by cf_id (the number in commitfest.postgresql.org/patch/<cf_id>/): title, status, commitfest, authors, reviewers, committer, its mail threads and branches. Read the thread with get_thread; cfbot state with find_failing_patches. Cite https://commitfest.postgresql.org/patch/<cf_id>/.
- `get_execution_flows` — Trace execution flow paths through the call graph from entry points.
- `get_impact` — Analyze the impact of modifying a symbol: risk level, blast radius, affected communities and execution flows.
- `get_inbox_info` — Get metadata for an inbox (name, addresses, message count, last activity)
- `get_inbox_stats` — Return aggregate statistics about an inbox: message counts by time period, top authors, and activity trends.
- `get_inbox_summary` — Per-inbox summary: total messages, top 10 posters, thread count, date range, and lifetime average messages/day (total messages divided by the days spanned by the archive).
- `get_message` — One mail message by Message-ID: headers, in_reply_to/references, decoded body text (by default the author's own words: quoted replies and their attributions, forwarded or Outlook-quoted mail, inline patches, diffstats and the signature removed; full_text=true for everything, quotes included), attachments [{index, filename, content_type, size}] and has_patch. quotes checks citations: each comes bac
- `get_message_headers` — Get email headers as structured key/value pairs. Returns all headers or a specific header by name.
- `get_message_references` — Discover cross-references in a message. Returns explicit References/In-Reply-To headers plus any Message-IDs found in the body text, with archive lookup for each.
- `get_new_messages` — Return messages newer than a given article number cursor, enabling agents to poll for new messages without re-scanning. Use after=0 for the first call, then use the returned last_article_num as the cursor for subsequent calls.
- `get_patch_branches` — Get the git branches created from a patch series. Shows what branches were applied from email patches for code intelligence analysis.
- `get_patch_build_history` — Build matrix for one entry: per-platform/config status, log URL, observation time, applies-cleanly flag, rollup.
- `get_patch_series` — Get patch submission history for a forge pull request URL. Returns all iterations submitted to the mailing list.
- `get_raw_message` — Get the complete raw RFC 822 email bytes for a message. Useful for agents that need to parse headers/structure themselves or forward messages.
- `get_repo_sync_stats` — Get commit frequency analysis and sync statistics for a repository. Returns median commit interval, recommended poll frequency, and recent fetch log.

---

Source: https://mcp-skills-hub.vercel.app/mcps/io-ddx-pg-archive · MCP Skills Hub · data as of 2026-10-28T12:31:05Z
