Magic Envelope

com.magic-envelopev1.0.0Updated Oct 6, 2026

Create and send invitations and letters in a sealed envelope, one personal link per guest.

Overview

AI-generated overview

Lets an assistant create, read, and update personalized invitation letters and sealed-envelope links for guests.

What it does
Magic Envelope exposes tools to browse a catalog of templates and to create, fetch, and update invitation letters. Letters are built from typed blocks such as title, text, image, date, place, countdown, RSVP, QR, schedule, gifts, and music, and can be styled with themes, fonts, and wax seals. Each guest can receive a personal link where only their own name is shown, and letters can also be exported as flat images.
When to use it
Use it when you want an assistant to draft or manage invitations and letters for events like birthdays, weddings, parties, or dinners, including per-guest personalization and shareable links. It is not a general document editor; content is assembled from predefined typed blocks.
Requirements
A remote MCP endpoint at the provider's hosted service; no local runtime or package is needed. The manifest declares no authentication, environment variables, or headers. The README mentions optional server-side variables for self-hosting, including AI_GATEWAY_API_KEY for AI images and BLOB_READ_WRITE_TOKEN for storage.
Before you install
The REST interface uses an edit key sent as an Authorization Bearer header to modify a letter, so treat that key as a secret. Creating or updating letters writes data to the provider's hosted service, and published links are publicly reachable by anyone who has the URL. AI image generation may require the AI_GATEWAY_API_KEY and may incur provider costs.

Installation

In SourceWeft

  1. Open Magic Envelope in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "invitations": {
      "type": "http",
      "url": "https://magic-envelope.com/api/mcp"
    }
  }
}

README

✉ Magic Envelope

Free invitations and letters: birthdays, weddings, parties, dinners, letters… Pick a ready-made template or build one from typed blocks. Send a link and the guest opens a sealed envelope.

Not an editor. Everything is typed and modular.

Run

bash
pnpm installpnpm dev          # http://localhost:3000

Locally, without any keys, published cards and uploaded images are saved under .data/. Only AI images need a key.

For agents

Everything the app does is available without a browser:

  • MCP — https://magic-envelope.com/api/mcp (tools: get_catalog, create_letter, get_letter, update_letter)
  • REST — POST /api/v1/letters, GET|PATCH /api/v1/letters/:id (Authorization: Bearer <editKey>), GET /api/v1/catalog
  • Specs — /api/v1/openapi.json, /api/v1/schema, /llms.txt, docs at /developers

The REST and MCP adapters share one service layer (src/lib/api.server.ts) and validate with the same Zod schemas as the editor.

Native apps (Capacitor 8)

