Luma事件MCP服务器
A. FastMCP 从中发现事件的服务器 老的 --将Discover提要和订阅日历与距离过滤和ICS导出相结合。基本发现不需要API密钥。
运作原理
Luma的Discover API有两个表现非常不同的端点:
- 分类搜索 (例如人工智能、技术、食品)-返回数百个带有丰富标签的事件,但仅适用于您所在的地区。深度大,地理位置封闭。
- 城市搜索 (例如巴黎、伦敦、东京)——返回该城市精心策划的约20-40场顶级/特色活动。覆盖面广,套型小。
此MCP通过两种搜索模式使用这两种模式:
- 家庭模式 (默认值,否
cityparam)-通过类别API搜索您的首选类别。通过地址和距离过滤的深度、丰富的结果。 - 出行模式 (通过a
city)-通过Place API获取该城市策划的顶级活动。
在第一次运行时,服务器会返回您附近的热门事件(受IP影响的地理位置),然后引导您设置类别、地址和登录,以获得越来越丰富的结果。
工具
| 工具 | 它做什么 |
|---|---|
search_events | 家庭模式:通过地址/距离过滤按类别搜索。 出行模式:为特定城市策划的活动。 |
set_preferences | 保存默认类别(列表)、地址和最大距离。在重启过程中持续使用SQLite。 |
get_event | 通过API id或获取单个事件的完整详细信息 lu.ma URL。 |
export_event_ics | 为任何事件生成ICS字符串——粘贴到Apple日历、Google日历、Outlook等中。 |
设置
先决条件
- Python 3.10+
- 紫外线 (推荐)或pip
安装
git clone
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地理偏见影响)。然后,服务器会一次引导您完成一个提示的设置,以缩小结果范围:
- 地址 --询问您的位置和首选搜索半径,这大大减少了您附近事件的结果集。
- 类别 --询问你对哪些主题感兴趣(来自:科技、人工智能、食品、艺术、气候、健身、健康、加密货币),以便集中发现。
- 登录 --询问是否登录订阅的日历。
每个提示都会在返回结果后出现,因此您可以立即看到事件。配置首选项后,搜索会自动重新运行,并出现下一个提示。您可以回复“现在不行”(下次再次出现提示)或“从不”(永久取消)。
配置
使用 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。服务器通过内联登录流自动处理此问题。
它是如何工作的:
- 第一个电话 --结果出来后,服务器会提示登录。客服在聊天中问你。
- 登录 --代理人打电话来
search_events和login=trueChromium浏览器打开lu.ma/signin;正常登录。会话cookie存储在本地SQLite数据库中。 - 下降 --代理人打电话来
search_events和skip_login_days=N推迟(0=下次问,-1=从不)。 - 返回用户,cookie已过期 --浏览器会自动打开以进行重新身份验证。
- 验证 -存储的cookie每24小时根据Luma的API进行验证。
新事件跟踪
服务器维护一个本地SQLite数据库(~/.luma-mcp/events.db 默认情况下),记录每个事件首次出现的时间。这将启用两个过滤器 search_events:
added_within_days--仅返回过去N天内首次出现的事件。new_only--只返回以前从未见过的事件。
每个结果还包括 first_seen_at (ISO时间戳)和 is_new (布尔值)。
光标MCP配置
添加到光标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"
}
}
}
}数据源
| 来源 | 授权 | 覆盖范围 |
|---|---|---|
发现 (api.lu.ma) | 无需 | 按城市和类别列出的公共活动——与相同的订阅源 luma.com/discover |
订阅的日历 (api.lu.ma) | 浏览器登录(自动管理) | 您在Luma上关注的日历事件 |
无需登录,服务器仍可工作——Discover完全可用,无需身份验证。
距离过滤
通过设置家庭住址 set_preferences(address="...") 和 max_distance_miles在家庭模式下,半径以外的事件被排除在外。默认情况下包括没有位置数据的事件( distance_miles: null).在旅行模式下,距离过滤会自动使用25英里处的市中心。
地理编码用途 提名 (免费,OpenStreetMap)默认情况下。对于更高的音量,请设置 GEOCODING_PROVIDER=google 或 mapbox 与相应 GEOCODING_API_KEY 在您的环境中。
活动时间
活动时间(start_at, end_at)以用户的系统时区返回。这 timezone 每个结果中都包含Luma的字段以供参考。
局限性
- RSVP仅适用于浏览器。
get_event返回RSVP URL;没有无头注册路径。使用export_event_ics将事件添加到日历中。 - Web端点没有文档记录。 Discover和订阅日历订阅源使用Luma的内部API(
api.lu.ma),如有更改,恕不另行通知。破损被隔离luma_web_client.py.
