_ registry / mcp streamable-http · checked 58m ago

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

listed under this name in a public catalogue; the server gives only its address, pg.ddx.io

https://pg.ddx.io

Registry code: 2a4e54469e627f55

api record

Tools: this endpoint lists the 29 core tools. 96 more (commitfest/cfbot detail, buildfarm, code intelligence, git analytics, mail utilities, people and calendars) are listed at https://pg.ddx.io/mcp/full; tools/call here runs any of them by name.

pg.ddx.io is a searchable archive of the PostgreSQL project: every mailing list

endpoint
https://pg.ddx.io/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is pg.ddx.io: the PostgreSQL community's memory live?
Yes — it answered the hub's last check (checked 58m ago). It answered 100% of checks over the last 30 days.
Is pg.ddx.io: the PostgreSQL community's memory free to use?
Yes — the hub reached it with no key and no payment.
What tools does pg.ddx.io: the PostgreSQL community's memory have?
29 tools: commit_history, get_callers, get_entry, get_wiki_page, hybrid_search, search_docs, search_wiki, cross_reference, ….
Is pg.ddx.io: the PostgreSQL community's memory safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
196ms

last good check

priced tools
0

of 29 tools

_ answered our checks, 90 days 2 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 29 tools
3 open 26 never probed 3 of 29 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • git_log open 27h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "path": {
          "type": "string",
          "description": "Filter commits to those touching this file path"
        },
        "limit": {
          "type": "number",
          "description": "Maximum commits to return (1-200, default 50)"
        },
        "since": {
          "type": "string",
          "description": "Only commits after this date (YYYY-MM-DD or RFC3339)"
        },
        "until": {
          "type": "string",
          "description": "Only commits before this date (YYYY-MM-DD or RFC3339)"
        },
        "author": {
          "type": "string",
          "description": "Filter by author name or email (substring match)"
        },
        "branch": {
          "type": "string",
          "description": "Restrict the log to commits reachable from this branch (e.g. cf/5556). Default: the repository's default branch."
        },
        "offset": {
          "type": "number",
          "description": "Offset for pagination (default 0)"
        },
        "repository": {
          "type": "string",
          "description": "Repository name, e.g. pgbouncer. Defaults to postgres when omitted. Aliases: repo, repo_name."
        }
      }
    }
    arguments 38 lines
  • list_sources open 27h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "kind": {
          "type": "string",
          "description": "Filter to a single kind (inbox|repository|docs|wiki|discord)"
        },
        "limit": {
          "type": "number",
          "description": "Forward-compat: max rows (default unlimited)"
        },
        "offset": {
          "type": "number",
          "description": "Forward-compat: skip the first N rows"
        },
        "min_items": {
          "type": "number",
          "description": "Only return sources with at least this many items"
        }
      }
    }
    arguments 22 lines
  • search_commits open 58m ago

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

    mcp-tool

    {
      "type": "object",
      "properties": {
        "limit": {
          "type": "number",
          "description": "Commits (1-200, default 30)"
        },
        "paths": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Path prefixes the commit touched"
        },
        "range": {
          "type": "string",
          "description": "A rev (its line back to the root) or A..B; default the newest release branch"
        },
        "since": {
          "type": "string",
          "description": "YYYY-MM-DD (committed on or after)"
        },
        "until": {
          "type": "string",
          "description": "YYYY-MM-DD (committed before)"
        },
        "author": {
          "type": "string",
          "description": "Regex over author, committer and credit trailers"
        },
        "offset": {
          "type": "number",
          "description": "Commits to skip"
        },
        "message": {
          "type": "string",
          "description": "Regex over the commit message"
        },
        "budget_ms": {
          "type": "number",
          "description": "Time budget (100-15000, default 10000)"
        },
        "repository": {
          "type": "string",
          "description": "Repository; only postgres is in the code-history index for now (the default)."
        },
        "occurrences": {
          "type": "string",
          "description": "String whose number of occurrences changed (git log -S)"
        },
        "changed_lines": {
          "type": "string",
          "description": "Regex an added or removed line matches (git log -G)"
        }
      }
    }
    arguments 56 lines
  • commit_history unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "commit_id"
      ],
      "properties": {
        "commit_id": {
          "type": "string",
          "description": "The commit: a SHA (>= 7 hex), branch, tag, major version (17, 9.6), <ref>~N, or a commit_id from another tool."
        }
      }
    }
    arguments 12 lines
  • get_callers unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "qualified_name"
      ],
      "properties": {
        "limit": {
          "type": "number",
          "description": "Maximum results (1-100, default 50)"
        },
        "repository": {
          "type": "string",
          "description": "Repository name, e.g. pgbouncer. Defaults to postgres when omitted. Aliases: repo, repo_name."
        },
        "qualified_name": {
          "type": "string",
          "description": "Fully qualified symbol name"
        }
      }
    }
    arguments 20 lines
  • get_entry unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "cf_id"
      ],
      "properties": {
        "cf_id": {
          "type": "number",
          "description": "commitfest.postgresql.org entry id"
        }
      }
    }
    arguments 12 lines
  • get_wiki_page unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "title"
      ],
      "properties": {
        "title": {
          "type": "string",
          "description": "Wiki page title"
        }
      }
    }
    arguments 12 lines
  • hybrid_search unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "inbox": {
          "type": "string",
          "description": "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."
        },
        "limit": {
          "type": "number",
          "description": "Maximum results to return (1-50, default 20)"
        },
        "query": {
          "type": "string",
          "description": "Search query (supports both keywords and natural language)"
        },
        "keyword_weight": {
          "type": "number",
          "description": "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."
        }
      }
    }
    arguments 24 lines
  • search_docs unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "number",
          "description": "Maximum results to return (1-50, default 20)"
        },
        "query": {
          "type": "string",
          "description": "Search query string"
        },
        "version": {
          "type": "string",
          "description": "One documentation version (e.g. \"18\", \"17\"; \"current\" = the current release). Ignored when versions is given."
        },
        "versions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Documentation versions to search, e.g. [\"18\", \"17\"] (default: the current release; see list_doc_versions)"
        }
      }
    }
    arguments 27 lines
  • search_wiki unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "number",
          "description": "Maximum results to return (1-50, default 20)"
        },
        "query": {
          "type": "string",
          "description": "Search query string"
        },
        "since": {
          "type": "string",
          "description": "With history: only revisions at or after this date (YYYY-MM-DD or ISO-8601)"
        },
        "until": {
          "type": "string",
          "description": "With history: only revisions before the end of this date (YYYY-MM-DD or ISO-8601)"
        },
        "history": {
          "type": "boolean",
          "description": "Search every revision, not only the current text (default false)"
        }
      }
    }
    arguments 28 lines
  • cross_reference unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "ref"
      ],
      "properties": {
        "ref": {
          "type": "string",
          "description": "The item: e.g. [email protected], https://www.postgresql.org/docs/current/brin.html, Don't Do This, b536d5a0bd7a, CVE-2024-10979"
        },
        "kinds": {
          "type": "array",
          "items": {
            "enum": [
              "mail",
              "git",
              "docs",
              "wiki",
              "commitfest",
              "people"
            ],
            "type": "string"
          },
          "description": "Result kinds to return (default all)"
        },
        "version": {
          "type": "string",
          "description": "Docs version for a page given without one (default current), e.g. 17"
        },
        "limit_per_kind": {
          "type": "number",
          "description": "Items per kind (1-25, default 5)"
        }
      }
    }
    arguments 35 lines
  • whats_new unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "who"
      ],
      "properties": {
        "who": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ],
          "description": "Who: 'Tom Lane', 'team:core-team', 'org:Amazon/AWS', 'new:30d', a 8-hex person hash, an email; a string or a list of strings"
        },
        "kinds": {
          "type": "array",
          "items": {
            "enum": [
              "waiting",
              "mail_from",
              "mail_to_cc",
              "mail_mention",
              "git_author",
              "git_credit",
              "git_mention",
              "wiki_edit",
              "wiki_mention",
              "commitfest",
              "calendar",
              "roster"
            ],
            "type": "string"
          },
          "description": "Result kinds to return (default all)"
        },
        "limit": {
          "type": "number",
          "description": "Items per kind (1-100, default 20)"
        },
        "since": {
          "type": "string",
          "description": "Window start: 2026-10-01, 2w, 14d, 1m, today, pg19, all (default 14 days ago)"
        },
        "topic": {
          "type": "string",
          "description": "Optional topic that narrows every kind, e.g. NUMA, benchmarking"
        },
        "until": {
          "type": "string",
          "description": "Window end: now (default), today 08:00, 2026-10-21T08:00, pg19"
        },
        "during": {
          "type": "string",
          "description": "A calendar event uid or url, or pg19: sets since and until to its dates"
        }
      }
    }
    arguments 63 lines
  • list_files unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "glob": {
          "type": "string",
          "description": "Path glob, e.g. *.dat or src/include/catalog/*.h"
        },
        "path": {
          "type": "string",
          "description": "Directory (default the root)"
        },
        "depth": {
          "type": "number",
          "description": "Levels below path to list (default all)"
        },
        "limit": {
          "type": "number",
          "description": "Entries (1-5000, default 500)"
        },
        "version": {
          "type": "string",
          "description": "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. Default: the newest release branch's head."
        },
        "repository": {
          "type": "string",
          "description": "Repository; only postgres is in the code-history index for now (the default)."
        }
      }
    }
    arguments 29 lines
  • get_commit unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "commit"
      ],
      "properties": {
        "diff": {
          "type": "boolean",
          "description": "Include the diff (default true)"
        },
        "paths": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Only diff files under these paths"
        },
        "commit": {
          "type": "string",
          "description": "SHA or prefix (7+ hex), or any version form (REL_17_0, master~2)"
        },
        "context": {
          "type": "number",
          "description": "Diff context lines (0-1000, default 3)"
        },
        "repository": {
          "type": "string",
          "description": "Repository; only postgres is in the code-history index for now (the default)."
        }
      }
    }
    arguments 31 lines
  • code_search unknown 58m ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "number",
          "description": "Results per page (1-2000, default 100)"
        },
        "match": {
          "enum": [
            "literal",
            "regex",
            "identifier"
          ],
          "type": "string",
          "description": "How to read query (default literal)"
        },
        "paths": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Directories or globs to search under, e.g. src/backend/storage"
        },
        "query": {
          "type": "string",
          "description": "Text, regex or identifier to find"
        },
        "offset": {
          "type": "number",
          "description": "Results to skip (paging)"
        },
        "output": {
          "enum": [
            "lines",
            "files",
            "counts"
          ],
          "type": "string",
          "description": "lines (default): each matching line with its number; files: paths with match counts; counts: [path, count] pairs"
        },
        "context": {
          "type": "number",
          "description": "Lines of context around each match (0-20, default 0)"
        },
        "exclude": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Path globs to drop"
        },
        "history": {
          "type": "string",
          "description": "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)"
        },
        "include": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Path globs to keep, e.g. *.c, src/include/**/*.h"
        },
        "version": {
          "type": "string",
          "description": "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. Default: the newest release branch's head."
        },
        "budget_ms": {
          "type": "number",
          "description": "Time budget (100-15000, default 10000)"
        },
        "repository": {
          "type": "string",
          "description": "Repository; only postgres is in the code-history index for now (the default)."
        },
        "case_sensitive": {
          "type": "boolean",
          "description": "Default true"
        }
      }
    }
    arguments 83 lines
  • retrieve_context unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "question"
      ],
      "properties": {
        "inbox": {
          "type": "string",
          "description": "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."
        },
        "question": {
          "type": "string",
          "description": "The question, in plain language."
        },
        "token_budget": {
          "type": "number",
          "description": "Maximum tokens of evidence to return (default 4000, max 32000)."
        }
      }
    }
    arguments 20 lines
  • commit_buildfarm_status unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "commit_sha"
      ],
      "properties": {
        "commit_sha": {
          "type": "string",
          "description": "A commit SHA (>= 7 hex), or a branch, tag or major version (17, 9.6) for the commit it points at"
        }
      }
    }
    arguments 12 lines
  • find_failing_patches unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "limit": {
          "type": "number",
          "description": "Max entries (1-500, default 100)"
        },
        "platform": {
          "type": "string",
          "description": "Restrict to entries failing on this platform keyword (e.g. linux, macos, windows, freebsd, netbsd, openbsd)."
        },
        "entry_status": {
          "type": "string",
          "description": "Restrict to entries in this status (e.g. needs-review, ready-for-committer). Default: any active status."
        }
      }
    }
    arguments 18 lines
  • get_attachment unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "message_id"
      ],
      "properties": {
        "inbox": {
          "type": "string",
          "description": "Mailing list name, e.g. pgsql-general. Defaults to pgsql-hackers when omitted. Aliases: list, inbox_name."
        },
        "index": {
          "type": "number",
          "description": "1-based attachment index (from get_message attachment metadata)"
        },
        "filename": {
          "type": "string",
          "description": "Substring to match against attachment filenames"
        },
        "message_id": {
          "type": "string",
          "description": "Message-ID (with or without angle brackets)"
        }
      }
    }
    arguments 24 lines
  • get_message unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "message_id"
      ],
      "properties": {
        "inbox": {
          "type": "string",
          "description": "Mailing list name, e.g. pgsql-general. Defaults to pgsql-hackers when omitted. Aliases: list, inbox_name."
        },
        "body_only": {
          "type": "boolean",
          "description": "Older spelling of full_text=true: the whole decoded text (default false)."
        },
        "full_text": {
          "type": "boolean",
          "description": "Return the whole decoded text, quoted replies and signature included (default false: the author's own words only)."
        },
        "message_id": {
          "type": "string",
          "description": "Message-ID (with or without angle brackets)"
        },
        "include_body": {
          "type": "boolean",
          "description": "Include message body (default true)"
        }
      }
    }
    arguments 28 lines
  • get_thread unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "message_id"
      ],
      "properties": {
        "inbox": {
          "type": "string",
          "description": "Mailing list name, e.g. pgsql-general. Defaults to pgsql-hackers when omitted. Aliases: list, inbox_name."
        },
        "limit": {
          "type": "number",
          "description": "Messages per page (1-500, default 20)."
        },
        "offset": {
          "type": "number",
          "description": "Skip this many messages; use next_offset from the previous page."
        },
        "full_text": {
          "type": "boolean",
          "description": "Whole decoded text of each message, quotes included (default false: own words only)."
        },
        "message_id": {
          "type": "string",
          "description": "Message-ID of any message in the thread"
        },
        "include_bodies": {
          "type": "boolean",
          "description": "Include message bodies (default true). false returns an outline: headers only."
        },
        "max_body_chars": {
          "type": "number",
          "description": "Cap each body at this many characters (default 4000; 0 = no cap)."
        }
      }
    }
    arguments 36 lines
  • get_doc_page unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "path"
      ],
      "properties": {
        "path": {
          "type": "string",
          "description": "URL path of the documentation page"
        },
        "version": {
          "type": "string",
          "description": "Documentation version (default: latest available)"
        }
      }
    }
    arguments 16 lines
  • git_search unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "number",
          "description": "Maximum results to return (1-200, default 50)"
        },
        "query": {
          "type": "string",
          "description": "Search query string"
        },
        "search_in": {
          "type": "string",
          "description": "What to search: \"messages\" (commit messages, default) or \"paths\" (file paths)"
        },
        "repository": {
          "type": "string",
          "description": "Repository name, e.g. pgbouncer. Defaults to postgres when omitted. Aliases: repo, repo_name."
        }
      }
    }
    arguments 24 lines
  • search unknown never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "inbox": {
          "type": "string",
          "description": "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."
        },
        "limit": {
          "type": "number",
          "description": "Maximum results to return (1-200, default 50)"
        },
        "query": {
          "type": "string",
          "description": "Search query string"
        },
        "offset": {
          "type": "number",
          "description": "Offset for pagination"
        },
        "collapse_threads": {
          "type": "boolean",
          "description": "Deduplicate results to one per thread, keeping the highest-scoring hit (default false)"
        }
      }
    }
    arguments 28 lines
  • search_commitfest unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Max results (default 20, max 50)"
        },
        "query": {
          "type": "string",
          "description": "Search query, e.g. NUMA or \"Tom Lane\""
        },
        "commitfests": {
          "type": "string",
          "description": "\"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"
        }
      }
    }
    arguments 20 lines
  • search_symbols unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "kind": {
          "type": "string",
          "description": "Filter by symbol kind: function, class, method, struct, enum, interface, trait, etc."
        },
        "limit": {
          "type": "number",
          "description": "Maximum results (1-200, default 50)"
        },
        "query": {
          "type": "string",
          "description": "Search query (symbol name, partial name, or keyword)"
        },
        "language": {
          "type": "string",
          "description": "Filter by language: go, python, c, cpp, rust, java, typescript, javascript, etc."
        },
        "repository": {
          "type": "string",
          "description": "Repository name, e.g. pgbouncer. Defaults to postgres when omitted. Aliases: repo, repo_name."
        }
      }
    }
    arguments 28 lines
  • read_file unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "path"
      ],
      "properties": {
        "path": {
          "type": "string",
          "description": "Path from the repository root, e.g. src/backend/access/transam/xlog.c"
        },
        "version": {
          "type": "string",
          "description": "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. Default: the newest release branch's head."
        },
        "end_line": {
          "type": "number",
          "description": "Last line (default start_line + 1999)"
        },
        "repository": {
          "type": "string",
          "description": "Repository; only postgres is in the code-history index for now (the default)."
        },
        "start_line": {
          "type": "number",
          "description": "First line (default 1)"
        }
      }
    }
    arguments 28 lines
  • blame unknown 58m ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "path"
      ],
      "properties": {
        "path": {
          "type": "string",
          "description": "Path from the repository root"
        },
        "reverse": {
          "type": "boolean",
          "description": "Also name the commit that later removed each line (default false)"
        },
        "version": {
          "type": "string",
          "description": "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. Default: the newest release branch's head."
        },
        "end_line": {
          "type": "number",
          "description": "Last line (default start_line + 1999)"
        },
        "repository": {
          "type": "string",
          "description": "Repository; only postgres is in the code-history index for now (the default)."
        },
        "start_line": {
          "type": "number",
          "description": "First line (default 1)"
        },
        "ignore_revs": {
          "type": "boolean",
          "description": "Pass through .git-blame-ignore-revs commits (default true)"
        }
      }
    }
    arguments 36 lines
  • get_contributor unknown 27h ago

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

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "name": {
          "type": "string",
          "description": ":person/canonical-name substring (case-insensitive). Used only when email is not provided."
        },
        "email": {
          "type": "string",
          "description": "Exact :person/canonical-email match"
        }
      }
    }
    arguments 14 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 2a4e54469e627f55.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/2a4e54469e627f55/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/2a4e54469e627f55/badge.svg)](https://brick.blue/agent/2a4e54469e627f55?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.