)]}'
{
  "log": [
    {
      "commit": "afacbfe5fa8f464393ce34958d7693ddcbb6bfce",
      "tree": "bb1ffdb3fe95bb1cf1aa2b4b04f1e7cca9acc352",
      "parents": [
        "b9ee5c5d1d5a4ee4cbdf99217095671e9dede2ff"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Aug 21 09:47:41 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Aug 21 09:48:33 2026 -0400"
      },
      "message": "Fix variable\n\nYes, I am aware that this is not useful to anyone but me. But as far as\nI know, I\u0027m the only one who ever uses this script, so, this makes it\nuseful to me. :)\n"
    },
    {
      "commit": "b9ee5c5d1d5a4ee4cbdf99217095671e9dede2ff",
      "tree": "bf14f4f08db03f167c4de0d424fe0ea871a02748",
      "parents": [
        "eaeb1cfbf25e8ad6a897348a787d8ad4399db121",
        "331d7f99bb0adea82ff34a737ddd8f05fdb8dd60"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Sun Aug 09 09:15:50 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 09 09:15:50 2026 -0700"
      },
      "message": "Merge pull request #36 from apache/dependabot/npm_and_yarn/mcp/ponymail-mcp/hono-4.13.1\n\nBump hono from 4.12.26 to 4.13.1 in /mcp/ponymail-mcp"
    },
    {
      "commit": "331d7f99bb0adea82ff34a737ddd8f05fdb8dd60",
      "tree": "bf14f4f08db03f167c4de0d424fe0ea871a02748",
      "parents": [
        "eaeb1cfbf25e8ad6a897348a787d8ad4399db121"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Aug 09 09:38:50 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 09 09:38:50 2026 +0000"
      },
      "message": "Bump hono from 4.12.26 to 4.13.1 in /mcp/ponymail-mcp\n\nBumps [hono](https://github.com/honojs/hono) from 4.12.26 to 4.13.1.\n- [Release notes](https://github.com/honojs/hono/releases)\n- [Commits](https://github.com/honojs/hono/compare/v4.12.26...v4.13.1)\n\n---\nupdated-dependencies:\n- dependency-name: hono\n  dependency-version: 4.13.1\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "eaeb1cfbf25e8ad6a897348a787d8ad4399db121",
      "tree": "0a25fad1b581a0b769f138fafc93b9a9bebeed54",
      "parents": [
        "194b8421f7ace670bba0132f24448517237a964d",
        "089f1d6d8c2ec45dcd99495c665b4f3896f0f137"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Aug 04 17:31:49 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 17:31:49 2026 -0400"
      },
      "message": "Merge pull request #35 from apache/dependabot/npm_and_yarn/mcp/apache-projects-mcp/multi-48d61a6c1d\n\nBump @hono/node-server and @modelcontextprotocol/sdk in /mcp/apache-projects-mcp"
    },
    {
      "commit": "089f1d6d8c2ec45dcd99495c665b4f3896f0f137",
      "tree": "0a25fad1b581a0b769f138fafc93b9a9bebeed54",
      "parents": [
        "194b8421f7ace670bba0132f24448517237a964d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 04 21:25:44 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 21:25:44 2026 +0000"
      },
      "message": "Bump @hono/node-server and @modelcontextprotocol/sdk\n\nBumps [@hono/node-server](https://github.com/honojs/node-server) to 2.1.0 and updates ancestor dependency [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk). These dependencies need to be updated together.\n\n\nUpdates `@hono/node-server` from 1.19.14 to 2.1.0\n- [Release notes](https://github.com/honojs/node-server/releases)\n- [Commits](https://github.com/honojs/node-server/compare/v1.19.14...v2.1.0)\n\nUpdates `@modelcontextprotocol/sdk` from 1.29.0 to 1.30.0\n- [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases)\n- [Commits](https://github.com/modelcontextprotocol/typescript-sdk/compare/v1.29.0...1.30.0)\n\n---\nupdated-dependencies:\n- dependency-name: \"@hono/node-server\"\n  dependency-version: 2.1.0\n  dependency-type: indirect\n- dependency-name: \"@modelcontextprotocol/sdk\"\n  dependency-version: 1.30.0\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "194b8421f7ace670bba0132f24448517237a964d",
      "tree": "db6c468a2072b507624de1d2ad79f0178a1ef3b7",
      "parents": [
        "885aefb83d5882b010a47c83fb3da111ca08d160",
        "10924550eb0d4cc7adcddadc8f5ed04b49df2294"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Aug 04 17:24:29 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 17:24:29 2026 -0400"
      },
      "message": "Merge pull request #31 from apache/dependabot/npm_and_yarn/mcp/apache-projects-mcp/hono-4.13.0\n\nBump hono from 4.12.23 to 4.13.0 in /mcp/apache-projects-mcp"
    },
    {
      "commit": "885aefb83d5882b010a47c83fb3da111ca08d160",
      "tree": "eef7d6e243b4de47f2fa7589250fcf00f8588af4",
      "parents": [
        "2db216f94be85df1e61ff3a65e7050a2341ae79a",
        "7cd0bbf2723a0b5586f087f3d93c03721afe1617"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Aug 04 17:24:09 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 17:24:09 2026 -0400"
      },
      "message": "Merge pull request #34 from apache/dependabot/npm_and_yarn/mcp/ponymail-mcp/fast-uri-3.1.5\n\nBump fast-uri from 3.1.2 to 3.1.5 in /mcp/ponymail-mcp"
    },
    {
      "commit": "2db216f94be85df1e61ff3a65e7050a2341ae79a",
      "tree": "c264f524752ddbc8adae04100fc59f03ce3c1623",
      "parents": [
        "ae71d69badf86d494725374af6bf80acb300e36c",
        "ffe91d6fbbb7765e18ea1bc80f3f9450547dc6f5"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Aug 04 17:23:51 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 17:23:51 2026 -0400"
      },
      "message": "Merge pull request #33 from apache/dependabot/npm_and_yarn/mcp/ponymail-mcp/ip-address-10.4.0\n\nBump ip-address from 10.2.0 to 10.4.0 in /mcp/ponymail-mcp"
    },
    {
      "commit": "ae71d69badf86d494725374af6bf80acb300e36c",
      "tree": "8681435ed087bf476a61387530f0e8b293881bcd",
      "parents": [
        "beadec6cae4a8fc864c0b53397a92a1daa66fa54",
        "660460ddf517951b048cfb666024f24c3ed5e5fe"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Aug 04 17:22:55 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 17:22:55 2026 -0400"
      },
      "message": "Merge pull request #28 from apache/dependabot/npm_and_yarn/mcp/apache-projects-mcp/fast-uri-3.1.4\n\nBump fast-uri from 3.1.2 to 3.1.4 in /mcp/apache-projects-mcp"
    },
    {
      "commit": "7cd0bbf2723a0b5586f087f3d93c03721afe1617",
      "tree": "08c673fd47ba3a575377592da21a7eaac5deb0d9",
      "parents": [
        "4a3a6c7dcbed777465de251855b824bf4d70a635"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 04 21:22:25 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 21:22:25 2026 +0000"
      },
      "message": "Bump fast-uri from 3.1.2 to 3.1.5 in /mcp/ponymail-mcp\n\nBumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.2 to 3.1.5.\n- [Release notes](https://github.com/fastify/fast-uri/releases)\n- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.5)\n\n---\nupdated-dependencies:\n- dependency-name: fast-uri\n  dependency-version: 3.1.5\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "beadec6cae4a8fc864c0b53397a92a1daa66fa54",
      "tree": "365f629a22dceb9439dd0df93bed1d4029827c74",
      "parents": [
        "4a3a6c7dcbed777465de251855b824bf4d70a635",
        "30eecbf45276c5aa9d86f29e6ee6dd6d28ac0680"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Aug 04 17:22:24 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 17:22:24 2026 -0400"
      },
      "message": "Merge pull request #25 from apache/dependabot/npm_and_yarn/mcp/ponymail-mcp/body-parser-2.3.0\n\nBump body-parser from 2.2.2 to 2.3.0 in /mcp/ponymail-mcp"
    },
    {
      "commit": "ffe91d6fbbb7765e18ea1bc80f3f9450547dc6f5",
      "tree": "c8895c51f7b9d90bfea64f27d4608efa136ea0f8",
      "parents": [
        "4a3a6c7dcbed777465de251855b824bf4d70a635"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 04 21:22:23 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 21:22:23 2026 +0000"
      },
      "message": "Bump ip-address from 10.2.0 to 10.4.0 in /mcp/ponymail-mcp\n\nBumps [ip-address](https://github.com/beaugunderson/ip-address) from 10.2.0 to 10.4.0.\n- [Release notes](https://github.com/beaugunderson/ip-address/releases)\n- [Commits](https://github.com/beaugunderson/ip-address/compare/v10.2.0...v10.4.0)\n\n---\nupdated-dependencies:\n- dependency-name: ip-address\n  dependency-version: 10.4.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "4a3a6c7dcbed777465de251855b824bf4d70a635",
      "tree": "fccadc7c731115e8aa5fbb8942c725cce7e03a82",
      "parents": [
        "2cd9dfd598828396ef4b02c29b7f18da8ef3b967",
        "f2b4a9daaa256e9e3617f5c4dab63eee5b00b5c3"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Aug 04 17:21:53 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 17:21:53 2026 -0400"
      },
      "message": "Merge pull request #24 from potiuk/fix-ponymail-auth-result-page\n\nFix ponymail MCP auth result page: dark-mode text and Close tab button"
    },
    {
      "commit": "2cd9dfd598828396ef4b02c29b7f18da8ef3b967",
      "tree": "c3343abb121e994dfee9300a36a7f5b3d9c94255",
      "parents": [
        "9e21fea1a90edf74330414661ef4d3b5555dd5fe",
        "5b5a10ae8c3cf58db51087613993ef4397383c82"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Aug 04 17:21:12 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 17:21:12 2026 -0400"
      },
      "message": "Merge pull request #30 from apache/dependabot/npm_and_yarn/mcp/apache-projects-mcp/ip-address-10.4.0\n\nBump ip-address from 10.2.0 to 10.4.0 in /mcp/apache-projects-mcp"
    },
    {
      "commit": "10924550eb0d4cc7adcddadc8f5ed04b49df2294",
      "tree": "7c7904ea142737c56d3ea536cbcd5b25b6dbc0df",
      "parents": [
        "9e21fea1a90edf74330414661ef4d3b5555dd5fe"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 04 13:15:37 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 13:15:37 2026 +0000"
      },
      "message": "Bump hono from 4.12.23 to 4.13.0 in /mcp/apache-projects-mcp\n\nBumps [hono](https://github.com/honojs/hono) from 4.12.23 to 4.13.0.\n- [Release notes](https://github.com/honojs/hono/releases)\n- [Commits](https://github.com/honojs/hono/compare/v4.12.23...v4.13.0)\n\n---\nupdated-dependencies:\n- dependency-name: hono\n  dependency-version: 4.13.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "5b5a10ae8c3cf58db51087613993ef4397383c82",
      "tree": "c3343abb121e994dfee9300a36a7f5b3d9c94255",
      "parents": [
        "9e21fea1a90edf74330414661ef4d3b5555dd5fe"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 04 02:11:36 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 02:11:36 2026 +0000"
      },
      "message": "Bump ip-address from 10.2.0 to 10.4.0 in /mcp/apache-projects-mcp\n\nBumps [ip-address](https://github.com/beaugunderson/ip-address) from 10.2.0 to 10.4.0.\n- [Release notes](https://github.com/beaugunderson/ip-address/releases)\n- [Commits](https://github.com/beaugunderson/ip-address/compare/v10.2.0...v10.4.0)\n\n---\nupdated-dependencies:\n- dependency-name: ip-address\n  dependency-version: 10.4.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "660460ddf517951b048cfb666024f24c3ed5e5fe",
      "tree": "877ea9580d22049b1894def2374bc3dbed87cd44",
      "parents": [
        "9e21fea1a90edf74330414661ef4d3b5555dd5fe"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Jul 25 11:51:05 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 11:51:05 2026 +0000"
      },
      "message": "Bump fast-uri from 3.1.2 to 3.1.4 in /mcp/apache-projects-mcp\n\nBumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.2 to 3.1.4.\n- [Release notes](https://github.com/fastify/fast-uri/releases)\n- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.4)\n\n---\nupdated-dependencies:\n- dependency-name: fast-uri\n  dependency-version: 3.1.4\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "30eecbf45276c5aa9d86f29e6ee6dd6d28ac0680",
      "tree": "55fe04a1d8fb18efc33414d94ebcfb93490a6229",
      "parents": [
        "9e21fea1a90edf74330414661ef4d3b5555dd5fe"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 22 03:02:51 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 03:02:51 2026 +0000"
      },
      "message": "Bump body-parser from 2.2.2 to 2.3.0 in /mcp/ponymail-mcp\n\nBumps [body-parser](https://github.com/expressjs/body-parser) from 2.2.2 to 2.3.0.\n- [Release notes](https://github.com/expressjs/body-parser/releases)\n- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)\n- [Commits](https://github.com/expressjs/body-parser/compare/v2.2.2...v2.3.0)\n\n---\nupdated-dependencies:\n- dependency-name: body-parser\n  dependency-version: 2.3.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "f2b4a9daaa256e9e3617f5c4dab63eee5b00b5c3",
      "tree": "e15c31e1df01ae1284e602d7b1a54172d6107c66",
      "parents": [
        "9e21fea1a90edf74330414661ef4d3b5555dd5fe"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Wed Jul 08 17:16:10 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Wed Jul 08 17:16:10 2026 +0200"
      },
      "message": "Fix ponymail MCP auth result page: dark-mode text and Close tab button\n\nTwo issues on the authentication success page (resultPage in auth.js):\n\n- Dark mode text merged into the background: the dark-mode media query\n  only recolored `body`, so the `.card` kept its light green/red\n  background while paragraph text inherited the light body color,\n  rendering as light-on-light. The card now switches background and\n  text color together via CSS custom properties (--card-bg, --text,\n  --accent), using the same dark palette as the main page.\n\n- \"Close tab\" button did nothing: window.close() is blocked by browsers\n  for tabs the user navigated to (only script-opened tabs can\n  self-close). This can\u0027t be forced, so it now fails gracefully — if\n  the tab is still open shortly after the attempt, the button is hidden\n  and a \"press Ctrl/Cmd + W\" hint is shown instead.\n\nGenerated-by: Claude Code 2.1.158 (Claude Opus 4.8)\n"
    },
    {
      "commit": "9e21fea1a90edf74330414661ef4d3b5555dd5fe",
      "tree": "f04cdac758ba5066278c8cf08fc3d5278778bbbd",
      "parents": [
        "86e2af3fe44ac1c3d0007f2b761b0fb9c7e91a3d",
        "bf039455851891577f6bd274917dabfed55e757d"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun Jul 05 22:49:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 05 22:49:37 2026 +0200"
      },
      "message": "Merge pull request #21 from apache/rbowen-api-update\n\nFix get_thread, add get_source, make API suffix configurable"
    },
    {
      "commit": "86e2af3fe44ac1c3d0007f2b761b0fb9c7e91a3d",
      "tree": "dc167b517fc1cb0d878d8ecf01ae388b52623395",
      "parents": [
        "db6e26c7c765016b1e314443484d7996e7cea186",
        "ecdfe83c9404209ec8fdc3b659d60350cdbb201e"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun Jul 05 22:49:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 05 22:49:14 2026 +0200"
      },
      "message": "Merge pull request #22 from apache/dependabot/npm_and_yarn/mcp/ponymail-mcp/hono-4.12.26\n\nBump hono from 4.12.23 to 4.12.26 in /mcp/ponymail-mcp"
    },
    {
      "commit": "ecdfe83c9404209ec8fdc3b659d60350cdbb201e",
      "tree": "dc167b517fc1cb0d878d8ecf01ae388b52623395",
      "parents": [
        "db6e26c7c765016b1e314443484d7996e7cea186"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Jun 20 01:33:06 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 20 01:33:06 2026 +0000"
      },
      "message": "Bump hono from 4.12.23 to 4.12.26 in /mcp/ponymail-mcp\n\nBumps [hono](https://github.com/honojs/hono) from 4.12.23 to 4.12.26.\n- [Release notes](https://github.com/honojs/hono/releases)\n- [Commits](https://github.com/honojs/hono/compare/v4.12.23...v4.12.26)\n\n---\nupdated-dependencies:\n- dependency-name: hono\n  dependency-version: 4.12.26\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "bf039455851891577f6bd274917dabfed55e757d",
      "tree": "06e138ac4fcf5ae72ab3da3bd06c80320bfaa126",
      "parents": [
        "7803c2c4077d08d2bf7aa21abaf095e37b1505c4"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Jun 16 17:27:44 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Jun 16 17:27:44 2026 -0400"
      },
      "message": "Switch default to .json + POST, implement dual-mode API client\n\nThe Foal server uses the endpoint suffix to determine how to parse\nthe request body: .lua \u003d GET with query params, .json \u003d POST with\nJSON body. Both route to the same handlers.\n\n- Default PONYMAIL_API_SUFFIX to \".json\" (native Foal protocol)\n- apiFetch now automatically uses POST+JSON when suffix is \".json\"\n  and GET+params when \".lua\"\n- All raw fetch calls (get_source, auth_status) also handle both modes\n- Update README and TODO to reflect the new default\n\nSet PONYMAIL_API_SUFFIX\u003d.lua only for older deployments that lack\nthe .json route registration.\n"
    },
    {
      "commit": "7803c2c4077d08d2bf7aa21abaf095e37b1505c4",
      "tree": "1720195a7a206fbf17f9231e6877956e8674fc77",
      "parents": [
        "df47afa37ffb60e34aa49b03ff6dac0a14a70e24"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Jun 16 17:19:45 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Jun 16 17:19:45 2026 -0400"
      },
      "message": "Update docs to reflect new tools.\n"
    },
    {
      "commit": "df47afa37ffb60e34aa49b03ff6dac0a14a70e24",
      "tree": "1dc8e8c9e89c7edf293e6264505549f5924066f3",
      "parents": [
        "db6e26c7c765016b1e314443484d7996e7cea186"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Jun 16 17:08:58 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Jun 16 17:08:58 2026 -0400"
      },
      "message": "Fix get_thread, add get_source, make API suffix configurable\n\nThe original MCP was built from an outdated and inaccurate version of\nthe PonyMail API documentation. With accurate docs now available\n(see apache/incubator-ponymail-foal#313), update the MCP to match\nthe actual Foal API:\n\n- get_thread: Use the dedicated /api/thread endpoint instead of\n  fetching a single email via /api/email and hoping for the best.\n  Now returns the full threaded tree + flat email array. Add\n  find_parent parameter to navigate to thread root from any message.\n\n- get_source: New tool — fetches raw RFC 2822 email source via\n  /api/source. Includes restriction/privacy checks.\n\n- API suffix: New PONYMAIL_API_SUFFIX env var (default \".lua\").\n  Set to \".json\" for native Foal deployments without the legacy\n  compat layer. All endpoint paths now use the configurable suffix.\n"
    },
    {
      "commit": "db6e26c7c765016b1e314443484d7996e7cea186",
      "tree": "aa59c9852d9c2a84d740e77f6bd7e92021ca0f8c",
      "parents": [
        "b1ce58288df6fbc77d27d4cd3743913b1fc7a8fd"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Jun 12 10:07:49 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Jun 12 10:07:49 2026 -0400"
      },
      "message": "Reflect new location of this repo.\n"
    },
    {
      "commit": "b1ce58288df6fbc77d27d4cd3743913b1fc7a8fd",
      "tree": "7a90893abd7767d798d61f8ac56ede9553be3934",
      "parents": [
        "1b369cc0013be0107753019c80e36384842eacb1",
        "32e97a49b433acbdf434ea3f4b86052a9d5784bb"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Thu Jun 11 18:51:13 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 18:51:13 2026 +0200"
      },
      "message": "Merge pull request #19 from potiuk/ponymail-mcp/fix-oauth-redirect\n\nponymail-mcp: redirect to the mailing list after OAuth login, not back to the paste form"
    },
    {
      "commit": "32e97a49b433acbdf434ea3f4b86052a9d5784bb",
      "tree": "7a90893abd7767d798d61f8ac56ede9553be3934",
      "parents": [
        "1b369cc0013be0107753019c80e36384842eacb1"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Thu Jun 11 16:03:11 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Thu Jun 11 18:48:09 2026 +0200"
      },
      "message": "ponymail-mcp: land users on the list after OAuth login, not the paste form\n\nPonyMail\u0027s oauth.html stores document.referrer in sessionStorage on load\nand redirects the user back to it after OAuth completes (falling back to\nthe list index \"./\" only when there is no referrer). Because the login\nhelper page is served from http://localhost, that localhost URL became\nthe stored origin, so after authenticating the user was bounced straight\nback to the still-open paste form instead of the mailing list.\n\nAdd rel\u003d\"noreferrer\" to the step-1 link so no referrer is sent; PonyMail\u0027s\nempty-origin fallback then lands the user on the real lists.apache.org\nlist index.\n\nGenerated-by: Claude Code 2.1.173 (Claude Opus 4.8)\n"
    },
    {
      "commit": "1b369cc0013be0107753019c80e36384842eacb1",
      "tree": "998df84e01d54163fa99d5f4e884cf26a22698cb",
      "parents": [
        "110d762f4be989cc22178fd6680567ebc224564f",
        "75f5be7f904f22a0d0103a4e17449ddeb2e74b37"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Thu Jun 11 18:46:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 18:46:48 2026 +0200"
      },
      "message": "Merge pull request #20 from potiuk/fix-asf-highlights-license\n\nasf-highlights: add missing ASF license header to generate_asf_blog_posts.sh"
    },
    {
      "commit": "75f5be7f904f22a0d0103a4e17449ddeb2e74b37",
      "tree": "998df84e01d54163fa99d5f4e884cf26a22698cb",
      "parents": [
        "110d762f4be989cc22178fd6680567ebc224564f"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Thu Jun 11 18:44:48 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Thu Jun 11 18:44:48 2026 +0200"
      },
      "message": "asf-highlights: add missing ASF license header to generate_asf_blog_posts.sh\n\ngenerate_asf_blog_posts.sh shipped without the ASF license header, so the\ninsert-license prek hook (run as `prek run --all-files` in CI) fails on\nevery pull request regardless of what it touches. Add the standard header\nafter the shebang to restore a green static-checks run.\n\nGenerated-by: Claude Code 2.1.173 (Claude Opus 4.8)\n"
    },
    {
      "commit": "110d762f4be989cc22178fd6680567ebc224564f",
      "tree": "46d878b8b6244ed51276eef1e7a9236e78e33036",
      "parents": [
        "bff624b3222f76341b4d3473b08e6d5ec95df1d0",
        "3b290751fd8c402b29a3fe6b99b146011e6fa37d"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Mon Jun 01 08:09:23 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 08:09:23 2026 -0400"
      },
      "message": "Merge pull request #17 from apache/add-readonly-hints\n\nAdd readOnlyHint annotations to all read-only tools"
    },
    {
      "commit": "3b290751fd8c402b29a3fe6b99b146011e6fa37d",
      "tree": "46d878b8b6244ed51276eef1e7a9236e78e33036",
      "parents": [
        "bff624b3222f76341b4d3473b08e6d5ec95df1d0"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Mon Jun 01 08:08:35 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Mon Jun 01 08:08:35 2026 -0400"
      },
      "message": "Add readOnlyHint annotations to all read-only tools\n"
    },
    {
      "commit": "bff624b3222f76341b4d3473b08e6d5ec95df1d0",
      "tree": "a719713605a0b70d831f085b6ad739d60d26e695",
      "parents": [
        "4df5a59d617feafcddc980f1642e1610dcd8094f",
        "75fbe62aeedc908fae56adf2b313053080bb3473"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:50:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 15:50:02 2026 +0200"
      },
      "message": "Merge pull request #16 from potiuk/update-readme-subdirs\n\nDocument all project subdirectories in the README"
    },
    {
      "commit": "75fbe62aeedc908fae56adf2b313053080bb3473",
      "tree": "a719713605a0b70d831f085b6ad739d60d26e695",
      "parents": [
        "4df5a59d617feafcddc980f1642e1610dcd8094f"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:48:17 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:48:17 2026 +0200"
      },
      "message": "Document all project subdirectories in the README\n\nThe \"Contents of this repository\" list was missing the mcp/ servers and\nscripts/, and referred to project-activity as \"project-activities\". List\nevery top-level subdirectory with a short description and link:\nasf-highlights, project-activity, mcp (ponymail-mcp + apache-projects-mcp),\nand scripts, plus a pointer to AGENTS.md.\n\nGenerated-by: Claude Code 2.1.158 (Claude Opus 4.8)\n"
    },
    {
      "commit": "4df5a59d617feafcddc980f1642e1610dcd8094f",
      "tree": "db9b934ea3352a0db6bf8b8a7bbffb98c9ad147a",
      "parents": [
        "355b97a909d057ff8813f78e78b75b4078049024",
        "d1e7c579ceeecfee51b1c30f60c899e4622f2f4f"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:45:54 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 15:45:54 2026 +0200"
      },
      "message": "Merge pull request #15 from potiuk/fix-repo-homepage-link\n\nPoint GitHub repo homepage to community.apache.org"
    },
    {
      "commit": "d1e7c579ceeecfee51b1c30f60c899e4622f2f4f",
      "tree": "be4de9d5375c0a3e72fc84d4ef5494b13f7a1aa2",
      "parents": [
        "6dd78f44c15add46b34e34e7fd1b95d4e2153719"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:44:11 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:44:11 2026 +0200"
      },
      "message": "Point GitHub repo homepage to community.apache.org\n\nCloses #11. The repository\u0027s homepage link pointed to\nhttps://comdev.apache.org/; update it to https://community.apache.org/ via\nthe .asf.yaml github.homepage setting. The asfyaml infrastructure bot applies\nthis to the GitHub repository on merge to the default branch.\n\nGenerated-by: Claude Code 2.1.158 (Claude Opus 4.8)\n"
    },
    {
      "commit": "355b97a909d057ff8813f78e78b75b4078049024",
      "tree": "fb14034f4e6658cac4eb7e07ff0e754fa1eba7c1",
      "parents": [
        "6dd78f44c15add46b34e34e7fd1b95d4e2153719",
        "15bcff77a191aac7a00fd696a0c4d8ff8a6a0e6d"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:42:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 15:42:36 2026 +0200"
      },
      "message": "Merge pull request #14 from potiuk/fix-search-list-quick-undefined\n\nFix search_list rendering \"undefined\" email fields when quick\u003dtrue"
    },
    {
      "commit": "15bcff77a191aac7a00fd696a0c4d8ff8a6a0e6d",
      "tree": "fb14034f4e6658cac4eb7e07ff0e754fa1eba7c1",
      "parents": [
        "6dd78f44c15add46b34e34e7fd1b95d4e2153719"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:40:17 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:40:17 2026 +0200"
      },
      "message": "Fix search_list rendering \"undefined\" email fields when quick\u003dtrue\n\nFixes #9. In quick mode, PonyMail\u0027s /api/stats.lua returns email objects\nwithout subject/from/id, so the emails section rendered each entry as\n\"- **undefined**  From: undefined | ID: undefined\". Quick mode is documented\nas stats-only (emails_only exists for email summaries), so skip the emails\nsection entirely when quick\u003dtrue. The subject/from/id fields are also guarded\nwith fallbacks so a sparse entry never renders as \"undefined\".\n\nVerified live against dev@iceberg.apache.org (the reported repro): quick\u003dtrue\nnow returns stats only; emails_only\u003dtrue still renders populated subjects,\nsenders, and IDs.\n\nGenerated-by: Claude Code 2.1.158 (Claude Opus 4.8)\n"
    },
    {
      "commit": "6dd78f44c15add46b34e34e7fd1b95d4e2153719",
      "tree": "35a2a6072387c6f466dd039703fedf382e074ff3",
      "parents": [
        "1627fbad040afec97a68bc147104081abac16408",
        "ba611b27aad7e800ac79deb9d36067948b551b71"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:35:35 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 15:35:35 2026 +0200"
      },
      "message": "Merge pull request #13 from potiuk/add-project-harness\n\nAdd security and project harness"
    },
    {
      "commit": "ba611b27aad7e800ac79deb9d36067948b551b71",
      "tree": "35a2a6072387c6f466dd039703fedf382e074ff3",
      "parents": [
        "72c94871c7cc3dbc111b1b29dedf3b982a93827d"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:33:13 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:33:13 2026 +0200"
      },
      "message": "Fix high-severity fast-uri vulnerability in ponymail-mcp\n\nThe committed ponymail-mcp lock file pinned fast-uri@3.1.0 (transitive via\n@modelcontextprotocol/sdk -\u003e ajv), which dependency-review flagged as a\nhigh-severity path-traversal / host-confusion vulnerability\n(GHSA-q3j6-qgpj-74h6, GHSA-v39h-62p7-jpjc).\n\nRefresh the lock within the existing semver ranges: fast-uri 3.1.0 -\u003e 3.1.2\nand hono 4.12.15 -\u003e 4.12.23 (the latter also clears a moderate hono advisory).\nnpm audit now reports 0 vulnerabilities; tests (43/43) and the license check\npass.\n\nGenerated-by: Claude Code 2.1.158 (Claude Opus 4.8)\n"
    },
    {
      "commit": "72c94871c7cc3dbc111b1b29dedf3b982a93827d",
      "tree": "85fb8063407926a92629b8db78931f832fde4fac",
      "parents": [
        "1627fbad040afec97a68bc147104081abac16408"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:26:19 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:26:19 2026 +0200"
      },
      "message": "Add security and project harness\n\nAdds local and CI tooling to keep the repo ASF-compliant and secure:\n\n- prek (.pre-commit-config.yaml) with pre-commit / commit-msg / pre-push\n  hooks: license-header insertion, trailing-whitespace/EOF/YAML/JSON checks,\n  workflow + dependabot schema validation, a commit-msg hook that rejects\n  Co-authored-by trailers, and a pre-push suite (tests, license allowlist,\n  zizmor).\n- Apache-2.0 license headers on all source files (js/py/sh/html), placed\n  after shebangs and PEP-723 metadata blocks.\n- Dependency license allowlist check (scripts/check-licenses.mjs) gating npm\n  dependencies to ASF Category-A licenses; wired into CI and pre-push.\n- Track package-lock.json files (un-ignored) for reproducible \"npm ci\".\n- Dependabot coverage for mcp/apache-projects-mcp (cooldowns, like the others).\n- Consolidate MCP CI into mcp-tests.yml (matrix over both servers x Node\n  20/22, runs tests + license check); add static-checks.yml running prek.\n- AGENTS.md documenting setup, the pre-push checks, and the ASF attribution\n  policy (Generated-by, never Co-authored-by).\n\nGenerated-by: Claude Code 2.1.158 (Claude Opus 4.8)\n"
    },
    {
      "commit": "1627fbad040afec97a68bc147104081abac16408",
      "tree": "2bd41b10920e21c6a3d92497d4d52c410df08766",
      "parents": [
        "7592dd7705fa8288b21b8033f9728a7940e4f8f6",
        "03f49fa7b52b2a56386a32f1e749a1f2b7b064b2"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:06:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 15:06:36 2026 +0200"
      },
      "message": "Merge pull request #8 from apache/rbowen-apache-projects-mcp\n\napache projects mcp"
    },
    {
      "commit": "03f49fa7b52b2a56386a32f1e749a1f2b7b064b2",
      "tree": "00d1845d05c3d47c9b3a096e853f728b3ce6d0d7",
      "parents": [
        "3a4bf91618e754341cc3bed2a7e049452bd3a1c7"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:06:09 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun May 31 15:06:09 2026 +0200"
      },
      "message": "apache-projects-mcp: declare zod as an explicit dependency\n\nindex.js imports zod directly, but it was only resolving transitively\nvia @modelcontextprotocol/sdk. Declaring it avoids a breakage if the\nSDK ever changes or drops its zod range. Dedupes to the same zod@4.4.3.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "7592dd7705fa8288b21b8033f9728a7940e4f8f6",
      "tree": "7b3c508baa2c8a465549841b17f262a2112dadd1",
      "parents": [
        "d46b7c995ea797d78c8b6590a55af08126a1829d"
      ],
      "author": {
        "name": "André Ahlert",
        "email": "andre@aex.partners",
        "time": "Sun May 31 09:59:35 2026 -0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 14:59:35 2026 +0200"
      },
      "message": "ponymail-mcp: add limit/offset pagination to search_list (#12)\n\nThe search_list tool previously rendered the first 30 email summaries\nunconditionally, then printed \"... and N more emails\" with no way to\nreach those N entries without re-querying the backend (and getting the\nsame first 30 back). For LLM clients doing list-wide analysis, the\nremainder was effectively invisible.\n\nThis change adds two optional parameters:\n\n  - limit  (int, 1..200, default 30) — caps the rendered window\n  - offset (int, \u003e\u003d 0,  default 0)   — skips the first N entries\n\nThe backend call is unchanged; both parameters only affect which slice\nof the already-fetched result set is formatted into the response. The\ndefault behaviour (no params) is identical to before.\n\nThe trailing summary is upgraded from a static \"... and N more\" to an\nexplicit \"Showing X-Y of Z\" plus the exact next-page offset when more\nresults remain, so the caller can page deterministically.\n\nSigned-off-by: André Ahlert \u003candre@aex.partners\u003e"
    },
    {
      "commit": "d46b7c995ea797d78c8b6590a55af08126a1829d",
      "tree": "25a91e16ede31e5130d0cf98bfe66a18b9abd6ad",
      "parents": [
        "5e27c6262a9a4498eff1ba7efb2d8667d38c4306",
        "bbef9bcba395a344fa90159cba52698767b79f19"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Wed May 27 12:27:51 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 12:27:51 2026 -0700"
      },
      "message": "Merge pull request #10 from potiuk/ponymail-mcp/improve-login-flow\n\nponymail-mcp: opt-in Chrome auto-extract + smarter paste form"
    },
    {
      "commit": "3a4bf91618e754341cc3bed2a7e049452bd3a1c7",
      "tree": "c6f7fbf577fe7a3e82f15be0551e2e061a561d5d",
      "parents": [
        "54868974bcf01e283c8f028461d590120d5e0d2b"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue May 26 16:53:14 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue May 26 16:53:14 2026 -0400"
      },
      "message": "More recent Node.js recommended\n"
    },
    {
      "commit": "bbef9bcba395a344fa90159cba52698767b79f19",
      "tree": "25a91e16ede31e5130d0cf98bfe66a18b9abd6ad",
      "parents": [
        "5e27c6262a9a4498eff1ba7efb2d8667d38c4306"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Mon May 25 20:51:56 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Mon May 25 20:51:56 2026 +0200"
      },
      "message": "ponymail-mcp: opt-in Chrome auto-extract for login + smarter paste form\n\nAdds an opt-in PONYMAIL_AUTO_EXTRACT_COOKIE\u003d1 path that reads the ponymail\ncookie out of the local Chrome cookie DB (decrypting via macOS Keychain),\nso users don\u0027t have to paste from DevTools every session. Strictly opt-in,\nprints a loud startup warning when active, requires additional sandboxing\n(e.g. Apache Magpie) per the README and in-page warning because it grants\nthe MCP process broad Chrome cookie / Keychain access.\n\nWhen auto-extract isn\u0027t available, the paste form is improved: smart\nserver-side extraction (any paste shape), live /preview validation as the\nuser types, Submit gated on success, clearer DevTools instructions (filter\non `preferences.lua`, with an accurate \"why some rows lack the cookie\"\nnote covering analytics / tracking pixels).\n\nFirefox and Safari extraction was evaluated and removed — Firefox Bounce\nTracking Protection (109+) and Safari ITP hold OAuth-derived session\ncookies in memory only and never persist them to the on-disk cookie store.\n\n43/43 tests pass.\n\nCo-Authored-By: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "54868974bcf01e283c8f028461d590120d5e0d2b",
      "tree": "de26bb9538fa54a082c1e95fe5dfcfca4b26ca93",
      "parents": [
        "1320384f2b9de7171aad2b3181f70ad8151c153a"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri May 22 16:12:12 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri May 22 16:12:12 2026 -0400"
      },
      "message": "Add node_modules ignore for apache-projects-mcp\n"
    },
    {
      "commit": "1320384f2b9de7171aad2b3181f70ad8151c153a",
      "tree": "91b14b9d56088855c0771abfeda9e4efbe69037c",
      "parents": [
        "5e27c6262a9a4498eff1ba7efb2d8667d38c4306",
        "d87fcf6aaec0b5b054d44bb0da055f89746b4f26"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri May 22 16:10:01 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri May 22 16:10:01 2026 -0400"
      },
      "message": "Add apache-projects-mcp under mcp/ (preserving history)\n"
    },
    {
      "commit": "5e27c6262a9a4498eff1ba7efb2d8667d38c4306",
      "tree": "58a88108456ef22051f5f47f938f4181db596212",
      "parents": [
        "08206e600a5e9200742dc23cce906e55a329e7c7",
        "3c04b57f715e0b93657e572085b87304cfd69008"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Fri May 22 17:18:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 17:18:42 2026 +0200"
      },
      "message": "Merge pull request #2 from apache/rbowen-ponymail-mcp\n\nRbowen ponymail mcp"
    },
    {
      "commit": "08206e600a5e9200742dc23cce906e55a329e7c7",
      "tree": "bcd893f821efc036e2d0590d174505d5d3cbdbf9",
      "parents": [
        "bc77f05f132f0661689a2442814ee6d201e34d08",
        "33136317843e198dbf27c7493b0b0d92ba7e1886"
      ],
      "author": {
        "name": "Sebb",
        "email": "sebbASF@users.noreply.github.com",
        "time": "Sun May 17 17:07:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 17:07:31 2026 +0200"
      },
      "message": "Merge pull request #7 from apache/sebbASF/patch/1\n\nAdd README link to .asf.yaml"
    },
    {
      "commit": "bc77f05f132f0661689a2442814ee6d201e34d08",
      "tree": "c14562f3e5474877903c305ad8888d3794df3438",
      "parents": [
        "4486212d62d39a41435903b868108e8f82f09f56"
      ],
      "author": {
        "name": "Sebb",
        "email": "sebbASF@users.noreply.github.com",
        "time": "Sun May 17 17:04:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 17:04:21 2026 +0200"
      },
      "message": "Change CodeQL language from JavaScript/TypeScript to Python"
    },
    {
      "commit": "33136317843e198dbf27c7493b0b0d92ba7e1886",
      "tree": "e2f16193ebb3daa70180c7b069564559f3ac7d32",
      "parents": [
        "4486212d62d39a41435903b868108e8f82f09f56"
      ],
      "author": {
        "name": "Sebb",
        "email": "sebbASF@users.noreply.github.com",
        "time": "Sun May 17 16:58:44 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 16:58:44 2026 +0200"
      },
      "message": "Add README link to .asf.yaml"
    },
    {
      "commit": "4486212d62d39a41435903b868108e8f82f09f56",
      "tree": "7749bd3043fdf0380da5c3869c2af2e628a06693",
      "parents": [
        "9aa63849768f3ccf42c393812387a7b04c6d9faa",
        "07b5ae3e8cb0a0744f48df4720f7f16b5c2a81bc"
      ],
      "author": {
        "name": "Sebb",
        "email": "sebbASF@users.noreply.github.com",
        "time": "Sat May 16 16:02:34 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 16 16:02:34 2026 +0100"
      },
      "message": "Merge pull request #6 from apache/infrastructure-ruleset-bot/default-branch-protection\n\n[INFRA] Set up default rulesets for default and release branches"
    },
    {
      "commit": "07b5ae3e8cb0a0744f48df4720f7f16b5c2a81bc",
      "tree": "7749bd3043fdf0380da5c3869c2af2e628a06693",
      "parents": [
        "9aa63849768f3ccf42c393812387a7b04c6d9faa"
      ],
      "author": {
        "name": "The Apache Software Foundation",
        "email": "root-asf-gitbox-commits@apache.org",
        "time": "Fri May 15 14:25:19 2026 -0500"
      },
      "committer": {
        "name": "The Apache Software Foundation",
        "email": "root-asf-gitbox-commits@apache.org",
        "time": "Fri May 15 14:25:19 2026 -0500"
      },
      "message": "Set up default protection ruleset for default and release branches"
    },
    {
      "commit": "9aa63849768f3ccf42c393812387a7b04c6d9faa",
      "tree": "6c3a3c1195937581d02e31ed0b62ec0abd653378",
      "parents": [
        "64416aa5a1386f90688870da6aba2bf7c35821a5",
        "34bfcc916313cd3f3368f4a3b9ac1e507e6bb522"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Fri May 08 23:31:25 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 23:31:25 2026 +0200"
      },
      "message": "Merge pull request #4 from potiuk/security-hardening\n\nsecurity: harden supply chain (Dependabot cooldowns, CodeQL, Scorecard, dep-review, zizmor)"
    },
    {
      "commit": "64416aa5a1386f90688870da6aba2bf7c35821a5",
      "tree": "7c6b1827a765fd026f7cf80a7c93d0b26f3739b8",
      "parents": [
        "6ed1e4367f41d883b06cd3929f3f5dca63da6b50"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Wed Apr 29 12:23:23 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Wed Apr 29 12:23:23 2026 -0400"
      },
      "message": "Remove desktop notification.\n"
    },
    {
      "commit": "3c04b57f715e0b93657e572085b87304cfd69008",
      "tree": "88db03b3c9eb0985ffeefc7cad3748e3bed3b995",
      "parents": [
        "279ebc6c8b93a667f3078a0445ccc789bf063f60",
        "face465a7301cf567ff172372756dd0b72832e2d"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Mon Apr 27 13:38:48 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 13:38:48 2026 -0400"
      },
      "message": "Merge pull request #5 from potiuk/add-tests-and-ci\n\nponymail-mcp: add unit tests and CI"
    },
    {
      "commit": "face465a7301cf567ff172372756dd0b72832e2d",
      "tree": "88db03b3c9eb0985ffeefc7cad3748e3bed3b995",
      "parents": [
        "279ebc6c8b93a667f3078a0445ccc789bf063f60"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sat Apr 25 17:26:15 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sun Apr 26 22:19:00 2026 +0200"
      },
      "message": "Add unit tests and CI for ponymail-mcp\n\nThe mcp/ponymail-mcp package shipped without tests or CI. This adds\nboth, using only built-in Node tooling so the dependency tree stays\nunchanged.\n\n- restrictions.test.js: 15 unit tests covering pattern grammar\n  (prefix@, @domain, prefix@domain), env-var parsing edge cases\n  (none, empty, mixed case, whitespace), case-insensitive input\n  matching, restrictionFor/restrictionForAddress/isRestricted/\n  restrictionError/listRestrictions, and falsy-input tolerance.\n  Each test that exercises a different env spawns a child node\n  process and re-imports restrictions.js, since RESTRICTED is\n  captured at module load.\n- auth.test.js: 8 unit tests for the session-persistence helpers\n  (loadSession, clearSession). Each test runs in a child process\n  with HOME pointed at a temporary directory so the on-disk\n  session.json is fully isolated. Covers: missing file, fresh\n  cookie, expired cookie, missing-timestamp behaviour, malformed\n  JSON, missing cookie field, and clearSession idempotency. The\n  interactive performLogin() flow (browser, local HTTP server,\n  network validation) is out of scope for unit tests.\n- package.json: adds `npm test` script using node:test with the\n  spec reporter, and declares engines.node: \u003e\u003d20 (uses node:test\n  built-in runner; no new deps).\n- .github/workflows/ponymail-mcp-tests.yml: runs the suite on\n  push/PR (path-filtered to mcp/ponymail-mcp/) on Node 20 and 22.\n  Hardened: top-level `permissions: {}` (deny-all) with per-job\n  contents: read, third-party actions pinned to commit SHAs with\n  version comments, actions/checkout sets persist-credentials:\n  false, 10-minute job timeout.\n\nGenerated-by: Claude Code (Claude Opus 4.7)\n"
    },
    {
      "commit": "279ebc6c8b93a667f3078a0445ccc789bf063f60",
      "tree": "7f947ec4171bd32f5f27ddd6250bff64d0b6a7fc",
      "parents": [
        "870f676e23b114bd6a1d09af6698b9548b3fa4c5",
        "e939dde6c0c33cbc65706177846ff9f36f40544f"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Sun Apr 26 12:15:44 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 26 12:15:44 2026 -0400"
      },
      "message": "Merge pull request #3 from potiuk/rbowen-ponymail-mcp\n\nBlock all private lists by default, add opt-in allowlist"
    },
    {
      "commit": "34bfcc916313cd3f3368f4a3b9ac1e507e6bb522",
      "tree": "37f3a5f4190894885cc224618e96804f793a1913",
      "parents": [
        "6ed1e4367f41d883b06cd3929f3f5dca63da6b50"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sat Apr 25 17:19:36 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sat Apr 25 17:19:36 2026 +0200"
      },
      "message": "security: harden supply chain and add vulnerability reporting policy\n\nAdds repo-level security hardening. All changes are additive — no\nexisting code is touched.\n\n- .github/dependabot.yml: npm + github-actions ecosystems with\n  cooldowns (3-day patch / 7-day minor / 21-day major) so brand-new\n  releases have time to be flagged before we pull them in. Security\n  advisories bypass cooldown automatically. npm scoped to\n  /mcp/ponymail-mcp where package.json lives. Minor + patch updates\n  grouped into single PRs.\n- .github/workflows/codeql.yml: CodeQL on push / PR / weekly with\n  the security-extended and security-and-quality query suites for\n  JS/TS.\n- .github/workflows/scorecard.yml: OpenSSF Scorecard; publishes\n  results to code scanning + SARIF artifact.\n- .github/workflows/dependency-review.yml: blocks PRs introducing\n  deps with \u003e\u003dmoderate CVEs or GPL/AGPL licenses.\n- .github/workflows/zizmor.yml: static analysis of the workflows\n  themselves (script injection, overbroad permissions, unpinned\n  refs, cache poisoning, etc.).\n- SECURITY.md: vulnerability reporting policy directing reporters\n  to security@apache.org first, with GitHub PVR as a secondary\n  channel for issues isolated to this repo\u0027s tooling.\n\nWorkflow hardening applied throughout:\n- Top-level `permissions: {}` (deny-all) with per-job minimum grants.\n- All third-party actions pinned to full commit SHAs (with version\n  comments) — Dependabot keeps them current.\n- actions/checkout sets persist-credentials: false so a stashed\n  token can\u0027t be exfiltrated by later steps.\n- Timeouts on every job.\n\nGenerated-by: Claude Code (Claude Opus 4.7)\n"
    },
    {
      "commit": "e939dde6c0c33cbc65706177846ff9f36f40544f",
      "tree": "7f947ec4171bd32f5f27ddd6250bff64d0b6a7fc",
      "parents": [
        "870f676e23b114bd6a1d09af6698b9548b3fa4c5"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sat Apr 25 13:05:03 2026 +0200"
      },
      "committer": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sat Apr 25 13:05:03 2026 +0200"
      },
      "message": "Block all private lists by default, add opt-in allowlist\n\nPreviously the restriction layer relied solely on a fixed pattern list,\nso any unconventionally-named private list (e.g. names other than\nprivate@/security@) could slip through. This adds a second layer that\nchecks PonyMail\u0027s `private` flag on every response and blocks unless\nthe list is explicitly opted in via PONYMAIL_ALLOWED_LISTS.\n\n- restrictions.js: parse PONYMAIL_ALLOWED_LISTS, add allowedFor(),\n  isPrivateBlocked(), privateError(), listAllowed(). Module-load\n  capture is documented inline.\n- index.js: post-fetch private-flag check in search_list (including\n  per-email cross-listing scan), get_email, get_thread; pre-flight\n  stats probe in get_mbox (mbox returns raw text). list_lists flags\n  allow-listed lists; list_restrictions surfaces the policy plus\n  current allow-list. Fixes the dead `quick\u003d\"\"` parameter (filtered\n  by apiFetch) by sending `quick\u003d\"1\"`.\n- restrictions.test.js: 18 unit tests covering pattern grammar,\n  allowlist bypass, env-var parsing edge cases, isPrivateBlocked\n  truthy/falsy handling, and falsy-input tolerance. `npm test` runs\n  with the built-in node:test runner — no new dependencies.\n- README: documents the two-layer model, opt-in mechanism, the\n  PII / interim ASF policy considerations (with links to the ASF\n  Mailing Lists page and Privacy Policy), and Apache Airflow /\n  Apache Arrow security@ as opt-in examples.\n\nGenerated-by: Claude Code (Claude Opus 4.7)\n"
    },
    {
      "commit": "870f676e23b114bd6a1d09af6698b9548b3fa4c5",
      "tree": "100ad7c2c542e16ad1aa8b9f58412d6ae5981d71",
      "parents": [
        "feb7823e34d7f358dc07e3b296b2bc6a580782c2"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 15:01:12 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 15:01:12 2026 -0400"
      },
      "message": "Merges potiuk\u0027s patch from the original rbowen/ponymail-mcp repo\n"
    },
    {
      "commit": "feb7823e34d7f358dc07e3b296b2bc6a580782c2",
      "tree": "5834e4bf44f61a60142ae28e44116bba0743263a",
      "parents": [
        "d8ebb7c8a3943ec9b196f69d17e642c2023fa0cf"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 14:49:04 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 14:49:04 2026 -0400"
      },
      "message": "Put the auth stuff back in while people argue about it. ;-)\n"
    },
    {
      "commit": "d8ebb7c8a3943ec9b196f69d17e642c2023fa0cf",
      "tree": "2109734fe9141877e9a67c02fc935e35be7d4b5b",
      "parents": [
        "b676f492cc5bfd2ea9259a75f3dc75a5bc74610c"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 14:40:15 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 14:40:15 2026 -0400"
      },
      "message": "Removes all access to private lists.\n"
    },
    {
      "commit": "b676f492cc5bfd2ea9259a75f3dc75a5bc74610c",
      "tree": "fc1cac64b68634b904a5d8ab6430319938792e53",
      "parents": [
        "93163f92fa07f99ad837a13b41c8cb7c1f7cdbc5"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 14:36:33 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 14:36:33 2026 -0400"
      },
      "message": "Remove unused parameters\n"
    },
    {
      "commit": "93163f92fa07f99ad837a13b41c8cb7c1f7cdbc5",
      "tree": "060dd0f57a354bbc0633eb81380a5f18e8ced2f2",
      "parents": [
        "b828f829813efc0fef02a7d68f8374ea0b3164aa"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 14:34:32 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 14:34:32 2026 -0400"
      },
      "message": "Remove unused import\n"
    },
    {
      "commit": "b828f829813efc0fef02a7d68f8374ea0b3164aa",
      "tree": "ace439cfb409d1ef6d8ece60fb00bbbc9354fda9",
      "parents": [
        "87cb118147076696832b62f7c24376f32ed4e7cf"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 10:15:47 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 10:15:47 2026 -0400"
      },
      "message": "Make instructions generic, rather than Amazon Quick specific\n"
    },
    {
      "commit": "87cb118147076696832b62f7c24376f32ed4e7cf",
      "tree": "932b9c22d1fae241b23bf63fafc65b08487f256c",
      "parents": [
        "93bf66fe4f3e8de788811fe1e35ed708acaab827"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 10:05:01 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 10:05:01 2026 -0400"
      },
      "message": "Remove my personal file path\n"
    },
    {
      "commit": "93bf66fe4f3e8de788811fe1e35ed708acaab827",
      "tree": "aca897e50bbf396ec3e11ccf75fcb18eea7845a7",
      "parents": [
        "1a3277c51490fdf1a9b7848f61833188823f56d4"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 10:04:29 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 10:04:29 2026 -0400"
      },
      "message": "Remove my personal file path\n"
    },
    {
      "commit": "1a3277c51490fdf1a9b7848f61833188823f56d4",
      "tree": "62fef092e0309710cdbce4f5cfd8070609a249ed",
      "parents": [
        "6ed1e4367f41d883b06cd3929f3f5dca63da6b50",
        "3d1a42ea952f342beefedade06673558f1cb6f98"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 09:59:04 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 09:59:04 2026 -0400"
      },
      "message": "Add \u0027mcp/ponymail-mcp/\u0027 from commit \u00273d1a42ea952f342beefedade06673558f1cb6f98\u0027\n\ngit-subtree-dir: mcp/ponymail-mcp\ngit-subtree-mainline: 6ed1e4367f41d883b06cd3929f3f5dca63da6b50\ngit-subtree-split: 3d1a42ea952f342beefedade06673558f1cb6f98\n"
    },
    {
      "commit": "6ed1e4367f41d883b06cd3929f3f5dca63da6b50",
      "tree": "0068341a6c0d0b458f4968f52ce1922dd04abe97",
      "parents": [
        "bdd1d34c225c15260dd09e1e75cfe831a28608de"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 09:53:47 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 24 09:53:47 2026 -0400"
      },
      "message": "Ignore generated data files\n"
    },
    {
      "commit": "d87fcf6aaec0b5b054d44bb0da055f89746b4f26",
      "tree": "26e032680d6d084ff363f5dd7b43c6985cfbbafc",
      "parents": [
        "bcd479885ddb9e941d04ea503d6fc4a8476e27c4",
        "e78c114dc59efeb11a35d910aa869657d04b9270"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Apr 21 08:54:16 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 08:54:16 2026 -0400"
      },
      "message": "Merge pull request #3 from justinmclean/search\n\nImprove search matching and result ordering"
    },
    {
      "commit": "bcd479885ddb9e941d04ea503d6fc4a8476e27c4",
      "tree": "aaa0b0d1b80f6b170073b8545c94ace2e155df98",
      "parents": [
        "3d1fad4c2d88298d0b874e8eb3e24957ce8f6a5b",
        "fa297073d1e23b83d47c4b10cab10c9f07407a45"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Apr 21 08:53:37 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 08:53:37 2026 -0400"
      },
      "message": "Merge pull request #2 from justinmclean/structured-output\n\nAdd structured content to MCP tool responses"
    },
    {
      "commit": "3d1fad4c2d88298d0b874e8eb3e24957ce8f6a5b",
      "tree": "de9600de3e57b37493855a1c9563a1da0efa7a0e",
      "parents": [
        "64cec2d927ed769fba451d1e17951601eaeeca63",
        "57641dd40a27afc534d1f3d304d8163abab45953"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Tue Apr 21 08:52:52 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 08:52:52 2026 -0400"
      },
      "message": "Merge pull request #1 from justinmclean/readme\n\nimprove readme"
    },
    {
      "commit": "fa297073d1e23b83d47c4b10cab10c9f07407a45",
      "tree": "d38ff11ba112e89886a22b2618f6d07261263c01",
      "parents": [
        "75f3921224cbfe44efb9f55e46f5b5cb7a2ee27a"
      ],
      "author": {
        "name": "Justin Mclean",
        "email": "jmclean@apache.org",
        "time": "Sun Apr 19 13:34:47 2026 +1000"
      },
      "committer": {
        "name": "Justin Mclean",
        "email": "jmclean@apache.org",
        "time": "Sun Apr 19 13:34:47 2026 +1000"
      },
      "message": "forgot to add this\n"
    },
    {
      "commit": "e78c114dc59efeb11a35d910aa869657d04b9270",
      "tree": "4579df958a86f98858959098e6918725cf22e72f",
      "parents": [
        "64cec2d927ed769fba451d1e17951601eaeeca63"
      ],
      "author": {
        "name": "Justin Mclean",
        "email": "jmclean@apache.org",
        "time": "Sun Apr 19 13:29:31 2026 +1000"
      },
      "committer": {
        "name": "Justin Mclean",
        "email": "jmclean@apache.org",
        "time": "Sun Apr 19 13:29:31 2026 +1000"
      },
      "message": "Improve search matching with basic ranking (exact, prefix, substring)\n"
    },
    {
      "commit": "75f3921224cbfe44efb9f55e46f5b5cb7a2ee27a",
      "tree": "9afe1adb0d035a8f1ded816dc5ebe076921dd775",
      "parents": [
        "64cec2d927ed769fba451d1e17951601eaeeca63"
      ],
      "author": {
        "name": "Justin Mclean",
        "email": "jmclean@apache.org",
        "time": "Sun Apr 19 13:17:10 2026 +1000"
      },
      "committer": {
        "name": "Justin Mclean",
        "email": "jmclean@apache.org",
        "time": "Sun Apr 19 13:17:10 2026 +1000"
      },
      "message": "Add structuredContent alongside existing text responses for MCP tools\n"
    },
    {
      "commit": "57641dd40a27afc534d1f3d304d8163abab45953",
      "tree": "de9600de3e57b37493855a1c9563a1da0efa7a0e",
      "parents": [
        "64cec2d927ed769fba451d1e17951601eaeeca63"
      ],
      "author": {
        "name": "Justin Mclean",
        "email": "jmclean@apache.org",
        "time": "Sun Apr 19 12:23:02 2026 +1000"
      },
      "committer": {
        "name": "Justin Mclean",
        "email": "jmclean@apache.org",
        "time": "Sun Apr 19 12:23:02 2026 +1000"
      },
      "message": "improve readme\n"
    },
    {
      "commit": "64cec2d927ed769fba451d1e17951601eaeeca63",
      "tree": "f4582de9cbd5053daddb2ecb12c10cb13bc1c5eb",
      "parents": [
        "60c8cb528df098760fe6756fa45b899b7534ebc3"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Sat Apr 18 08:11:16 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 18 08:11:16 2026 -0400"
      },
      "message": "Add Apache License 2.0\n\nAdded the Apache License 2.0 to the project."
    },
    {
      "commit": "60c8cb528df098760fe6756fa45b899b7534ebc3",
      "tree": "a51a7ea9168d24e94a84ec45fe33073c0e43aa68",
      "parents": [
        "3ed42cd852518b9079454f04424a2db79192a721"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Sat Apr 18 08:08:16 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Sat Apr 18 08:08:16 2026 -0400"
      },
      "message": "Add initial code\n"
    },
    {
      "commit": "3ed42cd852518b9079454f04424a2db79192a721",
      "tree": "6f45e713d2f9b415bd61c95320d51705e9dcf95a",
      "parents": [],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Sat Apr 18 08:08:01 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Sat Apr 18 08:08:01 2026 -0400"
      },
      "message": "first commit\n"
    },
    {
      "commit": "3d1a42ea952f342beefedade06673558f1cb6f98",
      "tree": "106ca1648d3cfc03d73afb53ad1cf5fd564a2bb7",
      "parents": [
        "f2f1247b438d0600379f184208367fa56ab5b586"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Apr 17 08:05:50 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 08:05:50 2026 -0400"
      },
      "message": "Add Apache License 2.0\n\nAdded the Apache License 2.0 to the project."
    },
    {
      "commit": "f2f1247b438d0600379f184208367fa56ab5b586",
      "tree": "9575be15eda84ce6eb792eda8d36a0c98f660d7a",
      "parents": [
        "8db23b6a9f0389bd5897d829674f88506837c421"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Wed Apr 15 15:27:19 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Wed Apr 15 15:27:19 2026 -0400"
      },
      "message": "Adds a bookmarklet to help with auth, and updates README to reflect new\nfunctionality. But the auth is very cumbersome right now.\n"
    },
    {
      "commit": "8db23b6a9f0389bd5897d829674f88506837c421",
      "tree": "fd0e8d58e8f7fb9cc5a04a53d393dfbdb86f88bc",
      "parents": [
        "c5e5af097f3f4649f71d73ec901592ab4db82e5a"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Wed Apr 15 15:17:51 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Wed Apr 15 15:17:51 2026 -0400"
      },
      "message": "Implements authentication, although the flow to get your auth cookie is\npretty onerous. I\u0027ll try to fix that next.\n"
    },
    {
      "commit": "c5e5af097f3f4649f71d73ec901592ab4db82e5a",
      "tree": "5905c3f45d2ad19615ae50546555f39898bf5325",
      "parents": [],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Wed Apr 15 14:21:34 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Wed Apr 15 14:21:34 2026 -0400"
      },
      "message": "Initial MCP server\n"
    },
    {
      "commit": "bdd1d34c225c15260dd09e1e75cfe831a28608de",
      "tree": "17901634379faf117b2bd7499b9b114197829fbd",
      "parents": [
        "84efc22144afbd1ce25203ad691b3ba14ab2bd4b",
        "d5e3b56406306ecf5442e7c3ec417e398d81fced"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Thu Apr 02 08:17:29 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 08:17:29 2026 -0400"
      },
      "message": "Merge pull request #1 from apache/dfoulks/asfyaml\n\nAdded .asf.yaml to enable issues in GH"
    },
    {
      "commit": "d5e3b56406306ecf5442e7c3ec417e398d81fced",
      "tree": "17901634379faf117b2bd7499b9b114197829fbd",
      "parents": [
        "84efc22144afbd1ce25203ad691b3ba14ab2bd4b"
      ],
      "author": {
        "name": "Drew Foulks",
        "email": "dfoulks@apache.org",
        "time": "Thu Apr 02 07:52:13 2026 -0400"
      },
      "committer": {
        "name": "Drew Foulks",
        "email": "dfoulks@apache.org",
        "time": "Thu Apr 02 07:52:13 2026 -0400"
      },
      "message": "Added .asf.yaml to enable issues in GH\n\n.asf.yaml is being used to enable issues and send notifications about\nthose issues to notifications@community.apache.org.\n"
    },
    {
      "commit": "84efc22144afbd1ce25203ad691b3ba14ab2bd4b",
      "tree": "62dd013b96b51bfb446f97de815318a85b58d18b",
      "parents": [
        "cb835f21c39e33daf73607cf345ec829d7e2c585"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Mon Mar 30 09:35:17 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Mon Mar 30 09:35:17 2026 -0400"
      },
      "message": "Document --markdown option\n"
    },
    {
      "commit": "cb835f21c39e33daf73607cf345ec829d7e2c585",
      "tree": "07a7b13ba19a527e8632525819b9b83ac72ab293",
      "parents": [
        "06fa57573b3bf2ac8ae968f3f43deb78beb25208"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Mon Mar 30 09:33:25 2026 -0400"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Mon Mar 30 09:33:25 2026 -0400"
      },
      "message": "Adds -m/--markdown flag to output report as Markdown.\n"
    },
    {
      "commit": "06fa57573b3bf2ac8ae968f3f43deb78beb25208",
      "tree": "932a8cdc5277eca3bc886f3621af250370990213",
      "parents": [
        "3022587d96e81ad39c145f4de63f0d8766a5c567"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Mar 13 12:03:41 2026 +0000"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Mar 13 12:03:41 2026 +0000"
      },
      "message": "Adds a thread link to the active threads table\n"
    },
    {
      "commit": "3022587d96e81ad39c145f4de63f0d8766a5c567",
      "tree": "05756c9988b136c0606b4e781dd40e39b464a6eb",
      "parents": [
        "a8ef7b80b47283871e5681d6a141fdb79195bd75"
      ],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Mar 13 10:46:38 2026 +0000"
      },
      "committer": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Mar 13 10:46:38 2026 +0000"
      },
      "message": "Initial import\n"
    },
    {
      "commit": "a8ef7b80b47283871e5681d6a141fdb79195bd75",
      "tree": "bc38bc9571a0dfc0e258d6781fbe4070d25498ac",
      "parents": [],
      "author": {
        "name": "Rich Bowen",
        "email": "rbowen@rcbowen.com",
        "time": "Fri Mar 13 10:15:46 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 13 10:15:46 2026 +0100"
      },
      "message": "Initial commit"
    }
  ]
}
