内容
luma-events-mcp
<div align="center">
一个Luma日历MCP服务器,作为AI助手的事件、嘉宾和门票操作工具。
[](https://github.com/unvibe-org/luma-events-mcp/actions/workflows/release.yml)
[](https://www.npmjs.com/package/luma-events-mcp)
[](https://choosealicense.com/licenses/mit/)
[](https://modelcontextprotocol.io)
[](https://github.com/semantic-release/semantic-release)
</div>
## 功能特点
- 获取与您的API密钥关联的日历信息
- 列出、创建和更新事件
- 列出嘉宾、获取嘉宾详情、添加嘉宾、更新嘉宾状态、发送邀请
- 列出和创建票券类型
- 列出和创建优惠券
- 双重分页模式:自动分页所有结果或手动基于游标的分页
## 安装配置
将服务器添加到您的MCP客户端配置中。从您的Luma仪表板获取您的API密钥(需要Luma Plus)。
### 使用内联API密钥
```json
{
"mcpServers": {
"luma": {
"command":px",
"args": ["luma-events-mcp"],
"env": {
"LUMA_API_KEY": "<您的Luma API密钥>"
}
}
}
}
```
### 使用`.env`文件
将您的API密钥保存在`.env`文件中(gitignored),并使用[`dotenvx`](https://dotenvx.com)加载它:
```
LUMA_API_KEY=您的API密钥
```
```json
{
"mcpServers": "luma": {
command": "npx",
"args": ["@dotenvx/dotenvx", "run", "--", "npx", "luma-events-mcp"]
}
}
```
## 开发
### 快速开始
在下运行MCP服务器,并自动重新加载:
```bash
npm run dev
```
这将直接运行TypeScript代码,并自动从`.env`文件中加载环境变量。
### 手动构建
```bash
npm run build
node dist/index.js
```
## 可用工具
<!-- TOOLS:START - generated by scripts/gen-tool-docs.ts -->
### 获取日历
获取与当前API密钥关联的日历
参数:无
返回:
- 包含api_id、name和geo字段的日历对象
### 列出事件
列出日历的事件。可选地按日期范围过滤。无需分页参数时,返回所有事件;有分页参数时,返回一页。
参数:
- `after`: 字符串(可选)— 仅限起始时间在此ISO 8601日期时间之后的事件
- `before`: 字符串(可选)— 仅限起始时间在此ISO 8601日期时间之前的事件
- `pagination_limit`: 数字(可选)— 页面大小(最大50 `pagination_cursor`: 字符串(可选)— 前一页的游标
返回:
- 事件对象数组,或带有next_cursor的分页结果
### 获取事件
通过ID获取特定事件的管理员详情
参数:
- `event_id`: 字符串 — 事件ID(例如evt-...)
返回:
- 包含名称、日期、地点、描述券信息的完整事件对象
### 列出嘉宾
列出事件的。无需分页参数时,返回所有嘉宾;有分页参数时,返回一页。
参数:
- `event_id`: 字符串 — 事件ID(例如evt-...)
- `approval_status`: 枚举(`approved` | `session` | `pending_approval` | `invited` | `declined` | `waitlist`)(可选)— 按审批状态过滤
- `sort_column`: 枚举(`name` | `email` | `created_at` | `registered_at` | `checked_in_at`)(可选)— 排序列
- `pagination_limit`: 数字(可选)— 页面大小
pagination_cursor`: 字符串(可选)— 前一页的游返回:
- 嘉宾对象数组,或带有next_cursor的分页结果
### 获取嘉宾
获取单个事件嘉ID字段接受嘉宾ID-...)、嘉(g-...)、票券密钥或电子。
参数:
-_id`: 字符串 — 事件ID(例如evt-...)
- `id`: 字符串 — 嘉宾标识符:嘉宾ID(gst-...)、密钥(g-...)或电子邮件
返回:
包含审批状态、票券信息、event_ticket_orders和的完整嘉宾对象
### 列出票券类型
列出事件的所有票券类型
参数:
- ``: 字符串 — 事件IDevt-...)
返回:
- 包含名称、可用性信息的票券数组
### 创建事件日历上创建新参数:
- ` — 事件标题
start_at`: 字符串 — 开始日期时间(ISO 8601)
- `timezone`: 字符串时区(例如America/New_York)
- `end_at`: 字符串(可选 结束日期时间(8601)
- ``: 字符串(可选)— 事件描述(markdown格式)
- `meeting_url`: 字符串(可选)— 虚拟事件URL `geo_address_json(可选)— 地址对象,包含城市、地点等 `geo_latitude数字(可选)— 纬度
- `geo_longitude`: 数字(可选)— 经度
- `cover_url`: 字符串(可选)— 封面图片URL(必须是Luma CDN)
- `visibility`: 枚举(`public` | `members-only` | `private`)(可选)— 事件可见性
max_capacity`: 数字)— 最大
返回:
-事件对象
###更新现有事件。只有提供的字段会发生变化。
参数:
- `event_id`: 字符串 — 事件ID(例如evt-...)
- `suppress_notifications`: 布尔值(可选)— 防止嘉宾通知用于名称/时间/地点更改
- `name`: 字符串(可选)— 事件标题
- `start_at`: 字符串(可选)— 开始日期时间(ISO 8601)
- `end_at`: 字符串(可选)— 结束日期时间(ISO 8601)
- `timezone`: 字符串(可选)— IANA时区
- `description_md`: 字符串)— 事件描述(markdown格式)
- `meeting 字符串(可选)— 虚拟事件URL
-_url`: 字符串(可选)— 封面图片URL `visibility`: 枚举public` | `members-only` | `private`)(可选)— 事件可见性
- `max_capacity`: 数字(可选)— 最大
返回:
- 更新的事件对象
### 添加嘉将嘉宾添加到事件中。默认情况下,获得批准并收到一个默认票券。
参数:
- `event_id`: 字符串 — 事件ID(例如evt-...)
- `guests`: 对象数组 — 包含电子邮件的嘉宾对象数组
- `approval_status`: 枚举(`approved` | `pending_approval` | `waitlist`)(可选)— 新增嘉宾的审批状态(默认为- `send_email`: 布尔值(可选)— 发送通知电子邮件(默认为true `ticket`: 值(可选)— 分配给所有嘉宾的票券类型
- 新增嘉确认信息
### 更新状态
更新嘉宾的审批状态(批准或
参数:
- `event_id`: 字符串 — 事件例如evt-...)
- `guest`: 值 — 标识对象(例如: '...' } 或: 'gst-...' })
- `status`: 枚举(`approved` | `declined`)— 嘉宾的新状态
- `should_refund`: 布尔值(可选)— 如果拒绝付费票券,则退款
返回:
- 状态更新的确认信息
### 发送邀请
向事件的嘉宾发送已链接电话号码发送电子邮件和短信。
参数:
- `event_id — 事件ID(-...)
- `guests`: 对象数组 — 包含电子邮件和可选嘉宾对象数组
返回:
- 已发送邀请的
### 创建票
为事件创建新的类型
参数:
event_id`: 字符串 —例如evt-...)
- `name`: 字符串票券类型名称
- `type`: 枚举free` | `paid`)— 票券定价类型
- `require_approval`: 布尔值)— 需要主办人审批
- `is 布尔值(可选)— 从公共列表中- `description`: 字符串— 票券
- `max_capacity`: 数字(可选 可用票券的最大数量
- `cents`:(可选)— 价格(以美分计,用于票券)
- ` 字符串(可选)代码(例如USD)
返回:
的票券类型对象
### 更新票券类型现有的票券类型
参数:
- `event_ticket_type_api_id`: 字符串 — 票券类型ID(例如ett-...)
- `name`: 字符串(可选)— 票券类型名称
- `require_approval`: 布尔值(可选)— 需要主办人审批
- `is_hidden`: 布尔值(可选)— 从公共列表中隐藏
- `description`: 字符串(可选)— 票券类型描述
- `valid_start_at`: 字符串(可选)— 票券销售开始日期(ISO 8601)
- `valid_end_at`: 字符串(可选)— 票券销售结束日期(ISO 8601)
- `max_capacity`: 数字(可选)— 可用票券的最大数量
- `type`: 枚举(`free` | `paid`)(可选)— 定价类型
`: 数字)— 价格(以美分计,用于付费票券)
- `currency`: 字符串(可选)— 货币代码(例如USD,EUR)
- `is_flexible`: 布尔值(可选)— 允许灵活定价
- `min_cents`: 数字(可选)— 最低价格(以美分计,用于灵活定价)
返回:
- 更新的票对象
###券类型
券类型(软删除售出票券或它是最后一个可见的票,则无法删除。
参数:
- `event_ticket_id`: 字符串 — 票券类型ID(例如...)
返回:
- 已删除票券类型的确认信息
### 列出优惠券
列出事件券。无需分页参数时,返回所有优惠券;有分页参数时,页。
参数:
- ``: 字符串 — 事件ID(例如evt-...)
pagination_limit`: 数字(可选)— 页面- `pagination_cursor`: 字符串(可选)— 前一页的游标
返回:
- 优惠数组,或带有next_cursor的分页结果
### 创建
为事件创建优惠券。优惠券条款创建编辑。
参数:
- `event_id`: 字符串 — 事件ID(例如evt-...)
- `code`: 字符串 — 优惠券代码(1-20个字符,不区分大小写)
- `discount`: 值 — 折扣对象(例如{ typepercent', percent_off: 20 })
- `remaining_count`: 数字(可选)— 使用次数(0-1000000;使用1000000表示无限次)
- `valid_start_at`: 字符串(可选)— 有效开始日期(ISO 8601)
- `valid_end_at`: 字符串(可选)— 有效结束日期(ISO
返回:
的优惠券对象
### 上传图片
将本地图片文件上传到Luma的CDN并返回最终URL。从磁盘读取文件,获取预签名上传URL,文件,并返回CDN URL。
参数:
- ``: 字符串 — 要上传的本地图片文件的绝对 `purpose`: 字符串 — 上传目的(例如““avatar”)
- `content_type`:可选)— 图片的MIME类型(默认为“image/png”)
返回:
- 上传图片的Luma CDN URL
<!-- TOOLS:END -->
## 许可证
MIT