# PullMD > Anything in, clean Markdown out. ## Get started - [Overview](https://aeternalabshq.github.io/pullmd/index.md): PullMD turns web pages, documents, images, audio and YouTube videos into clean, token-lean Markdown, for you and for your AI agents. - [Quickstart](https://aeternalabshq.github.io/pullmd/quickstart.md): Run PullMD with Docker Compose and convert your first page. - [How extraction works](https://aeternalabshq.github.io/pullmd/how-it-works.md): The order PullMD tries extractors in, how it picks the best result, and when it falls back to a headless browser. ## Connect your agent - [Connect an AI agent](https://aeternalabshq.github.io/pullmd/agents/overview.md): Choose how your agent reads the web through PullMD: the MCP server, the Claude Code skill, or a prompt. - [MCP server](https://aeternalabshq.github.io/pullmd/agents/mcp-server.md): Add PullMD's MCP server to Claude Code, Cursor and other MCP clients. - [Connect claude.ai and Claude Desktop](https://aeternalabshq.github.io/pullmd/agents/claude-ai-connector.md): Turn on PullMD's built-in OAuth 2.1 server so claude.ai and Claude Desktop can use your instance as a custom connector. - [Claude Code skill](https://aeternalabshq.github.io/pullmd/agents/claude-code-skill.md): Install the PullMD skill so Claude Code reads web pages, documents and videos through your instance. - [Use PullMD from any agent](https://aeternalabshq.github.io/pullmd/agents/prompt.md): A prompt that tells any agent with HTTP access to read web pages through PullMD. ## What it converts - [Documents](https://aeternalabshq.github.io/pullmd/guides/documents.md): Convert PDF, Office, EPUB, e-mail, OpenDocument, data and other files to Markdown, by URL or by upload, with optional OCR for table-heavy PDFs. - [YouTube transcripts](https://aeternalabshq.github.io/pullmd/guides/youtube.md): Get a YouTube video's title, description and transcript as Markdown, with clickable timecodes. No API key needed. - [Images and audio](https://aeternalabshq.github.io/pullmd/guides/images-and-audio.md): Caption images and transcribe audio through any OpenAI-compatible model, cloud or local. - [Reddit and Hacker News](https://aeternalabshq.github.io/pullmd/guides/reddit-and-hacker-news.md): Read Reddit and Hacker News threads with their comment trees, and Hacker News listings as ranked lists. - [Pages behind a login](https://aeternalabshq.github.io/pullmd/guides/local-html.md): Convert an HTML file you saved from your browser, for pages PullMD can't fetch itself. ## Features - [Query-scoped extraction](https://aeternalabshq.github.io/pullmd/guides/query-scoped-extraction.md): Pass a question with query= and get back only the sections of a page that answer it, with the token counts for the full page and the result. - [Share links and cache](https://aeternalabshq.github.io/pullmd/guides/share-links.md): How PullMD caches conversions, how share links stay fresh, and how long anything is kept. - [Site recipes](https://aeternalabshq.github.io/pullmd/guides/site-recipes.md): Fix extraction for a specific site with a small JSON rule that forces a browser render, strips noise, names the article body, or adds frontmatter fields. ## Self-hosting - [Installation](https://aeternalabshq.github.io/pullmd/self-hosting/installation.md): Run PullMD with Docker Compose, choose which sidecars to keep, set the public URL, and run it without Docker for development. - [Reverse proxy and HTTPS](https://aeternalabshq.github.io/pullmd/self-hosting/reverse-proxy.md): Run PullMD behind Traefik, Caddy, nginx or a tunnel, and set PULLMD_TRUST_PROXY so rate limits and cookies work. - [Authentication](https://aeternalabshq.github.io/pullmd/self-hosting/authentication.md): Turn on sign-in with single-admin or multi-user mode, create API keys, and manage accounts from the command line. - [SSRF protection](https://aeternalabshq.github.io/pullmd/self-hosting/ssrf-protection.md): How PullMD stops URLs from reaching your internal network, and how to allow specific internal hosts. - [Monitoring](https://aeternalabshq.github.io/pullmd/self-hosting/monitoring.md): Watch PullMD's sidecars with /api/status, and track extraction quality with /api/stats and /api/storage. ## Reference - [Configuration](https://aeternalabshq.github.io/pullmd/reference/configuration.md): Every PullMD environment variable, grouped by what it controls, with defaults. - [Output format](https://aeternalabshq.github.io/pullmd/reference/output-format.md): The Markdown body, frontmatter fields, response headers and JSON shape PullMD returns. - [MCP tools](https://aeternalabshq.github.io/pullmd/reference/mcp-tools.md): Parameters and output of the `read_url`, `get_share` and `list_recent` MCP tools. - [Troubleshooting](https://aeternalabshq.github.io/pullmd/troubleshooting.md): Fixes for thin results, blocked URLs, failed documents, sign-in problems behind a proxy, and settings that don't take effect. ## API reference - [Overview](https://aeternalabshq.github.io/pullmd/reference/api.md): PullMD is self-hosted, so every request goes to your own instance. Replace `http://localhost:3000` with your `PUBLIC_URL`. - [OpenAPI specification](https://aeternalabshq.github.io/pullmd/openapi.yaml): Every endpoint, parameter and response, for importing into an API client or generating code. ### Convert Turn a URL, an HTML document or an uploaded file into Markdown. - [Convert a URL](https://aeternalabshq.github.io/pullmd/reference/api/convert/convert-a-url.md): Fetches a URL and returns the main content as Markdown. - [Convert HTML](https://aeternalabshq.github.io/pullmd/reference/api/convert/convert-html.md): Converts an HTML document you send in the request body, such as a page saved from a browser. - [Convert a file](https://aeternalabshq.github.io/pullmd/reference/api/convert/convert-a-file.md): Converts an uploaded file. - [Convert a URL with progress](https://aeternalabshq.github.io/pullmd/reference/api/convert/convert-a-url-with-progress.md): Same conversion as `GET /api`, delivered as Server-Sent Events so you can show progress. - [Open a link in the web app](https://aeternalabshq.github.io/pullmd/reference/api/convert/open-a-link-in-the-web-app.md): The share target of the installed web app: its manifest names this endpoint, so a device that supports sharing to installed web apps sends shared links here. ### Share links Read a cached conversion by its share id. - [Get a shared conversion](https://aeternalabshq.github.io/pullmd/reference/api/share-links/get-a-shared-conversion.md): Returns a cached conversion by its share id. ### History and cache List and delete cached conversions. - [List recent conversions](https://aeternalabshq.github.io/pullmd/reference/api/history-and-cache/list-recent-conversions.md): Recent conversions, newest first. When sign-in is enabled you see only your own. - [Page through all conversions](https://aeternalabshq.github.io/pullmd/reference/api/history-and-cache/page-through-all-conversions.md): Every cached conversion, newest first, with a total count for paging. When sign-in is enabled you see only your own. - [Delete a conversion](https://aeternalabshq.github.io/pullmd/reference/api/history-and-cache/delete-a-conversion.md): Removes one conversion. - [Delete all conversions](https://aeternalabshq.github.io/pullmd/reference/api/history-and-cache/delete-all-conversions.md): Clears the whole cache (admin, or anyone when sign-in is off) or, for a regular user, their own history only. ### Instance Health, configuration and usage of the instance. These endpoints never require sign-in. - [Check sidecar health](https://aeternalabshq.github.io/pullmd/reference/api/instance/check-sidecar-health.md): Reports whether each extraction sidecar answers. - [Get enabled features](https://aeternalabshq.github.io/pullmd/reference/api/instance/get-enabled-features.md): Which optional features this instance has turned on. The web app reads it to show or hide controls. - [Check site recipes](https://aeternalabshq.github.io/pullmd/reference/api/instance/check-site-recipes.md): How many [site recipes](https://aeternalabshq.github.io/pullmd/guides/site-recipes.md) loaded, how many were rejected and why, and which recipe frontmatter fields the allowlist dropped. - [Get extraction stats](https://aeternalabshq.github.io/pullmd/reference/api/instance/get-extraction-stats.md): Counts, average quality and latency per extractor over a time window. - [Get cache size](https://aeternalabshq.github.io/pullmd/reference/api/instance/get-cache-size.md): Size of the cache, how many rows will expire soon, and cache traffic over the last 7 days. ### Account The signed-in user. - [Get the current user](https://aeternalabshq.github.io/pullmd/reference/api/account/get-the-current-user.md): Who you are signed in as. Accepts an API key or a session cookie; OAuth access tokens work only on `/mcp`. Available only when sign-in is enabled. - [Create an API key](https://aeternalabshq.github.io/pullmd/reference/api/account/create-an-api-key.md): Creates an API key for the signed-in user. - [Revoke an API key](https://aeternalabshq.github.io/pullmd/reference/api/account/revoke-an-api-key.md): Deletes one of your API keys. ## Releases - [Changelog](https://aeternalabshq.github.io/pullmd/changelog.md): Highlights of recent PullMD releases. The full history is in CHANGELOG.md on GitHub. - [Upgrading](https://aeternalabshq.github.io/pullmd/self-hosting/upgrading.md): Update PullMD, what to check when upgrading across 3.18, 3.17, 3.16, 3.15.2, 3.13 and 3.0, and how to roll back.