Agent skill

Mailgun Setup

by vellum-ai in vellum-ai/vellum-assistant

Set up and send emails via a user-provided Mailgun account (BYO email provider)

MITAuto-check passedBackend & APIs

Install Mailgun Setup

skills CLI
$ npx skills add vellum-ai/vellum-assistant --skill mailgun-setup -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install vellum-ai/vellum-assistant mailgun-setup --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/vellum-ai/vellum-assistant.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/mailgun-setup .claude/skills/mailgun-setup && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
mailgun-setup
GitHub stars
1.4k
Token cost
~1.6k tokens
SKILL.md length
677 words
Files
5 (incl. scripts, assets)
Skills in repo
108
Repo updated
First seen
Licence
MIT

At a glance

Set up and send emails via a user-provided Mailgun account (BYO email provider)

  • Works in 6 steps: Check Existing Configuration → Store the API Key → Detect the Domain → …
  • Backend & APIs work in your project
  • SKILL.md covers Overview, Setup, Sending Email and Important Notes
  • Runs TypeScript scripts from its folder; calls curl and bun; reaches api.mailgun.net and api.eu.mailgun.net; needs MAILGUN_API_KEY

What it does

Mailgun Setup is an agent skill from vellum-ai/vellum-assistant. Set up and send emails via a user-provided Mailgun account (BYO email provider)

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts and assets (for example `scripts/check-config.ts`, `scripts/setup-webhook.ts` and `scripts/store-api-key.ts`). Compatibility notes: Designed for Vellum personal assistants

It sits in Backend & APIs. The repository describes itself as: An AI Assistant that’s easy to setup, does your work 24/7, knows your preferences and gets better over time. The licence is MIT.

When your agent uses it

  • Backend & APIs work in your project

Example prompts

  • “/mailgun-setup”

Requirements

  • Node.js
  • A credential in MAILGUN_API_KEY
  • Compatibility (from SKILL.md): Designed for Vellum personal assistants

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Check Existing Configuration
  2. Store the API Key
  3. Detect the Domain
  4. Verify the Connection
  5. Webhook Setup (for receiving email)
  6. Report Success

What it can do on your machine

Read from SKILL.md and the folder at commit 33cc983. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 3 files in scripts/ (TypeScript), which the agent can run.

    Shell commands in SKILL.md call:

    • curl
    • bun

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.mailgun.net
    • api.eu.mailgun.net

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • MAILGUN_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Designed for Vellum personal assistants

    From compatibility in the SKILL.md frontmatter.

Context cost

Mailgun Setup loads about 1.6k tokens when it runs. Until then it costs about 23 tokens; SKILL.md has 677 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~23
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from vellum-ai/vellum-assistant at commit 33cc983, republished under its MIT licence (© vellum-ai). 677 words, ~1,620 tokens.

Download SKILL.mdSave it as .claude/skills/mailgun-setup/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
mailgun-setup
description
Set up and send emails via a user-provided Mailgun account (BYO email provider)
compatibility
Designed for Vellum personal assistants
metadata.icon
assets/icon.svg
metadata.emoji
📬

Overview

Send emails through the user's own Mailgun account. The user provides their Mailgun API key and domain, and you send via their infrastructure.

Setup

Step 0: Check Existing Configuration

Before starting, check whether Mailgun is already configured:

bash
bun skills/mailgun-setup/scripts/check-config.ts

The script outputs JSON: { "configured": boolean, "hasApiKey": boolean, "hasWebhookKey": boolean, "details": string }.

  • If configured is true — Mailgun is already set up. Offer to verify the connection or reconfigure.
  • If configured is false — continue to Step 1.
Step 1: Store the API Key

Run the store script to securely collect the API key:

bash
bun skills/mailgun-setup/scripts/store-api-key.ts

The script opens a secure credential prompt, stores the key, and exits. If it exits 0, the key is stored. Exit code 130 means the user cancelled the prompt — nothing was stored; that's a valid choice, not an error, so ask whether they'd like to try again rather than treating it as a failure. Any other non-zero exit is a real failure. Never ask for the key in chat.

Note: Mailgun uses HTTP Basic Auth with username api and the API key as the password. The credential proxy cannot construct Basic Auth headers automatically. Instead, use curl -u "api:$KEY" in bash commands — retrieve the key from the vault at runtime. See the sending examples below.

Step 2: Detect the Domain

After storing the API key, automatically detect the user's domain — don't ask them for it. Retrieve the API key from the vault and call the Mailgun Domains API:

bash
curl -s --user "api:$MAILGUN_API_KEY" \
  https://api.mailgun.net/v4/domains?state=active

