# Vatt Ghern

> Daily tech-news zine for engineers — Claude-authored prose, bespoke HTML, CJK typography. Deployed on Cloudflare Pages.

- **Type:** MCP server
- **Install:** `agentstack add mcp-xbluesky-vatt-ghern`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [XBlueSky](https://agentstack.voostack.com/s/xbluesky)
- **Installs:** 0
- **Category:** [Cloud & Infrastructure](https://agentstack.voostack.com/c/cloud-infrastructure)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [XBlueSky](https://github.com/XBlueSky)
- **Source:** https://github.com/XBlueSky/vatt-ghern
- **Website:** https://vatt-ghern.pages.dev

## Install

```sh
agentstack add mcp-xbluesky-vatt-ghern
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# vatt-ghern

[](https://github.com/XBlueSky/vatt-ghern/actions/workflows/quality.yml)
[](./LICENSE)
[](./.nvmrc)
[](https://www.11ty.dev/)
[](https://vatt-ghern.pages.dev)

Public personal tech blog. Daily news authored by a Claude routine.
Bespoke HTML deep-stories, persona-driven editing, CJK typography,
hosted on Cloudflare Pages.

[](https://vatt-ghern.pages.dev/)

- **Live**: 
- **RSS**: 
- **Codename**: vatt'ghern (Elder Speech for "witcher")
- **Sibling**: kaer-morhen (internal wiki — not a content source)

## What's inside

| Surface | What it is |
|---|---|
| `src/posts/YYYY/MM/DD/` | Bespoke HTML for one daily roundup + up to three deep-stories |
| `src/_includes/layouts/` | Nunjucks layouts (base, post, archetype) |
| `src/_includes/widgets/` | Reusable catalog widgets — summon with `{% widget "name" %}`; gallery at `/widgets/` |
| `src/_data/sources.yml` | 45 priority-tiered sources the daily-news skill crawls |
| `skills/daily-news/` | Claude skill: persona, archetypes, source dispatcher, anti-dup |
| `commands/` | Slash commands: `/vatt-ghern:daily-news`, `:weekly`, `:monthly` |
| `mcp/` | Cloudflare Worker exposing the archive over MCP |
| `scripts/` | Build helpers (OG image, today.svg card, sigil) |

## Setup

```shell
nvm use            # node 20 per .nvmrc
npm install
npm run dev        # http://localhost:8080
```

## Build

```shell
npm run build      # writes _site/  (runs prebuild: OG + today.svg)
npm run lint:html  # validates _site/**/*.html
npm test           # node --test tests/*.mjs
```

Useful one-offs:

```shell
npm run og                                    # rebuild OG images
npm run card                                  # rebuild today.svg
npm run social                                # rebuild repo social preview
npm run sigil                                 # rebuild sigil webp variants
npm run widgets:catalog                       # refresh routine-facing widget-catalog.md from sidecars
npm run sources:list                          # list daily-news sources
npm run sources:dry-run -- --type=arxiv       # dry-fetch one source type
```

The repo's GitHub social preview image is `src/static/social-preview.png`
(1280×640). After regenerating, upload via the GitHub web UI at
*Settings → Social preview*.

## Deploy

Cloudflare Pages auto-builds:

- `main` → production at 
- PR / non-main branch → preview build, URL posted as PR comment

GitHub Actions runs `.github/workflows/quality.yml` (build + html-validate) on every PR.

## Daily news routine

The Claude routine (or `/vatt-ghern:daily-news` slash command) executes
the [`daily-news` skill](./skills/daily-news/SKILL.md) which:

1. Loads context from the past 7 days of posts (dedup baseline)
2. Fetches from `src/_data/sources.yml` via `scripts/fetch-all.mjs`
3. Clusters cross-source variants and scores candidates
4. Picks today's 10 (domain coverage) + up to 3 deep-story clusters
5. Authors bespoke HTML for each, in parallel sub-agents
6. Runs the QA gate (archetype-check, html-validate, link-check, dedup)
7. Opens a PR for human review

Weekly + monthly rollups follow the same machinery via
`/vatt-ghern:weekly` and `/vatt-ghern:monthly`.

## MCP server

`mcp/worker.mjs` is a thin Cloudflare Worker that exposes the archive
over MCP — `list_posts`, `get_post`, `latest`, `search`. See
[`mcp/README.md`](./mcp/README.md) for tool schemas and Claude Desktop
config.

## License

[MIT](./LICENSE) © 2026 Tony Hu.

The MIT licence applies to all code and templates. Authored prose
inside `src/posts/**` carries the author's voice — please credit if you
quote at length.

## Related docs

- [`DESIGN.md`](./DESIGN.md) — design rationale (typography, OKLCH palette, sigil)
- [`PRODUCT.md`](./PRODUCT.md) — product vision, anti-references, pipeline notes
- [`CONTRIBUTING.md`](./CONTRIBUTING.md) — commit conventions, CJK typography rules
- [`SECURITY.md`](./SECURITY.md) — how to report vulnerabilities

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [XBlueSky](https://github.com/XBlueSky)
- **Source:** [XBlueSky/vatt-ghern](https://github.com/XBlueSky/vatt-ghern)
- **License:** MIT
- **Homepage:** https://vatt-ghern.pages.dev

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-xbluesky-vatt-ghern
- Seller: https://agentstack.voostack.com/s/xbluesky
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
