Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

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

REMOTE · PG.DDX.IO · 2 COMPONENTS

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

73 Trust /100

Last scanned (20 hours ago)

Scores higher than 64% of remote servers

Reachable. Last reached 23 Oct 2026.

Category Code Search and Documentation

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security80
Transport & Reachability100
Schema Quality & AI Usability73
  • 64% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Partial
  • AI-judged instruction clarity (excellent).Pass
  • Tool/resource definitions use about 11336 tokens (~81/item across 139 items; 29 tools + 110 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (24% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 29 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 31 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 23 Oct 26 73

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 23 Oct 2026 · Probed https://pg.ddx.io/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=ddx.io CN=WE1,O=Google Trust Services,C=US 10 Oct 2026 8 Jan 2027 ECDSA 256 ECDSA-SHA256 4bc2ea276ae3acc20e39e1b5303a5ad8
SANs: ddx.io, *.ddx.io
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of pg.ddx.io. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
io. present 38690, 57355 8, 8 Verified
ddx.io. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=31536000
content-security-policy default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; img-src 'self' data: https://gravatar.com https://www.gravatar.com; font-src 'self' https://cdn.jsdelivr.net data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy strict-origin-when-cross-origin
permissions-policy geolocation=(), microphone=(), camera=(), interest-cohort=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://pg.ddx.io/mcp Verified 200
http (plaintext) http://pg.ddx.io/mcp HTTPS enforced 301 https://pg.ddx.io/mcp
MCP tools · 29 exposed · ~6,632 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
blame ~317

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. Not the same as git_blame, which returns a file's commit history.

NameTypeReqDescription
end_linenumber–Last line (default start_line + 1999)
ignore_revsboolean–Pass through .git-blame-ignore-revs commits (default true)
pathstringyesPath from the repository root
repositorystring–Repository; only postgres is in the code-history index for now (the default).
reverseboolean–Also name the commit that later removed each line (default false)
start_linenumber–First line (default 1)
versionstring–Commit to read: a SHA or 7+ hex prefix, a branch (master, REL_17_STABLE), a tag (REL_17_0), a major (17, 9.6), a release (17.2), <ref>@YYYY-MM-DD (the branch's last commit by that day), or <ref>~N. D…

No output schema declared.

No examples provided.

code_search ~516

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.

NameTypeReqDescription
budget_msnumber–Time budget (100-15000, default 10000)
case_sensitiveboolean–Default true
contextnumber–Lines of context around each match (0-20, default 0)
excludearray–Path globs to drop
historystring–Search history instead of one commit: all, a rev (everything up to it on its line), or A..B (B's line after A, as git log A..B)
includearray–Path globs to keep, e.g. *.c, src/include/**/*.h
limitnumber–Results per page (1-2000, default 100)
matchstring–How to read query (default literal)
offsetnumber–Results to skip (paging)
outputstring–lines (default): each matching line with its number; files: paths with match counts; counts: [path, count] pairs
pathsarray–Directories or globs to search under, e.g. src/backend/storage
querystringyesText, regex or identifier to find
repositorystring–Repository; only postgres is in the code-history index for now (the default).
versionstring–Commit to read: a SHA or 7+ hex prefix, a branch (master, REL_17_STABLE), a tag (REL_17_0), a major (17, 9.6), a release (17.2), <ref>@YYYY-MM-DD (the branch's last commit by that day), or <ref>~N. D…

No output schema declared.

No examples provided.

commit_buildfarm_status ~141

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.

NameTypeReqDescription
commit_shastringyesA commit SHA (>= 7 hex), or a branch, tag or major version (17, 9.6) for the commit it points at

No output schema declared.

No examples provided.

commit_history ~174

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. 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>.

NameTypeReqDescription
commit_idstringyesThe commit: a SHA (>= 7 hex), branch, tag, major version (17, 9.6), <ref>~N, or a commit_id from another tool.

No output schema declared.

No examples provided.

cross_reference ~314

What relates to one stored item. ref: a Message-ID or message URL, a commit SHA, repo@sha or commit URL, a docs URL or page.html, a wiki URL or title, a commitfest URL, or CVE-YYYY-NNNNN. Returns the related mail threads, commits, docs pages, wiki pages, commitfest entries and people, each listing why, strongest first: explicit links (Discussion: trailers, messages citing the SHA, commitfest thread links, pages linking the URL, commits to a docs page's SGML), shared identifiers (BUG #N, CVE ids, code identifiers), then similar topic by embeddings. kinds narrows; limit_per_kind (default 5, max 25); version picks the docs release. ~3 s budget: late kinds go in timed_out with partial=true. Cite each item's url. Same as GET /api/v2/related.

NameTypeReqDescription
kindsarray–Result kinds to return (default all)
limit_per_kindnumber–Items per kind (1-25, default 5)
refstringyesThe item: e.g. 19705-548fda77321e062d@postgresql.org, https://www.postgresql.org/docs/current/brin.html, Don't Do This, b536d5a0bd7a, CVE-2024-10979
versionstring–Docs version for a page given without one (default current), e.g. 17
NameTypeReqDescription
partialboolean––
refobjectyes–
relatedobjectyes–
timed_outarray––
took_msinteger––

No examples provided.

find_failing_patches ~174

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>/.

NameTypeReqDescription
entry_statusstring–Restrict to entries in this status (e.g. needs-review, ready-for-committer). Default: any active status.
limitnumber–Max entries (1-500, default 100)
platformstring–Restrict to entries failing on this platform keyword (e.g. linux, macos, windows, freebsd, netbsd, openbsd).

No output schema declared.

No examples provided.

get_attachment ~183

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>.

NameTypeReqDescription
filenamestring–Substring to match against attachment filenames
inboxstring–Mailing list name, e.g. pgsql-general. Defaults to pgsql-hackers when omitted. Aliases: list, inbox_name.
indexnumber–1-based attachment index (from get_message attachment metadata)
message_idstringyesMessage-ID (with or without angle brackets)

No output schema declared.

No examples provided.

get_callers ~134

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.

NameTypeReqDescription
limitnumber–Maximum results (1-100, default 50)
qualified_namestringyesFully qualified symbol name
repositorystring–Repository name, e.g. pgbouncer. Defaults to postgres when omitted. Aliases: repo, repo_name.

No output schema declared.

No examples provided.

get_commit ~199

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, the first release tag on each branch that contains it, 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.

NameTypeReqDescription
commitstringyesSHA or prefix (7+ hex), or any version form (REL_17_0, master~2)
contextnumber–Diff context lines (0-1000, default 3)
diffboolean–Include the diff (default true)
pathsarray–Only diff files under these paths
repositorystring–Repository; only postgres is in the code-history index for now (the default).

No output schema declared.

No examples provided.

get_contributor ~135

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 with sha, 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>.

NameTypeReqDescription
emailstring–Exact :person/canonical-email match
namestring–:person/canonical-name substring (case-insensitive). Used only when email is not provided.

No output schema declared.

No examples provided.

get_doc_page ~103

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.

NameTypeReqDescription
pathstringyesURL path of the documentation page
versionstring–Documentation version (default: latest available)

No output schema declared.

No examples provided.

get_entry ~98

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>/.

NameTypeReqDescription
cf_idnumberyescommitfest.postgresql.org entry id

No output schema declared.

No examples provided.

get_message ~222

One mail message by Message-ID: headers, in_reply_to/references, decoded body text (by default the author's own words: quotes, signature and inline patch removed; full_text=true for everything, quotes included), attachments [{index, filename, content_type, size}] and has_patch. 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>.

NameTypeReqDescription
body_onlyboolean–Older spelling of full_text=true: the whole decoded text (default false).
full_textboolean–Return the whole decoded text, quoted replies and signature included (default false: the author's own words only).
inboxstring–Mailing list name, e.g. pgsql-general. Defaults to pgsql-hackers when omitted. Aliases: list, inbox_name.
include_bodyboolean–Include message body (default true)
message_idstringyesMessage-ID (with or without angle brackets)
NameTypeReqDescription
attachmentsarray|null––
bodystring––
body_charsinteger––
body_truncatedboolean––
bytesinteger––
ccstring––
datestring––
fromstring––
has_patchboolean––
in_reply_toarray|null––
message_idstringyes–
referencesarray|null––
subjectstring––
text_mode–––
thread_idinteger|null––
tostring––

No examples provided.

get_thread ~323

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>.

NameTypeReqDescription
full_textboolean–Whole decoded text of each message, quotes included (default false: own words only).
inboxstring–Mailing list name, e.g. pgsql-general. Defaults to pgsql-hackers when omitted. Aliases: list, inbox_name.
include_bodiesboolean–Include message bodies (default true). false returns an outline: headers only.
limitnumber–Messages per page (1-500, default 20).
max_body_charsnumber–Cap each body at this many characters (default 4000; 0 = no cap).
message_idstringyesMessage-ID of any message in the thread
offsetnumber–Skip this many messages; use next_offset from the previous page.
NameTypeReqDescription
has_morebooleanyes–
message_countintegeryes–
messagesarray|nullyes–
next_offsetinteger|null––
offsetinteger––
returnedintegeryes–
root_message_idstringyes–

No examples provided.

get_wiki_page ~80

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>.

NameTypeReqDescription
titlestringyesWiki page title

No output schema declared.

No examples provided.

git_log ~285

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.

NameTypeReqDescription
authorstring–Filter by author name or email (substring match)
branchstring–Restrict the log to commits reachable from this branch (e.g. cf/5556). Default: the repository's default branch.
limitnumber–Maximum commits to return (1-200, default 50)
offsetnumber–Offset for pagination (default 0)
pathstring–Filter commits to those touching this file path
repositorystring–Repository name, e.g. pgbouncer. Defaults to postgres when omitted. Aliases: repo, repo_name.
sincestring–Only commits after this date (YYYY-MM-DD or RFC3339)
untilstring–Only commits before this date (YYYY-MM-DD or RFC3339)

No output schema declared.

No examples provided.

git_search ~222

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.

NameTypeReqDescription
limitnumber–Maximum results to return (1-200, default 50)
querystringyesSearch query string
repositorystring–Repository name, e.g. pgbouncer. Defaults to postgres when omitted. Aliases: repo, repo_name.
search_instring–What to search: "messages" (commit messages, default) or "paths" (file paths)

No output schema declared.

No examples provided.

hybrid_search ~284

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).

NameTypeReqDescription
inboxstring–Lists to search: omit (or "all") for every list, the default; one name such as pgsql-bugs; or several, comma-separated ("pgsql-hackers,pgsql-bugs"). Names from list_inboxes. Aliases: list, inbox_name.
keyword_weightnumber–Weight for keyword results in the fusion, 0.0-1.0 (default 0.65). Raise it for exact identifiers (function names, GUCs, error text); lower it to lean on semantic similarity.
limitnumber–Maximum results to return (1-50, default 20)
querystringyesSearch query (supports both keywords and natural language)
NameTypeReqDescription
inbox–––
keyword_weightnumber––
querystringyes–
resultsarray|nullyes–
totalintegeryes–

No examples provided.

list_files ~225

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.

NameTypeReqDescription
depthnumber–Levels below path to list (default all)
globstring–Path glob, e.g. *.dat or src/include/catalog/*.h
limitnumber–Entries (1-5000, default 500)
pathstring–Directory (default the root)
repositorystring–Repository; only postgres is in the code-history index for now (the default).
versionstring–Commit to read: a SHA or 7+ hex prefix, a branch (master, REL_17_STABLE), a tag (REL_17_0), a major (17, 9.6), a release (17.2), <ref>@YYYY-MM-DD (the branch's last commit by that day), or <ref>~N. D…

No output schema declared.

No examples provided.

list_sources ~158

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.

NameTypeReqDescription
kindstring–Filter to a single kind (inbox|repository|docs|wiki|discord)
limitnumber–Forward-compat: max rows (default unlimited)
min_itemsnumber–Only return sources with at least this many items
offsetnumber–Forward-compat: skip the first N rows

No output schema declared.

No examples provided.

read_file ~233

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.

NameTypeReqDescription
end_linenumber–Last line (default start_line + 1999)
pathstringyesPath from the repository root, e.g. src/backend/access/transam/xlog.c
repositorystring–Repository; only postgres is in the code-history index for now (the default).
start_linenumber–First line (default 1)
versionstring–Commit to read: a SHA or 7+ hex prefix, a branch (master, REL_17_STABLE), a tag (REL_17_0), a major (17, 9.6), a release (17.2), <ref>@YYYY-MM-DD (the branch's last commit by that day), or <ref>~N. D…

No output schema declared.

No examples provided.

retrieve_context ~241

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.

NameTypeReqDescription
inboxstring–Lists to search: omit (or "all") for every list, the default; one name such as pgsql-bugs; or several, comma-separated ("pgsql-hackers,pgsql-bugs"). Names from list_inboxes. Aliases: list, inbox_name.
questionstringyesThe question, in plain language.
token_budgetnumber–Maximum tokens of evidence to return (default 4000, max 32000).
NameTypeReqDescription
foundbooleanyes–
how_to_citestring––
inbox–––
passagesarrayyes–
questionstringyes–
reasonstring|null––
threads_consideredinteger––
threads_omitted_for_budgetinteger––
token_budgetintegeryes–
tokens_usedintegeryes–

No examples provided.

search ~263

Keyword search of mailing-list messages (BM25 over subject, sender and the authors' own words), every list unless inbox narrows it. Prefixes: s:subject f:from t:to d:2024-01..2025-01 b:body. 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>.

NameTypeReqDescription
collapse_threadsboolean–Deduplicate results to one per thread, keeping the highest-scoring hit (default false)
inboxstring–Lists to search: omit (or "all") for every list, the default; one name such as pgsql-bugs; or several, comma-separated ("pgsql-hackers,pgsql-bugs"). Names from list_inboxes. Aliases: list, inbox_name.
limitnumber–Maximum results to return (1-200, default 50)
offsetnumber–Offset for pagination
querystringyesSearch query string

No output schema declared.

No examples provided.

search_commitfest ~226

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.

NameTypeReqDescription
commitfestsstring–"current" (default: the commitfest commitfest.postgresql.org/current/ shows), "all", or a comma list of commitfest numbers, e.g. "62,61" or "current,55"; see /api/v2/commitfest/commitfests
limitinteger–Max results (default 20, max 50)
querystringyesSearch query, e.g. NUMA or "Tom Lane"
NameTypeReqDescription
commitfests–––
currentinteger|null––
resultsarrayyes–
totalintegeryes–

No examples provided.

search_commits ~319

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).

NameTypeReqDescription
authorstring–Regex over author, committer and credit trailers
budget_msnumber–Time budget (100-15000, default 10000)
changed_linesstring–Regex an added or removed line matches (git log -G)
limitnumber–Commits (1-200, default 30)
messagestring–Regex over the commit message
occurrencesstring–String whose number of occurrences changed (git log -S)
offsetnumber–Commits to skip
pathsarray–Path prefixes the commit touched
rangestring–A rev (its line back to the root) or A..B; default the newest release branch
repositorystring–Repository; only postgres is in the code-history index for now (the default).
sincestring–YYYY-MM-DD (committed on or after)
untilstring–YYYY-MM-DD (committed before)

No output schema declared.

No examples provided.

search_docs ~200

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. Read a page with get_doc_page; cite its postgresql.org/docs url.

NameTypeReqDescription
limitnumber–Maximum results to return (1-50, default 20)
querystringyesSearch query string
versionstring–One documentation version (e.g. "18", "17"; "current" = the current release). Ignored when versions is given.
versionsarray–Documentation versions to search, e.g. ["18", "17"] (default: the current release; see list_doc_versions)

No output schema declared.

No examples provided.

search_symbols ~229

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.

NameTypeReqDescription
kindstring–Filter by symbol kind: function, class, method, struct, enum, interface, trait, etc.
languagestring–Filter by language: go, python, c, cpp, rust, java, typescript, javascript, etc.
limitnumber–Maximum results (1-200, default 50)
querystringyesSearch query (symbol name, partial name, or keyword)
repositorystring–Repository name, e.g. pgbouncer. Defaults to postgres when omitted. Aliases: repo, repo_name.

No output schema declared.

No examples provided.

search_wiki ~191

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.

NameTypeReqDescription
historyboolean–Search every revision, not only the current text (default false)
limitnumber–Maximum results to return (1-50, default 20)
querystringyesSearch query string
sincestring–With history: only revisions at or after this date (YYYY-MM-DD or ISO-8601)
untilstring–With history: only revisions before the end of this date (YYYY-MM-DD or ISO-8601)

No output schema declared.

No examples provided.

whats_new ~443

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), 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.

NameTypeReqDescription
duringstring–A calendar event uid or url, or pg19: sets since and until to its dates
kindsarray–Result kinds to return (default all)
limitnumber–Items per kind (1-100, default 20)
sincestring–Window start: 2026-10-01, 2w, 14d, 1m, today, pg19, all (default 14 days ago)
topicstring–Optional topic that narrows every kind, e.g. NUMA, benchmarking
untilstring–Window end: now (default), today 08:00, 2026-10-21T08:00, pg19
who–yesWho: 'Tom Lane', 'team:core-team', 'org:Amazon/AWS', 'new:30d', a 8-hex person hash, an email; a string or a list of strings
NameTypeReqDescription
ambiguousarray––
countsobject–How many items of each kind were found.
failedarray––
hintstring––
input–––
itemsobject–Items by kind (mail_from, git_author, commitfest, waiting, ...), each an array.
partialboolean––
skippedarray––
timed_outarray––
took_msinteger––
topicstring|null––
truncatedboolean––
whoobject––
windowobject––

No examples provided.

Install

How do I install the pg.ddx.io: the PostgreSQL community's memory MCP server?

pg.ddx.io: the PostgreSQL community's memory is a hosted endpoint at https://pg.ddx.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · pg.ddx.io

# add to Claude Code
claude mcp add --transport http io-ddx-pg-archive 'https://pg.ddx.io/mcp'
Common questions

What is the pg.ddx.io: the PostgreSQL community's memory MCP server?

pg.ddx.io: the PostgreSQL community's memory is an MCP server listed in the public MCP registry as io.ddx.pg/archive. Every PostgreSQL mailing list since 1991, linked to the commits, code, commitfest and docs. This page covers its hosted endpoint (https://pg.ddx.io/mcp).

Is the pg.ddx.io: the PostgreSQL community's memory MCP server safe to use?

pg.ddx.io: the PostgreSQL community's memory scores 73 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the pg.ddx.io: the PostgreSQL community's memory MCP server expose?

pg.ddx.io: the PostgreSQL community's memory exposes 29 tools: retrieve_context, commit_buildfarm_status, commit_history, find_failing_patches, get_attachment, and 24 more. Their descriptions and schemas cost roughly 6,632 tokens of context every time the server is loaded.

Does the pg.ddx.io: the PostgreSQL community's memory MCP server require authentication?

No. We connected to pg.ddx.io: the PostgreSQL community's memory without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the pg.ddx.io: the PostgreSQL community's memory MCP server still maintained?

pg.ddx.io: the PostgreSQL community's memory is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.