lu

io.github.adelaidasofia由 GitHub 账号 adelaidasofia 发布v0.1.0更新于 Oct 24, 2026

lu.ma events MCP server with draft+confirm safety, audit logging, and prompt-injection scrubbing.…

概览

AI 生成的概览

通过助手管理 lu.ma 活动:创建和更新活动、设置票价、发放优惠码、查看报名名单并向参与者发送邮件。

可以做什么
封装 Luma 官方公开 API,让助手可以创建和更新活动(名称、日期、时区、容量、会议链接、可见性、封面图),设置票种与价格,并发放按日历或按活动限定的优惠码,支持百分比或固定金额折扣及兑换上限。读取类工具可获取单个活动、分页列出日历活动、按状态列出嘉宾/报名,以及列出优惠码。发送给参与者的邮件为 markdown 格式。所有写入都经过草稿工具(返回 draft_id)与对应的确认工具,未明确批准前不会提交到 Luma;草稿一小时后过期且只能确认一次。
适用场景
适合在 Luma 上运营工作坊、付费活动、多场次项目或定期聚会的组织者,希望助手集中起草活动页面、定价、优惠码、嘉宾名单和参与者邮件。当活动日历在 Luma 上,且操作者希望在发布或发送前保留人工复核步骤时,值得添加。
运行要求
以本地进程(stdio)在用户机器上运行,仅支持桌面端。所使用的日历需要 Luma Plus 订阅,因为公开 API 受 Plus 限制;还需要在 lu.ma 设置中生成 API 密钥,并通过环境变量 LUMA_API_KEY 提供。需要访问 Luma 公开 API 的网络连接;该 API 限制为每个日历每分钟 200 次请求,客户端遇到 429 不会自动重试。
安装前请注意
该服务器持有 Luma API 密钥(LUMA_API_KEY),具备对活动、票种、优惠码和参与者邮件的写入权限,应视为敏感信息。写入由草稿加确认机制把关,但确认后会真实发布活动、创建优惠码并向参与者发送邮件。审计日志写入本地路径,并对密钥/令牌做脱敏。README 说明该插件首次加载时会向第三方域名发送一次匿名安装信号,可通过 MYCELIUM_NO_PING=1 关闭。

安装

在 SourceWeft 中

  1. 打开 控制台中的 lu,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

luma-mcp

[License] [GitHub stars] [Last commit] [Open issues] [PyPI version] [PyPI downloads] [Built by Mycelium AI]

lu.ma events MCP server. Create events, set ticket prices, issue coupon codes, list RSVPs, and email attendees. All writes go through draft+confirm so nothing posts to Luma until you explicitly approve. Built on the official Luma public API.

What it does

  • Create + update lu.ma events (name, date, timezone, capacity, meeting URL, visibility, cover image)
  • Set ticket types and pricing
  • Issue coupon codes (calendar-scoped or event-scoped, percentage or fixed-cents discounts, redemption caps)
  • List event guests / RSVPs
  • Send markdown emails to attendees (pre-work, day-of, follow-up)
  • Audit log of every API call (JSONL with key/token redaction)
  • Prompt-injection scrubber on user-supplied free-text fields

Tools (v0.1.0)

Reads (call API directly):

  • luma_health — auth check + draft store size
  • luma_get_event — fetch one event by ID
  • luma_list_events — paginated calendar listing
  • luma_list_event_guests — RSVPs filtered by status
  • luma_list_coupons — calendar or event-scoped

Writes (draft+confirm pairs):

  • luma_create_event_draft / luma_create_event_confirm
  • luma_update_event_draft / luma_update_event_confirm
  • luma_create_ticket_type_draft / luma_create_ticket_type_confirm
  • luma_create_coupon_draft / luma_create_coupon_confirm
  • luma_send_event_email_draft / luma_send_event_email_confirm

Plus:

  • luma_cancel_draft — cancel an unconfirmed draft (idempotent)

14 tools total.

Architecture

