Command Palette

Search for a command to run...

UnylyUnyly
Browse all

Mailery

FreeMaintained

Mailery email management CLI + MCP server + dashboard for Resend, AWS SES, and Cloudflare inbound workflows

GitHubEmbed

About

Mailery email management CLI + MCP server + dashboard for Resend, AWS SES, and Cloudflare inbound workflows

README

The public Apache-2.0 CLI, MCP server and SDK for mailery.co. This source workspace builds the single public package @hasna/mailery.

bun add @hasna/mailery

Use the mailery executable or import MaileryClient from @hasna/mailery/sdk. The client calls the hosted HTTPS API; it does not run a local mail server or access a database/provider account.

Development

Use Bun 1.3.14 and Node 22.14 or newer. Install the frozen workspace, then run all client checks:

bun install --frozen-lockfile
bun run publish:check

The checks cover source boundaries, types, CLI/MCP/SDK behavior, public API contract, real Node imports, clean packed-package installs and the positive tarball allowlist. The internal SDK workspace is bundled into @hasna/mailery and remains private to npm.

Release

Only .github/workflows/publish-npm.yml publishes. It runs on GitHub-hosted runners in the protected npm-publish environment and uses npm provenance. Configure the npm trusted publisher for hasna/mailery, workflow publish-npm.yml, environment npm-publish. Protect the main branch and require release review before enabling publication. Before dispatching the workflow into npm-publish, the publisher must verify a GO recorded in project-linked Hasna Files from a distinct agent's review of the exact candidate in a fresh context in the publisher's native harness. The GO must bind the commit, tree, package, version, registry, access, distribution tag, workflow revision, and environment. The workflow refuses any other repository or branch.

For an initial package publication that needs bootstrap authentication, the optional protected environment secret HASNA_NPM_BOOTSTRAP_TOKEN supplies the approved npm organization credential. Remove it after the trusted publisher is established. Never commit credentials or .npmrc authentication settings.

A successful build or packed-file test does not establish publication. Verify the exact registry version's provenance and perform clean executable and SDK installs after publishing.

0.2.0

Checkout retries can retain a caller-owned purchase key through SDK createCheckout({ idempotencyKey }) and CLI subscribe --idempotency-key. Keep that key after a timeout or uncertain outcome; a new key starts a deliberate new purchase. Use subscribe --resume to check entitlement without creating another Checkout session. New paid purchases require a declared billing or residence country and the exact policy version returned by billing countries / getCheckoutCountryPolicy(). Present those restrictions before collecting the declaration. Preserve all original declaration fields on retries. Omit them only to replay an exact pre-country purchase with its original key. Free signup requires explicit acceptance of the current Terms version, and remains available without a country declaration.

Show the exact Terms link and version to the person. Run mailery terms --accept <exact-version> or MCP accept_terms only after an explicit yes from the person or an agent they authorized. Never select a default/latest version. The server refuses a version that is not currently published. CLI signup JSON includes data.terms on success and error.terms on any failure after successful discovery. Object-valued error details also retain details.terms; unrelated detail fields and non-object details are preserved. MCP signup includes terms after discovery. A version-race error (terms_version_changed, HTTP 409) supplies newer authoritative Terms: both clients prefer that server version and resolve its URL against the configured API base, including the copy in server error details. Other later errors retain the successful preflight URL and exact version. A failed Terms preflight adds no discovery fields. Neither client fetches Terms again after signup. mailery terms --json and MCP get_terms expose url and version directly in their discovery result. SDK method response shapes are unchanged.

from github.com/hasna/mailery

Install Mailery in Claude Desktop, Claude Code & Cursor

Recommended · one command, every IDE
unyly install mailery

Installs into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.

First time? Get the CLI: curl -fsSL https://unyly.org/install | sh

Or configure manually

Run in your terminal:

claude mcp add mailery --env EMAILS_INBOUND_S3_BUCKET="" --env HASNA_EMAILS_DATABASE_URL="" --env HASNA_EMAILS_STORAGE_MODE="" --env MAILERY_MODE="" --env MCP_STDIO="" -- npx -y @hasna/mailery

Step-by-step: how to install Mailery

FAQ

Is Mailery MCP free?

Yes, Mailery MCP is free — one-click install via Unyly at no cost.

Does Mailery need an API key?

Yes, it requires environment variables: EMAILS_INBOUND_S3_BUCKET, HASNA_EMAILS_DATABASE_URL, HASNA_EMAILS_STORAGE_MODE, MAILERY_MODE, MCP_STDIO. Unyly injects them into the config during install.

Is Mailery hosted or self-hosted?

Self-hosted: the server runs locally on your machine via the install command above.

How do I install Mailery in Claude Desktop, Claude Code or Cursor?

Open Mailery on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Changes

Versions and requested access over time.

  • New version published
  • New version published
  • New version published
  • New version published
  • New version published

Related MCPs

Compare Mailery with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All communication MCPs