better_luma
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@better_lumafind events in San Francisco this weekend"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Better Luma FastMCP
A read-only FastMCP server for the existing Better Luma / WAP events backend. It gives MCP clients such as Codex structured tools for discovering Luma, Posh, and Partiful events.
This public repository contains the MCP adapter only. It contains no session keys, browser cookies, or private backend code.
How it works
Codex or another MCP client
|
| MCP over local stdio
v
Better Luma FastMCP (this repository)
|
| HTTP + optional private auth headers
v
WAP FastAPI backend at 127.0.0.1:8000
|
+---- Luma / Posh / PartifulFastMCP defines the tool schemas and handles the MCP protocol. This adapter validates each tool call, maps it to a read-only HTTP request, and returns the backend's JSON. The existing WAP backend remains responsible for platform integrations and scraping.
Related MCP server: Network School Events MCP Server
Tools
Tool | Purpose |
| Check backend availability |
| List cities supported by a platform |
| List event category filters |
| Browse platform events by city |
| Fetch one event by ID or Luma slug |
| Search one platform |
| Fetch a permitted guest list |
| Collect events and visible attendees without auto-RSVP |
| Read the authenticated user's managed, upcoming, or past events |
| Verify whether the authenticated user hosts an event |
Every MCP tool is annotated read-only. OTP, token-pool, token-revocation, and RSVP routes are deliberately not exposed. Partiful scrape requests always set auto_rsvp=false.
Folder separation
Folder | Role |
| Public FastMCP adapter |
| Existing Better Luma frontend |
| Existing private FastAPI backend |
Keeping the adapter separate makes it safe to publish and lets the web app and MCP reuse the same backend logic.
Install and run
Requirements: Python 3.12+, uv, and the existing WAP backend.
Install the MCP environment:
cd /Users/samsavage/Documents/luma-mcp
uv sync --lockedStart the WAP backend in a separate terminal:
cd /Users/samsavage/wap
source venv/bin/activate
uvicorn src.luma.api.main:app --host 127.0.0.1 --port 8000Run the MCP server over stdio:
cd /Users/samsavage/Documents/luma-mcp
uv run better-luma-mcpAn MCP client owns that process's stdin and stdout, so do not type into it directly.
Configure Codex
Set any private tokens in the environment that launches Codex, then add this to ~/.codex/config.toml:
[mcp_servers.better_luma]
command = "/Users/samsavage/Documents/luma-mcp/.venv/bin/better-luma-mcp"
startup_timeout_sec = 10
tool_timeout_sec = 200
env_vars = ["LUMA_AUTH_SESSION_KEY", "POSH_JWT_TOKEN", "PARTIFUL_AUTH_TOKEN"]
[mcp_servers.better_luma.env]
BETTER_LUMA_API_BASE_URL = "http://127.0.0.1:8000"env_vars forwards only those named variables from the local environment into the MCP child process. The command, environment, and timeout fields follow the official Codex stdio MCP configuration. Restart Codex after changing its configuration.
Public discovery tools work without credentials.
Luma authentication
The agent does not receive or request your Luma session key as a tool argument. The boundary is:
You sign in to Luma in your browser.
In browser developer tools, open Application (or Storage) > Cookies and select the Luma origin (
luma.comorlu.ma).Copy the value of the cookie named
luma.auth-session-key.Export it as
LUMA_AUTH_SESSION_KEYin the environment that launches Codex.Restart Codex so it can forward the named variable to the MCP process.
The MCP process reads the variable and sends it to the local WAP backend in the private x-auth-token header. It is never included in the MCP tool schema or normal tool results, so the model does not need to see it.
Do not paste a session key into a prompt, commit it, or put it into this repository. Treat it like a password and rotate it by signing out of Luma if it is exposed. BETTER_LUMA_AUTH_TOKEN is accepted as a backwards-compatible alias.
Configuration
Variable | Default | Description |
|
| WAP FastAPI base URL |
|
| Normal backend request timeout |
|
| Long scrape request timeout |
| unset | Optional Luma session key for private reads |
| unset | Optional Posh JWT |
| unset | Optional Partiful bearer token |
Develop and test
uv sync --locked
uv run pytest -q
uv buildThe tests use in-memory FastMCP clients and mocked HTTP transports; they do not require real credentials or contact event platforms.
License
MIT
Available Tools
10 toolsget_eventGet EventBRead-onlyIdempotent
Get details for one event ID or Luma URL slug.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Event ID or Luma slug. | |
| platform | No | Event platform. | luma |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true and destructiveHint=false, so the agent knows this is a safe read. The description's 'Get details' aligns with readOnly and adds minimal new context; the 'ID or Luma URL slug' acceptance is already documented in the schema parameter description, so the description adds little beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero wasted words, front-loading the core action and the accepted identifier format. Efficient and immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple two-parameter read tool with full schema coverage. However, with no output schema, the agent gets no expectation of what 'details' the call returns, and platform-specific nuance (e.g., a Luma slug only applies to the luma platform) is left implicit. Several sibling read/scrape tools exist, so a touch more routing context would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both event_id ('Event ID or Luma slug.') and platform ('Event platform.') are fully documented in the schema. The description largely repeats the event_id semantics ('event ID or Luma URL slug') without adding new meaning, so feeding and reading stay consistent but the description adds no supplementary value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and a clear resource ('details for one event'). The word 'one' signals single-item retrieval, distinguishing it from list_events and search_events without needing to open their schemas. It doesn't explicitly name siblings, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description doesn't name any sibling (e.g., get_event_guests for attendees, search_events for finding by criteria) or state conditions that should route the agent here instead. The agent must infer usage from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_guestsGet Event GuestsBRead-onlyIdempotent
Get an event guest list when the platform permits access.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| event_id | Yes | Platform event ID. | |
| platform | No | Event platform. | luma |
| ticket_key | No | Optional Luma registration ticket key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the tool read-only, idempotent, and non-destructive. The description adds a small behavioral note about external platform access permissions, which goes beyond the annotations. However, it does not explain failure behavior, authentication requirements, or data-sensitivity implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the core action and resource. The qualifier about platform permission is somewhat vague but does not make the description bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and the description does not mention return shape, pagination, or what fields a guest entry contains. The 'when the platform permits access' caveat lacks specifics about error handling or denial outcomes. An agent has enough to attempt a call but not enough to anticipate the response or edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents event_id, platform, and ticket_key with descriptions, and limit has constraints. The description itself adds no parameter-level meaning. With 75% schema description coverage, the schema carries most of the parameter burden, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and resource: 'Get an event guest list.' The title confirms the purpose. It does not explicitly compare itself to sibling tools like get_event or list_events, but 'guest list' is a distinct enough resource that an agent can infer the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool versus get_event, list_events, or search_events. The phrase 'when the platform permits access' is a permission caveat, not an actionable usage guideline. There are no stated prerequisites, alternatives, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
healthHealthARead-onlyIdempotent
Check whether the Better Luma/WAP backend is available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already convey readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the 'availability check' behavior but does not disclose details such as what response the endpoint returns or how 'available' is determined. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundant content. Every word contributes to the tool's purpose, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter health check with extensive annotations, the description is largely complete for invocation purposes. The main gap is the absence of any statement about what a successful or failed availability check looks like in the response, especially since there is no output schema. This is minor given the tool's simplicity but prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100%. There is no parameter behavior to document beyond the schema's empty object, so the description does not need to add parameter-level detail. The baseline for a zero-parameter tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Check whether... is available') and a specific resource ('Better Luma/WAP backend'). It clearly identifies this as a health-check tool and naturally distinguishes it from the sibling tools, none of which are availability checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied: an agent can infer this tool is for verifying backend availability before or during other operations. No explicit guidance is given about when to prefer this over siblings, but the sibling tools are functionally distinct, so the omission is not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_citiesList CitiesARead-onlyIdempotent
List cities supported by an event platform.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Event platform. | luma |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds the scoping behavior that the result depends on the event platform, but does not disclose additional traits such as pagination, defaults, or return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with no filler. The verb and object are front-loaded, making it immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with one optional parameter and no nested objects, the description plus schema and annotations is sufficient to invoke it correctly. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the sole parameter 'platform' is fully documented with an enum and default. The description adds no parameter details beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('cities') with a scoping qualifier ('supported by an event platform'). This clearly distinguishes it from sibling tools that operate on events, guests, or hosts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you need the set of cities for a given event platform, but it does not explicitly state when to prefer it over alternatives or mention exclusions. No when/when-not guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsList EventsBRead-onlyIdempotent
List events from Luma, Posh, or Partiful.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Required for Luma and Posh; optional for Partiful. | |
| limit | No | ||
| offset | No | Posh pagination offset. | |
| search | No | Optional Posh marketplace search text. | |
| platform | No | Event platform. | luma |
| event_type | No | Optional event category filter. | |
| include_past | No | Whether Luma results include past events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate read-only, idempotent, and non-destructive behavior. The description adds only the multi-platform scope and does not reveal behaviors like pagination defaults, per-platform parameter applicability, or whether results are aggregated across sources. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one clear, front-loaded sentence with no filler or repetition. It could still carry a bit more useful context without becoming verbose, but as written it is concise and direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool, the description is minimally viable, especially with strong schema coverage and annotations. However, it does not mention important nuances like defaulting to Luma, per-platform required parameters, or how it differs from search_events, so the complete calling picture is left mostly to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, and parameter descriptions in the schema already explain platform, city, limit, offset, search, event_type, and include_past. The tool description adds no parameter-level meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('List events') and specifies the target resources (Luma, Posh, Partiful), which differentiates it from singular tools like get_event and get_event_guests. It does not explicitly distinguish it from search_events, but the platform-specific list framing is reasonably specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use list_events versus alternatives like search_events or get_event. The description also omits practical context such as city being required for Luma and Posh but optional for Partiful, or that this tool surfaces broad lists rather than targeted searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_event_typesList Event TypesARead-onlyIdempotent
List the backend's event category filters for one platform.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Event platform. | luma |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide a comprehensive safety profile (readOnlyHint, idempotentHint, destructiveHint false), so the description does not need to repeat those. The description adds only the 'backend's' qualifier, which slightly frames the source but does not disclose any additional behavioral traits such as pagination, caching, or error behavior. Given the strong annotation coverage, this is an acceptable baseline, though the description could add context about the nature of the returned filters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the exact purpose with no redundancy or filler. Every phrase earns its place, and it avoids restating the tool name or title. It is optimally concise for the simplicity of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with one well-documented parameter and rich annotations, the description is nearly complete. It states the resource and platform scope, and the absence of an output schema is acceptable given the likely simple array return. A minor gap is that it does not hint at how the returned filters might be used (e.g., in search_events), but this is not essential for the agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage: the single 'platform' parameter includes an enum of valid values and a description 'Event platform.' The tool description merely restates 'for one platform,' which adds no new semantic detail beyond the schema. Since the schema fully documents the parameter selection, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list), the resource (event category filters), and the scope (for one platform). This is specific and distinct from siblings like list_events and search_events, which deal with events themselves rather than event type categories. The phrasing 'backend's event category filters' adds clarity that these are filtering options, not event records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used to retrieve event category filters for a given platform, but it does not explicitly state when to use it versus alternative tools like search_events or list_events. There is no mention of preconditions or downstream use of the returned filters, leaving an agent to infer the purpose. For a simple read-only listing tool this is adequate but not particularly instructive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_luma_eventsList My Luma EventsARead-onlyIdempotent
List the authenticated user's managed, upcoming, or past Luma events.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| timeframe | No | Which authenticated event collection to return. | upcoming |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior. The description adds the auth-ownership scoping ('authenticated user's') but does not disclose ordering, pagination, or result-shape behavior. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence states the verb, resource, and scope with no filler or redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity—two optional parameters, no nested objects, no output schema—the description sufficiently conveys what the tool does and what scope it operates on. It could add minor details like default ordering or result contents, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents timeframe with an enum and description, while limit has constraints and a default. The tool description mostly restates the timeframe values already in the schema and adds no new meaning for limit, so its contribution beyond the schema is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') with a clear resource ('the authenticated user's ... Luma events') and enumerates the three scopes (managed, upcoming, past). This differentiates it from sibling tools like list_events or search_events by making the user-owned scope explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended context clear: it is for the authenticated user's own event collections. However, it does not explicitly name alternatives like list_events or state conditions for when not to use this tool, so the guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape_cityScrape CityBRead-onlyIdempotent
Collect events and visible attendees without automatically RSVPing.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Required for Luma and Posh; optional for Partiful. | |
| limit | No | ||
| offset | No | Luma pagination offset. | |
| platform | No | Event platform. | luma |
| event_type | No | Optional event category filter. | |
| guest_limit | No | ||
| include_past | No | Whether Luma results include past events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a meaningful behavioral detail: it collects 'visible attendees' and does 'not automatically RSVPing.' However, it does not disclose potential scraping behavior, rate limits, or platform-specific quirks beyond what the schema already covers, so additional context is limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler or redundancy. It front-loads the core action ('Collect events and visible attendees') and includes the critical side-effect constraint ('without automatically RSVPing'). Every word contributes meaningful information, making it an exemplary concise description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters across 3 platforms and no output schema, so the description needs to provide an overview of pagination, return contents, and platform differences. It does not mention return format, how limit/offset apply per platform, or how 'visible attendees' are determined. The terse description leaves substantial gaps for an agent deciding how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, so the schema already documents most parameters. The tool description itself adds no parameter-level meaning, and two parameters (limit, guest_limit) lack schema descriptions, though their names are fairly self-explanatory. The description neither compensates for the remaining gaps nor contradicts the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('collect') and identifies a clear resource ('events and visible attendees'), so an agent can tell this tool gathers data. It also adds a key negative behavior ('without automatically RSVPing'), which somewhat distinguishes it from other tools. However, it does not explicitly compare against siblings like list_events or search_events, so it earns a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit direction about when to use this tool versus alternatives. It implies a data-gathering use case but never names sibling tools like search_events or get_event_guests or explains when scrape_city is preferred. There is no guidance on when not to use it, so the agent is left to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsSearch EventsARead-onlyIdempotent
Search event names and descriptions on one platform.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Optional city filter for Luma or Posh. | |
| limit | No | ||
| query | Yes | Search text. | |
| platform | No | Event platform. | luma |
| event_type | No | Optional event category filter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds that matching happens against names/descriptions and that only one platform is queried, but it does not disclose return format or other operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler; the core action and resource are front-loaded. Every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for basic invocation: it identifies the required query and the fact that a single platform is searched. Optional filters are documented in the schema. It does not describe the return shape, but for a simple read-only search tool this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents most parameters. The description reinforces that 'query' searches names and descriptions, but it does not add details for 'limit' or clarify valid values for 'event_type' beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search'), a clear resource ('event names and descriptions'), and a scope ('on one platform'). This distinguishes it from siblings like list_events, get_event, and list_event_types, which imply different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the verb 'Search', but there is no explicit guidance about when to use this tool versus list_events or get_event. No alternatives or exclusion conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_luma_hostVerify Luma HostARead-onlyIdempotent
Check whether the authenticated Luma user hosts an event.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Luma event ID or slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds one useful behavioral detail: the check is relative to the authenticated Luma user. However, it does not disclose return shape or behavior for unknown or non-hosted events.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant phrasing. Every word contributes to the core meaning, and it is immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only, idempotent check, this description is largely complete: 'Check whether' communicates a boolean intent. It would be slightly stronger with an explicit note about the return format or how to interpret a false result, but the low complexity and rich annotations make the current definition adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the event_id parameter is already described as 'Luma event ID or slug.' The tool description adds no extra meaning beyond calling it an event, so the schema carries the semantic weight; the description neither improves nor harms parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check whether') and names the exact resource and relationship: the authenticated Luma user hosting a given event. This clearly distinguishes it from siblings like get_event, which fetches event details, and list_my_luma_events, which lists the user's events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as get_event or list_my_luma_events. There is no mention of prerequisites, conditions, or scenarios where it should or should not be used, leaving the agent to infer the intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools target distinct actions, but some overlap exists: list_events and scrape_city both collect events, get_event_guests and scrape_city both collect attendees, and list_my_luma_events overlaps with verify_luma_host in checking host status. The descriptions reduce ambiguity but the boundaries are not always crisp.
The naming pattern is mostly consistent verb_noun snake_case, e.g. list_events, get_event, search_events, verify_luma_host. The lone 'health' tool breaks the pattern by not using a verb, though it is still understandable.
Ten tools is a well-scoped count for an event aggregation/read-only API. Each tool covers a distinct aspect of the domain without unnecessary bloat or obvious redundancy.
The toolset covers the core read-only workflow: event types, cities, event listing/search/detail, guests, city scraping, and authenticated user event queries. Minor gaps exist such as no explicit platform-list tool or direct attendee export beyond guests, but agents can mostly accomplish the intended tasks.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only tools for current SofiaStage events, venues, cities, performers, and editorial.
Run in-person events from your AI: create events, manage tickets, attendees, broadcasts.
Bounded tools for rendering, extraction, RAG, enrichment, local discovery and review analysis.
SocialLoop: AI-native event platform — sell tickets, manage guests, run affiliates & promo codes.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceIntegrates with the Eventbrite API to provide AI-assisted event management capabilities for viewing events, tracking attendees, and generating analytics reports.133MIT
- FlicenseBqualityDmaintenanceEnables access to Network School Luma calendar events through Claude Desktop. Allows users to view today's events, search upcoming events, and register for events directly with their contact information.532
- AlicenseAqualityCmaintenanceEnables AI assistants to search, filter, and analyze Microsoft events (conferences, workshops, webinars) using the Microsoft Events API.42MIT
- AlicenseAqualityCmaintenanceDiscovers events from Luma's public feed and subscribed calendars, with distance filtering, category search, and ICS export. No API key required for basic discovery.4MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/samthedataman/luma-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server