Luma Events MCP Server
The Luma Events MCP Server lets you manage Luma calendar events, guests, invitations, and ticketing through an AI client. Key capabilities:
Event Management
Verify connection – Check your Luma API key and authenticated user
List events – Browse approved or pending events with date filters and pagination
Get event – Retrieve complete details for a single event
Create / Update event – Create or modify events (name, dates, timezone, capacity, location, visibility, registration settings); requires confirmation
Delete event – Preview then permanently cancel/delete an event, with refund handling for paid events (irreversible; requires confirmation)
Guest Management
Get / List guests – Look up a guest by ID, ticket key, or email; list guests filtered by approval status
Add guests – Register guests directly with status, ticket assignment, and optional email notification (requires confirmation)
Update guest status – Change a guest's status (approved, declined, pending, waitlist) with explicit refund choice for paid tickets
Update guest tickets – Add complimentary tickets or remove tickets (non-refunding) for a guest
Registration summary – Count guests by approval state and check-in status without exposing personal identities
Invitations & Waitlist
Send invites – Send soft email (and SMS) invitations to a list of recipients (requires confirmation)
Invite from another event – Build a deduplicated audience from a past event's guests and send soft invitations to a target event, with a privacy-safe preview before confirming
Approve waitlisted guests – Approve up to 90 waitlisted guests per run, resumable for large waitlists, with optional approval email (requires confirmation)
Ticket Types
List / Get ticket types – View all ticket types for an event, including hidden ones
Create / Update ticket type – Create or modify free, paid, or flexible-price ticket types with visibility, capacity, and sale date settings (requires confirmation)
Delete ticket type – Preview then delete a ticket type (blocked if tickets have been sold or it's the last visible option)
Host & Staff Management
Add / Update host – Add or change a visible or hidden event host or check-in staff member (requires confirmation)
Remove host – Preview then remove a host from an event
All write operations require explicit user confirmation via a confirmed parameter, and higher-impact actions return a preview before execution.
Click on "Deploy 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., "@Luma Events MCP Serverlist my upcoming events"
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.
Luma Events MCP Server
The Luma Events MCP Server connects AI tools directly to your Luma calendar. It lets agents create and manage events, work with guests and tickets, organize hosts, send invitations, approve waitlists, and summarize registrations through natural-language requests.
Built for event organizers who want Luma operations inside Codex, Cursor, or another modern MCP client—without giving up explicit confirmation before important changes.
This is an independent, community-built project and is not affiliated with or endorsed by Luma.
Version 0.7.4 uses MCP2025-06-18 for compatibility with stable releases
of Codex, Cursor, Claude Code, Gemini CLI, and Grok CLI. Experimental clients
configured to require MCP 2026-07-28 must switch back to 2025-06-18.
For Codex 0.146.0 or newer, run
codex features disable mcp_2026_07_28 before restarting Codex.
Use cases
Event operations: Create, update, inspect, and safely delete events.
Guest management: Add guests, change approval states, and manage guest tickets.
Ticketing: Create free, paid, or flexible-price ticket types and control sales.
Host coordination: Add managers or check-in staff and control public visibility.
Audience growth: Invite people from past events without exposing preview identities.
Registration intelligence: Review attendance, waitlists, and check-ins from aggregate data.
Quick start · Tools · Safety · Examples · Development
Quick start
Prerequisites
Node.js 20 or newer.
A Luma calendar with API access.
A calendar API key from the Luma API settings.
An MCP client that supports the
2025-06-18protocol revision, such as a current version of OpenAI Codex or Cursor.
Your API key controls which calendar the server can access. Treat it like a password: do not commit it, paste it into issues, or include it in screenshots.
Interactive installation
Run the setup wizard without cloning the repository:
npx -y luma-events setupReleases through0.7.2 used the package name
@blackie360/luma-events-mcp. Run the shorter command above once to update
existing client configurations to luma-events.
_ _ _ __ __ _
| | | | | | \/ | / \
| | | | | | |\/| | / _ \
| |___| |_| | | | |/ ___ \
|_____|\___/|_| |_/_/ \_\
EVENTS MCP
Safe setup for your AI clientsThe wizard:
Opens with a compact ASCII banner and numbered setup stages, with color only when the terminal supports it.
Detects installed Codex, Cursor, Claude Code, Gemini CLI, and Grok CLI clients.
Lets you select one, several, or all detected clients with ↑/↓, Space, and Enter. Press
ato select or clear all clients.Prompts you to paste your Luma calendar API key with masked terminal input.
Verifies the key with Luma before changing anything.
Shows the exact installation plan and waits for final confirmation.
Configures each selected client and reports individual successes or failures.
The API key is stored once and is never included in client command arguments or MCP configuration. POSIX systems apply owner-only file permissions; Windows stores the file inside the current user's application-data directory:
Linux and macOS:
~/.config/luma-events-mcp/credentials.jsonWindows:
%APPDATA%\luma-events-mcp\credentials.json
Existing Cursor configuration is merged rather than replaced, and the original file is backed up first. Preview detection without requesting a key or changing configuration with:
npx -y luma-events setup --dry-runClient | Setup adapter |
OpenAI Codex |
|
Cursor | Safe merge into the global |
Claude Code |
|
Gemini CLI |
|
Grok CLI |
|
Restart the configured clients after setup, then ask:
Verify my Luma connection.
Manual installation
Use the following client-specific configuration when you do not want to use the interactive wizard.
Install in OpenAI Codex
Export your Luma API key in the environment that starts Codex:
export LUMA_API_KEY="your-luma-api-key"Add the following to ~/.codex/config.toml:
[mcp_servers.luma-events]
command = "npx"
args = [
"-y",
"--package",
"luma-events@latest",
"luma-events"
]
env_vars = ["LUMA_API_KEY"]Restart Codex or open a new chat, then ask:
Verify my Luma connection.
Codex supports env_vars for forwarding selected local environment variables
to a stdio MCP server. This keeps the key out of the tracked project and the
MCP definition.
Install in Cursor
Add this server to your Cursor MCP configuration:
{
"mcpServers": {
"luma-events": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"--package",
"luma-events@latest",
"luma-events"
],
"env": {
"LUMA_API_KEY": "your-luma-api-key"
}
}
}
}Prefer Cursor's secret or environment-variable support when available instead
of storing the key directly in a configuration file. Restart Cursor, open
Cursor Settings → Tools & MCP, enable luma-events, and verify the
connection.
Install in another MCP client
Any client that supports local stdio MCP servers can launch the npm package:
{
"mcpServers": {
"luma-events": {
"command": "npx",
"args": [
"-y",
"--package",
"luma-events@latest",
"luma-events"
],
"env": {
"LUMA_API_KEY": "your-luma-api-key"
}
}
}
}Configuration syntax and secret handling vary by client. Consult your client's MCP documentation if it uses a different server key or environment format.
Install globally
npm install --global luma-events
luma-events setupRunning luma-events without a subcommand starts the stdio server. It
normally appears idle when run directly because an MCP client is expected to
communicate with it over standard input and output.
Related MCP server: Pulumi Events MCP
Confirmation and safety
Every write tool requires confirmed=true. Until then, the server performs no
write and either returns a structured preview or asks the client to show the
proposed arguments.
Higher-impact operations provide additional safeguards:
Event deletion previews the exact event, guest impact, and paid-event refund choice.
Guest status changes require a refund decision when captured paid tickets are involved.
Guest ticket previews explain that additions are complimentary and removals do not refund.
Ticket-type deletion verifies that the ticket belongs to the selected event.
Host removal matches the requested email case-insensitively before proceeding.
Cross-event audience previews return counts rather than guest identities.
Waitlist approvals are limited to resumable batches of 90 guests.
Confirmation makes the intended action explicit; it does not make a destructive action reversible. Review the event, target, notification, and refund details before approving a write.
Tools
The server exposes 23 tools. Read tools are marked read-only in MCP discovery; destructive and potentially non-idempotent operations include matching MCP annotations so clients can apply their own approval policies.
Connection and events
Tool | What it does | Write behavior |
| Checks the API key and returns the authenticated Luma user. | Read-only |
| Lists approved or pending events with date filters and pagination. | Read-only |
| Returns complete details for one event. | Read-only |
| Creates an event with registration, location, visibility, and capacity settings. | Confirmation required |
| Updates selected event fields. | Confirmation required |
| Uses Luma's two-step cancellation flow and reports guest/refund impact. | Preview, confirmation, destructive |
Guests and registrations
Tool | What it does | Write behavior |
| Finds one guest by ID, ticket key, guest key, or email. | Read-only; returns personal data |
| Lists event guests, optionally filtered by approval status. | Read-only; returns personal data |
| Counts registration states and check-ins without returning identities. | Read-only |
| Registers guests as approved, pending approval, or waitlisted. | Confirmation required |
| Moves one guest between approved, declined, pending, and waitlist states. | Preview, confirmation, refund-aware |
| Adds complimentary tickets or invalidates existing tickets. | Preview, confirmation, non-idempotent |
| Approves up to 90 waitlisted guests per resumable run. | Confirmation required |
Ticket types
Tool | What it does | Write behavior |
| Lists visible ticket types and optionally includes hidden ones. | Read-only |
| Returns one ticket type by ID. | Read-only |
| Creates free, paid, or flexible-price ticket types. | Confirmation required |
| Changes pricing, availability, approval, visibility, or sale settings. | Confirmation required |
| Verifies event ownership and previews the exact ticket type. | Preview, confirmation, destructive |
Luma may reject ticket-type deletion when tickets have already been sold or when the target is the event's last visible ticket type.
Hosts
Tool | What it does | Write behavior |
| Adds a visible or hidden manager, check-in host, or no-access host. | Confirmation required |
| Changes a host's access level or public visibility. | Confirmation required |
| Resolves and previews the host before removal. | Preview, confirmation, destructive |
Luma can omit hidden hosts from an event response. When that happens, the removal preview clearly marks the requested email as unverified.
Invitations and audiences
Tool | What it does | Write behavior |
| Sends soft invitations in batches of 100 by email and, when linked, SMS. | Confirmation required |
| Builds a deduplicated audience from earlier events and removes existing target-event guests. | Identity-free preview, confirmation required |
Example prompts
Discover and understand
"Verify my Luma connection."
"Show my upcoming Luma events."
"Summarize registrations for my next event."
"List every ticket type for this event, including hidden tickets."
Manage events and guests
"Prepare an event for Friday at 5 PM, but do not create it until I confirm."
"Add these guests as pending approval after showing me the proposed change."
"Preview approving this guest and tell me whether a refund choice is involved."
"Preview replacing this guest's workshop ticket without sending email."
Grow and operate
"Show how many guests are waitlisted, then approve a safe batch after I confirm."
"Preview guests from my last event who are not already on my next event."
"Invite that previewed audience after I confirm."
"Add this person as hidden check-in staff after I confirm."
"Preview deleting this event, including guest and refund impact."
Screenshots
Discover available capabilities

