This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow-steward.git


The following commit(s) were added to refs/heads/main by this push:
     new 3492257  docs(ponymail): point install docs at apache/comdev's 
official MCP (#279)
3492257 is described below

commit 34922571cb08b45975d1d35e7af726918f083642
Author: Jarek Potiuk <[email protected]>
AuthorDate: Mon May 25 17:08:05 2026 +0200

    docs(ponymail): point install docs at apache/comdev's official MCP (#279)
    
    The PonyMail MCP setup was previously documented around the
    rbowen/ponymail-mcp fork, which has now been promoted into the
    ASF's official ComDev MCP repository at apache/comdev under
    mcp/ponymail-mcp/. Re-point the framework docs at the official
    location and update the install + registration recipe accordingly:
    
    - tools/ponymail/tool.md: backend pointer (rbowen -> apache/comdev),
      prereq (Python 3.11+ -> Node.js 20+), install (uv tool install
      -> git clone + npm install), MCP entry JSON (`"command":
      "ponymail-mcp"` -> `"command": "node"` + absolute path to
      index.js), `claude mcp add` shortcut, and a callout for the new
      PONYMAIL_ALLOWED_LISTS opt-in -- the comdev server default-denies
      all private lists, so following the old docs verbatim would
      silently get empty results on `security@` until the project's
      list is opted in.
    - tools/ponymail/operations.md: header pointer swapped.
    - docs/prerequisites.md: "on the horizon" paragraph rewritten as
      "now an official ASF alternative for the read side"; the read-
      only / drafts-still-Gmail caveat made explicit. Second paragraph
      ("until ponymail-mcp is wired in with ASF OAuth") softened -- it
      IS wired in now; the PMC LDAP gate still applies regardless of
      read path.
    - .claude/skills/security-cve-allocate/SKILL.md: drop "on the
      horizon" phrase from the prerequisites cross-reference.
    
    Session cookie path (~/.ponymail-mcp/session.json) is unchanged --
    the comdev implementation uses the same path as the fork.
    
    Generated-by: Claude Code (Opus 4.7)
---
 .claude/skills/security-cve-allocate/SKILL.md |  2 +-
 docs/prerequisites.md                         | 25 +++++++++------
 tools/ponymail/operations.md                  |  5 +--
 tools/ponymail/tool.md                        | 45 ++++++++++++++++++++-------
 4 files changed, 52 insertions(+), 25 deletions(-)

diff --git a/.claude/skills/security-cve-allocate/SKILL.md 
b/.claude/skills/security-cve-allocate/SKILL.md
index f68e661..91085ad 100644
--- a/.claude/skills/security-cve-allocate/SKILL.md
+++ b/.claude/skills/security-cve-allocate/SKILL.md
@@ -170,7 +170,7 @@ anything else.
 See
 [Prerequisites for running the agent 
skills](../../../docs/prerequisites.md#prerequisites-for-running-the-agent-skills)
 in `docs/prerequisites.md` for the overall setup (including the
-ponymail-mcp option on the horizon for non-personal-Gmail access).
+ponymail-mcp option for non-personal-Gmail read access).
 
 ---
 
diff --git a/docs/prerequisites.md b/docs/prerequisites.md
index c272bcd..bd4feb8 100644
--- a/docs/prerequisites.md
+++ b/docs/prerequisites.md
@@ -72,14 +72,18 @@ who is subscribed to the adopting project's security list 
(see
 access for the skills to see inbound reports and create drafts on
 the right threads.
 
-There is an ASF-wide alternative on the horizon:
-[`rbowen/ponymail-mcp`](https://github.com/rbowen/ponymail-mcp) (by
-Rich Bowen, former ASF board director and ComDev lead) now supports
-OAuth authentication and can read private ASF lists. Once ASF OAuth
-is wired in, individual triagers should be able to run the skills
-without connecting their personal Gmail — authenticating directly
-against ASF credentials (and, eventually, the ASF's new MFA) will be
-sufficient. Until then, Gmail MCP is the way.
+There is now an official ASF alternative for the **read** side:
+[`apache/comdev`'s 
`mcp/ponymail-mcp/`](https://github.com/apache/comdev/tree/main/mcp/ponymail-mcp)
+(under the ComDev PMC; originally authored by Rich Bowen, former ASF
+board director and ComDev lead, with supply-chain hardening and
+private-list restrictions layered in upstream) supports ASF LDAP
+OAuth and can read private ASF lists. Individual triagers can wire
+it up to read inbound `security@<project>.apache.org` threads
+without subscribing a personal Gmail account — see
+[`tools/ponymail/tool.md`](../tools/ponymail/tool.md) for the
+setup. **Drafts remain Gmail-only** today (PonyMail MCP is
+read-only and has no `create_draft` equivalent), so Gmail MCP is
+still required for the reply path.
 
 **Without this connection:** `security-issue-import` cannot find new
 reports, `security-issue-sync` cannot reconcile status with the mail
@@ -112,8 +116,9 @@ click through instead. The concrete tool + URL is declared 
in
 [`<project-config>/project.md → CVE 
tooling`](<project-config>/project.md#cve-tooling).
 
 The same PMC gate applies to ponymail URL lookups on private ASF
-lists; until `ponymail-mcp` is wired in with ASF OAuth, only PMC
-members can see private-list archives directly.
+lists — only PMC members (via ASF LDAP) can see private-list
+archives directly, whether through `ponymail-mcp`'s OAuth flow or
+the `lists.apache.org` web UI.
 
 ### 5. Browser (for the human-click steps)
 
diff --git a/tools/ponymail/operations.md b/tools/ponymail/operations.md
index 6335b4d..1a6589f 100644
--- a/tools/ponymail/operations.md
+++ b/tools/ponymail/operations.md
@@ -30,8 +30,9 @@
 # PonyMail — MCP operation catalogue
 
 Shared reference for the `mcp__ponymail__*` tool calls against the
-[`rbowen/ponymail-mcp`](https://github.com/rbowen/ponymail-mcp) MCP
-server. Skills reference this file for call shape, parameter
+official ASF
+[`apache/comdev` 
`mcp/ponymail-mcp/`](https://github.com/apache/comdev/tree/main/mcp/ponymail-mcp)
+MCP server. Skills reference this file for call shape, parameter
 semantics, and the split between list-prefix and domain in every
 query.
 
diff --git a/tools/ponymail/tool.md b/tools/ponymail/tool.md
index 2ea0f41..9f3ca71 100644
--- a/tools/ponymail/tool.md
+++ b/tools/ponymail/tool.md
@@ -40,8 +40,9 @@ adapter with a writable Drafts mailbox) as
 `preferred for create_draft, list_drafts` so the skills' reply-draft
 operations have a place to land.
 
-The backing MCP server is 
[`rbowen/ponymail-mcp`](https://github.com/rbowen/ponymail-mcp)
-(Python) which wraps the public PonyMail HTTP API at
+The backing MCP server is the official ASF
+[`apache/comdev` 
`mcp/ponymail-mcp/`](https://github.com/apache/comdev/tree/main/mcp/ponymail-mcp)
+(Node.js) which wraps the public PonyMail HTTP API at
 [`lists.apache.org`](https://lists.apache.org/) and layers ASF LDAP
 OAuth on top so private-list archives (e.g. `security@<project>.apache.org`,
 `private@<project>.apache.org`) are reachable from the MCP client.
@@ -103,7 +104,8 @@ draft composition regardless of which read backend is 
active.
 
 Prerequisites:
 
-- Python 3.11+ (the MCP server is a Python package).
+- Node.js 20+ (the MCP server is a Node.js package; see the `engines`
+  field of its 
[`package.json`](https://github.com/apache/comdev/blob/main/mcp/ponymail-mcp/package.json)).
 - An ASF LDAP account with access to the lists the project needs.
   Typically that is the project's PMC LDAP group (e.g.
   `pmc-<project>`), which gates the `<security-list>` and
@@ -113,17 +115,19 @@ Prerequisites:
 
 ### 1. Install the MCP server
 
-The server is published as 
[`rbowen/ponymail-mcp`](https://github.com/rbowen/ponymail-mcp).
-Install it with `uv tool install`, `pipx install`, or via the
-package-manager of your choice. Confirm the binary resolves on
-`PATH`:
+The server lives in the [`apache/comdev`](https://github.com/apache/comdev)
+repository under `mcp/ponymail-mcp/`. There is no published binary —
+clone the repo and install dependencies from the subdirectory:
 
 ```bash
-uv tool install git+https://github.com/rbowen/ponymail-mcp
-which ponymail-mcp
-# /home/<user>/.local/bin/ponymail-mcp
+git clone https://github.com/apache/comdev.git
+cd comdev/mcp/ponymail-mcp
+npm install
 ```
 
+The MCP server is invoked as `node <abs-path>/index.js`. Note the
+absolute path to `index.js` — the next step needs it.
+
 ### 2. Register the MCP with Claude Code
 
 Add the server to Claude Code's MCP configuration. Two common
@@ -142,19 +146,36 @@ The `mcpServers` entry looks like:
 {
   "mcpServers": {
     "ponymail": {
-      "command": "ponymail-mcp",
-      "args": [],
+      "command": "node",
+      "args": ["/absolute/path/to/comdev/mcp/ponymail-mcp/index.js"],
       "env": {}
     }
   }
 }
 ```
 
+Or, equivalently, register from the command line (user scope shown):
+
+```bash
+claude mcp add ponymail node \
+  /absolute/path/to/comdev/mcp/ponymail-mcp/index.js -s user
+```
+
 The tool names that Claude Code surfaces after registration are
 prefixed with `mcp__ponymail__` (derived from the key under
 `mcpServers`). If you name the server differently, the prefix
 changes and this directory's docs need to be re-pointed.
 
+The comdev server also honours a small set of environment variables
+(see its 
[`README.md`](https://github.com/apache/comdev/blob/main/mcp/ponymail-mcp/README.md)):
+`PONYMAIL_BASE_URL` (defaults to `https://lists.apache.org`),
+`PONYMAIL_SESSION_COOKIE` (manual cookie override that skips OAuth),
+`PONYMAIL_RESTRICTED_LISTS` and `PONYMAIL_ALLOWED_LISTS` (deny / opt-in
+patterns). By default the server **blocks all private lists** and
+expects the operator to opt the relevant ones in via
+`PONYMAIL_ALLOWED_LISTS` — list those that match the project's
+`<security-list>` / `<private-list>` if the skills need to read them.
+
 Restart Claude Code (or run `/mcp` → `reconnect`) so the new server
 is picked up and its tools appear in the deferred-tool list.
 

Reply via email to