Handiworks

MCP tools for AI agents: render URLs to image/PDF, check link health, convert HTML/CSV/JSON.

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

~726Tokens (tool definitions)
~2.3 KBTypical response size
Moderate attention impact (0.57% 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": {
    "handiworks-mcp": {
      "url": "https://handiworks-mcp.privateluke4444.workers.dev/mcp"
    }
  }
}

Remote endpoints

https://handiworks-mcp.privateluke4444.workers.dev/mcpstreamable-http
https://mcp.handiworks.studio/mcpstreamable-http

What it can do

Tool inventory

Tools (3)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪render(url, format, fullPage, width, height, ...)

Render a web page to a PNG/JPEG screenshot or a PDF using a real headless browser. Returns the image inline (base64) or the PDF as an embedded resource. Results are cached for 24h.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "The absolute URL to render (must include https:// or http://)."
    },
    "format": {
      "default": "png",
      "description": "Output format. png/jpeg return an image; pdf returns a PDF document.",
      "type": "string",
      "enum": [
        "png",
        "jpeg",
        "pdf"
      ]
    },
    "fullPage": {
      "default": false,
      "description": "For screenshots: capture the entire scrollable page instead of just the viewport.",
      "type": "boolean"
    },
    "width": {
      "default": 1280,
      "description": "Viewport width in pixels.",
      "type": "integer",
      "minimum": 64,
      "maximum": 3840
    },
    "height": {
      "default": 800,
      "description": "Viewport height in pixels.",
      "type": "integer",
      "minimum": 64,
      "maximum": 2160
    },
    "waitUntil": {
      "default": "networkidle2",
      "description": "Navigation completion signal before capturing.",
      "type": "string",
      "enum": [
        "load",
        "domcontentloaded",
        "networkidle0",
        "networkidle2"
      ]
    },
    "pdfFormat": {
      "default": "A4",
      "description": "Paper size, used only when format is pdf.",
      "type": "string",
      "enum": [
        "A4",
        "Letter",
        "Legal",
        "A3",
        "Tabloid"
      ]
    },
    "fresh": {
      "default": false,
      "description": "Bypass the 24h cache and force a fresh render.",
      "type": "boolean"
    }
  },
  "required": [
    "url"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢check_link(url, followRedirects, maxRedirects, fresh)

Check a URL's health: follows the redirect chain, reports the final status and URL, extracts the page <title>, and flags likely paywalls. Cached for 6h.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "The absolute URL to check."
    },
    "followRedirects": {
      "default": true,
      "description": "Follow 3xx redirects to the final destination.",
      "type": "boolean"
    },
    "maxRedirects": {
      "default": 10,
      "description": "Maximum redirect hops to follow.",
      "type": "integer",
      "minimum": 0,
      "maximum": 20
    },
    "fresh": {
      "default": false,
      "description": "Bypass the 6h cache and re-check now.",
      "type": "boolean"
    }
  },
  "required": [
    "url"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪convert(mode, content, delimiter, headers, pdfFormat)

Convert content between formats. Modes: html-to-pdf, html-to-png (real browser), csv-to-json, json-to-csv. PDF/PNG return as attachment/image; data modes return text.

Input Schema

{
  "type": "object",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "html-to-pdf",
        "html-to-png",
        "csv-to-json",
        "json-to-csv"
      ],
      "description": "Conversion to perform."
    },
    "content": {
      "type": "string",
      "description": "The input content: HTML, CSV, or JSON depending on mode."
    },
    "delimiter": {
      "default": ",",
      "description": "Field delimiter for CSV modes.",
      "type": "string"
    },
    "headers": {
      "default": true,
      "description": "For csv-to-json: treat the first row as column headers.",
      "type": "boolean"
    },
    "pdfFormat": {
      "default": "A4",
      "description": "Paper size for html-to-pdf.",
      "type": "string",
      "enum": [
        "A4",
        "Letter",
        "Legal",
        "A3",
        "Tabloid"
      ]
    }
  },
  "required": [
    "mode",
    "content"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded3 tools
failed observationversion not recorded—
verifiedversion not recorded3 tools
failed observationversion not recorded—
verifiedversion not recorded3 tools