Skip to main content
Glama
Blackie360

Luma Events MCP Server

by Blackie360

npm version Release Node.js License: MIT

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.

IMPORTANT

This is an independent, community-built project and is not affiliated with or endorsed by Luma.

NOTE

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

  1. Node.js 20 or newer.

  2. A Luma calendar with API access.

  3. A calendar API key from the Luma API settings.

  4. An MCP client that supports the 2025-06-18 protocol 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 setup
NOTE

Releases 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 clients

The wizard:

  1. Opens with a compact ASCII banner and numbered setup stages, with color only when the terminal supports it.

  2. Detects installed Codex, Cursor, Claude Code, Gemini CLI, and Grok CLI clients.

  3. Lets you select one, several, or all detected clients with ↑/↓, Space, and Enter. Press a to select or clear all clients.

  4. Prompts you to paste your Luma calendar API key with masked terminal input.

  5. Verifies the key with Luma before changing anything.

  6. Shows the exact installation plan and waits for final confirmation.

  7. 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.json

  • Windows: %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-run

Client

Setup adapter

OpenAI Codex

codex mcp add

Cursor

Safe merge into the global mcp.json

Claude Code

claude mcp add --scope user

Gemini CLI

gemini mcp add --scope user

Grok CLI

grok mcp add

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 setup

Running 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.

CAUTION

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

verify_connection

Checks the API key and returns the authenticated Luma user.

Read-only

list_events

Lists approved or pending events with date filters and pagination.

Read-only

get_event

Returns complete details for one event.

Read-only

create_event

Creates an event with registration, location, visibility, and capacity settings.

Confirmation required

update_event

Updates selected event fields.

Confirmation required

delete_event

Uses Luma's two-step cancellation flow and reports guest/refund impact.

Preview, confirmation, destructive

Guests and registrations

Tool

What it does

Write behavior

get_guest

Finds one guest by ID, ticket key, guest key, or email.

Read-only; returns personal data

list_guests

Lists event guests, optionally filtered by approval status.

Read-only; returns personal data

registration_summary

Counts registration states and check-ins without returning identities.

Read-only

add_guests

Registers guests as approved, pending approval, or waitlisted.

Confirmation required

update_guest_status

Moves one guest between approved, declined, pending, and waitlist states.

Preview, confirmation, refund-aware

update_guest_tickets

Adds complimentary tickets or invalidates existing tickets.

Preview, confirmation, non-idempotent

approve_waitlisted_guests

Approves up to 90 waitlisted guests per resumable run.

Confirmation required

Ticket types

Tool

What it does

Write behavior

list_ticket_types

Lists visible ticket types and optionally includes hidden ones.

Read-only

get_ticket_type

Returns one ticket type by ID.

Read-only

create_ticket_type

Creates free, paid, or flexible-price ticket types.

Confirmation required

update_ticket_type

Changes pricing, availability, approval, visibility, or sale settings.

Confirmation required

delete_ticket_type

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

add_host

Adds a visible or hidden manager, check-in host, or no-access host.

Confirmation required

update_host

Changes a host's access level or public visibility.

Confirmation required

remove_host

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

send_invites

Sends soft invitations in batches of 100 by email and, when linked, SMS.

Confirmation required

invite_guests_from_event

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

The Luma Events MCP server describing its available tools and confirmation safeguards

List upcoming events

The Luma Events MCP server listing upcoming calendar events

Analyze guest attendance

Guest identities have been redacted from this public example.

Aggregate guest attendance insights with guest names redacted


Configuration

Variable

Required

Default

Description

LUMA_API_KEY

No after setup

Stored credential

Calendar-scoped API key. An environment value overrides the stored key.

LUMA_API_BASE

No

https://public-api.luma.com

Alternate API base for tests or compatible proxies.

LUMA_API_KEY_FILE

No

Platform credential path

Override the stored credential file location.

LUMA_EVENTS_CONFIG_DIR

No

Platform config directory

Override the setup directory containing credentials.json.

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 +a

Never 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-mcp

Install dependencies and build:

corepack enable
pnpm install
pnpm build

Start the local stdio server:

pnpm start

The 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 pack

prepack 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.json

Automatic 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:

  1. Uses the version in package.json when that version has not been published.

  2. Otherwise advances the highest published stable version by one patch.

  3. Synchronizes the npm package, runtime, Codex, and Cursor versions.

  4. Runs the type-checker, all tests, the production build, and git diff --check.

  5. Commits generated release metadata when needed and creates the matching tag.

  6. 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_summary when aggregate counts are enough.

  • Use list_guests and get_guest only 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:

  1. Fork the repository.

  2. Create a focused branch.

  3. Add or update tests for the change.

  4. Run pnpm check and pnpm test.

  5. 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

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 tools
add_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestsYes
ticketNoOne ticket type assigned to every guest. Cannot be combined with tickets.
ticketsNoMultiple tickets assigned to every guest. Cannot be combined with ticket.
event_idYes
confirmedYesMust be true only after explicit user confirmation.
send_emailNo
approval_statusNoapproved

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
emailYes
event_idYes
confirmedYesMust be true only after explicit user confirmation.
is_visibleNo
access_levelNomanager

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 guestsA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoOptional personal message included in Luma's approval email. Cannot be used when send_email is false.
event_idYes
confirmedYesMust be true only after explicit user confirmation.
send_emailNoWhether Luma should email each guest about the approval.
max_approvalsNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
slugNo
end_atNo
start_atYes
timezoneNoAfrica/Nairobi
confirmedYesMust be true only after explicit user confirmation.
visibilityNo
meeting_urlNo
max_capacityNo
description_mdNo
show_guest_listNo
waitlist_statusNo
geo_address_jsonNo
registration_openNo
location_visibilityNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
typeYes
centsNo
currencyNo
event_idYes
confirmedYesMust be true only after explicit user confirmation.
is_hiddenNo
min_centsNo
descriptionNo
is_flexibleNo
max_capacityNo
valid_end_atNo
valid_start_atNo
require_approvalNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 eventA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes
confirmedNoFalse returns a non-destructive preview. True permanently cancels and deletes the event after explicit user confirmation.
should_refundNoWhether to refund paid guests. Required when the preview reports is_paid=true.

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 typeA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes
confirmedNoFalse returns a non-mutating preview. True deletes the ticket type after explicit confirmation.
event_ticket_type_idYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 eventA
Read-only