The response contains an items array of domain objects with name and state fields. Pick the first domain with "state": "active". If no active domains are found, try the EU endpoint (https://api.eu.mailgun.net/v4/domains?state=active). If still none, tell the user they need to verify a domain in their Mailgun dashboard first.

Use hi@<domain> as the default sender address. Remember the domain and region (US/EU) for future sends.

Step 3: Verify the Connection

Confirm the API key works by checking the domain response returned in Step 2. A successful response (HTTP 200) with domain data confirms the connection.

Step 4: Webhook Setup (for receiving email)

If the user also wants to receive emails via Mailgun, run the webhook setup script:

bash
bun skills/mailgun-setup/scripts/setup-webhook.ts --domain "<verified domain>" [--region eu]

This script:

  1. Registers a callback URL via the webhooks system
  2. Creates an inbound route in Mailgun via their API
  3. Prompts the user for their webhook signing key (found in the Mailgun dashboard: Settings > API Security > HTTP Webhook Signing Key)

If the script fails because no public base URL is configured (self-hosted only), load the public-ingress skill to walk the user through setting one up, then retry.

Show full SKILL.md (253 more words)Show less
Step 5: Report Success

Summarize with the completed checklist:

"Setup complete! ✅ API key configured ✅ Domain detected: <domain> (region: US/EU) ✅ Connection verified {webhook_line}

Default sender: hi@<domain>"

For {webhook_line}:

  • If webhook was set up: ✅ Inbound route and webhook signing key configured
  • If skipped: ⬜ Webhook — run setup again to enable inbound email

Sending Email

Use bash with curl to call the Mailgun API. Pass the API key via -u for Basic Auth:

bash
curl -s --user "api:$MAILGUN_API_KEY" \
  https://api.mailgun.net/v3/DOMAIN/messages \
  -F from="Name <sender@example.com>" \
  -F to="recipient@example.com" \
  -F subject="Hello" \
  -F text="Plain text body" \
  -F html="<p>HTML body</p>"

Replace DOMAIN with the user's Mailgun sending domain.

API Parameters
ParameterTypeRequiredDescription
fromstring✅Sender address ("Name <email>" format)
tostring✅Recipient(s), comma-separated for multiple
subjectstring✅Email subject
textstringPlain text body
htmlstringHTML body
ccstringCC recipients, comma-separated
bccstringBCC recipients, comma-separated
h:Reply-TostringReply-to address
h:In-Reply-TostringMessage-ID of parent (for threading)
h:ReferencesstringSpace-separated chain of ancestor Message-IDs
Threading (replies)

To reply in a thread, include custom headers:

bash
curl -s --user "api:$MAILGUN_API_KEY" \
  https://api.mailgun.net/v3/DOMAIN/messages \
  -F from="bot@example.com" \
  -F to="user@example.com" \
  -F subject="Re: Original subject" \
  -F text="Reply body" \
  -F "h:In-Reply-To=<original-message-id>" \
  -F "h:References=<original-message-id>"
Response

Success returns { "id": "<message-id>", "message": "Queued. Thank you." } with HTTP 200.

Errors return { "message": "error description" } with 4xx/5xx status.

Regions

Mailgun has US and EU regions:

  • US (default): https://api.mailgun.net/v3/DOMAIN/messages
  • EU: https://api.eu.mailgun.net/v3/DOMAIN/messages

Ask the user which region their account uses if sends fail with 401.

Important Notes

  • The from address must be from the user's verified Mailgun domain.
  • Default sender address is hi@<domain> — use this unless the user specifies otherwise.
  • Always confirm with the user before sending — never send without explicit permission.
  • Use text for plain text, html for rich formatting. Provide both when possible.
  • Mailgun's free tier allows 100 emails/day. Paid plans have higher limits.

© vellum-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (scripts, assets) in skills/mailgun-setup of vellum-ai/vellum-assistant.

  • SKILL.md
  • assets/icon.svg
  • scripts/check-config.ts
  • scripts/setup-webhook.ts
  • scripts/store-api-key.ts

Open the folder on GitHubat commit 33cc983

Compare with similar skills

Mailgun Setup next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Mailgun Setup compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Mailgun Setup this skillvellum-ai/vellum-assistant1.4k—~1.6kAutomated safety check: PassMIT
Configuring Horizoncoollabsio/coolify63k4 repos~898Automated safety check: PassMIT
Nestjs Best Practicesrolling-scopes/rsschool-app10k6 repos~1.2kAutomated safety check: PassMIT
Sub2API AdminWei-Shaw/sub2api44k1 repos~717Automated safety check: PassLGPL-3.0
Firecrawl Build Onboardingfirecrawl/firecrawl190k1 repos~1.4kAutomated safety check: NotesISC
Obsidian BasesAtmosphere/atmosphere3.8k22 repos~3.2kAutomated safety check: PassApache-2.0

Similar skills

  • Configuring Horizon

    coollabsio/coolify

    A skill your agent uses whenever the user mentions Horizon by name in a Laravel context.

    63k GitHub starsUsed in 4 repos~898 tokens
    Backend & APIsAuto-check passed
  • Nestjs Best Practices

    rolling-scopes/rsschool-app

    NestJS best practices and architecture patterns for building production-ready applications.

    10k GitHub starsUsed in 6 repos~1.2k tokens
    Backend & APIsAuto-check passed
  • Sub2API Admin

    Wei-Shaw/sub2api

    Manages a Sub2API deployment from the command line: accounts, redeem and invitation codes, groups, proxies, imports, exports and raw admin API calls.

    44k GitHub starsUsed in 1 repo~717 tokens
    Backend & APIsAuto-check passed
  • Firecrawl Build Onboarding

    firecrawl/firecrawl

    Gets Firecrawl working in a project: signs you in through the browser, saves FIRECRAWL_API_KEY to .env and picks the first SDK or REST path.

    190k GitHub starsUsed in 1 repo~1.4k tokens
    Backend & APIsAuto-check: notes
  • Obsidian Bases

    Atmosphere/atmosphere

    Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries.

    3.8k GitHub starsUsed in 22 repos~3.2k tokens
    Backend & APIsAuto-check passed
  • Fortify Development

    coollabsio/coolify

    ACTIVATE when the user works on authentication in Laravel. An agent skill from coollabsio/coolify.

    63k GitHub starsUsed in 4 repos~1.9k tokens
    Backend & APIsAuto-check passed

More from vellum-ai/vellum-assistant

All 108 skills in this repo
  • Vellum GitHub App Setup

    vellum-ai/vellum-assistant

    Create and configure a GitHub App so the assistant can push commits, open PRs, and comment under its own bot identity.

    1.4k GitHub stars~3.1k tokensUpdated yesterday
    Auto-check passed
  • Discord App Setup

    vellum-ai/vellum-assistant

    Connect a Discord bot to the assistant via the Discord Gateway with guided application creation and intent configuration

    1.4k GitHub stars~4.2k tokensUpdated yesterday
    Auto-check passed
  • Sentry App Setup

    vellum-ai/vellum-assistant

    Create and configure a Sentry internal integration so the assistant can manage issues, alerts, and releases under its own identity

    1.4k GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Memory Corpus Ingest

    vellum-ai/vellum-assistant

    Ingest a large dataset into memory as a skimmed map. An agent skill from vellum-ai/vellum-assistant.

    1.4k GitHub stars~3k tokensUpdated yesterday
    Auto-check: notes
  • Plugin Builder

    vellum-ai/vellum-assistant

    A skill your agent uses when the user wants to build, scaffold, ship, or edit a Vellum plugin that bundles multiple surfaces (hooks, tools, skills, and more) into one installable package.

    1.4k GitHub stars~3.1k tokensUpdated yesterday
    Auto-check passed
  • Slack App Setup

    vellum-ai/vellum-assistant

    Connect a Slack app to the Vellum Assistant via Socket Mode.

    1.4k GitHub stars~2.5k tokensUpdated yesterday
    Auto-check: warnings

Categories

Questions about Mailgun Setup

What does Mailgun Setup do?

Set up and send emails via a user-provided Mailgun account (BYO email provider). Mailgun Setup is an agent skill from vellum-ai/vellum-assistant.

When should I use Mailgun Setup?

Mailgun Setup fits situations like: backend & APIs work in your project.

How do I install Mailgun Setup in Claude Code?

Run `npx skills add vellum-ai/vellum-assistant --skill mailgun-setup -a claude-code`. Or copy the skill folder (skills/mailgun-setup in vellum-ai/vellum-assistant) into .claude/skills/mailgun-setup in your project. Claude Code loads it when a task matches its description.

How do I install Mailgun Setup in Codex?

Run `npx skills add vellum-ai/vellum-assistant --skill mailgun-setup -a codex`. Or copy the skill folder (skills/mailgun-setup in vellum-ai/vellum-assistant) into .agents/skills/mailgun-setup in your project. Codex loads it when a task matches its description.

Can I use Mailgun Setup in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add vellum-ai/vellum-assistant --skill mailgun-setup -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mailgun-setup, .gemini/skills/mailgun-setup, .github/skills/mailgun-setup and .opencode/skills/mailgun-setup in your project.

What does Mailgun Setup need to run?

Going by SKILL.md and its folder, Mailgun Setup needs TypeScript for the scripts in its folder, the command-line tools its instructions call (curl and bun) and credentials named MAILGUN_API_KEY. Our summary lists: Node.js; A credential in MAILGUN_API_KEY. Compatibility (from SKILL.md): Designed for Vellum personal assistants.

Does Mailgun Setup access the network?

SKILL.md names 2 domains. In commands or code: api.mailgun.net and api.eu.mailgun.net; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Mailgun Setup safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Mailgun Setup use?

Mailgun Setup is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Mailgun Setup use?

About 1.6k tokens (SKILL.md is roughly 6.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Mailgun Setup?

Skills that share tags, products or a category with Mailgun Setup: Configuring Horizon (coollabsio/coolify, 63k stars), Nestjs Best Practices (rolling-scopes/rsschool-app, 10k stars), Sub2API Admin (Wei-Shaw/sub2api, 44k stars) and Firecrawl Build Onboarding (firecrawl/firecrawl, 190k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Mailgun Setup?

vellum-ai (a GitHub organization) maintains it in vellum-ai/vellum-assistant, which has 1,408 GitHub stars. The repository holds 108 skills in this directory. The repository was last updated on October 9, 2026.

Source: vellum-ai/vellum-assistant on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.