snapforge

Screenshots, PDFs and Markdown from any URL or HTML for AI agents, via the SnapForge API

Should I use this

Quality & Safety

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

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,470Tokens (tool definitions)
~3.3 KBTypical response size
Moderate attention impact (1.15% 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": {
    "snapforge": {
      "command": "npx",
      "args": [
        "snapforge-mcp"
      ]
    }
  }
}

Runnable packages

npmsnapforge-mcp1.3.0stdio

Remote endpoints

https://snapforge.org/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒snapforge_screenshot(url, html, waitUntil, delay, fullPage, ...)

Capture a screenshot of a public URL or raw HTML as a PNG/JPEG image. Full-page by default. Requires a SnapForge API key (no key? call snapforge_signup first).

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Public http/https URL to render. Provide either url or html."
    },
    "html": {
      "type": "string",
      "description": "Raw HTML to render instead of a URL (max 2MB). Provide either url or html."
    },
    "waitUntil": {
      "type": "string",
      "enum": [
        "load",
        "networkidle"
      ],
      "description": "When to consider the page ready: \"load\" (default) or \"networkidle\""
    },
    "delay": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10000,
      "description": "Extra wait in milliseconds before capture (0–10000)"
    },
    "fullPage": {
      "type": "boolean",
      "description": "Capture the full scrollable page (default true)"
    },
    "width": {
      "type": "integer",
      "minimum": 100,
      "maximum": 3840,
      "description": "Viewport width in pixels (100–3840)"
    },
    "height": {
      "type": "integer",
      "minimum": 100,
      "maximum": 2160,
      "description": "Viewport height in pixels (100–2160)"
    },
    "scale": {
      "type": "integer",
      "minimum": 1,
      "maximum": 3,
      "description": "Device pixel ratio for high-DPI/retina output (1–3)"
    },
    "format": {
      "type": "string",
      "enum": [
        "png",
        "jpeg"
      ],
      "description": "Image format: \"png\" (default) or \"jpeg\""
    },
    "quality": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "JPEG quality 1–100 (ignored for PNG)"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "bytes": {
      "type": "integer",
      "description": "Size of the returned image in bytes"
    },
    "mimeType": {
      "type": "string",
      "description": "Image MIME type, e.g. image/png"
    }
  },
  "required": [
    "bytes",
    "mimeType"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒snapforge_pdf(url, html, waitUntil, delay, singlePage, ...)

Render a public URL or raw HTML to a PDF (returned as an embedded resource). Requires a SnapForge API key (no key? call snapforge_signup first).

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Public http/https URL to render. Provide either url or html."
    },
    "html": {
      "type": "string",
      "description": "Raw HTML to render instead of a URL (max 2MB). Provide either url or html."
    },
    "waitUntil": {
      "type": "string",
      "enum": [
        "load",
        "networkidle"
      ],
      "description": "When to consider the page ready: \"load\" (default) or \"networkidle\""
    },
    "delay": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10000,
      "description": "Extra wait in milliseconds before capture (0–10000)"
    },
    "singlePage": {
      "type": "boolean",
      "description": "Output one continuous page sized to the content height (no A4 pagination)"
    },
    "pageFormat": {
      "type": "string",
      "enum": [
        "Letter",
        "Legal",
        "Tabloid",
        "A0",
        "A1",
        "A2",
        "A3",
        "A4",
        "A5",
        "A6"
      ],
      "description": "Paper size when paginating (default A4)"
    },
    "landscape": {
      "type": "boolean",
      "description": "Landscape orientation (default false)"
    },
    "printBackground": {
      "type": "boolean",
      "description": "Include CSS background colors and images (default true)"
    },
    "margin": {
      "type": "string",
      "description": "CSS size applied to all margins, e.g. \"1cm\""
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "bytes": {
      "type": "integer",
      "description": "Size of the generated PDF in bytes"
    },
    "mimeType": {
      "type": "string",
      "description": "Always application/pdf"
    }
  },
  "required": [
    "bytes",
    "mimeType"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒snapforge_markdown(url, html, waitUntil, delay)

Extract a clean Markdown version of a public URL or raw HTML (article extraction + HTML→Markdown). Great for feeding live web content to an LLM. Requires a SnapForge API key (no key? call snapforge_signup first).

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Public http/https URL to render. Provide either url or html."
    },
    "html": {
      "type": "string",
      "description": "Raw HTML to render instead of a URL (max 2MB). Provide either url or html."
    },
    "waitUntil": {
      "type": "string",
      "enum": [
        "load",
        "networkidle"
      ],
      "description": "When to consider the page ready: \"load\" (default) or \"networkidle\""
    },
    "delay": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10000,
      "description": "Extra wait in milliseconds before capture (0–10000)"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "markdown": {
      "type": "string",
      "description": "The extracted Markdown content"
    }
  },
  "required": [
    "markdown"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟑snapforge_signup(email)

Create a free SnapForge account (100 renders, one-time free trial, not a monthly allowance) with just an email address and get the API key instantly. The key is bound to the current MCP session, so the screenshot/pdf/markdown tools work immediately after signup, no browser needed.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Email address to attach the API key to (the key is also emailed there)"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "apiKey": {
      "type": "string",
      "description": "Your SnapForge API key"
    },
    "plan": {
      "type": "string",
      "description": "Plan name (free)"
    },
    "monthlyQuota": {
      "type": "integer",
      "description": "Renders included: 100 in total on the free trial (no monthly reset), per month on paid plans"
    }
  },
  "required": [
    "apiKey",
    "plan",
    "monthlyQuota"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools