Atlas / MCP servers / levz0r / HTML to Markdown

HTML to MarkdownSAFE

mcp/levz0r/html-to-markdown

MCP server for converting HTML to Markdown using Turndown.js. Fetch web pages and convert them to clean, formatted Markdown.

Verdict
SAFE
Grade
B
Trust score
89 /100
Exposed tools
2 1r · 1w · 0d
Transport
stdio
License
MIT
Stars
26
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://www.npmjs.com/package/html-to-markdown-mcp) [](https://www.npmjs.com/package/html-to-markdown-mcp)

An MCP (Model Context Protocol) server that converts HTML content to Markdown format using Turndown.js.

Table of Contents

  • Features
  • Installation
  • Usage
  • With Claude Code
  • With Claude Code (Plugin)
  • With Claude Desktop
  • With Cursor
  • With Codex
  • Using Local Development Version
  • Available Tools
  • When does it activate?
  • Local Development
  • Testing
  • Publishing a New Version
  • Security
  • SSRF Protection
  • Allowing Local Network Access
  • Technical Details
  • Related Projects
  • License

Features

  • 🌐 Fetch and convert web pages - Automatically fetch HTML from any URL
  • 🔄 Convert HTML to clean, formatted Markdown
  • 📝 Preserves formatting (headers, links, code blocks, lists, tables)
  • 🗑️ Automatically removes unwanted elements (scripts, styles, etc.)
  • 📊 Auto-extracts page titles and metadata
  • ⚡ Fast conversion using Turndown.js
  • 🔒 SSRF protection - Blocks requests to private/internal networks by default

Installation

npm install -g html-to-markdown-mcp

Or use with npx (no installation required):

npx html-to-markdown-mcp

Usage

With Claude Code

Add the server using the Claude CLI:

claude mcp add --transport stdio html-to-markdown -- npx html-to-markdown-mcp

Or if installed globally:

c
Read from source at commit 211dfc68acdfOBSERVED · 2026-10-09
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add html-to-markdown-mcp -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "html-to-markdown-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ]
    }
  }
}
03

Exposed tools (2)

1 read · 1 write · 0 destructive.

ToolRiskDescription
html_to_markdownreadFetch HTML from a URL or convert provided HTML content to Markdown format. Automatically extracts and converts web pages to clean, readable Markdown. Use this whenever you need to fetch and extract information from a webpage.
save_markdownwriteSave markdown content to a file. Use this to persist converted HTML to a markdown file on disk.
04

Trust audit

SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codePASS
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (1 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
none-found

Findings (7)

LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
test/html-to-markdown.test.js:293
arguments: { url: "http://169.254.169.254/latest/meta-data/" },
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/html-to-markdown.test.js:106
const url = `http://127.0.0.1:${httpPort}/test-page`;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/html-to-markdown.test.js:275
arguments: { url: "http://127.0.0.1:9999/ssrf" },
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/html-to-markdown.test.js:293
arguments: { url: "http://169.254.169.254/latest/meta-data/" },
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/html-to-markdown.test.js:302
arguments: { url: "http://10.0.0.1/admin" },
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/html-to-markdown.test.js:311
arguments: { url: "http://192.168.1.1/admin" },
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, turndown
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-09 · audit v0.4.1 · source sha 211dfc68acdffull audit observations/trust-audit/mcp-server/levz0r__html-to-markdown.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-09211dfc68acdfSAFEB89first audit
06

Questions

What is the HTML to Markdown MCP server?

MCP server for converting HTML to Markdown using Turndown.js. Fetch web pages and convert them to clean, formatted Markdown.

What tools does HTML to Markdown expose?

2 in total: 1 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is HTML to Markdown safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.

What credentials does HTML to Markdown need?

No credential environment variables were found in its source, so it appears to need none.

How does HTML to Markdown run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as html-to-markdown-mcp at 1.0.3.

How current is this page?

The grade is for one exact copy of the source (211dfc68acdf), read on 2026-10-09. The repository is watched and re-audited when it changes.

Advertisement