This is an early release preview. You may encounter bugs.
PullMD logo
Unclaimed

Tool data-wrangling research

PullMD

Self-hosted URL- and file-to-Markdown service for humans and AI agents - web pages, documents, images, audio, YouTube. PWA + REST + MCP + Cl

A 80/100 GitHub score ? This grade is derived from GitHub signals, not user votes. Open for the full breakdown.
No votes yet

01 / About

What PullMD is.

PullMD converts URLs and files into Markdown for people and agents. Given a web page it returns the article text without navigation, ads, or boilerplate: Reddit and Hacker News threads are auto-detected with their comment trees, Cloudflare’s native Markdown is used when available, Mozilla Readability and Trafilatura handle static HTML, and JavaScript-heavy pages fall back to a headless-Chromium renderer before extraction.

Version 3 extends the service beyond web pages to documents (PDF, Office, EPUB), images, audio, and YouTube videos, and emits a leaner body by default: the Markdown is a title heading plus content, while the source URL, fetch date, and extraction metadata live in YAML frontmatter. Everything beyond plain web extraction is opt-in and degrades gracefully when its sidecar or API key is absent.

It ships as a progressive web app, a REST endpoint at GET /api?url=…, a stateless Streamable-HTTP MCP server at POST /mcp exposing readurl, getshare, and list_recent, and a downloadable Claude Code skill with the instance URL baked in. Every conversion is assigned an eight-character hex share id; GET /s/:id returns the cached Markdown and re-fetches from the source when the entry is older than one hour.

Deployment is self-hosted through Docker Compose, with optional Trafilatura, Playwright, and MarkItDown sidecars. Authentication runs in disabled, single-admin, or multi-user modes, OAuth 2.1 covers MCP clients that cannot send a bearer header, and outbound fetches reject private, loopback, link-local, CGNAT, and cloud-metadata targets on every redirect hop.

Features

  • Web extraction: Readability and Trafilatura on static HTML, with a headless-Chromium fallback for JavaScript-heavy pages and a coverage guard that recovers under-extracted bodies
  • Reddit and Hacker News: auto-detected items, comment permalinks, and listings, with configurable comment depth and limits
  • Documents and media: PDF, Office, and EPUB through a MarkItDown sidecar, plus opt-in image captioning and audio transcription via OpenAI-compatible endpoints
  • YouTube: title, description, and transcript with configurable timecodes, chunk size, and preferred languages
  • Query-scoped extraction: ?query= returns only the sections relevant to a question under a max_tokens budget
  • Share links: an eight-hex id per conversion that re-fetches from the source once the cached copy passes an hour
  • Agent interfaces: REST, an MCP server with three tools, a Claude Code skill bundle, and a universal prompt for chat agents
  • High-quality PDF: an opt-in OCR tier (?pdf=ocr) for table-grade conversion, falling back to the free path
  • Response metadata: headers report extraction source, quality score, share id, suggested filename, and YouTube transcript status
  • Site recipes: JSON rules that map JSON-LD into frontmatter and name a page’s article body outright
  • Operations: configurable cache retention, a sidecar health endpoint that answers 503, SSRF protection, and User-Agent rotation

02 / Discussion CREDIBILITY-GATED

Discussion

Reading is open to everyone. Posting and voting need a verified identity or a GitHub grade of B or higher.

  • No discussions yet.

04 / Build

Build with PullMD.

Browse the catalogue for frameworks, tools, and harnesses, each scored on real GitHub credibility.

Get PullMD →

Browse the catalogue