Render HTML/.eml emails in real Gmail, Outlook & Yahoo web clients and screenshot them
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Get the status and screenshots for a preview job. Poll until status is "completed".
The job ID returned by submit_preview
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Get the status and screenshots for a preview job. Poll until status is "completed".
| Argument | Type | Description |
|---|---|---|
| job_id* | string | The job ID returned by submit_preview |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"description": "The job ID returned by submit_preview"
}
}
}Fetch a rendered screenshot. Returns the image URL for the given job, client, width, and environment (color scheme / images).
| Argument | Type | Description |
|---|---|---|
| client* | string | Client ID |
| job_id* | string | The job ID |
| color_scheme | string | The render's color scheme |
| viewport_width* | number | Viewport width of the render, matching the job (1280 when the job used client defaults) |
| images_disabled | boolean | Whether the render had images blocked |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"job_id",
"client",
"viewport_width"
],
"properties": {
"client": {
"enum": [
"gmail",
"outlook",
"yahoo"
],
"type": "string",
"description": "Client ID"
},
"job_id": {
"type": "string",
"description": "The job ID"
},
"color_scheme": {
"enum": [
"light",
"dark"
],
"type": "string",
"default": "light",
"description": "The render's color scheme"
},
"viewport_width": {
"type": "number",
"description": "Viewport width of the render, matching the job (1280 when the job used client defaults)"
},
"images_disabled": {
"type": "boolean",
"default": false,
"description": "Whether the render had images blocked"
}
}
}List the email clients this deployment can render right now, with their rendering tier, engine, and capabilities
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| eml | string | 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. |
| html | string | The full email HTML to preview. Provide exactly one of html or eml. |
| renders | array | 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. |
| subject | string | Email subject line |
| include_previews | boolean | 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. |
| include_full_page | boolean | 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": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"eml": {
"type": "string",
"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."
},
"html": {
"type": "string",
"description": "The full email HTML to preview. Provide exactly one of html or eml."
},
"renders": {
"type": "array",
"items": {
"type": "object",
"required": [
"client"
],
"properties": {
"client": {
"enum": [
"gmail",
"outlook",
"yahoo"
],
"type": "string",
"description": "Client ID"
},
"color_scheme": {
"enum": [
"light",
"dark"
],
"type": "string",
"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."
},
"viewport_width": {
"type": "number",
"description": "Viewport width in pixels (200-2560). Defaults to the client default (1280)."
},
"images_disabled": {
"type": "boolean",
"description": "Render with remote images blocked (default false)"
}
}
},
"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."
},
"subject": {
"type": "string",
"description": "Email subject line"
},
"include_previews": {
"type": "boolean",
"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."
},
"include_full_page": {
"type": "boolean",
"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."
}
}
}