The iOS/Android apps are thin shells around the hosted web app (it needs API routes, so no static export). capacitor.config.ts points the WebView at CAP_SERVER_URL (default https://magic-envelope.com); native-shell/ is only the offline page.

bash
pnpm dev:lan                                   # dev server reachable from your phoneCAP_SERVER_URL=http://192.168.1.20:3000 pnpm cap:android   # or cap:ios (opens Android Studio / Xcode)

src/lib/native.ts is the single bridge: each function uses the Capacitor plugin in the app and the web API in the browser.

FunctionNativeBrowser
share()system share sheetWeb Share, falls back to copying the link
haptic()Taptic/vibrationnavigator.vibrate
copy()native clipboardClipboard API
pickPhoto()camera / photo libraryfile input (capture opens the camera on mobile)
saveFile()write to cache, then share (Files, Calendar…)download
onBack()Android back button closes sheets / wizard steps–
deep linksappUrlOpen opens /c/… inside the app–

Environment

VariablePurpose
AI_GATEWAY_API_KEYAI image generation via Vercel AI Gateway (on Vercel, OIDC works without it)
BLOB_READ_WRITE_TOKENVercel Blob store for published cards (private) and images (public)
NEXT_PUBLIC_SITE_URLCanonical URL, e.g. https://magic-envelope.com (QR codes, OG images)
IMAGE_MODELOptional override, default bfl/flux-2-klein-4b (cheap and fast)

Architecture

src/lib/model.ts        Zod schemas: Card, 15 Block types, kinds, themes, languagessrc/lib/blocks.ts       block registry (icons, palette, factories) + 24 templates (8 kinds × 3)src/lib/ui.ts           app UI copy (always English)src/lib/styles.ts       letter styles = design-system tokens (fonts, colors, background, frame, control shape, envelope) + per-letter overridessrc/lib/i18n.ts         letter languages es · en · fr · pt · it · de (guest-facing copy + presets)src/lib/fields.ts       field kinds (phone, email, url, date…): one validator for editor + renderersrc/lib/craft.ts        seal shapes/marks & envelope geometry/palettes (shared by app and OG image)src/lib/color.ts        opaque shading helperssrc/lib/themes.ts       6 themes (parchment, midnight, rose, forest, sky, ink)src/lib/actions.ts      calendar (.ics / Google), maps, RSVP deep links, music embedssrc/lib/drafts.ts       drafts in localStorage (no account needed)src/lib/store.server.ts Vercel Blob storage, or .data/ in local dev
src/components/sketch.tsx         Excalidraw-style rough.js frames and buttonssrc/components/card/blocks.tsx    renderer per block typesrc/components/craft.tsx          wax seal, envelope art, envelope openersrc/components/editor/            tap-a-block editor, "+" palette, theme, share sheetsrc/components/wizard.tsx         language → kind → template
/                 home (drafts)/new              wizard (?kind=wedding jumps to templates)/edit/[id]        editor (local draft)/c/[id]           public envelope (+ OG image for WhatsApp/iMessage previews)/e/[id]#key       "edit on another device": imports the card into local drafts/api/publish      save/overwrite a card (id + secret edit key)/api/upload       image upload (resized client-side)/api/imagine      AI image → stored → URL/api/card/[id]    card JSON for holders of the edit key
src/lib/personalize.ts            {name} token: resolution and fallbackssrc/lib/mail.ts                   envelope slots (fixed block types), stamps, per-style envelope defaultssrc/components/editor/envelope-editor.tsx  envelope canvas + slot/seal editorssrc/components/export-stage.tsx   flat PNG/ZIP rendering (fonts embedded per style)src/components/editor/guests-panel.tsx, send-panel.tsx

Adding a block type

  1. Add a schema in lib/model.ts and include it in the Block union (add a migration there if you change an existing shape).
  2. Add an icon, a palette entry and a factory in lib/blocks.ts, and its label in lib/ui.ts.
  3. Add a renderer case and an isEmpty rule in components/card/blocks.tsx.
  4. Add an editor case in components/editor/block-editor.tsx, using Field with the right field kind.
  5. Add any guest-facing words to lib/i18n.ts.

TypeScript's exhaustive switches flag every step you missed.

Features

  • Wizard: letter language → style (15 styles: Classic, Elegant, Modern, Playful, Retro) → blank letter (default) or an occasion preset
  • Style panel in the editor: switch style, customize accent/paper/text colors and title/text fonts, seal (symbol, initials or none), text written on the envelope (supports the guest name)
  • Preview page mirrors the editor's Link/Image choice and "preview as" guest, and can send directly
  • App UI is English; each letter has its own language (changeable from the Style panel)
  • 15 blocks: title, text, image, date, place + map, countdown, RSVP (WhatsApp/SMS/email), QR, link, schedule, dress code moodboard (colors, emojis, words, pictures), gifts (IBAN copy / registry), music (Spotify/YouTube/SoundCloud), signature, divider
  • AI images in 4 styles (storybook, medieval, sketch, photo) and photo upload
  • Six themes, custom wax-seal glyph, an envelope addressed "To: …"
  • Guest list: add, paste a list ("Name, phone/email") or pick from contacts; {name} in any text addresses each guest
    • every guest gets their own link (/c/<id>?g=<guest>) — only their name is ever sent to their browser
    • send per guest via their channel (WhatsApp / email / share sheet), track who was sent, copy all links, CSV
    • RSVP replies carry the guest's name; the envelope is addressed to them
  • Envelope (link letters): fixed slots holding real blocks — Title (recipient), Text (sender, note, under the seal) and Stamp (postage, 14 perforated stamps) — edited with the same editor, placeholders and rules as the letter; seal in 4 shapes (scalloped, round, flower, octagon) with a vector mark (12 icons, 1–3 initials, a couple "A ♥ J", plain or none), always legible on any wax colour. Styles ship their own envelope (trim + stamp). Guests receive the front, turn it over with a tap, open it with a second; the real letter slides out.
  • Preview shows exactly what a guest receives: the envelope (replayable) for links, the actual exported PNG for images.
  • Two outputs from one letter: the interactive link, or flat images (PNG per guest, ZIP for all, print/PDF). Blocks with actions render flat automatically in images, and each can turn its buttons off for the link too.
  • Share: link, native share sheet, WhatsApp, downloadable QR, print/PDF
  • Guests get "add to calendar", directions, a live countdown and one-tap RSVP
  • Installable PWA (iOS/Android home screen), dark-mode chrome, reduced-motion support
  • Published links are noindex; each card can be re-published from the device that created it

Source: README.md at commit d04167a

Tools

0
Tool metadata has not been indexed yet.

Version history

1
  1. v1.0.0LatestOct 6, 2026