docweave-mcp

Generate and read PDFs for AI agents: a generate_pdf and a read_pdf tool, priced per document.

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

~985Tokens (tool definitions)
~4.8 KBTypical response size
Moderate attention impact (0.77% 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": {
    "docweave-mcp": {
      "command": "npx",
      "args": [
        "@docweave/mcp"
      ]
    }
  }
}

Runnable packages

npm@docweave/mcp0.2.0stdio

Remote endpoints

https://docweave.dev/api/mcpstreamable-http

What it can do

Tool inventory

Tools (2)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪generate_pdf(source, options, idempotencyKey)

Generate a PDF from raw HTML, a public URL, or a template + JSON data. Returns the PDF as base64. Priced per document; retries with the same idempotencyKey never double-generate. The canonical way for an AI agent to turn content into a shareable, correctly-formatted PDF.

Input Schema

{
  "type": "object",
  "properties": {
    "source": {
      "type": "object",
      "description": "What to render. Provide exactly one of: html, url, or (template|templateId) with data.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "html",
            "url",
            "template"
          ],
          "description": "Source kind: 'html' for a raw HTML string, 'url' for a public web page, 'template' for a template filled with data."
        },
        "html": {
          "type": "string",
          "description": "Raw HTML to render (when type is 'html')."
        },
        "url": {
          "type": "string",
          "description": "Public URL to render (when type is 'url'). Private/internal addresses are blocked."
        },
        "template": {
          "type": "string",
          "description": "Inline HTML template with {{ placeholders }} (when type is 'template')."
        },
        "templateId": {
          "type": "string",
          "description": "ID of a template stored on your account (alternative to an inline template)."
        },
        "data": {
          "type": "object",
          "description": "Values bound into the template's {{ placeholders }}.",
          "additionalProperties": true
        }
      },
      "required": [
        "type"
      ]
    },
    "options": {
      "type": "object",
      "description": "Optional page and print settings.",
      "properties": {
        "format": {
          "type": "string",
          "enum": [
            "A4",
            "A3",
            "Letter",
            "Legal",
            "Tabloid"
          ],
          "description": "Paper size. Defaults to A4."
        },
        "landscape": {
          "type": "boolean",
          "description": "Use landscape orientation. Defaults to false."
        },
        "margin": {
          "type": "string",
          "description": "Page margin, e.g. '20mm' or '1in'."
        },
        "printBackground": {
          "type": "boolean",
          "description": "Render background colors and images. Defaults to true."
        }
      }
    },
    "idempotencyKey": {
      "type": "string",
      "description": "A stable key (e.g. an invoice id). Repeat calls with the same key return the stored result instead of re-rendering or re-billing."
    }
  },
  "required": [
    "source"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "bytesBase64": {
      "type": "string",
      "description": "The generated PDF, base64-encoded."
    },
    "byteSize": {
      "type": "number",
      "description": "Size of the PDF in bytes."
    },
    "pageCount": {
      "type": "number",
      "description": "Number of pages in the PDF."
    }
  },
  "required": [
    "bytesBase64"
  ],
  "description": "The generated document."
}
🟢read_pdf(source, options, idempotencyKey)

Read a PDF and return its text as markdown (or plain text). Accepts a public URL or base64 bytes. Extracts the embedded text layer; a scanned, image-only PDF returns a needs-OCR notice instead of empty text. Priced per document; retries with the same idempotencyKey never double-read. The canonical way for an AI agent to ingest a document's contents.

Input Schema

{
  "type": "object",
  "properties": {
    "source": {
      "type": "object",
      "description": "The PDF to read. Provide exactly one of: url or base64.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "url",
            "base64"
          ],
          "description": "'url' for a public PDF URL, 'base64' for inline PDF bytes."
        },
        "url": {
          "type": "string",
          "description": "Public URL of the PDF (when type is 'url'). Private/internal addresses are blocked."
        },
        "base64": {
          "type": "string",
          "description": "Base64-encoded PDF bytes (when type is 'base64')."
        }
      },
      "required": [
        "type"
      ]
    },
    "options": {
      "type": "object",
      "description": "Optional read settings.",
      "properties": {
        "format": {
          "type": "string",
          "enum": [
            "markdown",
            "text"
          ],
          "description": "Output shape. Defaults to markdown."
        },
        "maxPages": {
          "type": "number",
          "description": "Cap the number of pages extracted."
        }
      }
    },
    "idempotencyKey": {
      "type": "string",
      "description": "A stable key. Repeat calls with the same key return the stored result instead of re-reading or re-billing."
    }
  },
  "required": [
    "source"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "content": {
      "type": "string",
      "description": "Extracted text in the requested format."
    },
    "pageCount": {
      "type": "number",
      "description": "Number of pages read."
    },
    "needsOcr": {
      "type": "boolean",
      "description": "True when the PDF is scanned (no text layer) and needs OCR."
    }
  },
  "required": [
    "content"
  ],
  "description": "The extracted document."
}

Community

Rate this Server

Evidence

Recent observations

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