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
failed observationversion not recorded—
verifiedversion not recorded3 tools
failed observationversion not recorded—
verifiedversion not recorded3 tools
failed observationversion not recorded—