Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Create and send invitations and letters in a sealed envelope, one personal link per guest.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://magic-envelope.com/api/mcp在终端中运行这条命令
claude mcp add --transport http invitations https://magic-envelope.com/api/mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"invitations": {
"url": "https://magic-envelope.com/api/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"invitations": {
"type": "http",
"url": "https://magic-envelope.com/api/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://magic-envelope.com/api/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
我们还没有读取这个服务器的工具列表;我们会轮流检查各个端点。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过域名 magic-envelope.com 验证(注册中心会核实域名所有权)
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
尚未检查;我们会轮流检查各个端点
尚未检查;我们会轮流检查各个端点
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(1.0.0)于31天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Symantec Cloud DLP AIops
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Governed Symantec Cloud DLP — 14 MCP tools, read-only with audit.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
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.
pnpm install
pnpm dev # http://localhost:3000
Locally, without any keys, published cards and uploaded images are saved under .data/. Only AI images need a key.
Everything the app does is available without a browser:
https://magic-envelope.com/api/mcp (tools: get_catalog, create_letter, get_letter, update_letter)POST /api/v1/letters, GET|PATCH /api/v1/letters/:id (Authorization: Bearer ), GET /api/v1/catalog/api/v1/openapi.json, /api/v1/schema, /llms.txt, docs at /developersThe REST and MCP adapters share one service layer (src/lib/api.server.ts) and validate with the same Zod schemas as the editor.
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.
pnpm dev:lan # dev server reachable from your phone
CAP_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.
| Function | Native | Browser |
|---|---|---|
share() | system share sheet | Web Share, falls back to copying the link |
haptic() | Taptic/vibration | navigator.vibrate |
copy() | native clipboard | Clipboard API |
pickPhoto() | camera / photo library | file 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 links | appUrlOpen opens /c/… inside the app | – |
| Variable | Purpose |
|---|---|
AI_GATEWAY_API_KEY | AI image generation via Vercel AI Gateway (on Vercel, OIDC works without it) |
BLOB_READ_WRITE_TOKEN | Vercel Blob store for published cards (private) and images (public) |
NEXT_PUBLIC_SITE_URL | Canonical URL, e.g. https://magic-envelope.com (QR codes, OG images) |
IMAGE_MODEL | Optional override, default bfl/flux-2-klein-4b (cheap and fast) |
src/lib/model.ts Zod schemas: Card, 15 Block types, kinds, themes, languages
src/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 overrides src/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 + renderer src/lib/craft.ts seal shapes/marks & envelope geometry/palettes (shared by app and OG image) src/lib/color.ts opaque shading helpers src/lib/themes.ts 6 themes (parchment, midnight, rose, forest, sky, ink) src/lib/actions.ts calendar (.ics / Google), maps, RSVP deep links, music embeds src/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 buttons src/components/card/blocks.tsx renderer per block type src/components/craft.tsx wax seal, envelope art, envelope opener src/components/editor/ tap-a-block editor, "+" palette, theme, share sheet src/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 fallbacks src/lib/mail.ts envelope slots (fixed block types), stamps, per-style envelope defaults src/components/editor/envelope-editor.tsx envelope canvas + slot/seal editors src/components/export-stage.tsx flat PNG/ZIP rendering (fonts embedded per style) src/components/editor/guests-panel.tsx, send-panel.tsx
lib/model.ts and include it in the Block union (add a migration there if you change an existing shape).lib/blocks.ts, and its label in lib/ui.ts.isEmpty rule in components/card/blocks.tsx.components/editor/block-editor.tsx, using Field with the right field kind.lib/i18n.ts.TypeScript's exhaustive switches flag every step you missed.
{name} in any text addresses each guest/c/ ?g= ) — only *their* name is ever sent to their browsernoindex; each card can be re-published from the device that created it