No description
  • Python 89.2%
  • Dockerfile 6.2%
  • Makefile 4.6%
Find a file
example-bot beb57e50c0
All checks were successful
build-publish / test (push) Successful in 14s
build-publish / publish (push) Successful in 39s
chore(ci): add Telegram main-failure alerts
2026-07-10 09:02:53 +00:00
.forgejo/workflows chore(ci): add Telegram main-failure alerts 2026-07-10 09:02:53 +00:00
.ward ward-container: residual claude work on coilyco-flight-deck/reddit-mcp 2026-07-04 08:02:55 +00:00
docs feat: adopt issue reference guard 2026-07-09 19:00:18 +00:00
src/reddit_mcp feat: adopt issue reference guard 2026-07-09 19:00:18 +00:00
tests ward-container: residual claude work on coilyco-flight-deck/reddit-mcp 2026-07-04 08:02:55 +00:00
.dockerignore ward-container: residual claude work on coilyco-flight-deck/reddit-mcp 2026-07-04 08:02:55 +00:00
.gitignore ward-container: residual claude work on coilyco-flight-deck/reddit-mcp 2026-07-04 08:02:55 +00:00
.pre-commit-config.yaml feat: adopt issue reference guard 2026-07-09 19:00:18 +00:00
AGENTS.md feat: adopt issue reference guard 2026-07-09 19:00:18 +00:00
CLAUDE.md ward-container: residual claude work on coilyco-flight-deck/reddit-mcp 2026-07-04 08:02:55 +00:00
Dockerfile ward-container: residual claude work on coilyco-flight-deck/reddit-mcp 2026-07-04 08:02:55 +00:00
Makefile ward-container: residual claude work on coilyco-flight-deck/reddit-mcp 2026-07-04 08:02:55 +00:00
pyproject.toml feat: adopt issue reference guard 2026-07-09 19:00:18 +00:00
README.md feat: adopt issue reference guard 2026-07-09 19:00:18 +00:00
uv.lock ward-container: residual claude work on coilyco-flight-deck/reddit-mcp 2026-07-04 08:02:55 +00:00

reddit-mcp

A read-only MCP that republishes Kai's existing reddit reads as MCP tools over streamable-HTTP, so an agent (or the claude.ai hosted connector) can see the reddit front page, unread inbox, and upvoted posts without a Reddit API app.

It wraps the exact private Reddit JSON feeds the daily-social and daily-educational cron routines already read (agentic-os-kai my.sources.reddit). This is the first pure-read clone of the coilyco-bridge/deploy personal-MCP fleet, and it mirrors the inbox-backed rollout plan.

Read-only by construction

A private Reddit feed URL is a read token minted by Reddit's /prefs/feeds/ page for the logged-in user - a feed URL cannot post, vote, or comment. That is the whole point: it deliberately sidesteps the 2026 Responsible Builder Policy API-app gate (no Reddit API app). There is no write tool here, and no path that both ingests untrusted content and can act. This service reads, full stop.

Unlike node-stats-mcp (the shape this repo is patterned on), reddit-mcp is a plain outbound-HTTP reader: no hostPID, hostNetwork, hostPath, ROOTFS, or readable-roots. It is a dumb backend that fetches three URLs.

Credential custody

The feed URLs are private (equivalent to passwords) and never live in the image, the repo, or a committed config. Each is resolved at runtime, server-side:

  1. an env var (REDDIT_FRONTPAGE_FEED_URL, REDDIT_INBOX_UNREAD_FEED_URL, REDDIT_UPVOTED_FEED_URL), then
  2. SSM SecureString (/reddit/frontpage-feed-url, /reddit/inbox-unread-feed-url, /reddit/upvoted-feed-url) via aws ssm get-parameter --with-decryption.

Env-first lets the deploy inject the URLs via an ExternalSecret without granting the pod ssm:GetParameter (node-stats' env-based config), while the SSM fallback mirrors my.sources.reddit and the mcporter ssm-load pattern. The keys never leave the box - only the fetched reddit records do.

Port

Streamable-HTTP on PORT (default 9111), HOST (default 0.0.0.0), endpoint at /mcp. node-stats holds 9110; reddit-mcp takes the next free kai-server port, 9111.

Run it locally

ward sync
# feed URLs come from env (or SSM if the box has aws creds):
REDDIT_FRONTPAGE_FEED_URL='https://www.reddit.com/.rss?feed=...&user=...' \
  ward run     # streamable-HTTP MCP on :9111, endpoint at /mcp

Commands

Dev commands are declared in .ward/ward.yaml. Run them as ward <verb>.

No auth here

Auth is not in this source. The Authelia/Traefik public overlay is layered on in the deploy repo, not here (deploy#28 principle: the MCP source stays unchanged by the overlay). This repo just serves the reads over HTTP; reach is gated at the network / deploy layer.

See also