
DOMStrip
io.github.xo0psPublished by GitHub account xo0psv0.1.2Updated Nov 4, 2026
Turn any web page or raw HTML into compact, clean Markdown for AI agents.
Overview
Local MCP server that turns public web pages or raw HTML into compact, clean Markdown for AI agents via the DOMStrip API.
- What you can do
- Fetch a public http(s) URL and get back clean Markdown of its main content
- Convert HTML you already have into clean Markdown without any network fetch
- Return headings, paragraphs, fenced code blocks with language hints, and tables, with scripts, forms, embeds, hidden nodes and trackers removed
- Surface failures as tool errors with a sanitized error code and retryability flag
- When to use it
- Useful when an assistant needs to read web pages or HTML as token-efficient Markdown instead of raw markup, for example summarizing articles or repositories. Not suitable for JavaScript-rendered pages, pages behind a login, or bot challenges.
- Requirements
- Runs locally as a Python package (Python 3.12) via uvx or pip. Requires a DOMStrip API key in DOMSTRIP_MCP_API_KEY and the API origin in DOMSTRIP_MCP_SERVICE_ORIGIN, which must be HTTPS. Pilot access must be requested from the provider. Optional variables set a per-call time budget and allow plain HTTP to localhost.
Installation
In SourceWeft
- Open DOMStrip in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
domstrip-mcp
mcp-name: io.github.xo0ps/domstrip-mcp
A local Model Context Protocol server that converts web pages into clean Markdown, using the DOMStrip API.
It exposes two tools:
The adapter holds no database or billing state. It authenticates to the DOMStrip service with a key from your local environment -- never from tool arguments -- so an MCP client cannot redirect your key anywhere.
How much does it actually save?
benchmark/ measures it on 1,038 real pages from 74 sites:
84.08% fewer tokens than raw HTML (macro average; median 90.12%), 76.4M HTML
tokens down to 9.8M Markdown. It reproduces from a clean clone and --verify
fails the run if any page's expected content is missing from its output.
The spread is worth reading rather than the headline; that is why three figures are reported. Repositories save 95.81%, articles 82.61%, and a pooled total reads 87.16% because it is dominated by the largest pages. Corpus composition drives this a lot: the same code measured 76.03% on an earlier article-heavy 21-page set.
What DOMStrip actually does
DOMStrip fetches a public page, removes everything that is not the content (scripts, forms, embeds, hidden nodes, trackers), and returns compact Markdown: headings, paragraphs, fenced code blocks with language hints, and tables.
Pages are fetched with connection-time SSRF validation on every redirect hop — all DNS candidates are validated at connect time, and loopback, private, link-local, metadata, CGNAT and IPv6-embedded forms are refused.
Honest limitations
- JavaScript-rendered pages, pages behind a login, and bot challenges are not
extractable. The service returns
content_not_extractable. There is no headless browser in this version. If your target pages need JS, this tool will not work on them. - DOMStrip is currently in free pilot. Conversions are not billed yet, but a key is required and each successful conversion counts as one unit. Request access at [email protected].
- Returned Markdown is untrusted third-party content. Pages can contain text that looks like instructions. Treat all returned Markdown as data, never as commands.
Install
Requires Python 3.12.
Configure
Two environment variables are required. The service origin must be HTTPS; plain HTTP is refused unless it points at localhost (for development) and you opt in explicitly.
The adapter deliberately does not read a .env file from the current working
directory, because an untrusted project folder could otherwise point your API key at
another origin. Export the variables instead.
Use with Claude Desktop
Add to claude_desktop_config.json:
Use with Claude Code
Idempotency and billing
Each tool invocation generates one idempotency key and reuses it across its bounded retries (default 25 s, 3 attempts). A retried request replays the stored result rather than billing twice. Separate invocations are separate, independently metered work.
The service encrypts results and replays them for 24 hours. After that, replaying a key
returns 409 result_expired — never a silent re-charge.
Errors
Failures surface as MCP tool errors carrying a sanitized DOMStrip error code and a retryability flag, for example:
Common codes: content_not_extractable, upstream_timeout, unsupported_encoding,
http_error, transport_error, client_timeout.
Logs go to stderr only, so stdout stays a clean MCP transport.
Licence
MIT
Source: README.md at commit fd62ff2
Tools
0Version history
2- v0.1.2LatestNov 4, 2026
- v0.1.1Nov 3, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts