← Plugin catalog
Communication

Mailtea

Mailtea v0.10.0

Send email and newsletters

Create a free account to save this plugin.

From the developer

Declared capabilities

  • Interactive
  • Write

Declared limitations

  • Data outside the granted publication. Expected: refused with "Token is restricted to a different publication"; the connection covers Demo Weekly only.
  • No destructive call when only a review was asked. Expected: read-only calls only; nothing sent, scheduled or deleted.

Not specified in the available declarations: pricing & account requirements.

Onboarding example

Help me send my first email with Mailtea. Check my setup and guide me through anything missing.

View onboarding source →

Sources & dates

Developer declarations; not independently tested. Listing last checked Nov 6, 2026. Package observed Nov 6, 2026.

View package source →

Description

From the marketplace listing

Mailtea is an email platform for sending transactional email and newsletters from a conversation. Send and schedule email, check delivery, and manage the contacts who receive it. Connect your Mailtea account, choose your publication, then ask: “Help me send my first email.” Mailtea checks your setup and guides you through any missing sender or domain verification. Three included skills help write and design emails and build the website your newsletter lives on. No API key, Node.js, or coding is needed for the hosted connection. You need a Mailtea account and a verified sending domain to send. Draft requests stay drafts; sending uses the recipients and content you specify.

Language: English · Automatically detected from descriptions.

Screenshots

From the developer.

Changes

No changes recorded yet. Follow this plugin to keep track of future changes.

First seen Nov 6, 2026. Last seen Nov 6, 2026.

Keywords

Files & skills

File archives

Plugin package22 files · 330 KBBrowse files →
Skill instructions
mailtea-email14.7 KB

View saved version →

---
name: mailtea-email
description: Send, schedule, and manage email with Mailtea from an AI agent. Use when the user wants to send a transactional email, send a batch, schedule a send, check delivery status / opens / clicks, list or cancel emails, manage contacts/segments, or draft and send a newsletter — via the Mailtea MCP server, the mailtea Node SDK, or the REST API.
---

# Mailtea email

Mailtea lets you send and manage email programmatically. Prefer the **MCP server**
(no code) when it's connected; fall back to the **SDK** or **REST** in code.

> **Designing** the email rather than sending it? Use **mailtea-email-design**
> first — it covers how the email should *look* and survive real inboxes, and the
> structured ops path that is faster than writing HTML. Building the publication's
> public **website**? Use **mailtea-site-design**.

## Setup (once)

If Mailtea MCP is already connected, use it directly. Call `auth.me` and
`publication.list` to check the account and available publications. A browser
sign-in connects you to ONE publication — the one the user picked on the consent
screen — so `publicationId` is optional on every tool and defaults to it. Pass
one only when the connection reaches several publications; ask which to use when
that is the case and the request is ambiguous, and never guess across accounts.

If it is not connected, tell the user to connect Mailtea in their agent client
(browser sign-in; never paste credentials in chat). They sign in to Mailtea and
choose the publication and permissions on the consent screen. The hosted MCP
server is `https://api.mailtea.app/mcp`.

### Reconnecting per client

| Client | How to reconnect |
| --- | --- |
| Codex | `codex mcp login mailtea` |
| Claude Code | `/mcp`, then Mailtea, then Authenticate — or `claude mcp login mailtea` |
| Claude.ai | Settings, Connectors, Mailtea, Reconnect |
| Cursor | Cursor Settings, MCP, Mailtea, Reconnect (Grok Bot shares it) |
| VS Code | Command Palette, **MCP: List Servers**, Mailtea, then Start or Authenticate |
| Kiro | MCP settings, Mailtea, Reconnect |
| Grok Build | `/marketplace` and choose Mailtea, or reconnect from `grok mcp` |
| ChatGPT | Settings, Apps & Connectors, Mailtea, Reconnect |

For a local stdio connection, get a personal access token (prefix `mt_pat_`, or `mt_test_` for a test key) from Mailtea Studio
(**Settings → API keys**) or `POST /v1/api-keys`. Then connect Claude Code:

```bash
claude mcp add mailtea -e MAILTEA_API_TOKEN=mt_pat_xxx -- npx -y mailtea-mcp
```

Self-hosting or local dev? add `-e MAILTEA_API_BASE_URL=http://localhost:7787`.

## Guide a first-time user

For “help me get started” or “help me send my first email”, explain the next
useful step in plain language. A publication is the workspace for their email,
audience, and website; do not assume the user knows that term.

1. If the connection is missing, direct the user to connect Mailtea in their
   agent client. Use the browser sign-in flow; never ask for passwords or
   tokens in chat.
2. Read `auth.me` and `publication.list`. If exactly one publication comes back,
   that is the connected one and every tool defaults to it — do not ask. Use the
   publication the user named; otherwise ask them to choose when more than one is
   available. If none is accessible, explain whether they need to create a
   publication in Mailtea Studio or reconnect with access to an existing one.
3. Read `sender.list` and `domain.list`, using the live tool schemas. Omit
   `publicationId` to use the connected publication; pass it only when the user
   picked one of several. Show available sender addresses without exposing credentials.
   If the domain or DKIM is unverified, explain the missing verification and link
   to https://docs.mailtea.app/docs/documentation/domains. Do not change DNS or
   create senders just because the user asked to check setup.
4. Ask only for missing sender, recipient, subject, body, or schedule details.
   Batch missing details into 

Preview of the first 4,000 characters. Read full instructions →

Referenced files: 2 — file references are metadata, not package contents.

mailtea-email-design28.9 KB

View saved version →

---
name: mailtea-email-design
description: Design a beautiful, on-brand, deliverable email, newsletter or template in Mailtea. Use when an agent is about to build or restyle a Mailtea email — covers the structured block/ops path (fastest, email-safe by construction), hand-written email-safe HTML when you own the whole document, images, brand colour, and the render/QA loop. Pairs with the mailtea-email skill (which covers sending/managing) — this one covers how the email should LOOK.
---

# Mailtea email design

`mailtea-email` teaches you how to *send*. This teaches you how to make the email
*look good* — and survive real inboxes. Email is not the web: no flexbox, no CSS
variables, no web fonts you can rely on, and Outlook renders with Word.

## Choose your path first — one of these is much faster

| | **A. Ops (structured blocks)** — prefer this | **B. Hand-written HTML** |
|---|---|---|
| You write | Declarative blocks: `{kind:"heading",…}`, `{kind:"button",…}` | Tables, inline styles, media queries |
| Email-safety | **By construction.** The reducer only emits nodes that survive an inbox; it cannot produce `display:flex` | **Yours to get right** — see the contract below |
| Editing later | Surgical: address one block by path and change it | Re-emit the whole document |
| The operator | Keeps editing it as normal blocks in the Visual Email Designer | Opens as one "Custom HTML" block |
| Use for | Newsletters, broadcasts, anything an operator will touch again | Pixel-controlled transactional designs (receipts) where YOU own the whole layout |

**Default to A.** Reach for B only when you genuinely need a complete
`<!DOCTYPE html>` document. If you are doing B, skip to *The email-safe contract*.

## A. The ops path

### The loop

```
issue.create_draft  →  issue.apply_ops (compose + set_styles + set_headers)
                    →  email.lint      →  issue.preview / posts send-test
                    →  issue.apply_ops (edit_text / edit_block / arrange) to refine
```

`issue.apply_ops` takes a batch and returns a **report**: `applied`, `skipped`
(each with a reason), and — after any structural op — a fresh **outline**. Read
the report. It is the correction signal; nothing fails silently.

### Address blocks by path, from the outline

Paths are dot-joined child indexes: `0.3`, `0.12`. **Always read the outline from
the last response (or `issue.get_editor`) before addressing anything.** Never
carry paths across turns without re-reading — the tree moves when blocks are
added or removed.

```bash
mailtea call issue.get_editor --json '{"issueId":"iss_…"}'   # → outline, styles, headers
```

### Ops

| op | what it does |
|---|---|
| `compose` | Replaces the whole body. Establishes the editor's root wrapper, so paths start `0.0`, `0.1`, … and stay put. |
| `insert_blocks` | Adds blocks at `path` + `position` (`before`/`after`/`append-into`); no path = append to the end. |
| `edit_text` | Rewrites one block's copy: `{edits:[{path,text}]}`. |
| `edit_block` | Sets one block's attributes: `{path, expectType, attrs}`. |
| `set_styles` | The email's look, as flat tokens (below). |
| `arrange` | `moves` then `deletes`. Addresses resolve against the doc as it stands when this op runs, so an earlier `insert_blocks` or `arrange` in the same batch has already shifted them. Give every delete an `expectType` (`{path, expectType}`): if any address in the op is stale, the whole op is refused and nothing is deleted. |
| `set_headers` | `subject` and `previewText` (the inbox preheader). |

### Block kinds

`heading` (text, level 1-3) · `text` · `bulletList` / `numberedList` (items) ·
`quote` · `button` (label, href, alignment, variant) · `image` (src, alt,
alignment) · `divider` · `spacer` (height) · `columns` · `section` · `footer` ·
`html` · `variable` (key, fallback).

Text fields take inline markup — `**bold**`, `*italic*`, `[label](https://url)` —
and nothing else. **A `\n` inside one text block becomes a line break**; for two
visually separat

Preview of the first 4,000 characters. Read full instructions →

Referenced files: 2 — file references are metadata, not package contents.

mailtea-site-design4.8 KB

View saved version →

---
name: mailtea-site-design
description: Build and restyle a publication's public website with Mailtea from an AI agent — pages, sections, theme, and the design brief that keeps later edits on-brand. Use when the user wants to create or change their Mailtea site (home, about, archive, a landing page), restyle it, or publish it. Pairs with mailtea-email-design, which covers the email side.
---

# Mailtea site design

Every Mailtea publication has one public website: a home page, an archive of
posts, and whatever else you add. It is edited the same way an email is — a
declarative ops batch against a draft, then a deliberate publish.

**Ops go to the DRAFT.** Real visitors keep seeing the live site until someone
calls `site.publish`. That is the safety net, so use it: build, look, fix, and
only publish when the user asks. `site.page_upsert` is the exception: it writes
live (see Pages).

## The loop

```
site.get                 → what exists: pages, theme, live vs draft
site.section_templates_list        → the section templates you can insert (use these, don't invent)
site.design_brief_set    → the durable intent, once (below)
site.apply_ops           → compose / insert / edit / arrange / theme / navbar / rename
site.publish             → make it real  ← only when the user asks
```

`site.discard_draft` throws away **every** pending draft edit across the whole
site, including the operator's own unpublished work. Destructive and not
undoable — confirm before calling it.

## Ops

`site.apply_ops` takes `{pageId, ops, baseVersion}` and reports
what applied and what was skipped, same contract as the email reducer.

Every site tool also accepts `publicationId`, but it is optional: it defaults to
the publication the connection is for. Pass it only when the connection reaches
more than one.

| op | what it does |
|---|---|
| `compose_page` | Replaces a page's whole section list. |
| `insert_section` | Adds a template section at `index`, with `copy` for its text slots. |
| `swap_section` | Replaces one section with a different template, carrying the copy across. |
| `edit_copy` | Rewrites text: `{edits:[{nodeId, …}]}`. |
| `edit_style` | One node's `style` / `layout`. |
| `arrange` | `moves` then `deletes`. |
| `set_navbar_template` | `templateId` from `site.navbar_templates_list`, optional `brand`. Replaces the navbar. |
| `rename_nodes` | `renames: [{nodeId, layerName}]`. Layer-tree labels only — nothing a visitor sees. |
| `set_theme` | Site-wide design tokens. |

Sections are addressed by **`nodeId`**, not by index path — ids are stable across
edits, so unlike the email reducer you can safely hold one across turns. Get them
from `site.page_get`.

Prefer `insert_section` with a **template** over composing raw structure: templates
are the vocabulary the theme knows how to style, so a template section inherits the
site's design and a hand-built one drifts from it.

## Pages

`site.page_upsert` needs `{kind, slug, title}` and optionally
`status`, `contentJson`, and the SEO fields (`seoTitle`, `seoDescription`,
`seoOgImageUrl`). Write the SEO fields — a page shared without them gets an ugly
unfurl, and nobody goes back to add them later.

`site.page_upsert` writes the page's **live** document, not the draft. A
published page changes for visitors at once, with no preview. If the page has a
pending draft (`hasDraft` on `site.page_get`), that draft is kept: `site.page_get`
keeps returning it, and the next `site.publish` replaces your upsert with it.
For edits that should wait for review, use `site.apply_ops`.

## The design brief

`site.design_brief_set` stores the site's durable design intent — audience, tone,
palette, the feel. Set it **before** a big design pass and every later edit,
yours or another agent's, has the same reference. Skipping it is why a site drifts
into a different look three edits in.

## Images

Same library and the same rules as email:

```bash
mailtea assets upload --publication-id pub_123 --file ./cover.jpg --width

Preview of the first 4,000 characters. Read full instructions →

Referenced files: 2 — file references are metadata, not package contents.

Release notes

First directory release. 165 MCP tools for transactional email, newsletters, contacts, automations, templates, domains and the publication website, plus three skills for email, email design and website design.

Declared in the saved package. Remote tools may change independently.

Package details

Publisher declarations from the archived package. These are separate from our research and the live service's terms.

Package license
MIT
Package author
Mailtea
Keywords
See keywords
Getting started skill
./skills/mailtea-email/SKILL.md
Commerce declaration
Does not support commerceThis does not establish whether access is free or paid.
Review scenarios
5 positive · 3 negativeScenario counts, not test results.

Declared capabilities

  • Interactive
  • Write

Package observed Nov 6, 2026.

Technical details
First seen
Nov 6, 2026 · 06:00 UTC
Last seen
Nov 6, 2026 · 18:00 UTC
Collection status
Collected

plugin_asdk_app_6accd2786b5081918e2891d8cf1e358a

Download plugin data (JSON)

Plugin details: served from cache. Prepared . Refreshed when plugin data changes or after 6 hours. Your account and Follow status are live.