Get complete details for one Luma event.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 guestB
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGuest ID, ticket key, guest key, or email.
event_idYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 typeA
Read-only

Get one ticket type by its ticket-type ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_ticket_type_idYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNo
confirmedNoFalse returns an aggregate preview. True rebuilds the audience and sends the invitations.
source_event_idYes
source_statusesNo
target_event_idYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 eventsA
Read-only

List events from the calendar attached to the configured API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoOnly events after this ISO 8601 datetime.
beforeNoOnly events before this ISO 8601 datetime.
statusNoFilter by calendar submission status. Defaults to approved.
pagination_limitNo
pagination_cursorNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 guestsA
Read-only

List guests for an event. Guest data may include personal information; use only for event operations requested by the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes
approval_statusNo
pagination_limitNo
pagination_cursorNo

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 typesA
Read-only

List all ticket types for an event, optionally including hidden ticket types.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes
include_hiddenNo

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 registrationsA
Read-only

Count guest approval states and check-ins for an event across all guest pages without returning guest identities.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 hostA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes
event_idYes
confirmedNoFalse returns a non-mutating preview. True removes the host after explicit confirmation.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestsYes
messageNo
event_idYes
confirmedYesMust be true only after explicit user confirmation.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 eventB
Idempotent

Update selected fields on a Luma event. Call only after showing the changes and receiving explicit confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
slugNo
end_atNo
event_idYes
start_atNo
timezoneNo
confirmedYes
visibilityNo
meeting_urlNo
max_capacityNo
description_mdNo
show_guest_listNo
waitlist_statusNo
geo_address_jsonNo
registration_openNo
location_visibilityNo
suppress_notificationsNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 statusA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes
messageNo
event_idYes
guest_idYesGuest ID, ticket key, guest key, or email.
confirmedNoFalse returns a non-mutating preview. True applies the status change after explicit confirmation.
send_emailNo
should_refundNo

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 ticketsA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes
guest_idYesGuest ID, ticket key, guest key, or email.
confirmedNoFalse returns a non-mutating preview. True applies the ticket changes after explicit confirmation.
send_emailNo
tickets_to_addNo
ticket_ids_to_removeNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 hostA
Idempotent

Update a host's access level or public visibility after explicit confirmation. The event creator's access level cannot be changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes
event_idYes
confirmedYesMust be true only after explicit user confirmation.
is_visibleNo
access_levelNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 typeA
Idempotent

Update selected fields on a ticket type after explicit confirmation. Nullable fields clear their current value.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
typeNo
centsNo
currencyNo
confirmedYesMust be true only after explicit user confirmation.
is_hiddenNo
min_centsNo
descriptionNo
is_flexibleNo
max_capacityNo
valid_end_atNo
valid_start_atNo
require_approvalNo
event_ticket_type_idYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 connectionA
Read-only

Verify the configured Luma API key and return the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 23 tool updatesv0.7.5
    • Addedadd_guests
    • Addedadd_host
    • Addedapprove_waitlisted_guests
    • Changedcreate_event6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / end_at / pattern
        Added 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))$"
      • removedInput schema / properties / geo_address_json / additionalProperties
        Removed value: -false
      • changedInput schema / properties / max_capacity / anyOf
        Previous value: -[
        -  {
        -    "exclusiveMinimum": 0,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "exclusiveMinimum": 0,
        +    "maximum": 9007199254740991,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / start_at / pattern
        Added 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))$"
    • Addedcreate_ticket_type
    • Addeddelete_event
    • Addeddelete_ticket_type
    • Changedget_event2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_guest2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedget_ticket_type
    • Addedinvite_guests_from_event
    • Changedlist_events4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / after / pattern
        Added 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))$"
      • addedInput schema / properties / before / pattern
        Added 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))$"
    • Changedlist_guests2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedlist_ticket_types
    • Changedregistration_summary2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedremove_host
    • Addedsend_invites
    • Addedupdate_event
    • Addedupdate_guest_status
    • Addedupdate_guest_tickets
    • Addedupdate_host
    • Addedupdate_ticket_type
    • Addedverify_connection
  2. 3 tool updatesv0.4.0
    • Addedget_guest
    • Removedupdate_event
    • Removedverify_connection
  3. 7 tool updatesv0.1.0
    • First observedcreate_event
    • First observedget_event
    • First observedlist_events
    • First observedlist_guests
    • First observedregistration_summary
    • First observedupdate_event
    • First observedverify_connection

TDQS

A3.7/5.0

Scored across 23 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers