Self-hosted URL- and file-to-Markdown service for humans and AI agents - web pages, documents, images, audio, YouTube. PWA + REST + MCP + Claude Code skill, Reddit-aware, refreshable share links.
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find.
Install from
M8ven verifies MCPs across every public registry — install directly from whichever one you prefer.
process.env. You'll be asked to provide them before it can run.CACHE_DB— /data/cache.dbDISABLE_PUBLIC_HISTORY— no When true, hides the global recent-conversions list and archive (/api/history + /api/archive return 403, frontend hides the section). /s/:id share links keep working. Default: false.MARKITDOWN_URL— Note: the MarkItDown sidecar is optional. Leave unsetMARKITDOWN_YOUTUBE— no Set to true to route YouTube URLs through the markitdown sidecar (returns title + description + transcript). No API key required. Default: off.OAUTH_JWT_SECRET— 2. Set to a 32+ character random string (openssl rand -hex 32).PLAYWRIGHT_URL— base image). It's optional — leave unset and thePORT— "${:-3000}:3000"PUBLIC_URL— ${PUBLIC_URL:-http://localhost:${PORT:-3000}}PULLMD_AUTH_MODE— no disabled (default) / single-admin / multi-user. See "Authentication" below.PULLMD_FRONTMATTER_FIELDS— no Comma-separated allowlist of frontmatter fields to emit (e.g. title,url,source,llm_tokens). Unset = all fields. Trims tokens. Unknown names are ignored with a startup warning.PULLMD_LLM_API_KEY— / …_BASE_URL no Shared fallback credentials for vision + STT when the per-modality vars are unset.PULLMD_LLM_BASE_URL— Shared fallback PULLMD_LLM_API_KEY, (used when per-modality key is unset)PULLMD_PDF_OCR_API_KEY— 1. Set to your OCR provider key (reference provider: Mistral OCR, ~$0.002/page).PULLMD_PDF_OCR_BASE_URLPULLMD_PDF_OCR_MODELPULLMD_SITE_RECIPESPULLMD_SOURCE_HEADERPULLMD_STT_API_KEY— / …_BASE_URL / …_MODEL no Audio transcription via an OpenAI-compatible /audio/transcriptions endpoint. Enabled when the key is set. _MODEL defaults to whisper-1.PULLMD_STT_BASE_URL— STT PULLMD_STT_API_KEY, , PULLMD_STT_MODEL (default whisper-1)PULLMD_STT_MODEL— STT PULLMD_STT_API_KEY, PULLMD_STT_BASE_URL, (default whisper-1)PULLMD_UA_FEED_URL— PULLMD_USER_AGENT to pin a single UA, or to pointPULLMD_USER_AGENT— no Pin a single outbound User-Agent for every web fetch. Disables rotation. Useful for CI or when one specific UA is known to work.PULLMD_VISION_API_KEY— / …_BASE_URL / …_MODEL no Image captioning via an OpenAI-compatible vision endpoint. Enabled when the key is set. _MODEL defaults to gpt-4o-mini.PULLMD_VISION_BASE_URL— Vision PULLMD_VISION_API_KEY, , PULLMD_VISION_MODEL (default gpt-4o-mini)PULLMD_VISION_MODEL— Vision PULLMD_VISION_API_KEY, PULLMD_VISION_BASE_URL, (default gpt-4o-mini)RUN_INTEGRATIONTRAFILATURA_URL— no URL of the Trafilatura sidecar's /extract endpoint. Unset → skip Trafilatura, Readability only.[](https://m8ven.ai/mcp/aeternalabshq-pullmd-1wj6u5)