luma-mcp/├── pyproject.toml├── README.md├── SETUP.md├── LICENSE├── .env.example├── luma_mcp/│   ├── __init__.py│   ├── server.py             FastMCP entry point + .env loader│   ├── client.py             HTTP wrapper around api.lu.ma/public/v1│   ├── drafts.py             Thread-safe draft store with TTL│   ├── audit.py              JSONL audit log with redaction│   ├── scrubber.py           Prompt-injection neutralizer│   ├── _shared/              Day-1 shared utilities│   │   ├── normalize.py      Timezone alias + datetime helpers│   │   └── types.py          Permissive typed shapes for API responses│   └── tools/│       ├── health.py         luma_health, luma_cancel_draft│       ├── events.py         create / update / get / list events│       ├── tickets.py        create ticket types│       ├── coupons.py        create / list coupons│       ├── guests.py         list event guests│       └── emails.py         send email to attendees└── tests/integration/    └── test_full_pipeline.py 10-step bare-runnable verification

Safety patterns

  1. Draft + confirm on every write. The draft tool returns a draft_id; nothing hits Luma until the matching confirm tool is called. Drafts expire after 1 hour and can only be confirmed once.
  2. Audit log. Every API call is logged JSONL with ts, tool, action, args (redacted), status, latency_ms. Path: ~/.claude/luma-mcp/audit.log.
  3. Token redaction. Strings matching long-key heuristics, or values under keys like api_key, token, cookie, secret, are masked before logging.
  4. Prompt-injection scrubber. User-supplied free-text fields (event name, description, email subject, email body) are passed through unicodedata.normalize("NFKC"), stripped of zero-width characters, and have role-spoof prefixes / fake fences wrapped in backticks (preserving operator visibility, neutralizing model effect on downstream reads).
  5. Zero LLM in the tool path. Every routing decision is rule-based.

Use cases

  • Workshops + paid events — set sticker price, issue community-specific 100%-off coupons, pull guest list, blast pre-work email.
  • Multi-event programs — one cohorte announcement, sub-events on Luma, pull RSVPs across sessions.
  • Recurring meetups — duplicate event template via update_event_draft, change date, ship.

Install

Open Claude Code, paste:

/plugin marketplace add adelaidasofia/luma-mcp/plugin install luma-mcp@luma-mcp

Two prerequisites for the server to authenticate:

  1. Luma Plus subscription on the calendar you'll use (the public API is gated behind Plus).
  2. API key generated from https://lu.ma/settings/api, dropped into ~/.claude/luma-mcp/.env as LUMA_API_KEY=....

After both steps, restart Claude Code. Tools appear under mcp__luma__*.

Legacy install

See SETUP.md for the manual .mcp.json registration path. The plugin install above replaces it.

Verification

bash
cd ~/.claude/luma-mcp && python3 tests/integration/test_full_pipeline.py# expected: PASSED — luma-mcp v0.1.0 integration test (10 steps green)

Then in a Claude Code session: mcp__luma__luma_health() → {ok: true, user: {...}}.

Rate limit

Luma's public API caps at 200 requests / minute / calendar. The client does not auto-retry on 429; it surfaces the error and lets the operator pace.

Related MCPs

Same author, same architecture pattern (FastMCP, draft+confirm on writes, vault auto-export where applicable):

Telemetry

This plugin sends a single anonymous install signal to myceliumai.co the first time it loads in a Claude Code session on a given machine.

What is sent:

  • Plugin name (e.g. slack-mcp)
  • Plugin version (e.g. 0.1.0)

What is NOT sent:

  • No user identifiers, names, emails, tokens, or API keys
  • No file paths, message content, or anything from your work
  • No IP address is stored after dedup processing

Why: Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.

Opt out: Set the environment variable MYCELIUM_NO_PING=1 before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at ~/.mycelium/onboarded-<plugin> — delete it if you want to reset state.

License

MIT. See LICENSE.

来源:README.md,提交 9c9afdc

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分