Luma Events について
Luma Eventsは、カテゴリ、都市、場所、距離を条件にLumaのイベントを探すFastMCPサーバーです。フォロー中のカレンダー、新着追跡、イベント詳細、ICS出力にも対応し、公開イベントの基本検索にはAPIキーが不要です。
主な機能
- 01カテゴリまたは都市で検索
- 02住所と距離による絞り込み
- 03SQLiteでの設定保存
- 04初めて見つかったイベントの追跡
- 05イベント詳細の取得とICS出力
- 06フォロー中のカレンダーへの任意アクセス
活用シーン
- 01テーマと距離を指定して近隣イベントを検索
- 02旅行先の都市でイベントを探す
- 03Lumaに新たに追加されたイベントを追跡
- 04ICSでイベントをカレンダーに追加
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 Events MCP サーバー
Luma からイベントを検索する FastMCP サーバーです。Discover フィードと登録済みカレンダーを組み合わせ、距離による絞り込みと ICS エクスポートに対応しています。基本的な検索に API キーは不要です。
仕組み
Luma の Discover API には、動作が大きく異なる 2 つのエンドポイントがあります。
- カテゴリ検索(例:AI、Tech、Food)— 詳細なタグ情報付きで数百件のイベントを返しますが、対象はホーム地域のみです。幅広い情報を得られますが、地域が限定されます。
- 都市検索(例:Paris、London、Tokyo)— その都市の厳選されたおすすめイベントを約20~40件返します。広い地域をカバーしますが、件数は少なめです。
この MCP では、2 つの検索モードで両方を利用します。
- ホームモード(デフォルト、
cityパラメーターなし)— カテゴリ 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 アドレスをもとに位置情報を推定)。その後、検索結果を絞り込むため、サーバーが一度に 1 つずつ設定を案内します。
- 住所 — 位置情報と希望する検索範囲を尋ねます。設定すると、近くのイベントに絞り込まれ、検索結果が大幅に減ります。
- カテゴリ — 検索対象を絞るため、関心のあるトピックを尋ねます(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 が必要です。サーバーはインラインのログインフローでこれを自動的に処理します。
仕組み:
- 初回呼び出し — 結果を返した後、サーバーがログインを促します。エージェントがチャットで確認します。
- ログイン — エージェントが
login=trueを指定してsearch_eventsを呼び出します。Chromium ブラウザーがlu.ma/signinを開くので、通常どおりログインします。セッション Cookie はローカルの SQLite データベースに保存されます。 - ログインを見送る — エージェントが
skip_login_days=Nを指定してsearch_eventsを呼び出し、ログインを延期します(0 = 次回確認、-1 = 今後確認しない)。 - 再訪ユーザーで Cookie の期限が切れている場合 — 再認証のため、ブラウザーが自動的に開きます。
- 検証 — 保存された Cookie は24時間ごとに Luma の API で検証されます。
新規イベントの追跡
サーバーはローカルの SQLite データベース(デフォルトでは ~/.luma-mcp/events.db)を管理し、各イベントを最初に確認した日時を記録します。これにより、search_events で次の 2 つのフィルターを利用できます。
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 は認証なしで利用できます。
距離によるフィルタリング
max_distance_miles とともに set_preferences(address="...") を設定して、自宅の住所を指定します。自宅モードでは、設定した半径を超えるイベントは除外されます。位置情報のないイベントは、デフォルトで含まれます(distance_miles: null)。旅行モードでは、距離のフィルタリングに都市の中心から自動的に 25 マイルの範囲が使われます。
デフォルトでは、ジオコーディングに Nominatim(無料の OpenStreetMap)を使用します。より多くのリクエストを処理するには、環境に対応する GEOCODING_API_KEY を設定したうえで、GEOCODING_PROVIDER=google または mapbox を設定します。
イベントの日時
イベントの日時(start_at、end_at)は、ユーザーのシステムのタイムゾーンで返されます。参照用に、Luma の timezone フィールドがすべての結果に含まれます。
制限事項
- RSVP はブラウザーでのみ行えます。
get_eventは RSVP の URL を返しますが、ヘッドレスで登録する方法はありません。イベントをカレンダーに追加するには、export_event_icsを使用してください。 - ウェブエンドポイントは文書化されていません。 Discover と購読中のカレンダーのフィードでは、Luma の内部 API(
api.lu.ma)を使用しているため、予告なく変更される可能性があります。問題の影響はluma_web_client.pyに限定されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。