AgentMD

Convert PDF, DOCX, HTML, and URLs to clean, LLM-ready markdown with tables preserved

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~835Tokens (tool definitions)
~4.0 KBTypical response size
Moderate attention impact (0.65% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "agentmd": {
      "command": "npx",
      "args": [
        "agentmd-mcp"
      ]
    }
  }
}

Runnable packages

npmagentmd-mcp0.1.4stdio

Remote endpoints

https://www.getagentmd.com/api/mcpstreamable-http

What it can do

Tool inventory

Tools (2)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢convert_url_to_markdown(url, pages, mode, section, maxTokens)

Fetch a URL (web page, PDF, DOCX, etc.) and convert it to clean, LLM-ready markdown. Extracts the main article content from web pages and preserves tables. Supports reading only part of a large document: PDF page ranges, a heading outline, a single section, or a token cap.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "The http(s) URL of the document or page to convert"
    },
    "pages": {
      "description": "PDFs only: 1-indexed, inclusive page ranges to convert, e.g. \"1-3,5,8-\" (an open-ended range runs to the last page). Ignored with a warning for non-PDF formats.",
      "type": "string"
    },
    "mode": {
      "description": "\"full\" (default) returns the document body. \"outline\" returns just the heading tree — each line is `- [#3] Heading text (~120 tokens)`. For a long document, call with mode: 'outline' first, then fetch only what you need with section: '#3' or a heading title.",
      "type": "string",
      "enum": [
        "full",
        "outline"
      ]
    },
    "section": {
      "description": "Return only one section: either \"#<n>\" using the index from a mode: 'outline' call (e.g. '#3'), or the heading text itself (case-insensitive; exact match wins, then prefix, then substring). Ignored when mode is 'outline'.",
      "type": "string"
    },
    "maxTokens": {
      "description": "Cap the returned markdown at roughly this many tokens, cutting at a paragraph boundary. When the output is cut, the result starts with a `> Truncated: ~X of ~Y tokens` line — narrow with pages or section rather than raising this.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "url"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
⚪convert_document_to_markdown(base64, filename, pages, mode, section, ...)

Convert a document you already have (PDF, DOCX, HTML, plain text) to clean, LLM-ready markdown. Pass the file contents as base64. Supports reading only part of a large document: PDF page ranges, a heading outline, a single section, or a token cap.

Input Schema

{
  "type": "object",
  "properties": {
    "base64": {
      "type": "string",
      "description": "Base64-encoded file contents"
    },
    "filename": {
      "description": "Original filename, e.g. report.pdf — helps format detection",
      "type": "string"
    },
    "pages": {
      "description": "PDFs only: 1-indexed, inclusive page ranges to convert, e.g. \"1-3,5,8-\" (an open-ended range runs to the last page). Ignored with a warning for non-PDF formats.",
      "type": "string"
    },
    "mode": {
      "description": "\"full\" (default) returns the document body. \"outline\" returns just the heading tree — each line is `- [#3] Heading text (~120 tokens)`. For a long document, call with mode: 'outline' first, then fetch only what you need with section: '#3' or a heading title.",
      "type": "string",
      "enum": [
        "full",
        "outline"
      ]
    },
    "section": {
      "description": "Return only one section: either \"#<n>\" using the index from a mode: 'outline' call (e.g. '#3'), or the heading text itself (case-insensitive; exact match wins, then prefix, then substring). Ignored when mode is 'outline'.",
      "type": "string"
    },
    "maxTokens": {
      "description": "Cap the returned markdown at roughly this many tokens, cutting at a paragraph boundary. When the output is cut, the result starts with a `> Truncated: ~X of ~Y tokens` line — narrow with pages or section rather than raising this.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "base64"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded2 tools
verifiedversion not recorded2 tools
verifiedversion not recorded2 tools