Turn the web into structured data
your AI can actually use.

MDtools strips any public URL down to clean, structured markdown in one API call. Here's what teams are building with it.

< 2s
Average conversion time
99.9%
API uptime SLA
1 call
URL → clean markdown
MCP
Claude & Cursor ready
Competitive Intelligence

Monitor competitors with an AI agent — automatically

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.

competitor_monitor.py
# 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)
RAG Pipeline

Crawl your docs site into a searchable AI knowledge base

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.

build_corpus.py
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))
Pinecone pgvector LlamaIndex LangChain
News & Media

Sentiment analysis pipeline for news and press coverage

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.

sentiment_feed.py
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)
HuggingFace OpenAI spaCy
AI Coding Assistant

Give Claude or Cursor live access to any documentation

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.

claude_desktop_config.json
{
  "mcpServers": {
    "mdtools": {
      "command": "uvx",
      "args": ["mdtools-mcp"],
      "env": {
        "MDTOOLS_API_KEY": "mk_..."
      }
    }
  }
}
Claude Desktop Cursor Windsurf Continue.dev
Sales Intelligence

Auto-profile prospect websites before every call

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.

prospect_brief.py
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,
  )
Salesforce HubSpot n8n
Developer Tools

Migrate legacy HTML docs to markdown in one script

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.

migrate_docs.sh
# 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"'
Docusaurus MkDocs GitBook Mintlify
Monitoring

Get alerted when any web page changes

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.

page_watcher.py
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)
Slack PagerDuty Zapier
AI Agents

Give your agent persistent, searchable web memory

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.

agent_memory.py
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,
  )
LangChain AutoGen CrewAI

Start converting in 60 seconds.

Free plan gives you 10 conversions a day — no credit card. Upgrade to Pro for API access and 2,500/month included.