关于 Luma Events
Luma Events 是用于按类别、城市、位置和距离发现 Luma 活动的 FastMCP 服务。它还支持订阅日历、新活动追踪、活动详情和 ICS 导出;基本的公开活动搜索无需 API 密钥。
主要功能
- 01按类别或城市搜索
- 02按地址和距离筛选
- 03在 SQLite 中保存偏好设置
- 04追踪首次发现的活动
- 05获取活动详情并导出 ICS
- 06可选访问已关注的日历
适用场景
- 01按主题和距离查找附近活动
- 02在旅行城市发现活动
- 03追踪 Luma 上新出现的活动
- 04通过 ICS 将活动添加到日历
MCP 相关
它将活动搜索、偏好设置管理、活动详情和 ICS 导出作为 MCP 工具提供。用户登录后,MCP 客户端还可请求已关注日历中的活动。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
4收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| address | any | 否 | 用于距离筛选中心点的街道地址。 |
| categories | any | 否 | 要设为默认值的类别 slug 列表。必须来自以下列表: tech, ai, food, arts, climate, fitness, wellness, crypto。 |
| skip_address | boolean | 否 | 设为 true 可永久拒绝地址提示。 |
| skip_categories | boolean | 否 | 设为 true 可永久拒绝类别提示。 |
| max_distance_miles | any | 否 | 默认搜索半径,单位为英里。 |
详细介绍
Luma 活动 MCP 服务
一个 FastMCP 服务,用于从 Luma 发现活动——整合 Discover 信息流和已订阅的日历,并支持距离筛选和 ICS 导出。基本发现功能无需 API 密钥。
工作原理
Luma 的 Discover API 有两个行为截然不同的端点:
- 类别搜索(例如 AI、Tech、Food)——返回数百个带有丰富标签的活动,但仅限于你的所在地区。内容丰富,但地域受限。
- 城市搜索(例如 Paris、London、Tokyo)——为该城市精选约 20–40 个热门/特色活动。覆盖面广,但结果较少。
此 MCP 服务通过两种搜索模式使用这两个端点:
- 本地模式(默认,不传入
city参数)——通过 Category API 搜索你偏好的类别,并根据地址和距离筛选丰富的结果。 - 旅行模式(传入
city)——通过 Place API 获取该城市精选的热门活动。
首次运行时,服务会返回你附近的热门活动(根据 IP 进行地理位置加权),然后逐步引导你设置类别、地址和登录,以获取更丰富的结果。
工具
| 工具 | 功能 |
|---|---|
search_events | 本地模式:按类别搜索,并根据地址/距离筛选。旅行模式:获取指定城市的精选活动。 |
set_preferences | 保存默认类别(列表)、地址和最大距离。设置会保存在 SQLite 中,并在重启后保留。 |
get_event | 通过 API ID 或 lu.ma URL 获取单个活动的完整详情。 |
export_event_ics | 为任意活动生成 ICS 字符串,可粘贴到 Apple Calendar、Google Calendar、Outlook 等应用中。 |
设置
前提条件
- Python 3.10+
- uv(推荐)或 pip
安装
git clone <this-repo>
cd "Luma Cal MCP"
uv venv .venv --python 3.12
source .venv/bin/activate
uv pip install -e .
已订阅的日历(可选)
如需访问你在 Luma 上关注的日历中的活动,请安装可选的身份验证依赖项:
uv pip install -e ".[auth]"
playwright install chromium
首次运行
首次使用时,原始 Discover 信息流会返回你附近数百个热门活动(根据 IP 进行地理位置加权)。随后,服务会一次询问一个提示词,引导你完成设置,以缩小结果范围:
- 地址——询问你的位置和偏好的搜索半径,从而大幅缩小结果范围,只显示你附近的活动。
- 类别——询问你感兴趣的主题(可选:tech、ai、food、arts、climate、fitness、wellness、crypto),以便有针对性地发现活动。
- 登录——询问是否登录以访问已订阅的日历。
每个提示词都会在返回结果后出现,因此你可以立即查看活动。设置某项偏好后,搜索会自动重新运行,并显示下一个提示词。你可以回复“暂时不了”(下次会再次提示)或“永不”(永久跳过)。
配置
使用 set_preferences 保存默认设置,这些设置会在重启后保留:
set_preferences(address="3180 18th St, San Francisco", max_distance_miles=15)
set_preferences(categories=["ai", "tech"])
运行
# stdio transport (for Cursor, Claude Desktop, etc.)
fastmcp run src/luma_mcp/server.py
# or directly
python -m luma_mcp.server
身份验证
访问已订阅的日历需要 Luma 会话 Cookie。服务会通过内嵌登录流程自动处理。
工作原理:
- 首次调用——返回结果后,服务会提示登录。Agent 会在聊天中询问你。
- 登录——Agent 使用
login=true调用search_events。Chromium 浏览器会打开lu.ma/signin;正常登录即可。会话 Cookie 会保存在本地 SQLite 数据库中。 - 拒绝——Agent 使用
skip_login_days=N调用search_events,以延后登录(0 = 下次再问,-1 = 永不询问)。 - 回访用户,Cookie 已过期——浏览器会自动打开以重新进行身份验证。
- 验证——每 24 小时通过 Luma 的 API 验证一次已保存的 Cookie。
新活动跟踪
服务会维护一个本地 SQLite 数据库(默认路径为 ~/.luma-mcp/events.db),记录首次发现每个活动的时间。这样,search_events 就能使用以下两种筛选条件:
added_within_days——仅返回最近 N 天内首次发现的活动。new_only——仅返回从未发现过的活动。
每条结果还包含 first_seen_at(ISO 时间戳)和 is_new(布尔值)。
Cursor MCP 配置
添加到 Cursor MCP 设置(.cursor/mcp.json):
{
"mcpServers": {
"luma-events": {
"command": "uv",
"args": [
"run",
"--directory", "/path/to/Luma Cal MCP",
"fastmcp", "run", "src/luma_mcp/server.py"
],
"env": {
"PYTHONPATH": "/path/to/Luma Cal MCP/src"
}
}
}
}
数据源
| 来源 | 身份验证 | 覆盖范围 |
|---|---|---|
Discover(api.lu.ma) | 无需身份验证 | 按城市和类别筛选的公开活动 — 与 luma.com/discover 上的内容相同 |
已订阅的日历(api.lu.ma) | 浏览器登录(自动管理) | 来自你在 Luma 上关注的日历的活动 |
即使不登录,服务仍可正常使用 — Discover 无需身份验证即可完整使用。
距离筛选
通过 set_preferences(address="...") 设置家庭地址,并指定 max_distance_miles。在家庭模式下,超出半径范围的活动会被排除。默认情况下,包含没有位置数据的活动(distance_miles: null)。在旅行模式下,距离筛选会自动以城市中心为基准,范围为 25 英里。
默认使用 Nominatim(免费,基于 OpenStreetMap)进行地理编码。如需更高用量,可设置 GEOCODING_PROVIDER=google 或 mapbox,并在环境中设置相应的 GEOCODING_API_KEY。
活动时间
活动时间(start_at、end_at)会按照用户的系统时区返回。每条结果都会包含 Luma 提供的 timezone 字段,供参考。
限制
- RSVP 仅支持通过浏览器操作。
get_event会返回 RSVP URL;没有无头注册途径。请使用export_event_ics将活动添加到日历。 - Web 端点没有文档。 Discover 和已订阅日历的信息流使用 Luma 的内部 API(
api.lu.ma),该 API 可能会在没有通知的情况下发生变化。若出现问题,影响仅限于luma_web_client.py。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。