mcpbeat Sign in

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

answering

pg.ddx.io: the PostgreSQL community's memory is answering right now. Last checked 8 min ago. It exposes 126 tools.

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

Uptime history 11 days of history · worst day 99%
11 days agonow
100.0%
Uptime 24h
182 of 182 checks
126
Tools
read from the server
216 ms
Response time
average over 24h
open, no key
Access
streamable-http

What changed 164

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 24 October 2026. No other catalogue keeps this.

2 Nov a tool description was rewritten whats_new
1 Nov a tool description was rewritten get_source_info
31 Oct a tool changed the parameters it asks for search_symbols
29 Oct 8 tool descriptions were rewritten blame, get_commit, get_message and 5 more
29 Oct 6 tools changed the parameters they ask for blame, get_message, hybrid_search and 3 more
28 Oct a tool appeared get_ontology
28 Oct a tool description was rewritten cross_reference
26 Oct 24 tools changed the parameters they ask for commit_buildfarm_status, commit_history, contribution_summary and 21 more
26 Oct 5 tool descriptions were rewritten get_source_info, search, search_all_sources and 2 more
25 Oct 10 tool descriptions were rewritten cross_reference, find_related_discussions, get_contributor and 7 more
and 106 more, back to 24 October 2026

pg.ddx.io: the PostgreSQL community's memory missed 3 checks this week

Everything else answered, so this is steady rather than shaky. We check every 15 minutes, which is how a one-off gets told apart from the start of a pattern, and how you hear about the next one within the hour instead of from your users.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 8 min ago.

run in your terminal
claude mcp add archive --transport http https://pg.ddx.io/mcp
Settings → Connectors → Add custom connector, then paste this address
https://pg.ddx.io/mcp
~/.codex/config.toml
[mcp_servers.archive]
url = "https://pg.ddx.io/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "archive": {
      "url": "https://pg.ddx.io/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "archive": {
      "type": "http",
      "url": "https://pg.ddx.io/mcp"
    }
  }
}

This server publishes 1 more address. The block above uses the one we reach during checks; the full list is under Endpoints below, and the author may intend a particular one for your client.

Available tools 126

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

