# Codeharbor Markdown Preview > Render Markdown to safe HTML with an outline, word count and heading checks. Turns Markdown (headings, lists, task lists, tables, quotes, code blocks with highlighting, links) into sanitised HTML — raw HTML stays text — and lists the outline, word count, reading time, links and structure problems such as skipped heading levels. Part of usefulweb.site (https://usefulweb.site/). Part of [Codeharbor](https://codeharbor.usefulweb.site/) (ownerApp: codeharbor). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://codeharbormarkdownpreview.usefulweb.site/ (interactive tool at https://codeharbormarkdownpreview.usefulweb.site/tool) - JSON API: POST https://codeharbormarkdownpreview.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://codeharbormarkdownpreview.usefulweb.site/api/v1/tool) - OpenAPI: https://codeharbormarkdownpreview.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://codeharbormarkdownpreview.usefulweb.site/mcp - tool `codeharbor_markdown_preview` ## Inputs - markdown (textarea): Markdown ## Method - Block structure follows CommonMark for ATX and setext headings, paragraphs, block quotes, fenced code, thematic breaks and lists (nested by indentation); tables, task lists and ~~strikethrough~~ follow GitHub Flavored Markdown. Inline: code spans, strong, emphasis, links, autolinks and images. - Safety: every character of the source is HTML-escaped; raw HTML is shown as text, links are kept only for http, https, mailto and relative targets, and images point only to relative files (shown as their alt text here). - Headings get ids from their text (lower case, letters and digits joined by hyphens, numbered when repeated). Reading time assumes 230 words per minute. Checks: skipped heading levels, more than one level-1 heading, links to missing #anchors and images without alt text.