List upcoming events

Analyze guest attendance
Guest identities have been redacted from this public example.

Configuration
Variable | Required | Default | Description |
| No after setup | Stored credential | Calendar-scoped API key. An environment value overrides the stored key. |
| No |
| Alternate API base for tests or compatible proxies. |
| No | Platform credential path | Override the stored credential file location. |
| No | Platform config directory | Override the setup directory containing |
The server does not load .env files automatically. For source development,
copy the included template and load it into your shell:
cp .env.example .env
set -a
source .env
set +aNever commit .env or LUMA_API_KEY.
Build from source
Clone the repository:
git clone https://github.com/Blackie360/luma-events-mcp.git
cd luma-events-mcpInstall dependencies and build:
corepack enable
pnpm install
pnpm buildStart the local stdio server:
pnpm startThe generated production entry point is dist/index.js. The repository also
includes project-local Cursor configuration, MCP plugin configuration, and
Codex/Cursor plugin manifests.
Development
# Type-check the project
pnpm check
# Build and run the complete test suite
pnpm test
# Inspect the package that would be uploaded to npm
pnpm packprepack runs the compiler and full test suite before creating the archive.
Tests cover confirmation guards, event deletion, API errors, pagination,
resumable waitlist approval, invitation batching, audience deduplication,
refund rules, ticket invariants, host matching, privacy-conscious previews, and
MCP discovery. The integration suite launches the packaged stdio server,
pins negotiation to MCP 2025-06-18, and verifies all 23 tools. Setup tests
cover client detection, selection, masked-secret ordering, API-key verification,
consent, restrictive file permissions, Cursor configuration preservation, and
secret non-disclosure.
Project structure
.
├── .codex-plugin/plugin.json # Codex plugin metadata
├── .cursor/mcp.json # Project-local Cursor configuration
├── .cursor-plugin/plugin.json # Cursor plugin metadata
├── .github/workflows/ # Trusted npm publishing workflow
├── .mcp.json # Plugin MCP server configuration
├── docs/images/ # Redacted README screenshots
├── scripts/prepare-release.mjs # Automatic release version synchronization
├── src/index.ts # Server and Luma API integration
├── src/index.test.ts # Unit tests
├── src/mcp.integration.test.ts # MCP integration tests
├── src/setup.ts # Interactive multi-client setup wizard
├── src/setup.test.ts # Setup and credential-safety tests
├── package.json
└── tsconfig.jsonAutomatic release process
Every non-release commit that reaches main—through a direct push or a merged
branch—runs .github/workflows/publish.yml. The serialized workflow:
Uses the version in
package.jsonwhen that version has not been published.Otherwise advances the highest published stable version by one patch.
Synchronizes the npm package, runtime, Codex, and Cursor versions.
Runs the type-checker, all tests, the production build, and
git diff --check.Commits generated release metadata when needed and creates the matching tag.
Publishes through npm trusted publishing and creates a GitHub Release.
Release commits use chore: release vX.Y.Z and are pushed with the workflow's
GITHUB_TOKEN, so GitHub does not create a recursive workflow run. The
workflow concurrency guard ensures that only one npm publication runs at a
time. Maintainers can also start the same process manually with
Actions → Publish npm package → Run workflow.
Security and privacy
Use a calendar-scoped API key with only the access the integration needs.
The setup wizard stores the key once, uses owner-only permissions on POSIX, and keeps it out of client arguments.
Keep API keys, guest information, and registration answers out of commits and issues.
Prefer
registration_summarywhen aggregate counts are enough.Use
list_guestsandget_guestonly for legitimate event operations.Review every preview before confirming guest, ticket, host, invitation, or deletion writes.
Remember that disabling email does not necessarily suppress Luma's in-app notification.
Rotate a key immediately if it is exposed.
To report a vulnerability, use a private security report rather than a public issue whenever possible.
Contributing
Contributions are welcome:
Fork the repository.
Create a focused branch.
Add or update tests for the change.
Run
pnpm checkandpnpm test.Open a pull request that explains the change and its motivation.
Do not include real API keys, guest identities, or private event data in tests, commits, issues, or pull requests.
Support
Report bugs and request features through GitHub Issues.
Review published changes in GitHub Releases.
Install the latest package from npm.
API
The server uses Luma's official API at https://public-api.luma.com. Request
shapes are based on Luma's
OpenAPI specification. API keys are
scoped to the calendar and permissions configured in Luma.
License
This project is available under the MIT License.
Available Tools
23 toolsadd_guestsAdd Luma guestsA
Add guests directly to an event with tickets and an approved, pending-approval, or waitlist status. This registers guests rather than sending a soft invite. Show the event, recipient count, status, ticket assignment, and email choice before asking for confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| guests | Yes | ||
| ticket | No | One ticket type assigned to every guest. Cannot be combined with tickets. | |
| tickets | No | Multiple tickets assigned to every guest. Cannot be combined with ticket. | |
| event_id | Yes | ||
| confirmed | Yes | Must be true only after explicit user confirmation. | |
| send_email | No | ||
| approval_status | No | approved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clarifies that this registers guests (a side effect) rather than sending a soft invite, and that it requires confirmation before execution. This goes beyond the annotations (which don't indicate idempotency or confirmation) and helps the agent understand the tool's behavior without contradicting the provided hints.
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?
Two sentences with no redundancy. The first sentence states purpose and key capabilities, the second gives actionable UX guidance. Every word earns its place, and critical information is front-loaded.
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 mutation tool with confirmation, the description covers the essential workflow (confirm before adding) and distinguishes from send_invites. While it doesn't mention return values or error handling, those are less critical given no output schema and the tool's direct nature. The guidance to show a summary before confirmation fills a key contextual 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 only 43%, so the description partially compensates by referencing tickets, status, and email choice. However, it doesn't elaborate on the guests array structure, registration_answers, or the specific interaction between ticket and tickets parameters beyond what the schema descriptions already say. It adds some meaning but not full compensation for the coverage gap.
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 (add guests), a resource (guests to an event), and key attributes (tickets, approval status). It explicitly contrasts with 'soft invite' to distinguish it from sibling tools like send_invites, making its purpose 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?
The description differentiates this from sending a soft invite, implying when to use it (direct registration) versus alternatives. It also instructs to show event, recipient count, status, ticket assignment, and email choice before confirmation, providing clear usage context, though it doesn't explicitly name sibling tools or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_hostAdd Luma event hostA
Add a host or check-in staff member to an event after explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| Yes | |||
| event_id | Yes | ||
| confirmed | Yes | Must be true only after explicit user confirmation. | |
| is_visible | No | ||
| access_level | No | manager |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutation and non-idempotency, and the description adds the confirmation requirement and the host/check-in staff scope. It does not disclose duplicate handling, permission requirements, or side effects on existing roles, but it does not contradict 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?
The description is a single concise sentence with no filler. The action, target, and confirmation precondition are all front-loaded and every word adds value.
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 six-parameter mutation tool with no output schema and very low schema coverage, this description is too thin. It omits the meaning of access_level values, how name and email are used, and what happens on duplicate additions. The confirmation requirement is mentioned but not explicitly tied to the confirmed parameter.
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 only 17%, and the description does not explain most parameters such as event_id, email, access_level, is_visible, or name. Only confirmed has a schema description. The phrase 'host or check-in staff member' hints at access_level but does not map parameters explicitly, so the description fails to compensate for low coverage.
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 ('Add'), names the resource ('a host or check-in staff member'), and names the target ('to an event'). It clearly differentiates from sibling tools like update_host and remove_host. The precondition 'after explicit confirmation' adds useful precision.
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 clear context for when to use this tool: adding hosts or check-in staff to an event, and only after explicit user confirmation. It does not explicitly contrast with update_host or remove_host, so it lacks full when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_waitlisted_guestsApprove waitlisted Luma guestsAIdempotent
Approve up to 90 currently waitlisted guests per run, leaving rate-limit headroom. Large waitlists are safely resumable by rerunning the tool until resume_required is false. Call only after showing the event, waitlisted guest count, and email notification choice, then receiving explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional personal message included in Luma's approval email. Cannot be used when send_email is false. | |
| event_id | Yes | ||
| confirmed | Yes | Must be true only after explicit user confirmation. | |
| send_email | No | Whether Luma should email each guest about the approval. | |
| max_approvals | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: 90-per-run rate-limit headroom, safe rerun/resume behavior, and the fact that email notification is a decision point. It aligns with the idempotentHint and does not contradict any annotation.
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?
Three sentences carry all essential information with no filler. The most important operational constraint (90 per run) is front-loaded, and the prerequisite and resume behavior follow logically.
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 that there is no output schema, the description still tells the agent the stopping condition ('resume_required is false'), the precondition for invocation, and how to resume large operations. That is sufficient for a 5-parameter mutation tool.
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 description supplements the 60% schema coverage by explaining the per-run 90-approval cap (max_approvals), the confirmation requirement (confirmed), and the email notification choice (send_email). It does not add much for event_id, but that parameter is self-explanatory and minimally constrained in the schema.
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 ('Approve'), a clear resource ('currently waitlisted guests'), and a concrete constraint ('up to 90 per run'). This makes the tool's purpose unambiguous and easily distinguishable from sibling tools like add_guests, send_invites, or update_guest_status.
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?
It explicitly states when the tool may be called: only after showing the event, waitlisted guest count, and email choice, and after explicit user confirmation. It also gives resumability guidance ('rerunning the tool until resume_required is false'), so the agent knows how to handle large waitlists safely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_eventCreate Luma eventB
Create a Luma event. Call only after the user has explicitly confirmed the event name, date/time, timezone, and supplied details.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| slug | No | ||
| end_at | No | ||
| start_at | Yes | ||
| timezone | No | Africa/Nairobi | |
| confirmed | Yes | Must be true only after explicit user confirmation. | |
| visibility | No | ||
| meeting_url | No | ||
| max_capacity | No | ||
| description_md | No | ||
| show_guest_list | No | ||
| waitlist_status | No | ||
| geo_address_json | No | ||
| registration_open | No | ||
| location_visibility | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-idempotent mutation, and the description's 'Create' wording is consistent. It adds the useful confirm-before-calling constraint, but does not disclose response behavior, side effects beyond creation, or whether the event is immediately published.
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 short and front-loaded: the action is stated first, followed by the important confirmation requirement. The first sentence is slightly redundant with the title, but the overall structure is efficient.
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 complex tool with 15 parameters, nested objects, and no output schema, this description is too sparse. An agent gets little guidance on optional fields, expected return value, or post-creation behavior, and the low schema coverage makes that gap more serious.
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 only 7%, so the description needed to compensate by explaining the many parameters. It mentions event name, date/time, timezone, and details, but leaves most of the 15 parameters—such as visibility, max_capacity, waitlist_status, and geo_address_json—unexplained.
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 identifies the action as creating a Luma event, using a specific verb and resource. It is naturally distinguishable from sibling tools like update_event and delete_event, though it does not explicitly contrast itself with them.
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 a clear precondition: call only after the user has explicitly confirmed the event name, date/time, timezone, and details. It does not mention alternatives like update_event, but the confirmation gate is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ticket_typeCreate Luma ticket typeA
Create a free, paid, or flexible-price ticket type after explicit confirmation. Review the event, price, currency, visibility, approval, sale dates, and capacity before confirming.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| cents | No | ||
| currency | No | ||
| event_id | Yes | ||
| confirmed | Yes | Must be true only after explicit user confirmation. | |
| is_hidden | No | ||
| min_cents | No | ||
| description | No | ||
| is_flexible | No | ||
| max_capacity | No | ||
| valid_end_at | No | ||
| valid_start_at | No | ||
| require_approval | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-idempotent, non-destructive create operation. The description adds valuable behavioral context by requiring explicit confirmation before acting and by directing the agent to review key attributes prior to confirming. This goes beyond what the annotations alone provide.
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?
Two short sentences deliver the core action, the conditional confirmation gate, and a compact review checklist. No filler words are present, and the most important operational instruction is front-loaded.
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?
With 14 parameters, low schema coverage, and no output schema, the description is not sufficient for an agent to reliably construct the call. Key details about price representation, flexible-price semantics, sale date formats, capacity requirements, and return behavior are absent.
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 only 7%, so the description must compensate. It names conceptual areas like price, currency, visibility, approval, sale dates, and capacity, which map to several schema parameters. However, it does not explain units, constraints, or relationships such as cents being in minor currency units, how free/paid/flexible interact, or which fields are required.
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 opens with a clear action ('Create') and resource ('ticket type'), and further specifies the variants: free, paid, or flexible-price. This distinguishes it from sibling ticket-type tools like get_ticket_type, update_ticket_type, and delete_ticket_type.
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 clearly states that this tool must only be used after explicit user confirmation and instructs the agent to review the event, price, currency, visibility, approval, sale dates, and capacity before confirming. It does not name alternatives or exclusions, but the confirmation gating is strong usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_eventCancel and delete Luma eventADestructive
Preview or permanently cancel and delete one Luma event. Call with confirmed=false first to show the exact event, approved guest count, and whether a refund choice is required. Cancellation is irreversible: Luma deletes the event and notifies all guests. Call with confirmed=true only after the user explicitly confirms the event and, for a paid event, whether guests should be refunded.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | ||
| confirmed | No | False returns a non-destructive preview. True permanently cancels and deletes the event after explicit user confirmation. | |
| should_refund | No | Whether to refund paid guests. Required when the preview reports is_paid=true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already mark destructiveHint=true, the description goes further by explaining irreversibility, guest notification, and the non-destructive nature of the preview call. These details provide context beyond the structured 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?
Three sentences with no filler. The key preview/confirm workflow is front-loaded, followed by the irreversible consequence, then the exact confirmation conditions. Every sentence contributes critical information.
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 fully covers the two-phase deletion workflow, the irreversibility, and the refund decision. With no output schema, it still tells the agent what the preview returns (event details, guest count, refund-required status), making the tool self-sufficient.
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 67%, and the description enriches both confirmed and should_refund parameters: confirmed maps to preview vs. permanent deletion, and should_refund is tied to paid events and user confirmation. event_id is obvious from the tool's purpose.
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 ('preview or permanently cancel and delete') on a specific resource ('one Luma event'), making it unambiguous what the tool does. It also distinguishes the destructive final action from the non-destructive preview mode.
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 explicit sequencing: call with confirmed=false first, then call with confirmed=true only after explicit user confirmation. It also clarifies the conditional use of should_refund for paid events, leaving little room for incorrect invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ticket_typeDelete Luma ticket typeADestructive
Preview or delete one ticket type. The preview verifies that the ticket type belongs to the event and shows its exact settings. Luma may refuse deletion when tickets have been sold or when this is the last visible ticket type.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | ||
| confirmed | No | False returns a non-mutating preview. True deletes the ticket type after explicit confirmation. | |
| event_ticket_type_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds useful behavioral context: Luma may refuse deletion when tickets have been sold or when this is the last visible ticket type. It also clarifies that preview is non-mutating and verifies ownership, which helps the agent anticipate real-world outcomes.
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?
Three short sentences with no filler: the first front-loads the action, the second describes the preview behavior, and the third gives deletion caveats. Every sentence 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?
The definition covers the core workflow—preview before deletion, ownership verification, and refusal conditions—and the confirmed parameter is documented in the schema. It does not describe the response format, but there is no output schema and the preview's 'shows its exact settings' gives a reasonable expectation.
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 coverage is only 33% with both ID parameters undocumented, but the description partially compensates by stating the ticket type 'belongs to the event' and that preview shows 'exact settings'. It does not explain how to obtain or format event_id and event_ticket_type_id, leaving the IDs to be inferred from their names.
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 opens with 'Preview or delete one ticket type', giving a specific action plus a precise resource, and immediately explains the tool's dual behavior. It is clearly distinct from sibling tools like list_ticket_types, get_ticket_type, create_ticket_type, and update_ticket_type because it centers on deletion with an optional preview.
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 usage: a preview verifies event ownership and settings, and deletion may be refused under certain conditions. However, it never explicitly contrasts this tool with get_ticket_type or list_ticket_types for pure inspection, nor states when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet Luma eventARead-only
Get complete details for one Luma event.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety and external-data expectations. The description adds only 'complete details,' which hints at the response breadth but provides no explicit behavior about missing events, freshness, or response format.
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, tightly worded sentence with no filler. It front-loads the action and resource and does not repeat information already present in the title.
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 single-parameter retrieval tool, the description and schema are enough to construct the call. However, with no output schema, the description does not clarify what 'complete details' means, and the openWorldHint suggests external mutation but no re-fetch guidance is provided.
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 0%, and the description does not add meaning to event_id beyond the schema. Although the parameter is simple and self-named, the description should have compensated for the lack of schema descriptions and did not.
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 the specific operation 'Get' and the resource 'Luma event', and qualifies the action as retrieving one event, which distinguishes it from listing or mutating events. The description is immediately understandable and maps directly to the tool's name and title.
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 phrase 'for one Luma event' implies this is for single-event retrieval, while the sibling list_events suggests the plural counterpart, but the description does not explicitly say when to choose this over list_events or any alternatives. No exclusions, prerequisites, or fallbacks are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guestGet Luma guestBRead-only
Get complete details for one event guest by guest ID, ticket key, guest key, or email. The response contains personal information and ticket-order details.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Guest ID, ticket key, guest key, or email. | |
| event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a safe read. The description adds context about the response containing personal information and ticket-order details, which is useful but not extensive. No contradiction with 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?
Two concise sentences with no filler. The core capability and return content are front-loaded, and 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?
For a simple read-only get tool with no output schema, the description adequately conveys what is returned (personal info and ticket-order details) and the identifier options. It is complete enough for an agent to call it correctly, though it could mention the response shape more explicitly.
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 50% (only 'id' is documented). The description repeats the id types but adds nothing about 'event_id.' It does not compensate for the missing schema description, leaving the second required parameter under-explained.
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 ('Get') and the resource ('complete details for one event guest'), and specifies the supported identifier types. It distinguishes from list_guests by mentioning 'one event guest,' but does not explicitly route to alternatives.
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 provided on when to use this tool versus siblings like list_guests or update_guest_status. The purpose implies a single-guest lookup, but there is no explicit when-to-use or when-not-to-use instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ticket_typeGet Luma ticket typeARead-only
Get one ticket type by its ticket-type ID.
| Name | Required | Description | Default |
|---|---|---|---|
| event_ticket_type_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, so there is no contradiction. The description does not add behavioral context beyond the annotations, such as return format, error behavior, or implications of the open-world hint, but the safety profile is already covered.
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 concise sentence that front-loads the verb and resource. There is no filler, redundancy, or unnecessary context.
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 getter with a readOnlyHint annotation, this description is largely sufficient: it names the operation, resource, and lookup key. It does not describe the return shape or not-found behavior, but these are minor gaps for such a simple tool.
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 provides 0% description coverage for the single parameter, so the description must compensate. It identifies event_ticket_type_id as the ticket-type ID, but that largely restates the property name and adds no details about where the ID comes from or any format expectations.
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'), a precise resource ('one ticket type'), and a selection criterion ('by its ticket-type ID'). This immediately differentiates it from siblings like list_ticket_types and the mutation-focused ticket-type tools.
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 when to use it: when the agent has a specific ticket-type ID and needs a single record. However, it does not explicitly name alternatives or say when not to use it, such as 'use list_ticket_types to fetch all ticket types.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invite_guests_from_eventInvite guests from another Luma eventA
Build a privacy-conscious audience from selected guest statuses on a source event, remove duplicate emails and anyone already on the target event, and send soft Luma invitations in batches. Call with confirmed=false first to preview aggregate counts without exposing identities; call again with confirmed=true only after explicit approval.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | ||
| confirmed | No | False returns an aggregate preview. True rebuilds the audience and sends the invitations. | |
| source_event_id | Yes | ||
| source_statuses | No | ||
| target_event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: duplicate removal, suppressing guests already on the target event, batching, soft invitations, and privacy-preserving aggregate previews. These details clarify the tool's side effects and safety model. It could also mention batch sizes, rate limits, or irreversibility, but current disclosure is strong.
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 two sentences with no filler. The core behavior is front-loaded, and the two-phase confirmed=false/true usage is placed immediately after. Every sentence 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?
The two-step preview/approval workflow is well covered and the deduplication behavior is explained. However, with no output schema, the description does not state the return format beyond 'aggregate counts,' nor does it address the optional message parameter or the exact consequences of sending after confirmation. These are notable gaps for a tool that sends invitations.
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 coverage is only 20%, so the description must compensate. It partially does by referencing source/target events and 'selected guest statuses' for source_statuses, and it clarifies the confirmed false/true flow. However, it does not explain message, the default for source_statuses, or ID expectations, leaving clear gaps.
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 names a specific verb+resource workflow: build an audience from guest statuses on a source event, remove duplicates, and send soft Luma invitations. It clearly differentiates this tool from sibling invite/send tools by the 'from another Luma event' and deduplication behavior.
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 explicit invocation guidance: call with confirmed=false first to preview, then call with confirmed=true only after explicit approval. It does not explicitly name alternative sibling tools or state when not to use this tool, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsList Luma eventsARead-only
List events from the calendar attached to the configured API key.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Only events after this ISO 8601 datetime. | |
| before | No | Only events before this ISO 8601 datetime. | |
| status | No | Filter by calendar submission status. Defaults to approved. | |
| pagination_limit | No | ||
| pagination_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only and open-world nature of the operation, so the description does not need to restate safety. It adds useful authorization/source context ('configured API key'), but it does not disclose behavioral details like the default status filter or pagination 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?
The description is a single front-loaded sentence with no filler. Every word contributes to identifying the action, resource, and data source.
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 five-parameter list operation with no output schema, the description is minimally adequate but leaves return shape, default status, and cursor semantics unstated. It relies heavily on the schema and agent inference rather than being self-sufficient.
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 after, before, and status, but pagination_limit and pagination_cursor have no descriptions. The tool description adds no parameter-level meaning and does not compensate for the undocumented pagination semantics at 60% schema coverage.
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 identifies the action ('List'), the resource ('events'), and the data source ('calendar attached to the configured API key'). It is not a tautology and naturally distinguishes this tool from event mutation siblings like create_event and update_event.
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 for listing events from the configured API key's calendar, but it does not explicitly contrast it with alternatives such as get_event for a single event, list_guests, or registration_summary. There is clear context but no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_guestsList Luma guestsARead-only
List guests for an event. Guest data may include personal information; use only for event operations requested by the user.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | ||
| approval_status | No | ||
| pagination_limit | No | ||
| pagination_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation read-only and open-world, and the description adds a meaningful warning that guest data may include personal information. This goes beyond the structured annotations by giving the agent a data-handling constraint. No contradictory or missing behavioral disclosure is evident.
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 two short sentences with the core action front-loaded and no filler. The privacy note is relevant and placed second, so it does not obscure the main purpose.
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 list operation with no output schema, the description communicates the core action but leaves return-format expectations unspecified, and it does not mention how approval_status filtering or pagination cursors behave. The annotations and schema carry some of this weight, so the description is minimally adequate but not complete.
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 0%, and the description does not explain approval_status, pagination_limit, or pagination_cursor. It only implies the event_id parameter via 'for an event.' The enumerated values and defaults are visible in the schema, but the free-text description contributes almost no semantic value for the filter and pagination parameters.
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 and resource — 'List guests for an event' — which clearly distinguishes the operation from single-guest retrieval (get_guest) and event listing (list_events). The event scope is stated up front, matching the required event_id parameter.
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 only usage guidance is a privacy constraint: 'use only for event operations requested by the user.' It does not state when to prefer this over siblings such as get_guest, update_guest_status, or add_guests, nor does it specify exclusions. Usage context must be inferred from the name and title.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ticket_typesList Luma ticket typesARead-only
List all ticket types for an event, optionally including hidden ticket types.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | ||
| include_hidden | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety and external variability are covered. The description adds the optional hidden-ticket behavior, which is useful, but otherwise does not disclose pagination, ordering, or return format. No contradiction with 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, dense sentence with no filler. The primary operation and the optional modifier are front-loaded and each 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?
For a simple two-parameter read-only list tool, the description covers the essential scope and the one notable flag. It lacks explicit mention of output shape or pagination, but these are not critical given the tool's low complexity and annotation coverage.
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 0%, so the description must compensate for both parameters. It does: 'for an event' maps directly to event_id, and 'optionally including hidden ticket types' maps to include_hidden. It does not restate the default or format but gives enough semantic grounding.
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 the specific verb 'List' and resource 'ticket types for an event', which clearly distinguishes it from singular get_ticket_type and mutating create/update/delete_ticket_type. 'All ticket types' reinforces the collection 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?
Implied usage is clear: call this when you need the full set of ticket types for a given event. However, it does not explicitly state when to prefer get_ticket_type for a single type or mention any exclusions, so the routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registration_summarySummarize Luma registrationsARead-only
Count guest approval states and check-ins for an event across all guest pages without returning guest identities.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds useful behavioral context that the aggregation spans all guest pages (handles pagination internally) and that it deliberately withholds guest identities. No contradiction with 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?
One sentence, no filler, with the essential scope and privacy guarantee front-loaded. 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?
For a single-parameter, read-only summary tool, the description covers the action, scope, and privacy behavior. The lack of an output schema is offset by the description's mention of approval states and check-ins, though exact return shape is still unspecified.
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 coverage is 0%, but the single parameter event_id is intrinsically meaningful and the description reinforces it by scoping the counts 'for an event'. The description compensates adequately for the lack of schema documentation.
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?
Description is a clear verb-object construction: 'Count guest approval states and check-ins for an event across all guest pages'. It defines both the action and the resource, and the qualifier 'without returning guest identities' sets it apart from sibling tools like list_guests and get_guest.
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 explicit 'use when' or 'instead of' instructions are present, but the phrasing implies it is the aggregate, identity-free counterpart to list_guests and get_guest. The 'across all guest pages' and 'without returning guest identities' provide contextual cues, but no exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_hostRemove Luma event hostADestructive
Preview or remove one host from an event. The preview resolves the event and exact email. Visible hosts include their returned Luma identity; hidden hosts may be omitted from the event response and are clearly marked as unverified before confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| event_id | Yes | ||
| confirmed | No | False returns a non-mutating preview. True removes the host after explicit confirmation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag destructive behavior, and the description adds valuable context: the non-mutating preview mode, exact email resolution, and the nuanced handling of visible vs. hidden hosts including the unverified marker. This meaningfully enriches the agent's understanding 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?
Two sentences, front-loaded with the core action and mode distinction. Every clause adds useful information: preview behavior, exact email resolution, and host visibility handling. No wasted words.
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 mutating tool with no output schema, the description covers the important operational details: preview vs. confirmation, host visibility, and unverified markers. It does not describe response shape or error conditions, but the core decision-making context is present.
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 only 33%, so the description must compensate. It does clarify the 'confirmed' parameter and preview behavior, but it adds little detail about event_id or email beyond what the schema field names already imply. Partial compensation only.
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 and resource: 'Preview or remove one host from an event.' It clearly separates the two modes (preview vs. actual removal) and distinguishes this tool from siblings like add_host and update_host by focusing on removal.
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 provides clear context on when to use the tool: when you need to remove a host, with a safe preview beforehand. It explains the confirmation step but does not explicitly name alternatives or state when not to use it, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_invitesSend Luma event invitesA
Send soft event invitations by email and, when linked to a Luma account, SMS. Invited people choose whether to register. Show the event, recipient count, and message before asking for confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| guests | Yes | ||
| message | No | ||
| event_id | Yes | ||
| confirmed | Yes | Must be true only after explicit user confirmation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true. The description adds that this is a 'soft' invitation, meaning it's not a forced registration, and mentions it sends via email and SMS when linked. It does not disclose side effects like whether invitations can be sent only once, if there are rate limits, or what happens if a guest is already invited. However, the annotations already indicate it's not read-only and not destructive. The description does add a confirmation requirement shown to the user, which is a behavioral trait not in annotations. Overall, it adds some context (soft, channels, confirmation step) beyond the annotations, but it doesn't go deep into edge behaviors. With openWorldHint=true, it's expected that the tool might have external side effects, and the description mentions SMS and email sending, which covers that. It's average: better than nothing but not rich on behavioral details like idempotency or failure modes.
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 two sentences, front-loaded with the primary action and channels, and then explains the flow including a confirmation step. Every sentence earns its place: the first states what it does, the second explains the user experience and safety measure (confirmation). No padding or redundancy. It is concise and well-structured.
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 has 4 parameters, no output schema, and moderate complexity (sending emails/SMS), the description covers the key aspects: the invitation is soft (recipients choose), channels (email/SMS), and the confirmation step that requires `confirmed=true`. It mentions showing event, recipient count, and message before confirmation, which covers the important interaction. It does not mention how to construct the `guests` array in detail, but the schema handles that. It doesn't mention any limitations like invite expiration or SMS only if linked, which is mentioned. The description is fairly complete for a tool that sends invites, given the schema provides the required parameters. It lacks details on response or success/failure behavior, but since no output schema exists, the description could have hinted at what happens on success, but that's not strictly required. It's a minor gap. Overall, it's above average because it covers the workflow and key constraints.
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 coverage is only 25% because only the 'confirmed' parameter has a description ('Must be true only after explicit user confirmation.'). The description adds context about the `guests` array (that they choose whether to register) and mentions 'Show the event, recipient count, and message before asking for confirmation,' which relates to `event_id`, `guests`, and `message`. However, the description does not add details about the `guests` object structure (e.g., name is optional, email required) beyond what the schema provides. The schema already has constraints like maxLength on `message` and maxItems on `guests`. The description does not clarify the `event_id` format. With 25% coverage, the description partially compensates by explaining the flow but not all parameters. It adds value for the confirmation mechanism and the soft-invite semantics, but it doesn't explain the purpose of `message` beyond being shown. Since the coverage is low, the description should have done more to describe each parameter's intent. It's adequate but not thorough.
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 'Send soft event invitations by email and, when linked to a Luma account, SMS.' It specifies the verb (send), the resource (event invitations), and the delivery channels. It distinguishes itself from siblings like 'add_guests' (which likely just adds guests without sending invites) and 'invite_guests_from_event' (which might be a different flow). The description implies a distinct purpose that is not a tautology.
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 does not explicitly name alternative tools or state when *not* to use this tool versus siblings. However, it implies that this is for 'soft' invitations, which hints at a non-committal, non-forced invitation style, differentiating from a hard invite or waitlist approval. The context of siblings (e.g., 'invite_guests_from_event' suggests another invitation route) is there, but the description doesn't explicitly contrast. It gives a clear scenario: 'Invited people choose whether to register,' which implies a voluntary registration flow. It could have been stronger with explicit alternatives or conditions, but it's adequate for basic usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_eventUpdate Luma eventBIdempotent
Update selected fields on a Luma event. Call only after showing the changes and receiving explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| slug | No | ||
| end_at | No | ||
| event_id | Yes | ||
| start_at | No | ||
| timezone | No | ||
| confirmed | Yes | ||
| visibility | No | ||
| meeting_url | No | ||
| max_capacity | No | ||
| description_md | No | ||
| show_guest_list | No | ||
| waitlist_status | No | ||
| geo_address_json | No | ||
| registration_open | No | ||
| location_visibility | No | ||
| suppress_notifications | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-destructive, idempotent mutation. The description adds the confirmation prerequisite, which is useful behavioral context. It does not disclose partial-update semantics, side effects like notification behavior, or how fields combine, leaving the agent to infer those from parameters.
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?
Two sentences with the action first and the critical confirmation condition second. There is no filler, and every word contributes to operational clarity.
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 17 parameters, no output schema, and zero parameter descriptions, so the description carries a heavy burden. It provides only a one-line action plus confirmation rule, leaving many unknowns: which fields are mutually exclusive, how confirmed interacts with other fields, what the update response is, and whether the API does a partial or full replace. This is insufficient for such a complex mutation.
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 0%, and the description does not compensate. With 17 parameters, several require explanation (confirmed, geo_address_json, suppress_notifications, max_capacity), but the description only refers generically to 'selected fields'. Parameter names and enums provide some clue, but the agent cannot know required semantics like the confirmation flag's exact role or how partial updates merge.
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 names the verb 'Update' and the resource 'Luma event', and clarifies it updates 'selected fields', distinguishing it from create/delete/get events. It does not enumerate which fields, so it is slightly less crisp than a definition that lists them, but it is unambiguous about the operation.
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 explicit when-to-use guidance: only after showing the changes and receiving explicit confirmation. This handles the primary safety concern for a mutation tool. It does not contrast with siblings like create_event or delete_event, but those are sufficiently distinct by name that exclusionary guidance is less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_guest_statusUpdate Luma guest statusADestructive
Preview or update one guest's status. The preview shows the exact event, minimal guest identity, current and target status, captured paid-ticket count, refund choice, and notification settings. Moving an approved paid guest to a non-approved status requires an explicit refund choice.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| message | No | ||
| event_id | Yes | ||
| guest_id | Yes | Guest ID, ticket key, guest key, or email. | |
| confirmed | No | False returns a non-mutating preview. True applies the status change after explicit confirmation. | |
| send_email | No | ||
| should_refund | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds valuable behavioral context by explaining that preview mode is non-mutating and that certain status changes force refund decisions. It does not contradict the annotations and meaningfully enriches them with the refund-required condition.
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?
Two dense sentences deliver the essential tool behavior, the preview contents, and the most important constraint without fluff. The key idea — preview or update — is front-loaded, and every clause contributes useful information.
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 7-parameter mutation tool with no output schema, the description covers the preview behavior and the refund requirement, but it omits the message parameter, send_email behavior, and explicit update confirmation flow. An agent could call the tool correctly for simple cases but may miss important side effects without checking parameters individually.
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 only 29%, so the description carries some burden. It indirectly maps to should_refund ('refund choice') and send_email ('notification settings'), and clarifies the preview output, but it does not explain message, event_id, status enum meanings, or confirm the confirmation flow beyond what is already in the schema.
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 opens with a specific verb and resource — 'Preview or update one guest's status' — and clearly scopes the tool to a single guest's status. The focus on 'status' naturally distinguishes it from siblings like update_guest_tickets, and the added preview mode clarifies an important dual behavior.
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 a preview-then-update workflow and states a critical rule: moving an approved paid guest to a non-approved status requires an explicit refund choice. However, it does not explicitly say when to use this tool versus alternatives like approve_waitlisted_guests or update_guest_tickets, and it lacks any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_guest_ticketsUpdate Luma guest ticketsADestructive
Preview or add and remove tickets for one guest. Added tickets are complimentary administrative tickets and may exceed capacity. Removed tickets are invalidated without a refund. Luma still sends an in-app notification even when email is disabled.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | ||
| guest_id | Yes | Guest ID, ticket key, guest key, or email. | |
| confirmed | No | False returns a non-mutating preview. True applies the ticket changes after explicit confirmation. | |
| send_email | No | ||
| tickets_to_add | No | ||
| ticket_ids_to_remove | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by specifying concrete behavioral consequences: adding tickets may exceed capacity, removing tickets invalidates them without refund, and Luma sends in-app notifications even when email is disabled. These details are not present in the annotations (which only indicate destructiveHint=true, readOnlyHint=false, etc.) and give the agent a clearer picture of side effects. No contradictions with annotations are present.
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 three sentences long and front-loads the core action ('Preview or add and remove tickets for one guest') before adding essential caveats. Every sentence provides distinct, non-redundant information: the action, the capacity/refund implications, and notification behavior. There is no filler or repetition, making it efficient and easy to parse.
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 that there is no output schema, the description adequately covers the operational context: it explains the two modes (preview vs. actual changes), the nature of add/removal, capacity limits, monetary consequences, and notification behavior. It also mentions the single-guest scope. While it does not cover every edge case (e.g., maxItems limits, which are in the schema) or authentication prerequisites, the core information needed to invoke the tool correctly is present. It falls slightly short of being fully complete due to the absence of guidance on handling partial failures or response expectations, but it is sufficient for most agent use.
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 coverage is only 33%, with descriptions available only for guest_id and confirmed. The description compensates by explaining the overall behavior of key parameters: 'added tickets are complimentary administrative tickets and may exceed capacity' clarifies tickets_to_add; 'removed tickets are invalidated without a refund' clarifies ticket_ids_to_remove; and 'sends an in-app notification even when email is disabled' clarifies send_email. This adds meaning beyond the bare schema, though it does not provide per-parameter syntax or constraints (which the schema partially covers). The description effectively bridges the coverage gap.
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 opens with a precise, action-oriented statement: 'Preview or add and remove tickets for one guest.' It names the verb (preview/add/remove), the resource (tickets), and the scope (one guest), making it unambiguous. It also distinguishes itself from sibling tools by focusing specifically on per-guest ticket management, which no sibling addresses. The additional details about complimentary admin tickets clarify the nature of the operation.
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 does not explicitly mention when to use this tool versus alternatives or when not to use it. It implies usage via the 'preview' vs 'apply' distinction (confirmed=false for preview) and clarifies that added tickets are complimentary admin tickets that may exceed capacity, which signals a specific use case. However, it lacks any comparison to sibling tools or exclusion criteria, leaving the agent to infer the appropriate context from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_hostUpdate Luma event hostAIdempotent
Update a host's access level or public visibility after explicit confirmation. The event creator's access level cannot be changed.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| event_id | Yes | ||
| confirmed | Yes | Must be true only after explicit user confirmation. | |
| is_visible | No | ||
| access_level | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as non-read-only, idempotent, and non-destructive. The description adds meaningful behavioral constraints: confirmation is required, and the event creator's access level is immutable. These details go beyond what the annotations express.
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?
Two sentences with no filler. The operation is stated first, followed by the most important exception. Every word adds value.
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 5-parameter mutation with low schema coverage, the description omits some useful details: whether at least one of access_level or is_visible must be supplied, what 'none' access level means, and what the result of the update is. However, it does cover the critical confirmation and creator-exception constraints.
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 only 20%, putting more burden on the description. It does explain that access_level and is_visible are the update targets, but it leaves the meaning of the 'none' enum value and the identifying roles of event_id/email to inference.
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 specific operation: updating a host's access level or public visibility on a Luma event. It distinguishes this from add/remove host operations by naming the exact fields that can be changed.
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?
It provides clear context for use, specifically after explicit confirmation, and includes a hard exclusion: the event creator's access level cannot be changed. It does not explicitly name alternatives like add_host or remove_host, so some alternative routing is left implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ticket_typeUpdate Luma ticket typeAIdempotent
Update selected fields on a ticket type after explicit confirmation. Nullable fields clear their current value.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | No | ||
| cents | No | ||
| currency | No | ||
| confirmed | Yes | Must be true only after explicit user confirmation. | |
| is_hidden | No | ||
| min_cents | No | ||
| description | No | ||
| is_flexible | No | ||
| max_capacity | No | ||
| valid_end_at | No | ||
| valid_start_at | No | ||
| require_approval | No | ||
| event_ticket_type_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the annotations: it requires explicit user confirmation before updating and explains that nullable fields clear their current value. This complements the annotations, which already indicate this is a non-read-only, non-destructive, idempotent operation.
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 two sentences with no fluff, and the key behaviors are front-loaded: partial update, explicit confirmation, and null-clearing semantics. Every sentence contributes essential information.
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 mutation tool with 14 parameters and no output schema, the description is lean. It captures core update semantics but does not describe the response format, error conditions, or constraints related to parameters such as cents/currency pairing, leaving some context for an agent to infer.
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?
With only 7% schema description coverage, the description carries important parameter semantics: 'Nullable fields clear their current value' explains the behavior of nullable parameters, and 'Update selected fields' implies omitted fields remain unchanged. It does not document every parameter individually, but it covers the most consequential update semantics.
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 is 'Update' and the resource is a 'ticket type', which distinguishes it from create/delete/get ticket type tools. It specifies that only selected fields are updated, further clarifying its partial-update purpose, though it does not explicitly name sibling alternatives.
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 phrase 'after explicit confirmation' provides a clear prerequisite for when this tool may be invoked, and 'update selected fields' implies it is for modifying an existing ticket type rather than creating one. It does not explicitly mention alternatives or exclusions, but the invocation condition is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_connectionVerify Luma connectionARead-only
Verify the configured Luma API key and return the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already indicate a safe, read-only operation dependent on external configuration. The description adds that the tool validates a preconfigured API key and returns the authenticated user, but it does not disclose failure behavior when the key is missing or invalid, or what exactly the authenticated user object contains.
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 entire description is a single, efficient sentence that front-loads the action and result. Every word contributes meaning, with no redundant detail or filler.
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 parameter-less, simple verification tool with read-only annotations, the description fully explains its purpose and expected outcome. An agent has enough information to select and invoke it correctly without additional context.
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, so the schema is complete with 100% coverage and no parameter descriptions are needed. The description adds context about what is being verified, satisfying the baseline for parameter-less tools.
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 ('Verify') and resource ('configured Luma API key') and clearly states the result ('return the authenticated user'). It is easily distinguished from the sibling CRUD tools, none of which perform connection or credential verification.
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 clearly establishes this as the tool for checking Luma connectivity and authentication, which is distinct from all sibling operations. It does not explicitly state when-not-to-use or name alternatives, but no sibling tool offers this capability and the intended use is obvious from the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
23 tool updates
v0.7.5- Added
add_guests - Added
add_host - Added
approve_waitlisted_guests - Changed
create_event6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / end_at / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" - removed
Input schema / properties / geo_address_json / additionalPropertiesRemoved value: -false - changed
Input schema / properties / max_capacity / anyOfPrevious value: -[ - { - "exclusiveMinimum": 0, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - added
Input schema / properties / start_at / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- Added
create_ticket_type - Added
delete_event - Added
delete_ticket_type - Changed
get_event2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_guest2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Added
get_ticket_type - Added
invite_guests_from_event - Changed
list_events4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / after / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" - added
Input schema / properties / before / patternAdded value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
- Changed
list_guests2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Added
list_ticket_types - Changed
registration_summary2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Added
remove_host - Added
send_invites - Added
update_event - Added
update_guest_status - Added
update_guest_tickets - Added
update_host - Added
update_ticket_type - Added
verify_connection
3 tool updates
v0.4.0- Added
get_guest - Removed
update_event - Removed
verify_connection
7 tool updates
v0.1.0- First observed
create_event - First observed
get_event - First observed
list_events - First observed
list_guests - First observed
registration_summary - First observed
update_event - First observed
verify_connection
TDQS
Scored across 23 tools
Most tools map to a distinct resource/action combination, but add_guests, send_invites, and invite_guests_from_event occupy similar invite/registration territory, and approve_waitlisted_guests overlaps with update_guest_status at the bulk level. Detailed descriptions help, but an agent could still hesitate between these related actions.
Nearly all tools follow a snake_case verb_noun pattern (create_event, delete_ticket_type, update_guest_status), with resource-consistent CRUD verbs. Minor deviations like registration_summary and synonym variation (add vs create, remove vs delete) keep it from being perfect.
23 tools is at the high end for an MCP server and will feel heavy to navigate, though the count is justified by distinct subdomains (events, guests, hosts, ticket types, invites). It is not excessive enough to be chaotic, but it exceeds the ideal 3-15 range.
Events, hosts, and ticket types have full CRUD/lifecycle coverage, and guests have add/list/get/update operations with bulk approval. Gaps like direct guest removal and guest check-in are noticeable but can be partially worked around through status/ticket updates and registration_summary.
Maintenance
Related MCP Connectors
Eventify MCP server — manage events, attendees, sessions, speakers, sponsors, and analytics.
A MCP server that works with Google Calendar to manage event listing, reading, and updates.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
TheSignup MCP server — read and manage signups, participants, webhooks, and analytics.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server for the Luma Events API that enables creating, updating, and managing events and guests.96-
- FlicenseNot gradedqualityBmaintenanceMCP server for managing events on Meetup.com and Luma via AI assistants like Claude.2-
- FlicenseAqualityDmaintenanceA simple MCP server for event scheduling and automation.12-
- FlicenseNot gradedqualityDmaintenanceMCP server for eventos event management platform, enabling AI assistants to manage events and tickets via API integration. Supports authentication, ticket CRUD operations, and listing with pagination.1-