git
git_analyze_activity
Show commit activity over time, bucketed by period. Useful for understanding development pace and trends.
git_analyze_authors
Get commit statistics per author: total commits, first and last commit dates. Ranked by commit count.
git_analyze_bus_factor
Identify files with the fewest distinct authors (bus factor risk). Files modified by only one person are knowledge silos.
git_analyze_churn
Identify the most frequently modified files in the repository. High-churn files may indicate hotspots or unstable code.
git_analyze_coupling
Find files that are frequently changed together. Logical coupling can reveal hidden dependencies between components.
git_analyze_hotspots
Aggregate file churn by directory to find the most actively changed areas of the codebase.
git_blame
File version history, not a per-line blame: the commits that changed a file on the history of a commit (like `git log <rev> -- <path>`), newest first, each with sha, commit_id, author, date, summary and status (added/modified/deleted). Renames are not followed. Up to `limit` commits (default 100, max 1000); has_more says there are older ones.
git_diff
Two modes: (1) commit-range mode — pass base_branch and head_branch to get the list of commits unique to head_branch (set difference base..head), optionally filtered by author/message/path; (2) content-diff mode — pass from_commit and to_commit to compute file-level unified diffs between two specific commits.
git_log
Commit history like `git log`, newest first, filtered by path (commits touching a file), author (substring), since/until (YYYY-MM-DD or RFC 3339) and branch (any branch, tag or major version such as 17 or 9.6; default the indexed default branch). Each commit: sha (40-hex, cite it), commit_id, message (subject for a branch log), author and dates. limit default 50, max 200; offset pages; has_more. repository defaults to postgres.
git_search
Search postgres commit messages (or file paths with search_in=paths) by keywords, newest first (all words must appear, case-insensitive; like `git log -i --grep` with every word). Each commit: sha (40-hex, cite it), commit_id, message, author, date, people credited, and mail_refs: up to 5 messages that refer to it {inbox, message_id, subject, url, how_it_refers: discussion-trailer, committers-announcement or mentions-hash}. repository defaults to postgres; limit default 50, max 200. Details with commit_history.
git_show_file
Read a file at any commit, branch, tag or major version (like `git show <rev>:<path>`), from the git clone. commit takes a SHA (>= 7 hex), branch, tag, 17 or 9.6, <ref>~N or a commit_id; default HEAD; an unknown name or path is an error, never a silent HEAD. Returns at most 2000 lines per call: start_line/end_line pick the range, total_lines gives the length and cut=true says more follow. Lines are numbered with a tab (numbered=false gives the exact bytes). Each result has sha (cite it with the path and lines) and ref. Binary files return a note instead of content.
entries
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.
list_entries
List commitfest entries (proposed patch series). Filterable by status, commitfest number, or topic; paginated.
animal
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.
get_animal
Profile of one buildfarm animal: hardware/OS/compiler/owner, branches tracked, last build status, plus the last 20 runs (any branch).
commit
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 reverted before that release), reverted_by (the commits that revert it, each with its own reverted_by) and reverts, read from git tags and commit messages, never guessed. commit_id takes a SHA (>= 7 hex), branch, tag, major version (17, 9.6), <ref>~N or a commit_id from another tool; repository defaults to postgres. The diff itself is not included (git_diff, or git_show_file for one file). Cite the sha and the thread's https://postgr.es/m/<message_id>.
get_commit
One postgres commit from the code-history index: message, parsed trailers (names only), Discussion threads (links to the archived thread on /m/), back-patch siblings on other branches, first_releases (per branch the change landed on: sha, release such as 14.23, first_version incl. betas, shipped=false when reverted before that release; null release = not yet released), reverted_by and reverts, posted_patch (of the patch mails on its Discussion threads up to its commit date, the one whose changed lines match the commit's best: message_id, date, subject, from, score 0-1, url; null when none shares at least 0.2), files changed with line counts, and its diff rendered from the index (at most 3000 lines; diff_complete says whether it was cut). Accepts a SHA (7+ hex), branch, tag or any version form.
commitfest
commitfest_stats
Overview of all indexed commitfests: count by status, top contributors (entries authored), distinct people / commitfests / entries totals.
get_commitfest
Get a single commitfest with entries grouped by status and the top contributors (authors with the most entries).
search_commitfest
Full-text search of commitfest entries (title first, then author/reviewer/committer names), in the current commitfest by default, or commitfests="all" (back to 2014) or a comma list of numbers. Websearch syntax: "phrase", -term, or. Each result: cf_id, title, status, commitfest(s), people, last update, the commitfest.postgresql.org patch url and the pg.ddx.io thread link. limit default 20, max 50. Details with get_entry; cite the patch url. Search operators apply (intitle:, from:, after:/before:, /regex/, commitfest:, release:); operators, warnings and skipped report them. Each result carries outlook: the commit model's estimate (p_cf, p_release, bands low/medium/high, health), or null.
entry
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).
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>/.
inbox
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).
message
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 back with own_words (in the author's own text, whitespace-normalized) and in_message (anywhere, quoted text included); with include_body=false only the verdicts return. Never raw MIME: get_attachment returns an attachment's content, get_raw_message the RFC 822 source. Finds the list itself unless inbox is given. Cite as https://postgr.es/m/<message_id>.
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.
patch
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.
wiki
get_wiki_history
Get revision history for a wiki page.
get_wiki_page
One wiki.postgresql.org page by title: its latest revision content with author and date. Titles are as on the wiki ("Don't Do This", "Todo"). Use search_wiki to find a title, get_wiki_history for older revisions. Cite https://wiki.postgresql.org/wiki/<title>.
search_wiki
Full-text search (websearch syntax) of wiki.postgresql.org. By default searches each page's current text; history=true searches every revision and returns, per page, the latest matching revision (rev_id, revision_url, author, comment, timestamp, is_current) and how many matched; since/until bound the revision dates. Read a page with get_wiki_page; cite its wiki url. Search operators apply (intitle:, from:, after:/before:, link:, /regex/); operators, warnings and skipped report them.
blame
blame
Per-line blame of a postgres file at any commit (code-history index): the commit that wrote each line, as `git blame` with git's default diff. ignore_revs (default true) passes through the pgindent/reformat commits of .git-blame-ignore-revs when they replaced lines one-for-one; reverse adds the commit that removed each line later on the version's branch. At most 2000 lines per call; commits lists author, date and subject per short sha. proposals=true adds, per line, the earliest posted patch (Message-ID, date) on its commit's threads that added it; proposals_complete=false when the window spans more than 10 commits (those with the most lines are read). Lines under 4 characters or without a letter or digit get none. Not the same as git_blame, which returns a file's commit history.
blame_symbol
Show the commit history that modified a symbol's file, filtered to the symbol's line range.
code
code_index_status
Get code indexing statistics: files indexed, symbol counts by kind and language, edge count, community count.
code_search
Search the postgres source at any commit, branch, tag or date (or across history), from the code-history index: every line of every commit, byte-exact. A literal by default; match=regex for a PostgreSQL regex (^ and $ are per line; \b \< \> as in grep), match=identifier for any of snake_case/CamelCase/UPPER spellings. File sets agree with `git grep -l` at the same commit. Results name the resolved sha and ref. complete=false means the totals are lower bounds (cut says why). With history (all | <rev> | A..B) it returns every matching line any commit in the range had, with the commit that added it and the one that removed it.
contributor
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. Cite https://pg.ddx.io/community/<hash>.
get_contributor_history
Show all past mailing list submissions by a contributor (matched by email address or name).
discord
list_discord_channels
List monitored Discord channels with message counts.
search_discord_topics
Find PostgreSQL Discord discussions semantically related to a query. Returns only the channel, approximate date range, and participants of relevant conversations — never message content or links (per the Discord community agreement).
doc
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.
list_doc_versions
List available documentation versions with page counts.
failing
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?'
hybrid
hybrid_search
Mailing-list search, keyword (BM25 over the authors' own words) and semantic (embeddings) blended per thread, over every list unless inbox names one or more. Returns up to limit threads (default 20, max 50), best first, each its best message: inbox, message_id, subject, from, date, thread_id, fused_score (0-1), similarity and a short excerpt of the author's own words. Like a ranked `git log --grep` for mail. Cite as https://postgr.es/m/<message_id>; read with get_thread or get_message (inbox from the result). author, since and until restrict both arms to one sender and a date window. Takes search's operators. Echoes operators applied, warnings for dropped ones, skipped if mail is excluded; a query that cannot run is an error. complete=false when the keyword arm ran out of budget_ms or a total is a lower bound.
hybrid_search_code
Combined keyword + semantic code search using Reciprocal Rank Fusion. Requires embeddings to be generated.
patches
find_patches_by_platform_status
Patches that pass on some platforms but not others. Example: passing on linux but failing on macos -> portability bug.
search_patches
Find patch series by parsing [PATCH v2 3/7]-style subject prefixes. Returns structured patch metadata including version, sequence, total, and series grouping. complete=false when it ran out of budget_ms.
recent
list_recent
List recent messages from an inbox
recent_commitfest_activity
Rolling window of commitfest entries updated in the last N days. Returns the entries plus a status histogram. Uses the relational commitfest.entries table for predictable latency.
regex
regex_search_code
Regular-expression search of the CURRENT source only (HEAD of master for postgres, the default branch elsewhere), like `git grep -E` with grep's line semantics: ^ and $ anchor at line starts and ends, . does not cross lines. PostgreSQL regex syntax (\s, \w, (?i) work). path_glob narrows by SQL LIKE pattern ("src/backend/%.c"), repository by name. Returns up to max_results files (default 50, max 500) with repo_name, file_path, line_no and snippet (its first matching line). For any other commit, branch, tag, major version or date, all matches with context, or history, use code_search with match=regex. Cite path:line with the sha.
search-regex
Full-text search across mailing list messages using POSIX regex patterns. Supports edit-distance fuzzy matching via the `k` parameter (0 = exact regex, >=1 = up to k insertions/deletions/substitutions per match). Same prefix syntax as `search`: s:subject f:from t:to d:2024-01..2025-01 b:body_text
repository
get_repository_summary
Per-repository summary: total commits, top 10 contributors, branches, language breakdown (from indexed symbols), and a sampled most-touched-paths list.
repository_stats
Get detailed statistics for a git repository including commit count, file count, branch, and import state.
semantic
semantic_search
Search messages on every list (or the lists in inbox) by semantic similarity using vector embeddings; each result names its inbox. Returns messages most similar in meaning to the query text. Requires embeddings to be generated first (see embedding_status). Each result carries an 'excerpt': the author's own words, quoted text and signatures removed.
semantic_search_code
Search code symbols by semantic similarity using vector embeddings. Requires embeddings.
symbols
search_symbols
Find C functions, macros, types and variables by name in the indexed source (HEAD): BM25 on names, then fuzzy and body matches. Filter by kind (function, struct, macro, ...), language, repository. Each result: qualified_name, name, kind, language, file, start_line and end_line. Like `ctags`/`git grep -w` for definitions. Follow with get_callers, or git_show_file with start_line/end_line to read the body.
symbols_in_file
List all code symbols defined in a file, ordered by line number.
thread
get_thread
A mail thread, found by any Message-ID in it, oldest first. Each message: from, to, cc, date, message_id, decoded body text (by default the author's own words: quoted replies, signature and inline patch removed; full_text=true for the whole decoded text; never raw MIME), attachments [{index, filename, content_type, size}] and has_patch. Paged: 20 messages per call (limit max 500; offset/next_offset/has_more); bodies capped at max_body_chars (default 4000; 0 = no cap; body_truncated marks a cut). include_bodies=false gives a cheap outline. Finds the list itself unless inbox is given. Cite as https://postgr.es/m/<message_id>.
get_thread_references
Cross-reference graph for an entire thread. Collects all Message-IDs referenced in body text across all messages in the thread and resolves which other threads they point to.
all
search_all_sources
Unified search across all document sources (docs, wiki, and email). Returns results ranked by relevance. Search operators (site:, after:, before:, from:, link:, /regex/ ...) are applied per source; operators and warnings say what the query used, and skipped names each source the query left out and why. With define:<term> it also returns definition, the same card search_docs returns.
animals
list_animals
List PostgreSQL buildfarm animals. Filterable by OS, branch tracked, last build status, or owner. Failing animals are returned first (sort key: last_status='failed' DESC, name ASC).
attachment
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>.
author
get_author_messages
Find messages by a specific author, optionally filtered by date range. Uses the f: (from) search prefix.
branches
list_branches
List tracked branches for a repository, including head commit and default branch status.
breaks
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.
browse
browse_by_date
Browse threads within a specific date range. Useful for exploring what was discussed during a particular time period.
build
build_status_freshness
Most recent :entry/last-build-at observation across all entries. Use to detect a stalled cfbot scraper.
buildfarm
buildfarm_overview
High-level buildfarm health: animal count, recent run counts, currently-failing animals, top owners, OS / branch breakdown, and freshness.
calendar
calendar_feeds
List every pg.ddx.io calendar feed (iCalendar URLs) with event counts: all events, regions, countries, conference series, the PostgreSQL release cycle, teams and organisations.
callees
get_callees
Find all symbols that the given symbol calls/references (forward call graph).
callers
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.
codebase
codebase_map
Get a directory-level overview of the codebase showing file counts and symbol counts per directory.
combine
combine_calendars
Combine several pg.ddx.io calendar feeds into ONE subscription. Give feed paths or URLs as listed by calendar_feeds (e.g. events/region/europe, series/pgconf-eu, teams/committers, people/<8hex>, https://pg.ddx.io/cal/orgs/edb.ics; 1-200). Returns the combined feed's hash, canonical feed list, https url and webcal url. The same selection always yields the same URL.
commitfests
list_commitfests
List PostgreSQL commitfests indexed in the mentat triple store. Each commitfest carries a status (:open / :in-progress / :closed) and an entry count grouped by status.
commits
search_commits
Search postgres commits (code-history index), newest first, like git log: range (a rev, or A..B; default the newest release branch), message (regex, case-insensitive), author (regex over author, committer and Author/Co-authored-by/Reviewed-by trailers), paths, since/until (YYYY-MM-DD), changed_lines (a regex an added or removed line matches, as git log -G) and occurrences (a string whose count in a file changed, as git log -S). complete=false when changed_lines/occurrences matched more lines than it reads (300,000): commits may be missing.
communities
get_communities
List Louvain community clusters detected in the call graph. Communities group related symbols by functional area.
community
get_community
Get details and member symbols for a specific community.
contribution
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.
contributions
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.
contributors
list_contributors
List PostgreSQL community contributors aggregated across git trailers (Reviewed-by, Tested-by, etc.), commit author/committer headers, and buildfarm animal owners. Sorted by total contributions descending. Filterable by release / role / source.
cross
cross_reference
What relates to one stored item, and what happened to it. ref: a Message-ID or message URL, a commit SHA or URL, a docs URL or page.html, a wiki URL or title, a commitfest URL, CVE-YYYY-NNNNN, or feature:<words> (matched to commitfest titles and to the subjects of the postgres commits that introduce it; ref.entries_used and ref.commits_used say which; a name nothing matches gives empty results, not an error). Returns related threads, commits (with releases and reverted_by), docs, wiki pages, commitfest entries and people, each with why, strongest first: explicit links, shared identifiers, then similar topic. For a postgres commit, thread, entry or feature, timeline says which release shipped it and whether it was reverted or back-patched: status plus dated events (first post, commitfest listings, commits with branch and first release, reverts), each with its source url. kinds narrows; limit_per_kind (default 5, max 25). ~3 s budget: late parts go in timed_out. For feature:<words> and commitfest entries, graph lists the stored design-history features (status, the one release it shipped in, decisions, positions), each fact with confidence, source and evidence; "probably" below 0.8, facts below 0.5 left out. Same as GET /api/v2/related.
dead
find_dead_code
Find functions/methods with zero incoming call graph edges (potentially unused code).
dependents
get_dependents
Get transitive dependents: all symbols in the blast radius if this symbol changes.
detect
detect_changes
Detect which symbols changed between two commits by comparing file content hashes.
discussion
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).
docs
search_docs
Full-text search of the PostgreSQL documentation (websearch syntax: "phrase", -term, or), title matches first. Searches the current release unless version (one, e.g. "17") or versions (several) is given; a page matching in several selected versions is one result listing each version and its URL. Returns title, path, url, the versions it matched and a snippet. With define:<term> in query (define:MVCC, define:"write-ahead log", define:T611, define:LATERAL) it also returns definition: the PostgreSQL glossary entry, SQL standard feature or SQL key word for the term, as paragraphs of text segments whose links point at other terms, docs sections and features. Read a page with get_doc_page; cite its postgresql.org/docs url. Search operators apply (intitle:, inurl:, after:/before: pick the versions current then); operators, warnings and skipped report them.
embedding
embedding_status
Get embedding coverage statistics: how many messages have embeddings, which model was used, and when embeddings were last generated.
execution
get_execution_flows
Trace execution flow paths through the call graph from entry points.
file
read_file
Read a file of the postgres source at any commit, branch, tag or date from the code-history index: numbered lines, at most 2000 per call (page with start_line/end_line), byte-exact to git. Says total_lines and complete; binary files return their metadata only.
files
list_files
List the files of the postgres source under a directory at any commit, branch, tag or date (code-history index), with line counts; depth folds deeper paths into directories with file counts; glob filters paths.
grep
grep_repository
Literal-text search of the CURRENT source only (HEAD of master for postgres, the default branch elsewhere), like `git grep -F` (regex characters are escaped; case_insensitive=true for -i). Returns up to max_results files (default 50, max 500), each with repo_name, file_path, line_no and snippet (its first matching line). For any other commit, branch, tag, major version or date, for every match with context, or to search history, use code_search (version=, history=). Read a hit with read_file or git_show_file; cite path:line with the sha.
history
history-of
One-shot historical context for CI: given content (a diff, file path, symbol, commit subject, or feature name), return the most relevant default-branch commits, the associated mailing-list discussion (message links), and the tracked people involved (community page links). Read-only; composes git history + list search.
impact
get_impact
Analyze the impact of modifying a symbol: risk level, blast radius, affected communities and execution flows.
inboxes
list_inboxes
List all configured agora mailboxes with name, message_count, latest_message_date, latest_import_date, listid (when known) and description. Optional min_messages filter; limit/offset are accepted for forward compatibility.
new
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.
ontology
get_ontology
What this server knows and which tool reads it: every kind of fact (person, membership, roster, commitfest entry, feature, decision, position, ...) with its attributes, value types, cardinality, docs and counts, and which kinds refer to which; the design-history graph's relations (thread DISCUSSES feature, decision DECIDES feature, person HOLDS position ABOUT feature, ...), sources (git, commitfest, rule, operator, model) and confidence rules (shown at 0.8 and above, "probably" from 0.5, hidden below; models capped at 0.9); the tables the tools read; and what is loaded (commits, tags, entries). Call it first to learn what can be asked. No arguments. Same as GET /api/v2/ontology.
passing
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.
pattern
find_pattern
Search for a regex pattern in code symbol bodies. Uses trigram indexes for acceleration.
projects
list_projects
List bridge-configured projects linking a forge repository to a mailing list inbox.
raw
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.
rebase
find_rebase_needed_patches
Entries cfbot reports as no longer applying to master tip (:entry/applies-cleanly is false). These need an author rebase.
related
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 embedding provider is configured, falls back to semantic search across all inboxes.
release
release_contributors
Top contributors per role for one release. Scope: canonical authoritative repos only (ag_repositories.is_authoritative = TRUE). Returns top 20 per role across authored / reviewed / tested / reported / committed (per-role distinct-commit counts).
repo
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.
repositories
list_repositories
List all registered git repositories with name, branch, commit_count, file_count, indexed-symbol_count, latest_commit, last_fetched_at, and import_state. Optional min_commits and branch filters; limit/offset accepted for forward compatibility.
retrieve
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 archive does not appear to discuss the question, instead of weak matches. Retrieval only: write the answer yourself. Cite each claim with its passage url or https://postgr.es/m/<message_id>; open a thread with get_thread. author, since and until restrict it to what one person wrote in a date window (filter echoes them). The question may carry search operators (after:2020, site:<list>); operators, warnings and skipped report what they did. complete=false when the search ran out of budget_ms.
search
search
Keyword search of mailing-list messages (BM25 over subject, sender and the authors' own words), every list unless inbox narrows it. Operators in query: s:/intitle: subject, f:/from: sender, b:/intext: body, after:/before:/d:2024-01..2025-01 dates, site:<list>, filetype:patch, link:<url glob>, /regex/. Returns messages best first (limit default 50, max 200; offset pages; collapse_threads=true keeps one per thread), each with inbox, message_id, subject, from, date, thread_id and an excerpt, plus total and has_more. Use it for exact words, names and identifiers; hybrid_search for questions. Cite as https://postgr.es/m/<message_id>. author, since and until restrict it to one sender and a date window. Echoes operators applied, warnings for dropped ones, skipped if mail is excluded; a query that cannot run is an error. complete=false when it ran out of budget_ms or total is a lower bound (timed_out, total_partial, total_capped say which). With define:<term> it also returns definition, the same card search_docs returns.
signature
get_signature
Get the function/method signature and doc comment for a symbol.
similar
find_similar_messages
Find messages similar to a given message using its embedding vector. Useful for finding related discussions or duplicate threads.
source
get_source_info
Detail for a single source by name, the same row list_sources returns. Returns kind, item_count, last_update, next_sync, freshness_status, and description; for a postgresql.org list also poll: the list poller's p_new (probability of mail we lack since its last poll), due, next_poll, factors and the last poll's outcome.
sources
list_sources
Every source behind this server with its kind (inbox, repository, docs, wiki, discord), item count, last update and freshness (fresh/stale): the 56 mailing lists, the git repositories, the documentation releases, the wiki and Discord. Use it to learn the inbox and repository names other tools accept and how current each is. kind filters; min_items drops small sources.
string
find_string_literals
Find occurrences of a literal in current (HEAD) source, restricted to a syntactic kind: "strings" (inside double quotes), "comments" (after // or /*), or "all".
symbol
get_symbol
Get full details for a code symbol by its qualified name, including source code, signature, documentation, and file location.
tests
get_tests_for
Find test symbols that reference the given symbol.
threads
list_threads
Browse recent threads (topic-level view). Returns thread summaries with message counts, date ranges, and latest message metadata.
upcoming
upcoming_events
PostgreSQL community events in a date window: conferences, PGDays, meetups, online events, Call for Papers and registration deadlines, conference talks (with speakers and their pg.ddx.io person hash), Talking Postgres episodes, release dates and commitfests. Same data as the iCalendar feeds at https://pg.ddx.io/calendars (community event listings from the PostgreSQL Event Calendar, curated by Andreas Scherbaum).
upstream
check_upstream_status
Check whether a pull request has been merged upstream. Returns the latest patch series head commit and any merge information.
whats
whats_new
Catch up: everything a person or group did, and where they were named, in a window, newest first per kind (mail grouped by thread). who: a name (fuzzy; close matches return ambiguous [{name, hash}]), email, hash:<8 hex>, team:<slug>, org:<name>, new:<window>, a phrase ('the core team'), or a list. since/until: ISO date, today, 2w/14d/1m, pg19 (a release's development window), all; default 14 days. during: a calendar event uid/url. topic narrows by hybrid search. Kinds: waiting (one person, no topic: what is on their radar, each with group, priority 0-100 and why, and an outlook (a model's estimate: unit commitfest = P(commit) for the CF and release and thread health, when its thread is in an open commitfest; unit thread = p_commit, P(a commit from a patch thread in no commitfest within horizon_days); people to seek out, factors, model_version)), mail_from, mail_to_cc, mail_mention, git_author, git_credit, git_mention, wiki_edit, wiki_mention, commitfest, calendar, roster. Names, page hashes and urls only, never addresses. ~4 s budget; late kinds go in timed_out with partial=true. Cite each item's url. Same as GET /api/v2/activity.

Endpoints

URLTransportStateLatencyChecked
https://pg.ddx.io/mcp streamable-http answering 149 ms 8 min ago
https://pg.ddx.io/mcp/sse sse answering 171 ms 8 min ago

Alternatives to pg.ddx.io: the PostgreSQL community's memory

same job, measured the same way
P
postalref
by postalref

USPS package barcodes, service type codes and mailing terms, each cited to its USPS source.

7 tools answering
Codex Pets Registry
by ydb-qdrant-pets

Search, preview, install community Codex pet packs, and discover the pet request flow.

9 tools answering
Spdx License Field Lint
by jmshinhwa

Reads the licence field in the open manifest and names every deprecated SPDX id, invalid string, PEP

50 installs/wk local only
Agent Billboard
by yourmatematt

Read and post to The Agent Billboard on Solana, with spend limits in code and a reasoning log.

123 installs/wk local only
Prisma Postgres and Prisma Compute
by prisma

Manage Prisma Postgres and existing Prisma Compute apps. Requires sign-in; does not upload code.

answering
Kijito
by kijito

Shared memory and mail for your AI agents. Verified with Claude Code; other MCP clients in testing.

answering
Graphicle
by graphicle-ai

Code graph and project memory for coding agents, cited to exact files and lines, on your machine.

local only
Knowl
by dat999zx

Persistent memory for AI agents, for code, research and everyday life. Stale facts retire.

227 installs/wk answering

pg.ddx.io: the PostgreSQL community's memory — questions

Answers built from our own checks of this server.

What can pg.ddx.io: the PostgreSQL community's memory do?
It exposes 126 tools, read directly from the server on our last check. Among them: animal_history, animal_owner_contributions, blame, blame_symbol, browse_by_date, buildfarm_overview and 120 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is pg.ddx.io: the PostgreSQL community's memory mostly used for?
Its tools cluster around git, entries and inbox. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is pg.ddx.io: the PostgreSQL community's memory working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 182 of 182 checks got a reply (100.0%), average response time 216 ms. The bar chart above shows every period we have measured.
How do I connect pg.ddx.io: the PostgreSQL community's memory?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does pg.ddx.io: the PostgreSQL community's memory need an API key?
No. pg.ddx.io: the PostgreSQL community's memory completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 126 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is pg.ddx.io: the PostgreSQL community's memory?
It answers our handshake in 216 ms on average, which is faster than 66% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.