MDtools strips any public URL down to clean, structured markdown in one API call. Here's what teams are building with it.
Schedule daily fetches of competitor pricing pages, release notes, and job boards. Feed the diffs into an LLM to surface changes that matter — new pricing tiers, dropped features, hiring signals.
# Fetch competitor pricing page daily import httpx, difflib, anthropic COMPETITORS = [ "https://competitor.com/pricing", "https://rival.io/changelog", ] def fetch_md(url): return httpx.get( "https://api.mdtools.dev/convert", params={"url": url}, headers={"Authorization": "Bearer mk_..."}, ).text for url in COMPETITORS: today = fetch_md(url) diff = diff_against_yesterday(today) if diff: summarise_with_claude(diff) post_to_slack(summary)
Convert every page of your documentation, wiki, or company website into clean markdown. Chunk, embed, and index it — your RAG system gets clean input, not HTML soup.
for page_url in crawl_sitemap("https://docs.acme.com"): md = mdtools.convert( url=page_url, include_metadata=True, # title, keywords… include_links=False, # clean for embedding ) chunks = chunk_by_heading(md) pinecone.upsert(embed(chunks))
Pull articles from news sites, blogs, and press releases into clean markdown — then run sentiment, entity extraction, and topic classification without dealing with ad-heavy HTML.
for article_url in rss_feed("brand mentions"): text = mdtools.convert( url=article_url, include_links=False, ) result = pipeline( text, tasks=["sentiment", "ner"], ) store_result(article_url, result)
Install the MDtools MCP server once. Now Claude Desktop and Cursor can fetch any page — API docs, RFCs, Stack Overflow answers — as clean markdown right inside your session. No copy-paste.
{ "mcpServers": { "mdtools": { "command": "uvx", "args": ["mdtools-mcp"], "env": { "MDTOOLS_API_KEY": "mk_..." } } } }
Before a sales call, have your agent fetch the prospect's homepage, about page, and pricing — convert to markdown, then ask an LLM to summarise their business, tech stack, and pain points in 30 seconds.
def brief(domain): pages = ["/", "/about", "/pricing"] context = "" for path in pages: context += mdtools.convert( url=f"https://{domain}{path}" ) return claude.ask( "Summarise this company for a sales rep", context=context, )
Moving from Confluence, Notion export, or a legacy CMS to a markdown-based docs system? Batch-convert every page, keep the structure, and ship your new docs site in a day — not a sprint.
# One-liner: sitemap → markdown files curl -s https://old-docs.acme.com/sitemap.xml \ | grep '<loc>' \ | sed 's/.*<loc>//;s/<\/loc>.*//' \ | xargs -P8 -I{} sh -c \ 'curl -s "https://api.mdtools.dev/convert\ ?url={}&include_metadata=true" \ -H "Authorization: Bearer mk_..." \ > "$(echo {} | md5sum | cut -c1-8).md"'
Track competitor pricing, regulatory notices, supplier terms, or your own pages. Convert daily, diff the markdown, and fire a Slack alert only when something actually changed — not on every crawl.
current = mdtools.convert(url=WATCH_URL) previous = db.get_last(WATCH_URL) if current != previous: diff = unified_diff(previous, current) summary = llm.ask( "What changed and does it matter?", context=diff ) slack.alert(WATCH_URL, summary) db.save(WATCH_URL, current)
Every time your agent fetches a URL with MDtools, the conversion is saved to your library automatically. Future runs can search saved conversions before hitting the web again — cutting costs and latency.
def fetch_or_recall(url): # Check library before hitting the web saved = mdtools.search(url_query=url) if saved: return mdtools.get(saved[0].id) # Fresh fetch — auto-saved to library return mdtools.convert( url=url, include_metadata=True, )
Free plan gives you 10 conversions a day — no credit card. Upgrade to Pro for API access and 2,500/month included.