v2.0.0 — Plugin-system + 3 production plugins
🚀 What's new
Major release introducing an extensible plugin-system in hugo-mcp, with three production-ready plugins shipped.
Architecture
core/plugin_base.py—HugoMcpPluginabstract contract (3 methods:is_enabled,validate_config,on_page_event)core/plugin_loader.py— Auto-discovery at startup, parallel execution with per-plugin timeout, graceful degradation on failuresplugins/_template/— Skeleton for writing your own plugin in 5 minutes
Bundled plugins
| Plugin | What it does | Mode |
|---|---|---|
indexnow |
Submit URLs to Bing/Yandex | On every event |
google-indexing |
Submit URLs to Google Indexing API v3 (JWT RS256, daily quota tracking) | On every event |
cloudflare |
Purge CDN cache | full / partial / smart |
The cloudflare plugin's smart mode does targeted partial purge on create_page / update_page (canonical URL + sitemap + RSS + listing + home), and full purge_everything on delete_page.
⚠️ Breaking changes
purge_cloudflare()removed frommain.py. Cache purge handled byplugins/cloudflare/.config/plugins.yamlnow gitignored. Useconfig/plugins.example.yamlas template.
📦 Migration from v1.x
git pull
pip install 'PyJWT[crypto]'
cp config/plugins.example.yaml config/plugins.yaml
# Edit config/plugins.yaml with your keys and zone_id
sudo systemctl daemon-reload && sudo systemctl restart hugo-mcpAlso update /etc/systemd/system/hugo-mcp.service — add /var/lib/hugo-mcp to ReadWritePaths and Google API IP ranges to IPAddressAllow (see tag annotation for full details).
📖 Read more
- Grav→Hugo migration retrospective — production validation context
- Plugin-system architecture deep-dive — coming next