inbox-preview

Render HTML/.eml emails in real Gmail, Outlook & Yahoo web clients and screenshot them

Should I use this

Quality & Safety

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

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~797Tokens (tool definitions)
~2.1 KBTypical response size
Moderate attention impact (0.62% 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": {
    "inbox-preview": {
      "url": "https://api.powerline.ai/v1/mcp"
    }
  }
}

Remote endpoints

https://api.powerline.ai/v1/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_clients

List the email clients this deployment can render right now, with their rendering tier, engine, and capabilities

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡submit_preview(html, eml, subject, include_previews, include_full_page, ...)

Submit an email for rendering across email clients — full HTML, or a complete raw .eml (base64). Provide exactly one of html/eml. Returns a job ID to poll for results.

Input Schema

{
  "type": "object",
  "properties": {
    "html": {
      "description": "The full email HTML to preview. Provide exactly one of html or eml.",
      "type": "string"
    },
    "eml": {
      "description": "A complete raw RFC 822 message (.eml), base64-encoded — inserted verbatim (real headers, multipart, attachments). Max 10MB decoded. Provide exactly one of html or eml.",
      "type": "string"
    },
    "subject": {
      "description": "Email subject line",
      "type": "string"
    },
    "include_previews": {
      "description": "Also capture the inbox-list row (how the message looks unread in the list) and the subject heading, returned as inbox_preview / subject_preview on each render. Default false: they cost more than the body render itself, so ask only when you need them.",
      "type": "boolean"
    },
    "include_full_page": {
      "description": "Also screenshot the whole client window around the opened email (the mailbox UI as well as the message), returned as full_page on each render next to the usual email-only screenshot. Default false. Best-effort: the render mailbox identity and any other mail are masked, and the capture is omitted when that cannot be verified.",
      "type": "boolean"
    },
    "renders": {
      "description": "Exactly the renders you want, one entry each (e.g. outlook light + outlook dark are two entries). Omit for the server default: every live client at its default width, light.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "client": {
            "type": "string",
            "enum": [
              "gmail",
              "outlook",
              "yahoo"
            ],
            "description": "Client ID"
          },
          "viewport_width": {
            "description": "Viewport width in pixels (200-2560). Defaults to the client default (1280).",
            "type": "number"
          },
          "color_scheme": {
            "description": "Render in the client's light or dark mode (default light). Dark must be supported by the client — check color_schemes in list_clients.",
            "type": "string",
            "enum": [
              "light",
              "dark"
            ]
          },
          "images_disabled": {
            "description": "Render with remote images blocked (default false)",
            "type": "boolean"
          }
        },
        "required": [
          "client"
        ]
      }
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_job(job_id)

Get the status and screenshots for a preview job. Poll until status is "completed".

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "description": "The job ID returned by submit_preview"
    }
  },
  "required": [
    "job_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_screenshot(job_id, client, viewport_width, color_scheme, images_disabled)

Fetch a rendered screenshot. Returns the image URL for the given job, client, width, and environment (color scheme / images).

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "description": "The job ID"
    },
    "client": {
      "type": "string",
      "enum": [
        "gmail",
        "outlook",
        "yahoo"
      ],
      "description": "Client ID"
    },
    "viewport_width": {
      "type": "number",
      "description": "Viewport width of the render, matching the job (1280 when the job used client defaults)"
    },
    "color_scheme": {
      "default": "light",
      "description": "The render's color scheme",
      "type": "string",
      "enum": [
        "light",
        "dark"
      ]
    },
    "images_disabled": {
      "default": false,
      "description": "Whether the render had images blocked",
      "type": "boolean"
    }
  },
  "required": [
    "job_id",
    "client",
    "viewport_width"
  ],
  "$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