Soundcheck runs live events: gigs, crew staffing (offers, invitations, availability), call lists, setlists, venues, customers, sponsors, leads, inventory, the org mailbox, imports and gig-file ingestion. Tools act as the signed-in user in their organization; coordinator actions need an org role. Read tools are safe to call freely. Preview first and get the user's OK before tools that message real people (send_message, broadcast_event_reminder, send_reminder, invite_org_member, invite_customer_contact_to_portal, create_form_assignment with notify_customer, update_event when it moves a gig's dates, times or location) or write imported or ingested data (commit_import, import_file, commit_ingestion_file, commit_ingestion_batch). Call get_org_agent_profile at session start; search_org_knowledge recalls venue quirks, past incidents and lost-lead reasons (guidance only; facts and money come from the other tools). Turn a client brief into a draft gig with create_event_plan → update_event_plan → review_event_plan → create_draft_event_from_plan. Use search_soundcheck_docs to learn how a feature works before guessing, and get_soundcheck_link to send the user to the web app for visual review or work this server does not do (new contracts, billing, payouts, integrations, branding). Deletes, archives, sends and other destructive or outbound writes are confirmation-gated: the first call returns status confirmation_required with a confirmation_token and does not write. Show the summary, get approval, then repeat the call with the same arguments plus confirmation_token.
Protocol
Pass100/10016 / 16 pts
Connection, authentication, and protocol compatibility.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
List events visible to the authenticated user. Filter by organization, user, or status. Paginated with limit (max 100) and offset. Each row is a nested envelope {event, assignments, members, invitations}: the gig's id, title, date and event_status live on row.event, not on the row itself — match a gig by row.event.title. event_status is an exact match: an unarchived gig is UNARCHIVED, not ACTIVE, so omit the filter (or pass UNARCHIVED) to find one. event_status="TEMPLATE" lists the organization's gig templates — the ones create_event_plan and suggest_plan_templates plan from. The onboarding sample gig (row.event.is_sample=true) is left out unless include_sample is true. event_status="DELETED" instead lists gigs deleted in the last 30 days that restore_event can bring back: flat rows with deleted_by and deletion_scheduled_for, gig managers only, organization_id defaults to your active org, no pagination.
Resolve contradictions between the description, input schema, and annotations.
Inputs70/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
filter to events in this organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
user_id
filter to events the given user is a member of
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "list_events",
"title": "List events",
"description": "List events visible to the authenticated user. Filter by organization, user, or status. Paginated with limit (max 100) and offset. Each row is a nested envelope {event, assignments, members, invitations}: the gig's id, title, date and event_status live on row.event, not on the row itself — match a gig by row.event.title. event_status is an exact match: an unarchived gig is UNARCHIVED, not ACTIVE, so omit the filter (or pass UNARCHIVED) to find one. event_status=\"TEMPLATE\" lists the organization's gig templates — the ones create_event_plan and suggest_plan_templates plan from. The onboarding sample gig (row.event.is_sample=true) is left out unless include_sample is true. event_status=\"DELETED\" instead lists gigs deleted in the last 30 days that restore_event can bring back: flat rows with deleted_by and deletion_scheduled_for, gig managers only, organization_id defaults to your active org, no pagination.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"description": "max 100, default 20"
},
"offset": {
"type": "integer",
"description": "default 0"
},
"user_id": {
"type": "string",
"description": "filter to events the given user is a member of"
},
"event_status": {
"type": "string",
"description": "exact match: ACTIVE | UNARCHIVED | DRAFT | COMPLETED | SETTLED | CANCELLED | ARCHIVED | TEMPLATE | DELETED"
},
"include_sample": {
"type": "boolean",
"description": "include the onboarding sample gig (is_sample=true); default false"
},
"organization_id": {
"type": "string",
"description": "filter to events in this organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List events",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
Get a single event by id, including assignments, members, and invitations. event.stages lists the venue stages the gig is booked on (id, name, venue_id); set them with set_event_stages.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Explain the meaning of this value, not just its name.
event_id
the event id
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
List active event group chats visible to the authenticated user for an event. Managers see all chats; other organization members see only chats they belong to. Use this to resolve a chat id from an event id and chat name before reading cited messages. SMS phone numbers are redacted for non-managers. Read-only; uses the authenticated Clerk backend auth and never mints or returns a Twilio token.
The description explains the capability, when to use it, and what to expect.
Inputs47/100
Explain the meaning of this value, not just its name.
event_id
the event id
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_event_chats",
"title": "List event chats",
"description": "List active event group chats visible to the authenticated user for an event. Managers see all chats; other organization members see only chats they belong to. Use this to resolve a chat id from an event id and chat name before reading cited messages. SMS phone numbers are redacted for non-managers. Read-only; uses the authenticated Clerk backend auth and never mints or returns a Twilio token.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the event id"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List event chats",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Create an event group chat on a gig and add organization members to it by org member id (the id field from list_org_members). Members using the app join in-app; phone-only members are bridged over SMS and receive a text. Members who cannot be added come back in failed_members without failing the call. Returns { chat, failed_members }. Gig managers only; 1 to 50 members per call; sample gigs are refused. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Explain the meaning of this value, not just its name.
event_id
the event id
Explain the meaning of this value, not just its name.
name
chat name shown to members
Clear enough to supply this argument.
org_member_ids
org member ids to add (the id field from list_org_members)
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "create_event_chat",
"title": "Create event chat",
"description": "Create an event group chat on a gig and add organization members to it by org member id (the id field from list_org_members). Members using the app join in-app; phone-only members are bridged over SMS and receive a text. Members who cannot be added come back in failed_members without failing the call. Returns { chat, failed_members }. Gig managers only; 1 to 50 members per call; sample gigs are refused. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"name",
"org_member_ids"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "chat name shown to members"
},
"event_id": {
"type": "string",
"description": "the event id"
},
"org_member_ids": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"description": "org member ids to add (the id field from list_org_members)"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create event chat",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
List Soundcheck-stored messages for an event group chat (the webhook-persisted store, not live Twilio history), or pass message_id to get that one message. Each row includes citation_id (stable; same as id), citation_body_hash, citation_version, status (SENT | EDITED | DELETED), edited_at / deleted_at, author identity/display name/user id, channel (CHAT | SMS), created_provider_timestamp (immutable pagination order; page with before set to the last returned id), provider_timestamp, and media metadata. Cite with citation_id plus hash/version — do not treat a DELETED or superseded body as current. Chat members and gig managers only. Uses the authenticated user Clerk backend auth; never mints or returns a Twilio token.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Explain the meaning of this value, not just its name.
chat_id
the event chat id
Explain the meaning of this value, not just its name.
message_id
get only this stored message (same as citation_id); ignores paging
Clear enough to supply this argument.
before
Last message id from the previous page; use without offset for stable pagination
Clear enough to supply this argument.
limit
max 100, default 50
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
0 to 10000, default 0
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_event_chat_messages",
"title": "List event chat messages",
"description": "List Soundcheck-stored messages for an event group chat (the webhook-persisted store, not live Twilio history), or pass message_id to get that one message. Each row includes citation_id (stable; same as id), citation_body_hash, citation_version, status (SENT | EDITED | DELETED), edited_at / deleted_at, author identity/display name/user id, channel (CHAT | SMS), created_provider_timestamp (immutable pagination order; page with before set to the last returned id), provider_timestamp, and media metadata. Cite with citation_id plus hash/version — do not treat a DELETED or superseded body as current. Chat members and gig managers only. Uses the authenticated user Clerk backend auth; never mints or returns a Twilio token.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chat_id"
],
"properties": {
"limit": {
"type": "integer",
"description": "max 100, default 50"
},
"before": {
"type": "string",
"description": "Last message id from the previous page; use without offset for stable pagination"
},
"offset": {
"type": "integer",
"maximum": 10000,
"minimum": 0,
"description": "0 to 10000, default 0"
},
"chat_id": {
"type": "string",
"description": "the event chat id"
},
"message_id": {
"type": "string",
"description": "get only this stored message (same as citation_id); ignores paging"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List event chat messages",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Post a message to an event group chat as the authenticated user (not a separate bot identity). Notifies other members via the normal Twilio/SMS path. Returns the stored message row (same fields as list_event_chat_messages). Chat members and gig managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
chat_id
the event chat id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
body
message text
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
List the org members assigned to MANAGE a gig, with the scoped roles each holds (LEAD, STAFFING, TASKS, RUN_OF_SHOW, FINANCES). LEAD implies all the others. These are managerial grants, not the crew working the show — use list_event_members for the roster.
The description explains the capability, when to use it, and what to expect.
Inputs43/100
Explain the meaning of this value, not just its name.
event_id
the event id
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Assign an org member to manage a gig with a scoped role set. REPLACES the whole set: pass every role the person should hold, not just the new ones. LEAD implies all the others. Requires an org gig manager or a LEAD assignee on the gig. Rejected on template events.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
event_id
the event id
Explain the meaning of this value, not just its name.
org_member_id
the OrgMember id (not the user id) to assign — from list_org_members
Clear enough to supply this argument.
roles
the complete role set: LEAD | STAFFING | TASKS | RUN_OF_SHOW | FINANCES. Non-empty.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "set_event_assignee",
"title": "Set event assignee",
"description": "Assign an org member to manage a gig with a scoped role set. REPLACES the whole set: pass every role the person should hold, not just the new ones. LEAD implies all the others. Requires an org gig manager or a LEAD assignee on the gig. Rejected on template events.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"org_member_id",
"roles"
],
"properties": {
"roles": {
"type": "array",
"items": {
"type": "string"
},
"description": "the complete role set: LEAD | STAFFING | TASKS | RUN_OF_SHOW | FINANCES. Non-empty."
},
"event_id": {
"type": "string",
"description": "the event id"
},
"org_member_id": {
"type": "string",
"description": "the OrgMember id (not the user id) to assign — from list_org_members"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Set event assignee",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Remove every management role an org member holds on a gig. Idempotent — removing someone who is not assigned succeeds. Does not remove them from the crew roster.
The description explains the capability, when to use it, and what to expect.
Inputs61/100
Explain the meaning of this value, not just its name.
event_id
the event id
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
List the authenticated user's events across all their organizations (defaults to ACTIVE). Answers 'what's on my schedule'. Tool name `my_agenda` is kept for agent compatibility; verb-noun aliases such as get_my_agenda are not registered separately to avoid breaking existing callers.
The description explains the capability, when to use it, and what to expect.
Inputs71/100
Explain the meaning of this value, not just its name.
event_status
filter by status (default ACTIVE)
Explain the meaning of this value, not just its name.
limit
max events, max 100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
include_sample
include the onboarding sample gig (is_sample=true); default false
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Aggregate actionable pending event invitations, crew offers (including standby), and availability requests for the authenticated user. Excludes settled responses, expired or terminal requests, and gigs whose last local day has passed. Answers 'what do I need to respond to?'. Tool name `my_pending_actions` is kept for agent compatibility; verb-noun aliases such as list_my_pending_actions are not registered separately to avoid breaking existing callers.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No input fields.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Load a compact, one-call snapshot of an organization to ground org-wide work: the org profile, its crew positions, its venues, its ACTIVE events ordered nearest first (including today and ongoing gigs in their event/organization timezone), and its team. Defaults to your active organization. Read-only — sections you cannot access are listed under `unavailable`.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Scan an organization for what may need attention, in one call: `upcoming_events` (ACTIVE, nearest first, including today and ongoing gigs in their event/organization timezone) and `pending_actions` (invitations, crew offers, availability requests awaiting YOU). Defaults to your active org. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
max upcoming events (max 100, default 25)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
List what needs an org owner's or admin's attention on upcoming gigs (next 30 days): deterministic findings where something changed and is still unfinished — call times changed after crew were notified, crew dropped off with shifts still open, a guest-count change with open tasks, billing terms changed with an unpaid receivable, or staffing short close to the gig. Each item has a classification (BLOCKING, NEEDS_ATTENTION, WATCH, FYI), a deterministic `reason`, the gig, affected people/records, and `evidence` records (kind + id + summary + timestamp) to cite as provenance, plus a navigation-only `suggested_action`. Sorted most urgent first. Owner/admin only; defaults to your active org. Read-only — resolve anything through the existing confirm-gated tools.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
max items (max 100, default 25)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_attention_items",
"title": "Get attention items",
"description": "List what needs an org owner's or admin's attention on upcoming gigs (next 30 days): deterministic findings where something changed and is still unfinished — call times changed after crew were notified, crew dropped off with shifts still open, a guest-count change with open tasks, billing terms changed with an unpaid receivable, or staffing short close to the gig. Each item has a classification (BLOCKING, NEEDS_ATTENTION, WATCH, FYI), a deterministic `reason`, the gig, affected people/records, and `evidence` records (kind + id + summary + timestamp) to cite as provenance, plus a navigation-only `suggested_action`. Sorted most urgent first. Owner/admin only; defaults to your active org. Read-only — resolve anything through the existing confirm-gated tools.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"description": "max items (max 100, default 25)"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get attention items",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Read an organization's CheckAI agent playbook — the saved free-text rules/preferences the agent should follow for this org. Returns {organization_id, agent_playbook}. Defaults to your active org. get_org_agent_profile returns this playbook too, alongside the org's curated knowledge. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description66/100
Get a single organization by id. tour_term is the org's own word for a tour ({ singular, plural, source }): band/dj orgs say Tour, venues Series, everyone else Project unless the org set its own. Use that word when talking to the user about tours; tool and field names (tour_id, list_tours) keep saying tour.
Describe the returned information so the agent knows whether it will answer the request.
Inputs50/100
Explain the meaning of this value, not just its name.
organization_id
the organization id
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
List the position roster (instruments, roles) for an organization. Each row includes is_active. Defaults to active positions only so deactivated roles (Guitar, Bass, etc.) are not offered for staffing. Pass active_only=false to include deactivated roles. organization_id defaults to your active organization. source="defaults" instead lists Soundcheck's built-in position catalog (FOH Engineer, Stage Manager, Guitar, …) grouped by section: use a returned id as default_position_id in create_org_position to enable that role; roles not in the catalog are created with custom_name.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
active_only
default true; set false to include deactivated positions
Clear enough to supply this argument.
source
organization (default): this org's roster; defaults: the built-in catalog
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_org_positions",
"title": "List organization positions",
"description": "List the position roster (instruments, roles) for an organization. Each row includes is_active. Defaults to active positions only so deactivated roles (Guitar, Bass, etc.) are not offered for staffing. Pass active_only=false to include deactivated roles. organization_id defaults to your active organization. source=\"defaults\" instead lists Soundcheck's built-in position catalog (FOH Engineer, Stage Manager, Guitar, …) grouped by section: use a returned id as default_position_id in create_org_position to enable that role; roles not in the catalog are created with custom_name.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"source": {
"enum": [
"organization",
"defaults"
],
"type": "string",
"description": "organization (default): this org's roster; defaults: the built-in catalog"
},
"active_only": {
"type": "boolean",
"description": "default true; set false to include deactivated positions"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List organization positions",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
List the offering catalog for an organization — what the org sells on a show (dry rentals, crew day rates, production packages, venue services). Each row carries sell_rate, cogs, margin_pct, unit, category and how many invoice templates use it. Defaults to active offerings only; pass include_inactive=true to include retired ones. view="templates" instead lists the invoice templates: each carries its ordered offering lines (quantity, rate override, effective rate, amount, cost) and totals (subtotal, estimated cost, gross margin, margin %, deposit due, balance). organization_id defaults to your active organization. Offerings is a beta feature: for an organization or user it is not enabled for, this returns 404.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
include_inactive
default false; set true to include retired offerings
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
view
offerings (default): the catalog; templates: the invoice templates
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_offerings",
"title": "List offerings",
"description": "List the offering catalog for an organization — what the org sells on a show (dry rentals, crew day rates, production packages, venue services). Each row carries sell_rate, cogs, margin_pct, unit, category and how many invoice templates use it. Defaults to active offerings only; pass include_inactive=true to include retired ones. view=\"templates\" instead lists the invoice templates: each carries its ordered offering lines (quantity, rate override, effective rate, amount, cost) and totals (subtotal, estimated cost, gross margin, margin %, deposit due, balance). organization_id defaults to your active organization. Offerings is a beta feature: for an organization or user it is not enabled for, this returns 404.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"view": {
"enum": [
"offerings",
"templates"
],
"type": "string",
"description": "offerings (default): the catalog; templates: the invoice templates"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"include_inactive": {
"type": "boolean",
"description": "default false; set true to include retired offerings"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List offerings",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
List setlists for an organization, or pass event_id to get only the setlists attached to that gig. Paginated with limit (max 100, default 20) and offset; event_id ignores pagination. organization_id defaults to your active organization. For an organization on Run of Show (setlists brought over), this returns a read-only projection of the Run of Show set items: one setlist per gig, whose id is the gig id.
Describe the returned information so the agent knows whether it will answer the request.
Inputs69/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event_id
only the setlists attached to this gig
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Explain the meaning of this value, not just its name.
limit
max 100, default 20
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
default 0
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_setlists",
"title": "List setlists",
"description": "List setlists for an organization, or pass event_id to get only the setlists attached to that gig. Paginated with limit (max 100, default 20) and offset; event_id ignores pagination. organization_id defaults to your active organization. For an organization on Run of Show (setlists brought over), this returns a read-only projection of the Run of Show set items: one setlist per gig, whose id is the gig id.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"description": "max 100, default 20"
},
"offset": {
"type": "integer",
"description": "default 0"
},
"event_id": {
"type": "string",
"description": "only the setlists attached to this gig"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List setlists",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
List songs in the organization library. Paginated with limit (max 100, default 20) and offset. organization_id defaults to your active organization (you must be a member of that org). Use after delete_song to verify the song was removed from the library.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
max 100, default 20
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
default 0
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Get a single setlist by id, including its sets and songs. For an organization on Run of Show (setlists brought over), this returns a read-only projection of the Run of Show set items: one setlist per gig, whose id is the gig id.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Explain the meaning of this value, not just its name.
setlist_id
the setlist id
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_setlist",
"title": "Get setlist",
"description": "Get a single setlist by id, including its sets and songs. For an organization on Run of Show (setlists brought over), this returns a read-only projection of the Run of Show set items: one setlist per gig, whose id is the gig id.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"setlist_id"
],
"properties": {
"setlist_id": {
"type": "string",
"description": "the setlist id"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get setlist",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
List venues for an organization. By default returns only org-saved venues (excludes rows unlinked by delete_venue). Pass saved_only=false to search the shared global directory (includes unsaved rows with is_saved_for_org=false). Pass search to match venue name (substring, case-insensitive). Paginated with limit (max 100, default 20) and offset. organization_id defaults to your active organization.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
search
case-insensitive substring match on venue name
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
saved_only
default true: only org-saved venues. Pass false to search the shared global directory (includes unsaved rows with is_saved_for_org=false)
Clear enough to supply this argument.
limit
max 100, default 20
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
default 0
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Get a single venue by id. organization_id is required by the API and defaults to your active org. Its bookable stages or rooms are listed by list_venue_stages with venue_id. view="enrichment" instead reads the latest venue research proposal from enrich_venue without running new research: available (whether research is configured) and run (null when the venue has not been researched).
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
venue_id
the venue id
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Clear enough to supply this argument.
view
venue (default): the venue; enrichment: its latest research proposal
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_venue",
"title": "Get venue",
"description": "Get a single venue by id. organization_id is required by the API and defaults to your active org. Its bookable stages or rooms are listed by list_venue_stages with venue_id. view=\"enrichment\" instead reads the latest venue research proposal from enrich_venue without running new research: available (whether research is configured) and run (null when the venue has not been researched).",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"venue_id"
],
"properties": {
"view": {
"enum": [
"venue",
"enrichment"
],
"type": "string",
"description": "venue (default): the venue; enrichment: its latest research proposal"
},
"venue_id": {
"type": "string",
"description": "the venue id"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get venue",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
List customers (clients/contacts) for an organization. Pass search to match customer name (substring, case-insensitive). Paginated with limit (max 100, default 20) and offset. organization_id defaults to your active organization.
Describe the returned information so the agent knows whether it will answer the request.
Inputs81/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
search
case-insensitive substring match on customer name
Clear enough to supply this argument.
limit
max 100, default 20
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
default 0
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
List inventory items (equipment, stock) for an organization. Pass search to match name, category, or location (substring, case-insensitive). Paginated with limit (max 100, default 20) and offset. organization_id defaults to your active organization. assigned_quantity and available_quantity are as of today in the org timezone. committed_quantity sums active assignments covering today or future days; upcoming_quantity is the subset starting after today, including member and kit assignments. These totals can exceed stock across non-overlapping bookings; do not subtract them from quantity to calculate availability. For a gig's dates use check_inventory_availability with event_id.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
search
case-insensitive substring match on name, category, or location
Clear enough to supply this argument.
limit
max 100, default 20
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
default 0
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_inventory",
"title": "List inventory",
"description": "List inventory items (equipment, stock) for an organization. Pass search to match name, category, or location (substring, case-insensitive). Paginated with limit (max 100, default 20) and offset. organization_id defaults to your active organization. assigned_quantity and available_quantity are as of today in the org timezone. committed_quantity sums active assignments covering today or future days; upcoming_quantity is the subset starting after today, including member and kit assignments. These totals can exceed stock across non-overlapping bookings; do not subtract them from quantity to calculate availability. For a gig's dates use check_inventory_availability with event_id.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"description": "max 100, default 20"
},
"offset": {
"type": "integer",
"description": "default 0"
},
"search": {
"type": "string",
"description": "case-insensitive substring match on name, category, or location"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List inventory",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Get a single inventory item by id, including active assignments. assigned_quantity and available_quantity are as of today in the org timezone. committed_quantity sums active assignments covering today or future days; upcoming_quantity is the subset starting after today, including member and kit assignments. These totals can exceed stock across non-overlapping bookings; do not subtract them from quantity to calculate availability. For a gig's dates use check_inventory_availability with event_id.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
item_id
the inventory item id
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_inventory",
"title": "Get inventory",
"description": "Get a single inventory item by id, including active assignments. assigned_quantity and available_quantity are as of today in the org timezone. committed_quantity sums active assignments covering today or future days; upcoming_quantity is the subset starting after today, including member and kit assignments. These totals can exceed stock across non-overlapping bookings; do not subtract them from quantity to calculate availability. For a gig's dates use check_inventory_availability with event_id.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"item_id"
],
"properties": {
"item_id": {
"type": "string",
"description": "the inventory item id"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get inventory",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Check whether inventory is free over a range of civil days (YYYY-MM-DD). Per item it returns the capacity, the peak number booked in the range, what is available, any shortage and the bookings that overlap. Pass event_id to use a gig's own dates and see what that gig has booked. Omit item_ids to check every item; an empty item_ids list checks none.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clear enough to supply this argument.
from
first day, YYYY-MM-DD; required unless event_id is given
Clear enough to supply this argument.
to
last day, YYYY-MM-DD, inclusive; defaults to from
Clear enough to supply this argument.
event_id
gig whose dates to use and whose own bookings to report
Clear enough to supply this argument.
item_ids
inventory item ids to check; omit for every item, an empty list checks no items
Clear enough to supply this argument.
location_id
limit capacity and bookings to one stock location
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "check_inventory_availability",
"title": "Check inventory availability",
"description": "Check whether inventory is free over a range of civil days (YYYY-MM-DD). Per item it returns the capacity, the peak number booked in the range, what is available, any shortage and the bookings that overlap. Pass event_id to use a gig's own dates and see what that gig has booked. Omit item_ids to check every item; an empty item_ids list checks none.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "last day, YYYY-MM-DD, inclusive; defaults to from"
},
"from": {
"type": "string",
"description": "first day, YYYY-MM-DD; required unless event_id is given"
},
"event_id": {
"type": "string",
"description": "gig whose dates to use and whose own bookings to report"
},
"item_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "inventory item ids to check; omit for every item, an empty list checks no items"
},
"location_id": {
"type": "string",
"description": "limit capacity and bookings to one stock location"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Check inventory availability",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
List booking/staffing leads for an organization. Filter by status (pending/completed), pipeline stage (NEW/QUALIFIED/QUOTED/WON/LOST), owner, or search (case-insensitive substring on name, email, company, or location). Paginated with limit (max 100, default 20) and offset. organization_id defaults to your active organization.
Describe the returned information so the agent knows whether it will answer the request.
Inputs71/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
status
pending or completed
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
stage
pipeline stage: NEW, QUALIFIED, QUOTED, WON, or LOST
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
owner_org_member_id
filter to leads owned by this org member
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
search
case-insensitive substring match on name, email, company, or location
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
max 100, default 20
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
default 0
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Get a single lead by id, including owner and converted customer when present. view="activity" instead lists the activity on the lead (claims, stage changes, notes, conversion), paginated with limit and offset. organization_id defaults to your active organization; pass it explicitly for a lead that belongs to another organization you are a member of (e.g. one returned by list_leads with organization_id).
The description explains the capability, when to use it, and what to expect.
Inputs70/100
Explain the meaning of this value, not just its name.
lead_id
the lead id
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
view
lead (default): the lead itself; activity: its activity log
Clear enough to supply this argument.
limit
view=activity: max 100, default 20
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
view=activity: default 0
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_lead",
"title": "Get lead",
"description": "Get a single lead by id, including owner and converted customer when present. view=\"activity\" instead lists the activity on the lead (claims, stage changes, notes, conversion), paginated with limit and offset. organization_id defaults to your active organization; pass it explicitly for a lead that belongs to another organization you are a member of (e.g. one returned by list_leads with organization_id).",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"lead_id"
],
"properties": {
"view": {
"enum": [
"lead",
"activity"
],
"type": "string",
"description": "lead (default): the lead itself; activity: its activity log"
},
"limit": {
"type": "integer",
"description": "view=activity: max 100, default 20"
},
"offset": {
"type": "integer",
"description": "view=activity: default 0"
},
"lead_id": {
"type": "string",
"description": "the lead id"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get lead",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
List call lists / calllists (named rosters of members) for an organization, oldest first with a stable id tie-breaker. Paginated: limit defaults to 20 (maximum 100); offset defaults to 0.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
max 100, default 20
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
default 0
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
List an event's financial ledger items — payables, receivables, income, and expenses — each with type, status, amount, and counterparty. Read-only. Visibility is scoped server-side: regular members see only items involving them; org admins/owners see the full ledger. Each item also has paid_amount, remaining_amount and payment_status: status stays UNPAID until a line is fully paid, so read payment_status (partial when some is paid) and remaining_amount for a partly paid line. Use an item's id with record_ledger_payment to log a payment made outside Soundcheck, or reverse_ledger_payment to undo one.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the event whose financial ledger to read
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_event_ledger",
"title": "Get event ledger",
"description": "List an event's financial ledger items — payables, receivables, income, and expenses — each with type, status, amount, and counterparty. Read-only. Visibility is scoped server-side: regular members see only items involving them; org admins/owners see the full ledger. Each item also has paid_amount, remaining_amount and payment_status: status stays UNPAID until a line is fully paid, so read payment_status (partial when some is paid) and remaining_amount for a partly paid line. Use an item's id with record_ledger_payment to log a payment made outside Soundcheck, or reverse_ledger_payment to undo one.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the event whose financial ledger to read"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get event ledger",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Get the UEF field catalog for an import target type — canonical fields you can map columns to. Pass the SAME target_type as the import job (EVENT, LEAD, INVENTORY, or MEMBER); defaults to EVENT.
Describe the returned information so the agent knows whether it will answer the request.
Inputs63/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
target_type
EVENT, LEAD, INVENTORY, or MEMBER; defaults to EVENT
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Get a user's availability blocks within an organization, optionally filtered to a from/to date range. Defaults to the authenticated user and their active org.
Describe the returned information so the agent knows whether it will answer the request.
Inputs63/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
user_id
defaults to the authenticated user
Explain the meaning of this value, not just its name.
from
optional start of range (YYYY-MM-DD or RFC3339)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
to
optional end of range (YYYY-MM-DD or RFC3339)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
Get a single availability request by id. scope=received reads it as a recipient: the recipients list is filtered to you, and a request you were not sent returns 404. scope=organization reads it as the organization's manager, with every recipient and their replies; it needs crm.manage in that organization, so use it to read back a request you created (including a DRAFT). With scope omitted: passing organization_id means organization; otherwise the recipient view is tried first and, when it returns 404, the request is read from your active organization instead.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
request_id
the availability request id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
scope
received = requests sent to you; organization = requests your organization created (needs crm.manage)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_availability_request",
"title": "Get availability request",
"description": "Get a single availability request by id. scope=received reads it as a recipient: the recipients list is filtered to you, and a request you were not sent returns 404. scope=organization reads it as the organization's manager, with every recipient and their replies; it needs crm.manage in that organization, so use it to read back a request you created (including a DRAFT). With scope omitted: passing organization_id means organization; otherwise the recipient view is tried first and, when it returns 404, the request is read from your active organization instead.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"request_id"
],
"properties": {
"scope": {
"enum": [
"received",
"organization"
],
"type": "string",
"description": "received = requests sent to you; organization = requests your organization created (needs crm.manage)"
},
"request_id": {
"type": "string",
"description": "the availability request id"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get availability request",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
List availability requests. scope=received lists the requests sent to you (user_id defaults to you); status filters on YOUR reply: PENDING, AVAILABLE, UNAVAILABLE, EXPIRED, WITHDRAWN. scope=organization lists every request an organization created, including drafts; it needs crm.manage there, takes organization_id (defaults to your active organization) and event_id, and status filters on the request itself: DRAFT, OPEN, CLOSED, EXPIRED, CANCELLED. With scope omitted: user_id means received; organization_id, event_id, or a status only a request has (DRAFT, OPEN, CLOSED, CANCELLED) means organization; otherwise received. A status or filter that does not belong to the chosen scope is rejected rather than ignored.
The description explains the capability, when to use it, and what to expect.
Inputs82/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
scope
received = requests sent to you; organization = requests your organization created (needs crm.manage)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
organization scope only; defaults to your active organization
Clear enough to supply this argument.
event_id
organization scope only; requests for this gig
Clear enough to supply this argument.
user_id
received scope only; defaults to the authenticated user
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Create a new event in an organization. By default the event is ACTIVE (published) as soon as it is created: crew can see it, and invitations added to it go out normally. Pass draft=true to create it as a DRAFT instead, as the web and mobile apps do: a draft is hidden from crew and holds its invitations until someone publishes it in the web app (MCP cannot publish). Ask the user which they want when it is unclear. The authenticated user is added as a member by default (pass member_ids to override, including [] to skip). For a multi-day gig pass end_date (YYYY-MM-DD, after event_date) and no start_time or end_time: a multi-day gig carries dates only, and passing times with one is refused. Per-day times belong in the run of show or on each shift. start_time and end_time are for single-day gigs and optional. Returns the new event id and resolved members.
Describe the returned information so the agent knows whether it will answer the request.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
event name (stored as title; returned as both name and title)
Clear enough to supply this argument.
title
optional display title (defaults to name)
Clear enough to supply this argument.
event_date
event date (first day): YYYY-MM-DD, RFC3339 string or positive unix epoch seconds (number)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
end_date
last day of a multi-day gig as YYYY-MM-DD, on or after event_date; omit for a single-day gig
Clear enough to supply this argument.
start_time
single-day gigs only: RFC3339 with numeric offset (e.g. 2026-10-15T19:00:00-05:00) OR positive unix seconds as number or numeric string
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
end_time
single-day gigs only: RFC3339 with numeric offset OR positive unix seconds as number or numeric string (same rules as start_time)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
timezone
IANA timezone (e.g. America/Chicago). If omitted, inferred only from an RFC3339 start_time offset (unix seconds carry no offset, so pass timezone with them); do not rely on the org timezone when the org is set to UTC
Clear enough to supply this argument.
location
address or venue name
Clear enough to supply this argument.
location_name
friendly location label
Clear enough to supply this argument.
notes
visible notes
Explain the meaning of this value, not just its name.
guest_count
Estimated guest count; stored on the gig, not in notes.
Clear enough to supply this argument.
event_type
optional event type tag
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Clear enough to supply this argument.
member_ids
user ids to add as event members; defaults to the authenticated user
Clear enough to supply this argument.
draft
default false (ACTIVE); true creates a DRAFT hidden from crew that holds invitations until published in the web app
{
"name": "create_event",
"title": "Create event",
"description": "Create a new event in an organization. By default the event is ACTIVE (published) as soon as it is created: crew can see it, and invitations added to it go out normally. Pass draft=true to create it as a DRAFT instead, as the web and mobile apps do: a draft is hidden from crew and holds its invitations until someone publishes it in the web app (MCP cannot publish). Ask the user which they want when it is unclear. The authenticated user is added as a member by default (pass member_ids to override, including [] to skip). For a multi-day gig pass end_date (YYYY-MM-DD, after event_date) and no start_time or end_time: a multi-day gig carries dates only, and passing times with one is refused. Per-day times belong in the run of show or on each shift. start_time and end_time are for single-day gigs and optional. Returns the new event id and resolved members.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "event name (stored as title; returned as both name and title)"
},
"draft": {
"type": "boolean",
"description": "default false (ACTIVE); true creates a DRAFT hidden from crew that holds invitations until published in the web app"
},
"notes": {
"type": "string",
"description": "visible notes"
},
"title": {
"type": "string",
"description": "optional display title (defaults to name)"
},
"end_date": {
"type": [
"string",
"null"
],
"description": "last day of a multi-day gig as YYYY-MM-DD, on or after event_date; omit for a single-day gig"
},
"end_time": {
"$ref": "#/properties/event_date",
"description": "single-day gigs only: RFC3339 with numeric offset OR positive unix seconds as number or numeric string (same rules as start_time)"
},
"location": {
"type": "string",
"description": "address or venue name"
},
"timezone": {
"type": "string",
"description": "IANA timezone (e.g. America/Chicago). If omitted, inferred only from an RFC3339 start_time offset (unix seconds carry no offset, so pass timezone with them); do not rely on the org timezone when the org is set to UTC"
},
"event_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "number",
"exclusiveMinimum": 0
}
],
"description": "event date (first day): YYYY-MM-DD, RFC3339 string or positive unix epoch seconds (number)"
},
"event_type": {
"type": "string",
"description": "optional event type tag"
},
"member_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "user ids to add as event members; defaults to the authenticated user"
},
"start_time": {
"$ref": "#/properties/event_date",
"description": "single-day gigs only: RFC3339 with numeric offset (e.g. 2026-10-15T19:00:00-05:00) OR positive unix seconds as number or numeric string"
},
"guest_count": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Estimated guest count; stored on the gig, not in notes."
},
"location_name": {
"type": "string",
"description": "friendly location label"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create event",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Mark a past, ACTIVE event as COMPLETED — the first closeout step. Consequential: when the confirmation gate is on, the first call returns confirmation_required + a token.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the past, ACTIVE event to mark COMPLETED
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "complete_event",
"title": "Complete event",
"description": "Mark a past, ACTIVE event as COMPLETED — the first closeout step. Consequential: when the confirmation gate is on, the first call returns confirmation_required + a token.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the past, ACTIVE event to mark COMPLETED"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Complete event",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Mark a COMPLETED event as SETTLED — the final closeout step. Check get_event_settlement_status first. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Input documentation gives an agent enough context to populate the arguments.
event_id
the COMPLETED event to mark SETTLED
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Change organization settings; pass only the ones to change. timezone: the IANA zone (e.g. America/Chicago) that new events inherit when create_event omits one — without it, events can stay on UTC. tour_term_singular / tour_term_plural: what the org calls a tour in the app (e.g. Season, Residency, Run); an empty singular goes back to the business-type default (band/dj Tour, venue Series, everyone else Project) and the plural is derived when omitted; only the user-facing word changes. playbook: the CheckAI agent playbook, which REPLACES the saved rules in full (empty string clears it). Requires org-admin (ADMIN/OWNER). Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Explain what happens when this optional value is omitted.
organization_id
defaults to your active organization
Clear enough to supply this argument.
timezone
IANA timezone name, e.g. America/Chicago or Europe/London
Explain what happens when this optional value is omitted.
tour_term_singular
the org's word for one tour, max 40 letters, numbers, spaces and & - ' . ; empty string resets to the business-type word
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
tour_term_plural
plural form; omit to derive it from the singular
Clear enough to supply this argument.
playbook
the org's agent rules/preferences as free text — replaces the current playbook in full; empty string clears it
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "update_org_settings",
"title": "Update organization settings",
"description": "Change organization settings; pass only the ones to change. timezone: the IANA zone (e.g. America/Chicago) that new events inherit when create_event omits one — without it, events can stay on UTC. tour_term_singular / tour_term_plural: what the org calls a tour in the app (e.g. Season, Residency, Run); an empty singular goes back to the business-type default (band/dj Tour, venue Series, everyone else Project) and the plural is derived when omitted; only the user-facing word changes. playbook: the CheckAI agent playbook, which REPLACES the saved rules in full (empty string clears it). Requires org-admin (ADMIN/OWNER). Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"playbook": {
"type": "string",
"description": "the org's agent rules/preferences as free text — replaces the current playbook in full; empty string clears it"
},
"timezone": {
"type": "string",
"description": "IANA timezone name, e.g. America/Chicago or Europe/London"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"tour_term_plural": {
"type": "string",
"description": "plural form; omit to derive it from the singular"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
},
"tour_term_singular": {
"type": "string",
"description": "the org's word for one tour, max 40 letters, numbers, spaces and & - ' . ; empty string resets to the business-type word"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Update organization settings",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
List the organization's mailbox threads (invitations, crew offers, availability requests, agreements). Priority-first: open threads come before history. Requires CRM-manager access. For INVITATION threads the mailbox id is the event id — call list_event_invitations with that event_id to get invitation ids before get_invitation or send_reminder kind=invitation. Crew-offer and availability-request ids can be used directly.
Describe the returned information so the agent knows whether it will answer the request.
Inputs83/100
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Clear enough to supply this argument.
status
engagement status filter (OPEN, DRAFT, CLOSED, EXPIRED, PENDING, ...)
Clear enough to supply this argument.
kind
comma-separated kinds: INVITATION, CREW_OFFER, AVAILABILITY_REQUEST, AGREEMENT (default: all four)
Clear enough to supply this argument.
event_id
limit to one event
Explain the meaning of this value, not just its name.
limit
page size, max 200 (default 50)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
pagination offset (default 0)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Read one invitation (recipient, status, event, timestamps). invitation_id is the invitation row id from list_event_invitations — not the mailbox thread id (that id is the event).
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
invitation_id
invitation row id from list_event_invitations, not the list_mailbox thread id
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
List invitation rows for one event (invitation id, recipient, status, delivery). Use the event_id from a list_mailbox INVITATION thread, then pass those invitation ids to get_invitation or send_reminder kind=invitation.
Describe the returned information so the agent knows whether it will answer the request.
Inputs89/100
Input documentation gives an agent enough context to populate the arguments.
event_id
event id from a list_mailbox INVITATION thread
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
List the members on a gig roster as {event_id, members:[...]} (id, username, org role, position, call order, invitation_status, is_gig_creator). Convenience over get_event. When the gig creator is on the roster, their row has is_gig_creator=true and usually invitation_status=INVITED — that is the default roster status for anyone added directly, not an unanswered invite. The creator is not always on the roster (a gig created with member_ids: [] or a creator later removed has no creator row), so check the members list rather than assuming. Staffing responses live on invitations and crew offers.
The description explains the capability, when to use it, and what to expect.
Inputs47/100
Explain the meaning of this value, not just its name.
event_id
the event id
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_event_members",
"title": "List event members",
"description": "List the members on a gig roster as {event_id, members:[...]} (id, username, org role, position, call order, invitation_status, is_gig_creator). Convenience over get_event. When the gig creator is on the roster, their row has is_gig_creator=true and usually invitation_status=INVITED — that is the default roster status for anyone added directly, not an unanswered invite. The creator is not always on the roster (a gig created with member_ids: [] or a creator later removed has no creator row), so check the members list rather than assuming. Staffing responses live on invitations and crew offers.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the event id"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List event members",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description100/100
Resolve an event's roster into who would be messaged and on which channel, WITHOUT sending. Returns each member (user_id, name, has_phone, has_email, broadcast_eligible — no raw contact details) and a summary (total, sms_reachable, email_reachable, broadcast_total, broadcast_blocked). broadcast_eligible is true for the members broadcast_event_reminder will message, so declined and standby members are false, and broadcast_total counts the true ones. On a DRAFT or TEMPLATE gig, or for a caller who cannot send reminders on the gig, broadcast_eligible is null on every member and broadcast_total is null; broadcast_blocked says unpublished or not_authorized. Use this before send_message / broadcast_event_reminder.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the event whose roster to resolve
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "preview_event_recipients",
"title": "Preview event recipients",
"description": "Resolve an event's roster into who would be messaged and on which channel, WITHOUT sending. Returns each member (user_id, name, has_phone, has_email, broadcast_eligible — no raw contact details) and a summary (total, sms_reachable, email_reachable, broadcast_total, broadcast_blocked). broadcast_eligible is true for the members broadcast_event_reminder will message, so declined and standby members are false, and broadcast_total counts the true ones. On a DRAFT or TEMPLATE gig, or for a caller who cannot send reminders on the gig, broadcast_eligible is null on every member and broadcast_total is null; broadcast_blocked says unpublished or not_authorized. Use this before send_message / broadcast_event_reminder.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the event whose roster to resolve"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Preview event recipients",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Get one ingestion batch. view="status" (default): per-file analysis status plus the batch's merge state. Terminal file statuses: READY_FOR_REVIEW, ATTACHED_ONLY, COMMITTED, COMMITTED_VIA_BATCH, DISMISSED, FAILED. merge_status READY means the merged review is available. Analysis is asynchronous — check status ONCE; do NOT poll. view="review": the merged review payload — cross-file merged proposals, proposed_targets (UEF vs INGESTION classification), field_map (filled vs blank catalog paths), dry-run preview, key_facts, warnings, out_of_range_paths (run-of-show rows outside the gig dates), per-file sources, and merge_version (echo it back on commit_ingestion_batch). Proposals are UEF 2.0: commit rows by their document path.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Explain the meaning of this value, not just its name.
organization_id
defaults to caller's active org — pass explicitly if the event belongs to a different org
Clear enough to supply this argument.
event_id
the event the ingestion batch belongs to
Clear enough to supply this argument.
batch_id
the ingestion batch id
Explain the meaning of this value, not just its name.
view
status (default): file and merge status; review: the merged batch review
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Get one ingested file's full review payload: extracted proposals, proposed_targets (UEF vs INGESTION classification), field_map (filled vs blank catalog paths), dry-run preview, key_facts, and out_of_range_paths (document paths of run-of-show rows outside the gig dates). Proposals are UEF 2.0: commit rows by their document path. Nothing has been written yet.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Explain the meaning of this value, not just its name.
organization_id
defaults to caller's active org — pass explicitly if the event belongs to a different org
Clear enough to supply this argument.
event_id
the event the ingestion batch belongs to
Clear enough to supply this argument.
batch_id
the ingestion batch id
Explain the meaning of this value, not just its name.
file_id
the ingested file id within the batch
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Ask the HOST APPLICATION to upload the user's staged file attachments into an ingestion batch. For in-product hosts (Soundcheck web/mobile) with staged attachments — call this exactly ONCE after create_ingestion_batch when the user shared files, then STOP; the host uploads directly. Third-party MCP agents without a host uploader should use add_ingestion_file (content_base64 for a binary file, text for pasted text) instead.
The description explains the capability, when to use it, and what to expect.
Inputs84/100
Input documentation gives an agent enough context to populate the arguments.
organization_id
defaults to caller's active org — pass explicitly if the event belongs to a different org
Clear enough to supply this argument.
event_id
the event the ingestion batch belongs to
Clear enough to supply this argument.
batch_id
the ingestion batch id
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Accept or decline a crew offer (shift) sent to the authenticated user. Find offers with list_crew_offers (scope mine). Idempotent: answering the same way twice is a no-op.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
offer_id
the crew offer id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Unarchive an event (sets event_status=UNARCHIVED, which the app treats like ACTIVE). list_events with event_status=ACTIVE does not return it — omit the filter or pass UNARCHIVED. Idempotent. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs73/100
Explain the meaning of this value, not just its name.
event_id
the event id
Explain the meaning of this value, not just its name.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Update only the event fields you provide; an omitted field is left as stored. title takes precedence over its name alias; empty notes or location clears that field. end_date (YYYY-MM-DD) is the last day of a multi-day gig and must be on or after event_date; pass end_date: null to make the gig single-day again. start_time and end_time apply to single-day gigs. A multi-day gig carries dates only: setting times on one is refused (set per-day times in the run of show or on each shift), and an older multi-day gig that still has times can only have them cleared with start_time: null and end_time: null (clearing either clears both). Extending a timed single-day gig with end_date clears its times automatically. Whenever times are cleared that way, crew shifts that inherited them keep them as their own call times, and an empty run of show gets one section per day starting at the old start time. When event_date or end_date moves and no times are given, any stored local clock times move with it. Shortening the range onto days that still have accepted or pending crew is refused with the affected days named; resolve those crew first or finish in the web app. Confirmation-gated when the call sets or clears event_date, end_date, start_time or end_time, or sets a non-empty location, because the API then sends the gig's invited crew a schedule-change notification: the first call writes nothing and returns confirmation_required with a summary; show it to the user and, once they approve, resend the same arguments plus confirmation_token. Edits to only title, name, notes, or clearing location with an empty string are not gated. Concurrent edits to different fields are preserved; edits to the same field are last-write-wins. Use dedicated event lifecycle tools to change status.
The description explains the capability, when to use it, and what to expect.
Inputs73/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the event id to update
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
title
optional new title (gig display name)
Clear enough to supply this argument.
name
optional new event name
Explain the meaning of this value, not just its name.
location
optional new location string
Explain the meaning of this value, not just its name.
event_date
optional new first day of the gig (YYYY-MM-DD, RFC3339 string or unix epoch seconds); cannot be cleared
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
end_date
optional last day of a multi-day gig as YYYY-MM-DD, on or after event_date; null clears it (single-day gig); omit to leave unchanged
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
start_time
optional new start time of a single-day gig (RFC3339 with numeric UTC offset, or unix epoch seconds); null clears it; omit to leave unchanged; refused on a multi-day gig
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
end_time
optional new end time of a single-day gig (RFC3339 with numeric UTC offset, or unix epoch seconds); null clears it; omit to leave unchanged; refused on a multi-day gig
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
notes
optional new visible notes
Explain the meaning of this value, not just its name.
guest_count
optional estimated guest count; null clears it; stored on the gig, not in notes
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "update_event",
"title": "Update event",
"description": "Update only the event fields you provide; an omitted field is left as stored. title takes precedence over its name alias; empty notes or location clears that field. end_date (YYYY-MM-DD) is the last day of a multi-day gig and must be on or after event_date; pass end_date: null to make the gig single-day again. start_time and end_time apply to single-day gigs. A multi-day gig carries dates only: setting times on one is refused (set per-day times in the run of show or on each shift), and an older multi-day gig that still has times can only have them cleared with start_time: null and end_time: null (clearing either clears both). Extending a timed single-day gig with end_date clears its times automatically. Whenever times are cleared that way, crew shifts that inherited them keep them as their own call times, and an empty run of show gets one section per day starting at the old start time. When event_date or end_date moves and no times are given, any stored local clock times move with it. Shortening the range onto days that still have accepted or pending crew is refused with the affected days named; resolve those crew first or finish in the web app. Confirmation-gated when the call sets or clears event_date, end_date, start_time or end_time, or sets a non-empty location, because the API then sends the gig's invited crew a schedule-change notification: the first call writes nothing and returns confirmation_required with a summary; show it to the user and, once they approve, resend the same arguments plus confirmation_token. Edits to only title, name, notes, or clearing location with an empty string are not gated. Concurrent edits to different fields are preserved; edits to the same field are last-write-wins. Use dedicated event lifecycle tools to change status.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"name": {
"type": "string",
"description": "optional new event name"
},
"notes": {
"type": "string",
"description": "optional new visible notes"
},
"title": {
"type": "string",
"description": "optional new title (gig display name)"
},
"end_date": {
"type": [
"string",
"null"
],
"description": "optional last day of a multi-day gig as YYYY-MM-DD, on or after event_date; null clears it (single-day gig); omit to leave unchanged"
},
"end_time": {
"$ref": "#/properties/start_time",
"description": "optional new end time of a single-day gig (RFC3339 with numeric UTC offset, or unix epoch seconds); null clears it; omit to leave unchanged; refused on a multi-day gig"
},
"event_id": {
"type": "string",
"description": "the event id to update"
},
"location": {
"type": "string",
"description": "optional new location string"
},
"event_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "number",
"exclusiveMinimum": 0
}
],
"description": "optional new first day of the gig (YYYY-MM-DD, RFC3339 string or unix epoch seconds); cannot be cleared"
},
"start_time": {
"anyOf": [
{
"anyOf": [
{
"type": "string"
},
{
"type": "number",
"exclusiveMinimum": 0
}
]
},
{
"type": "null"
}
],
"description": "optional new start time of a single-day gig (RFC3339 with numeric UTC offset, or unix epoch seconds); null clears it; omit to leave unchanged; refused on a multi-day gig"
},
"guest_count": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
],
"description": "optional estimated guest count; null clears it; stored on the gig, not in notes"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Update event",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Publish a DRAFT gig by setting event_status to ACTIVE through the same API used by the app. Makes it visible to crew and sends its unsent PENDING invitations; backups remain STANDBY. Requires organization gig-management access. An already ACTIVE gig is returned without another write or send. Other statuses are refused; use the dedicated lifecycle tools. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Verify invitation delivery with list_event_invitations: ACTIVE alone does not prove every notification was delivered.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the DRAFT gig to publish
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "publish_event",
"title": "Publish event",
"description": "Publish a DRAFT gig by setting event_status to ACTIVE through the same API used by the app. Makes it visible to crew and sends its unsent PENDING invitations; backups remain STANDBY. Requires organization gig-management access. An already ACTIVE gig is returned without another write or send. Other statuses are refused; use the dedicated lifecycle tools. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Verify invitation delivery with list_event_invitations: ACTIVE alone does not prove every notification was delivered.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the DRAFT gig to publish"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Publish event",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Duplicate an event, optionally overriding the new event's title, notes, and date/times. The copy is ACTIVE unless target_state is DRAFT, and a template source always becomes a DRAFT. Copied invitations are unsent: on an ACTIVE copy send them with send_event_invitations; on a DRAFT copy they go out when the gig is published with publish_event or the Soundcheck app. Requires gig-operations access. Returns the new event.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
event_id
the event to duplicate
Explain the meaning of this value, not just its name.
title
optional title for the new event
Clear enough to supply this argument.
notes
optional notes for the new event
Explain the meaning of this value, not just its name.
event_date
optional RFC3339 date for the new event
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
start_time
optional RFC3339 start time for the new event (unix seconds are rejected here)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
end_time
optional RFC3339 end time for the new event
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
target_state
ACTIVE (default), DRAFT (hidden from crew; invitations held until published) or TEMPLATE
{
"name": "duplicate_event",
"title": "Duplicate event",
"description": "Duplicate an event, optionally overriding the new event's title, notes, and date/times. The copy is ACTIVE unless target_state is DRAFT, and a template source always becomes a DRAFT. Copied invitations are unsent: on an ACTIVE copy send them with send_event_invitations; on a DRAFT copy they go out when the gig is published with publish_event or the Soundcheck app. Requires gig-operations access. Returns the new event.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"notes": {
"type": "string",
"description": "optional notes for the new event"
},
"title": {
"type": "string",
"description": "optional title for the new event"
},
"end_time": {
"type": "string",
"description": "optional RFC3339 end time for the new event"
},
"event_id": {
"type": "string",
"description": "the event to duplicate"
},
"event_date": {
"type": "string",
"description": "optional RFC3339 date for the new event"
},
"start_time": {
"type": "string",
"description": "optional RFC3339 start time for the new event (unix seconds are rejected here)"
},
"target_state": {
"type": "string",
"description": "ACTIVE (default), DRAFT (hidden from crew; invitations held until published) or TEMPLATE"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Duplicate event",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Add one or more members (by user id) to an event, optionally staffing them in a role. Pass org_position_id from list_org_positions (active positions only). Each person lands on the gig roster as an EventMember with status INVITED and no Invitation row is created, so there is no accept/decline invite step. On a published (ACTIVE) gig the show pass treats them as confirmed/working and the owner pending-invite count stays 0; discovery uses EventMember ties. This does not send SMS or email invitations. On a published gig, they are added to the Google Calendar invite; draft and template gigs defer calendar invites until publish. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires gig-operations access. Returns the updated event.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the event to add members to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
user_ids
user ids to add as members
Clear enough to supply this argument.
org_position_id
org position id from list_org_positions — the role they are staffing (FOH Engineer, etc.). Required to staff a named role; omit only to add a person with no role
Clear enough to supply this argument.
organization_id
defaults to caller's active org; must be the event's org
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "add_event_member",
"title": "Add event member",
"description": "Add one or more members (by user id) to an event, optionally staffing them in a role. Pass org_position_id from list_org_positions (active positions only). Each person lands on the gig roster as an EventMember with status INVITED and no Invitation row is created, so there is no accept/decline invite step. On a published (ACTIVE) gig the show pass treats them as confirmed/working and the owner pending-invite count stays 0; discovery uses EventMember ties. This does not send SMS or email invitations. On a published gig, they are added to the Google Calendar invite; draft and template gigs defer calendar invites until publish. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires gig-operations access. Returns the updated event.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"user_ids"
],
"properties": {
"event_id": {
"type": "string",
"description": "the event to add members to"
},
"user_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "user ids to add as members"
},
"org_position_id": {
"type": "string",
"description": "org position id from list_org_positions — the role they are staffing (FOH Engineer, etc.). Required to staff a named role; omit only to add a person with no role"
},
"organization_id": {
"type": "string",
"description": "defaults to caller's active org; must be the event's org"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Add event member",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Link an existing venue to an event. The venue must already be saved to the organization's venue directory. Changing a gig's venue removes its stage bookings (stages belong to one venue); rebook with set_event_stages. Requires gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs63/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the event to link the venue to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
venue_id
the venue id (must already be saved to the org's venue directory)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Create a setlist in an organization, optionally attaching it to an event. Pass sets to include songs on create (each song id must come from create_song), or add songs later via update_setlist. Setlists are retired for organizations on Run of Show: the API answers 409 SETLISTS_RETIRED, and sets are edited in the Setlist view of the gig Run of Show instead.
The description explains the capability, when to use it, and what to expect.
Inputs77/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
the organization to create the setlist in
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
title
title of the setlist (not name)
Clear enough to supply this argument.
event_id
optional: associate the setlist with this event
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
is_template
true to save as a reusable template instead of a one-off
Clear enough to supply this argument.
sets › items › id
optional existing set id when updating structure
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sets › items › title
set title
Explain the meaning of this value, not just its name.
sets › items › order
sort order within the setlist
Explain what happens when this optional value is omitted.
sets › items › notes
optional set notes
Explain the meaning of this value, not just its name.
{
"name": "create_setlist",
"title": "Create setlist",
"description": "Create a setlist in an organization, optionally attaching it to an event. Pass sets to include songs on create (each song id must come from create_song), or add songs later via update_setlist. Setlists are retired for organizations on Run of Show: the API answers 409 SETLISTS_RETIRED, and sets are edited in the Setlist view of the gig Run of Show instead.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"organization_id",
"title"
],
"properties": {
"sets": {
"type": "array",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"id": {
"type": "string",
"description": "optional existing set id when updating structure"
},
"notes": {
"type": "string",
"description": "optional set notes"
},
"order": {
"type": "integer",
"description": "sort order within the setlist"
},
"songs": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "library song id from create_song"
},
"title": {
"type": "string",
"description": "optional display title override"
},
"duration": {
"type": "number",
"description": "optional duration override in seconds"
}
},
"additionalProperties": false
},
"description": "songs in this set"
},
"title": {
"type": "string",
"description": "set title"
}
},
"additionalProperties": false
},
"description": "optional sets and songs; omit for an empty setlist"
},
"title": {
"type": "string",
"description": "title of the setlist (not name)"
},
"event_id": {
"type": "string",
"description": "optional: associate the setlist with this event"
},
"is_template": {
"type": "boolean",
"description": "true to save as a reusable template instead of a one-off"
},
"organization_id": {
"type": "string",
"description": "the organization to create the setlist in"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create setlist",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Delete a setlist. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Setlists are retired for organizations on Run of Show: the API answers 409 SETLISTS_RETIRED, and sets are edited in the Setlist view of the gig Run of Show instead.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
setlist_id
the setlist to delete
Explain the meaning of this value, not just its name.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "delete_setlist",
"title": "Delete setlist",
"description": "Delete a setlist. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Setlists are retired for organizations on Run of Show: the API answers 409 SETLISTS_RETIRED, and sets are edited in the Setlist view of the gig Run of Show instead.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"setlist_id"
],
"properties": {
"setlist_id": {
"type": "string",
"description": "the setlist to delete"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Delete setlist",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Create a call list (a reusable "team template") in an organization. Prefer positions[] — it carries seats per slot, and a slot needs no member, so a template can describe a crew SHAPE before anyone is picked. org_position_ids is the older flat form and cannot express seats. Pass members to pencil people in (user_id from list_users). Pass labor_lines to save a house labor call (per department: load-in/show/load-out call times and hands) that applying the template writes onto the gig labor call.
The description explains the capability, when to use it, and what to expect.
Inputs84/100
Explain the meaning of this value, not just its name.
name
calllist name
Explain the meaning of this value, not just its name.
description
optional description
Explain the meaning of this value, not just its name.
category
free-text grouping shown as a badge, e.g. House, Festival, Corporate, Wedding
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
members › items › user_id
org user id from list_users
Clear enough to supply this argument.
members › items › call_order
0 = primary (default when omitted); 1+ = backup priority
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
members › items › org_position_id
position id from list_org_positions
Clear enough to supply this argument.
members › items › notes
optional member notes
Clear enough to supply this argument.
positions › items › org_position_id
position id from list_org_positions
Clear enough to supply this argument.
positions › items › required
deprecated and ignored: applying a template does not read it, so omit it
Clear enough to supply this argument.
positions › items › seats
how many people this slot needs; defaults to 1
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
positions › items › sort_order
display order; defaults to array order
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
org_position_ids
legacy flat position ids from list_org_positions; ignored when positions is set
Clear enough to supply this argument.
labor_lines › items › department
labor call department, e.g. Stagehands, Riggers
Clear enough to supply this argument.
labor_lines › items › load_in_call
24-hour HH:MM in the gig timezone; omit for no call
Clear enough to supply this argument.
labor_lines › items › load_in_hands
head count
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
labor_lines › items › show_call
24-hour HH:MM in the gig timezone; omit for no call
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
labor_lines › items › show_hands
head count
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
labor_lines › items › load_out_call
24-hour HH:MM in the gig timezone; omit for no call
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
labor_lines › items › load_out_hands
head count
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
labor_lines › items › notes
optional department notes
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
labor_lines › items › sort_order
display order; defaults to array order
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Copy a call list — its category, position slots (with seats), labor call lines and roster — into a new template in the same organization. Defaults the copy to "<name> (copy)". The copy is never a Soundcheck starter, even when the source was one.
The description explains the capability, when to use it, and what to expect.
Inputs67/100
Explain the meaning of this value, not just its name.
calllist_id
the calllist to copy
Explain the meaning of this value, not just its name.
name
name for the copy; defaults to "<name> (copy)"
Clear enough to supply this argument.
organization_id
defaults to your active organization
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Replace a setlist title and/or sets (full replace of sets when provided). Each song in sets[].songs must reference an existing library song id from create_song. Title is required by the API. Setlists are retired for organizations on Run of Show: the API answers 409 SETLISTS_RETIRED, and sets are edited in the Setlist view of the gig Run of Show instead.
The description explains the capability, when to use it, and what to expect.
Inputs70/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
setlist_id
the setlist to update
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
title
setlist title
Explain the meaning of this value, not just its name.
event_id
optional: associate the setlist with this event
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
is_template
true to save as a reusable template instead of a one-off
Clear enough to supply this argument.
sets › items › id
optional existing set id when updating structure
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sets › items › title
set title
Explain the meaning of this value, not just its name.
sets › items › order
sort order within the setlist
Explain the meaning of this value, not just its name.
sets › items › notes
optional set notes
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Update a call list name/description/category and upsert members by user_id (existing org users). Pass members with user_id to add; set delete:true to remove. Name is required. Position slots are only rewritten when you send positions[] (preferred) or org_position_ids — omit both and the existing slots and seats are left untouched. labor_lines works the same way: sent replaces the template labor call, omitted leaves it alone.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
calllist_id
the calllist to update
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
name
calllist name
Explain the meaning of this value, not just its name.
description
optional description
Explain the meaning of this value, not just its name.
category
free-text grouping shown as a badge
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
members › items › user_id
org user id from list_users
Clear enough to supply this argument.
members › items › call_order
0 = primary (default when omitted); 1+ = backup priority
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
members › items › org_position_id
position id from list_org_positions
Clear enough to supply this argument.
members › items › notes
optional member notes
Clear enough to supply this argument.
members › items › delete
true to remove this member
Clear enough to supply this argument.
positions › items › org_position_id
position id from list_org_positions
Clear enough to supply this argument.
positions › items › required
deprecated and ignored: applying a template does not read it, so omit it
Clear enough to supply this argument.
positions › items › seats
how many people this slot needs; defaults to 1
Clear enough to supply this argument.
positions › items › sort_order
display order; defaults to array order
Clear enough to supply this argument.
org_position_ids
legacy flat position ids; ignored when positions is set
Clear enough to supply this argument.
labor_lines › items › department
labor call department, e.g. Stagehands, Riggers
Clear enough to supply this argument.
labor_lines › items › load_in_call
24-hour HH:MM in the gig timezone; omit for no call
Clear enough to supply this argument.
labor_lines › items › load_in_hands
head count
Clear enough to supply this argument.
labor_lines › items › show_call
24-hour HH:MM in the gig timezone; omit for no call
Clear enough to supply this argument.
labor_lines › items › show_hands
head count
Clear enough to supply this argument.
labor_lines › items › load_out_call
24-hour HH:MM in the gig timezone; omit for no call
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Update one checklist task (status/title/notes/etc). Requires checklist_version from get_event_checklist (optimistic concurrency / If-Match). Status values: NOT_STARTED, IN_PROGRESS, COMPLETE (not COMPLETED). Pass "" for notes, due_date, or assignee_org_member_id to clear them.
The description explains the capability, when to use it, and what to expect.
Inputs73/100
Explain the meaning of this value, not just its name.
event_id
the event id
Explain the meaning of this value, not just its name.
task_id
the checklist task id
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
checklist_version
checklist version from get_event_checklist
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
status
NOT_STARTED, IN_PROGRESS, or COMPLETE
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
non-empty task title
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
notes
task notes; pass "" to clear
Clear enough to supply this argument.
due_date
due date (YYYY-MM-DD or RFC3339); pass "" to clear
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
assignee_org_member_id
org member id to assign; pass "" to clear
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
phase_id
non-empty phase id when moving a task
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sort_order
sort order within the phase
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Drop a call list onto a gig as DRAFT shifts (mode=draft_shifts, the default): one draft shift per position slot, covering every day of the gig, sized at max(seats, assigned members), with the people penciled into the template attached as un-sent draft recipients. NOTHING IS SENT AND NOBODY IS NOTIFIED — the admin reviews the roster and sets fees, then sends the offers. Re-applying is a no-op for slots this template already put on the gig (DRAFT/OPEN/FILLED); withdrawn or expired shifts leave a hole a re-apply refills. Both modes also add each template labor call line whose department the gig does not already have (case-insensitive) to the gig labor call, which writes its house labor shifts; labor_departments_added counts them. Returns shifts_created / recipients_added / skipped, plus a `hint` explaining why when 0 shifts were created (no org positions, template members without a position, empty slots, or already applied). mode=event_members is the legacy path: it adds roster rows instead of shifts, primaries (call_order 0) INVITED and backups STANDBY, and puts nothing on the Staffing board. Either mode commits people from the template onto a real gig, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Explain the meaning of this value, not just its name.
calllist_id
the calllist to apply
Explain the meaning of this value, not just its name.
event_id
the event to apply the calllist to
Explain the meaning of this value, not just its name.
mode
draft_shifts (default) creates draft shifts; event_members is the legacy roster path
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Apply call list to event",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema25/100
Align the output schema with the tool’s documented result.
{
"name": "apply_calllist_to_event",
"title": "Apply call list to event",
"description": "Drop a call list onto a gig as DRAFT shifts (mode=draft_shifts, the default): one draft shift per position slot, covering every day of the gig, sized at max(seats, assigned members), with the people penciled into the template attached as un-sent draft recipients. NOTHING IS SENT AND NOBODY IS NOTIFIED — the admin reviews the roster and sets fees, then sends the offers. Re-applying is a no-op for slots this template already put on the gig (DRAFT/OPEN/FILLED); withdrawn or expired shifts leave a hole a re-apply refills. Both modes also add each template labor call line whose department the gig does not already have (case-insensitive) to the gig labor call, which writes its house labor shifts; labor_departments_added counts them. Returns shifts_created / recipients_added / skipped, plus a `hint` explaining why when 0 shifts were created (no org positions, template members without a position, empty slots, or already applied). mode=event_members is the legacy path: it adds roster rows instead of shifts, primaries (call_order 0) INVITED and backups STANDBY, and puts nothing on the Staffing board. Either mode commits people from the template onto a real gig, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"calllist_id",
"event_id"
],
"properties": {
"mode": {
"enum": [
"draft_shifts",
"event_members"
],
"type": "string",
"description": "draft_shifts (default) creates draft shifts; event_members is the legacy roster path"
},
"event_id": {
"type": "string",
"description": "the event to apply the calllist to"
},
"calllist_id": {
"type": "string",
"description": "the calllist to apply"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Apply call list to event",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Create an availability block for the authenticated user (e.g. 'unavailable next Tuesday 6–10pm'). type is AVAILABLE or UNAVAILABLE (case-insensitive; stored uppercase). Returns the created availability entry.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
date
YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
start_time
RFC3339 timestamp
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
end_time
RFC3339 timestamp
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
type
AVAILABLE or UNAVAILABLE (case-insensitive; omit for server default)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
is_recurring
true if this is a recurring block
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
notes
optional notes
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Create an availability request in an organization (requires scheduler/CRM-manager access). request_mode defaults to TIME_WINDOW (requires start_time and end_time); use request_mode=DAY for a date-only request. If you pass recipient_ids the request is created AND sent after confirmation. Omit recipients to create an unsent request (status DRAFT). Pass event_id when the request is for a gig: its time zone sets the clock times shown in the response (event_timezone); without one they fall back to the organization time zone, which may be UTC. Read the request back with get_availability_request scope=organization, or list_availability_requests scope=organization.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
Clear enough to supply this argument.
title
short title for the request
Clear enough to supply this argument.
date
the date availability is needed (YYYY-MM-DD)
Clear enough to supply this argument.
request_mode
TIME_WINDOW (default — requires start_time and end_time) or DAY (date only)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
start_time
RFC3339; required when request_mode is TIME_WINDOW
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
end_time
RFC3339; required when request_mode is TIME_WINDOW; must be after start_time
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event_id
optional event to associate; must belong to the org. Its time zone sets the request's clock zone
Clear enough to supply this argument.
org_position_ids
optional org position ids the request targets
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
description
optional longer description
Explain the meaning of this value, not just its name.
expires_at
optional RFC3339 expiry
Explain the meaning of this value, not just its name.
recipient_ids
user ids to ask. IMPORTANT: if provided, the request is created AND SENT immediately. Omit to create a DRAFT.
{
"name": "create_availability_request",
"title": "Create availability request",
"description": "Create an availability request in an organization (requires scheduler/CRM-manager access). request_mode defaults to TIME_WINDOW (requires start_time and end_time); use request_mode=DAY for a date-only request. If you pass recipient_ids the request is created AND sent after confirmation. Omit recipients to create an unsent request (status DRAFT). Pass event_id when the request is for a gig: its time zone sets the clock times shown in the response (event_timezone); without one they fall back to the organization time zone, which may be UTC. Read the request back with get_availability_request scope=organization, or list_availability_requests scope=organization.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"date"
],
"properties": {
"date": {
"type": "string",
"description": "the date availability is needed (YYYY-MM-DD)"
},
"title": {
"type": "string",
"description": "short title for the request"
},
"end_time": {
"type": "string",
"description": "RFC3339; required when request_mode is TIME_WINDOW; must be after start_time"
},
"event_id": {
"type": "string",
"description": "optional event to associate; must belong to the org. Its time zone sets the request's clock zone"
},
"expires_at": {
"type": "string",
"description": "optional RFC3339 expiry"
},
"start_time": {
"type": "string",
"description": "RFC3339; required when request_mode is TIME_WINDOW"
},
"description": {
"type": "string",
"description": "optional longer description"
},
"request_mode": {
"type": "string",
"description": "TIME_WINDOW (default — requires start_time and end_time) or DAY (date only)"
},
"recipient_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "user ids to ask. IMPORTANT: if provided, the request is created AND SENT immediately. Omit to create a DRAFT."
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"org_position_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "optional org position ids the request targets"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create availability request",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Send (dispatch) an existing availability request to its recipients, optionally adding more recipients first. The confirmation token binds the people who will be notified and the request details they will see (title, dates, times), so editing the request or its recipients after approval re-gates the send. Requires scheduler/CRM-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
Clear enough to supply this argument.
request_id
the availability request to send
Explain the meaning of this value, not just its name.
recipient_ids
optional additional user ids to add as recipients before sending
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
{
"name": "send_availability_request",
"title": "Send availability request",
"description": "Send (dispatch) an existing availability request to its recipients, optionally adding more recipients first. The confirmation token binds the people who will be notified and the request details they will see (title, dates, times), so editing the request or its recipients after approval re-gates the send. Requires scheduler/CRM-manager access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string",
"description": "the availability request to send"
},
"recipient_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "optional additional user ids to add as recipients before sending"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Send availability request",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Remove a venue from the organization's directory (unlinks the org overlay; the shared venue record remains). Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
venue_id
the venue to remove from this organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Remove a customer link from a gig. The customer record stays in the org directory. Requires CRM manager access. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Clarify ID sources, units, or usage conventions not already expressed in the schema.
customer_id
customer id currently linked to the gig
Clear enough to supply this argument.
event_id
gig id to unlink the customer from
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "unlink_customer_from_event",
"title": "Unlink customer from event",
"description": "Remove a customer link from a gig. The customer record stays in the org directory. Requires CRM manager access. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"customer_id",
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "gig id to unlink the customer from"
},
"customer_id": {
"type": "string",
"description": "customer id currently linked to the gig"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Unlink customer from event",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Email a customer contact a link to sign in to the Soundcheck client portal for this organization. Requires the client-portal entitlement and CRM manager access. Writes to a real person. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
contact_id
customer contact id (not the customer id) from the customer record
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "invite_customer_contact_to_portal",
"title": "Invite customer contact to portal",
"description": "Email a customer contact a link to sign in to the Soundcheck client portal for this organization. Requires the client-portal entitlement and CRM manager access. Writes to a real person. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"contact_id"
],
"properties": {
"contact_id": {
"type": "string",
"description": "customer contact id (not the customer id) from the customer record"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Invite customer contact to portal",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
Create a booking/staffing lead in an organization. Requires name, email, event_date, event_type, location, and source (WEBSITE|REFERRAL|INBOUND_EMAIL|PARTNER|REPEAT_CLIENT|OTHER — staff-authored leads must state where they came from). Returns the created lead.
Describe the returned information so the agent knows whether it will answer the request.
Inputs82/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
contact name
Clear enough to supply this argument.
email
contact email
Clear enough to supply this argument.
event_date
requested event date (YYYY-MM-DD or RFC3339)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event_type
event type (concert, wedding, corporate, festival, …)
Clear enough to supply this argument.
location
event location
Clear enough to supply this argument.
source
required — WEBSITE, REFERRAL, INBOUND_EMAIL, PARTNER, REPEAT_CLIENT, or OTHER
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
phone
contact phone number
Clear enough to supply this argument.
company
company or client name
Clear enough to supply this argument.
budget
budget as a string (e.g. 5000)
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
message
inquiry message
Clear enough to supply this argument.
internal_notes
notes private to the org
Clear enough to supply this argument.
latitude
location latitude
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
longitude
location longitude
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
Update a lead (partial merge). organization_id defaults to your active organization; pass it explicitly for a lead in another organization you belong to. Stage may be NEW, QUALIFIED, or QUOTED — use convert_lead, mark_lead_lost, or reopen_lead to reach Won or Lost. Pass null for event_id or customer_id to unlink.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Explain the meaning of this value, not just its name.
lead_id
the lead to update
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Clear enough to supply this argument.
name
contact name
Clear enough to supply this argument.
email
contact email
Clear enough to supply this argument.
phone
contact phone number
Clear enough to supply this argument.
event_date
requested event date (YYYY-MM-DD or RFC3339)
Clear enough to supply this argument.
event_type
event type (concert, wedding, corporate, festival, …)
Clear enough to supply this argument.
location
event location
Clear enough to supply this argument.
company
company or client name
Clear enough to supply this argument.
budget
budget as a string (e.g. 5000)
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
message
inquiry message
Clear enough to supply this argument.
source
WEBSITE, REFERRAL, INBOUND_EMAIL, PARTNER, REPEAT_CLIENT, or OTHER
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
internal_notes
notes private to the org
Clear enough to supply this argument.
stage
NEW, QUALIFIED, or QUOTED
Clear enough to supply this argument.
event_id
link this lead to an event; null clears the link
Clear enough to supply this argument.
customer_id
link this lead to a customer; null clears the link
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
Delete a lead. organization_id defaults to your active organization; pass it explicitly for a lead in another organization you belong to. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs81/100
Explain the meaning of this value, not just its name.
lead_id
the lead to delete
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "delete_lead",
"title": "Delete lead",
"description": "Delete a lead. organization_id defaults to your active organization; pass it explicitly for a lead in another organization you belong to. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"lead_id"
],
"properties": {
"lead_id": {
"type": "string",
"description": "the lead to delete"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Delete lead",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Assign or clear the owner of a lead. Omit org_member_id to claim the lead yourself; pass an org member id to assign someone else (CRM manager; the owner must be active staff, any role except Member). Pass org_member_id null to remove the owner so the lead shows as Unassigned (CRM manager).
The description explains the capability, when to use it, and what to expect.
Inputs67/100
Explain the meaning of this value, not just its name.
lead_id
the lead
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Explain the meaning of this value, not just its name.
org_member_id
org member to assign as owner; omit to claim it yourself; null to unassign
{
"name": "set_lead_owner",
"title": "Set lead owner",
"description": "Assign or clear the owner of a lead. Omit org_member_id to claim the lead yourself; pass an org member id to assign someone else (CRM manager; the owner must be active staff, any role except Member). Pass org_member_id null to remove the owner so the lead shows as Unassigned (CRM manager).",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"lead_id"
],
"properties": {
"lead_id": {
"type": "string",
"description": "the lead"
},
"org_member_id": {
"type": [
"string",
"null"
],
"description": "org member to assign as owner; omit to claim it yourself; null to unassign"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Set lead owner",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
{
"name": "convert_lead",
"title": "Convert lead",
"description": "Convert a lead into a customer on an event and mark the lead Won. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"lead_id",
"event_id"
],
"properties": {
"lead_id": {
"type": "string",
"description": "the lead to convert"
},
"event_id": {
"type": "string",
"description": "the event to attach the new customer to"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Convert lead",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Check out inventory to a gig or org member. Requires quantity and either event_id or org_member_id. Read get_inventory after assigning: committed_quantity includes current and future assignments; upcoming_quantity counts assignments starting after today. assigned_quantity and available_quantity remain as of today in the org timezone. For date-specific availability use check_inventory_availability with event_id.
The description explains the capability, when to use it, and what to expect.
Inputs72/100
Explain the meaning of this value, not just its name.
item_id
the inventory item to assign
Explain the meaning of this value, not just its name.
quantity
units to check out (must be positive)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
event_id
gig to assign this gear to
Clear enough to supply this argument.
org_member_id
org member to check this out to
Clear enough to supply this argument.
due_at
when it should be returned (RFC3339)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
notes
optional assignment notes
Explain the meaning of this value, not just its name.
status
assignment status label
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Create an import job from pasted CSV/TSV text and parse it. Next call map_import, then preview_import, then commit_import. target_type must be EVENT, LEAD, INVENTORY, or MEMBER.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
target_type
what the data becomes: EVENT, LEAD, INVENTORY, or MEMBER
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
paste_text
the raw CSV, semicolon-separated, or TSV text to import (the first row should be a header row)
Clear enough to supply this argument.
source_name
a label for this import (e.g. the original filename); defaults to 'pasted-data'
{
"name": "create_import_from_paste",
"title": "Create import from paste",
"description": "Create an import job from pasted CSV/TSV text and parse it. Next call map_import, then preview_import, then commit_import. target_type must be EVENT, LEAD, INVENTORY, or MEMBER.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"target_type",
"paste_text"
],
"properties": {
"paste_text": {
"type": "string",
"description": "the raw CSV, semicolon-separated, or TSV text to import (the first row should be a header row)"
},
"source_name": {
"type": "string",
"description": "a label for this import (e.g. the original filename); defaults to 'pasted-data'"
},
"target_type": {
"type": "string",
"description": "what the data becomes: EVENT, LEAD, INVENTORY, or MEMBER"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create import from paste",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Read a public event page (Luma, Partiful, Eventbrite, Meetup, a client brief, any event link) and return the gig fields it states: title, date, start/end time, venue, address and a short summary in notes, plus the sections it found: run_of_show (agenda items), doors_time, venue (with matched_venue_id), organizer (with matched_client_id), links, requirements (what to bring), capacity, ticket_price and suggested_gig_type. No gig is changed; what was read is kept with the link. Shows existing_event_id when this link was imported before. Review the fields and sections with the user, then call import_event_from_url with the sections they keep.
The description explains the capability, when to use it, and what to expect.
Inputs84/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
url
the public event page link
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"title": "Preview event from a link",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
Output schema13/100
Declare the result fields and their types in the output schema.
{
"name": "preview_event_from_url",
"title": "Preview event from a link",
"description": "Read a public event page (Luma, Partiful, Eventbrite, Meetup, a client brief, any event link) and return the gig fields it states: title, date, start/end time, venue, address and a short summary in notes, plus the sections it found: run_of_show (agenda items), doors_time, venue (with matched_venue_id), organizer (with matched_client_id), links, requirements (what to bring), capacity, ticket_price and suggested_gig_type. No gig is changed; what was read is kept with the link. Shows existing_event_id when this link was imported before. Review the fields and sections with the user, then call import_event_from_url with the sections they keep.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "the public event page link"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Preview event from a link",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Save an event link as a gig. A new link creates a DRAFT gig; a link imported before updates that same gig and keeps its status. Pass the event fields from preview_event_from_url, edited as the user asked, and only the preview sections the user kept: run_of_show is written to the gig run of show, venue is linked, organizer becomes a show contact, requirements become tasks, links become gig links (with the event page), image_url becomes the gig cover, capacity fills an empty guest count, suggested_gig_type sets the gig type. title and event_date are required.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
url
the same event link passed to preview_event_from_url
Clear enough to supply this argument.
event › title
gig name
Explain the meaning of this value, not just its name.
event › event_date
YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event › start_time
24-hour HH:MM local time
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event › end_date
YYYY-MM-DD, for multi-day events
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event › end_time
24-hour HH:MM local time
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event › timezone
IANA zone, e.g. America/Chicago
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event › location_name
venue or room name
Clear enough to supply this argument.
event › location
street address
Clear enough to supply this argument.
event › notes
details for the crew; the source link is added
Clear enough to supply this argument.
event › organizer_name
who is hosting the event
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
run_of_show › items › start_time
24-hour HH:MM on the gig day
Clear enough to supply this argument.
run_of_show › items › end_time
24-hour HH:MM; earlier than start means after midnight
Clear enough to supply this argument.
run_of_show › items › title
what happens, e.g. Doors open
Clear enough to supply this argument.
run_of_show › items › notes
detail for the item
Clear enough to supply this argument.
doors_time
door time, 24-hour HH:MM; added as the first run of show item
Clear enough to supply this argument.
venue › name
venue name
Clear enough to supply this argument.
venue › address
street address
Clear enough to supply this argument.
venue › city
city
Clear enough to supply this argument.
venue › region
state or region
Clear enough to supply this argument.
venue › postal_code
postal code
Clear enough to supply this argument.
venue › country
country
Clear enough to supply this argument.
venue › latitude
latitude
Clear enough to supply this argument.
venue › longitude
longitude
Explain the meaning of this value, not just its name.
venue › online
true for an online-only event; no venue is linked
Clear enough to supply this argument.
venue › matched_venue_id
existing venue id from the preview
Clear enough to supply this argument.
organizer › name
organizer or host name
Clear enough to supply this argument.
organizer › url
organizer website
Clear enough to supply this argument.
organizer › email
only when the page prints it
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organizer › phone
only when the page prints it
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organizer › matched_client_id
existing client id from the preview
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
links › items › label
link text
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
links › items › url
http or https link
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
links › items › kind
what the link is for
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
requirements
what to bring; saved as gig tasks
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
capacity
saved as the guest count when the gig has none
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
ticket_price
added to the gig notes
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
image_url
page image from the preview; stored as the gig cover unless someone set one by hand
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
suggested_gig_type › label_id
Event Type label id from the preview
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
suggested_gig_type › name
label name
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Import event from a link",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema42/100
Describe the returned fields so an agent can interpret the result.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
Resolve the column→field mapping for an import job. Call with NO mapping to let the server auto-map. Once correct, call preview_import before commit_import.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clear enough to supply this argument.
job_id
the import job id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
mapping › columns › items › column
the exact source column header from the parsed file
Clear enough to supply this argument.
mapping › columns › items › uef_field
the target UEF field path from get_import_field_catalog
Clear enough to supply this argument.
mapping › columns › items › transform
optional value transform hint
Explain the meaning of this value, not just its name.
mapping › columns › items › notes
optional note about this column
Explain the meaning of this value, not just its name.
mapping › row_grouping
EVENT imports only: one_row_per_event (default) or group_by_external_id
Clear enough to supply this argument.
mapping › qualifying_stages
LEAD imports only: deal-stage values that also turn a lead into an event
Clear enough to supply this argument.
save_as
optional name to save this mapping as a reusable template
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Commit an import job — WRITES the data into the live system. Not reversible from here. Requires preview first. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clear enough to supply this argument.
job_id
the import job id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Download the active org workspace as one UEF 2.0 document (members, clients, venues, inventory, songs, setlists, projects, gigs with their days and shifts, leads; the same data as the Settings → Data zip). Pass the document to import_file on a destination org you manage. Does not include lead budgets, inventory replacement costs, crew performance fees, files, branding, or integration tokens.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
source org; defaults to your active organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Dry-run a Soundcheck import file (a UEF 2.0 document) against a destination org you manage (no data is written). Pass the document from export_workspace, or one you built (get_import_format has the shape; check_import_file checks it). Inspect new vs updated counts and errors before import_file.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Input documentation gives an agent enough context to populate the arguments.
organization_id
destination org id (must be one you manage)
Clear enough to supply this argument.
document
a UEF 2.0 document (schema_version "2.0"), e.g. from export_workspace
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Import a Soundcheck import file (a UEF 2.0 document) into a destination org you manage — WRITES its records into the live system. Preview first with preview_import_file. Team members in the document may be emailed org invitations. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Dest org must be one you own or manage; not available on public MCP.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
destination org id (must be one you manage)
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
document
a UEF 2.0 document (schema_version "2.0"), e.g. from export_workspace
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "import_file",
"title": "Import file",
"description": "Import a Soundcheck import file (a UEF 2.0 document) into a destination org you manage — WRITES its records into the live system. Preview first with preview_import_file. Team members in the document may be emailed org invitations. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Dest org must be one you own or manage; not available on public MCP.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"organization_id",
"document"
],
"properties": {
"document": {
"type": "object",
"properties": {},
"description": "a UEF 2.0 document (schema_version \"2.0\"), e.g. from export_workspace",
"additionalProperties": true
},
"organization_id": {
"type": "string",
"description": "destination org id (must be one you manage)"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Import file",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Send a reminder to people who have not answered yet. kind="invitation" reminds one pending gig invitation recipient by email (invitation_id; needs gig-manager access). kind="crew_offer" reminds pending recipients on an OPEN crew offer (offer_id). kind="availability_request" reminds pending recipients on an OPEN availability check (request_id; needs scheduler access). Optional message is prepended to the reminder. Writes to real people. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
kind
what to remind about; pass the matching id
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
invitation_id
kind=invitation: invitation row id from list_event_invitations / get_invitation
Clear enough to supply this argument.
offer_id
kind=crew_offer: the crew offer id from list_mailbox / list_crew_offers
Clear enough to supply this argument.
request_id
kind=availability_request: the availability request id from list_mailbox
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
message
optional copy prepended to the reminder
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Invite someone to the organization by email. Clerk sends the email. Default role is org:member; org:gig_coordinator is allowed; org:admin and org:finance are owner-only. Writes to a real person. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires admin access.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
email
invitee email address
Clear enough to supply this argument.
role
org:member (default), org:gig_coordinator, or org:admin or org:finance (owner-only)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Send a custom SMS or email to a specific list of ORG MEMBERS by user_id (NOT the whole roster — use broadcast_event_reminder for that). Writes to real people and is not reversible. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Set expected_recipient_count to the number of recipients.
The description explains the capability, when to use it, and what to expect.
Inputs72/100
Explain the meaning of this value, not just its name.
recipients
org-member user ids to message (from preview_event_recipients)
Clear enough to supply this argument.
channel
SMS or EMAIL
Explain the meaning of this value, not just its name.
sms_body
the SMS text (required when channel is SMS)
Clear enough to supply this argument.
email_subject
email subject (required when channel is EMAIL)
Explain the meaning of this value, not just its name.
email_body
email body (required when channel is EMAIL)
Explain the meaning of this value, not just its name.
event_id
optional event to associate the messages with (also resolves org context)
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
expected_recipient_count
must equal the number of recipients you are sending to
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "send_message",
"title": "Send message",
"description": "Send a custom SMS or email to a specific list of ORG MEMBERS by user_id (NOT the whole roster — use broadcast_event_reminder for that). Writes to real people and is not reversible. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Set expected_recipient_count to the number of recipients.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"recipients",
"channel",
"expected_recipient_count"
],
"properties": {
"channel": {
"type": "string",
"description": "SMS or EMAIL"
},
"event_id": {
"type": "string",
"description": "optional event to associate the messages with (also resolves org context)"
},
"sms_body": {
"type": "string",
"description": "the SMS text (required when channel is SMS)"
},
"email_body": {
"type": "string",
"description": "email body (required when channel is EMAIL)"
},
"recipients": {
"type": "array",
"items": {
"type": "string"
},
"description": "org-member user ids to message (from preview_event_recipients)"
},
"email_subject": {
"type": "string",
"description": "email subject (required when channel is EMAIL)"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
},
"expected_recipient_count": {
"type": "integer",
"description": "must equal the number of recipients you are sending to"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Send message",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Send the standard event reminder to the members of an event's roster (SMS and/or email). Declined and standby members are not reminded, and DRAFT or TEMPLATE gigs are refused. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Set expected_recipient_count to preview_event_recipients summary.broadcast_total.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the event whose roster to remind
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
channels
channels to use: SMS and/or EMAIL (default both)
Clear enough to supply this argument.
expected_recipient_count
must equal the reminder recipient count (summary.broadcast_total from preview_event_recipients)
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
Create an empty file-ingestion batch on an event. Add files via add_ingestion_file (content_base64 for a binary file or text for pasted text, from third-party MCP agents) or request_attachment_upload (host-staged attachments in Soundcheck web/mobile).
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to caller's active org — pass explicitly if the event belongs to a different org
Clear enough to supply this argument.
event_id
the event the ingestion batch belongs to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Add one source to an ingestion batch. Pass text for pasted TEXT (an email thread, itinerary, notes, a schedule), or filename plus content_base64 for a binary file (PDF, image, spreadsheet) — max 8 MiB decoded, which fits the hosted MCP 12 MiB JSON body after base64. Returns 202 and analysis runs asynchronously. Not for tabular CSV imports. Prefer request_attachment_upload when the host app can upload staged attachments.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Explain the meaning of this value, not just its name.
organization_id
defaults to caller's active org — pass explicitly if the event belongs to a different org
Clear enough to supply this argument.
event_id
the event the ingestion batch belongs to
Clear enough to supply this argument.
batch_id
the ingestion batch id
Explain the meaning of this value, not just its name.
text
pasted text to ingest — an email thread, itinerary, notes, a schedule...
Clear enough to supply this argument.
source_name
text only: a label for the text (e.g. 'promoter-email'); defaults to pasted-text.txt
Clear enough to supply this argument.
filename
file only: the filename to store (e.g. contract.pdf)
Clear enough to supply this argument.
content_base64
file only: base64 file bytes; data URLs (data:...;base64,...) are accepted
Clear enough to supply this argument.
content_type
file only: MIME type (defaults to application/octet-stream)
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Trigger (or re-trigger) the batch's cross-file merged analysis. CHECK merge_status on get_ingestion_batch FIRST — only trigger when merge_status is NONE, STALE, FAILED, or DISMISSED.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Clarify ID sources, units, or usage conventions not already expressed in the schema.
organization_id
defaults to caller's active org — pass explicitly if the event belongs to a different org
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Commit the selected proposals from ONE ingested file onto the event — WRITES live data. Not reversible. Always call get_ingestion_file_review first and pass the rows to commit as selected: their UEF 2.0 document paths in the review's proposals ($.events[0].days[d].run_of_show[c], $.events[0].shifts[s].crew[k], $.events[0].ledger_items[i], $.leads[l]). Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
organization_id
defaults to caller's active org — pass explicitly if the event belongs to a different org
Clear enough to supply this argument.
event_id
the event the ingestion batch belongs to
Clear enough to supply this argument.
batch_id
the ingestion batch id
Clear enough to supply this argument.
file_id
the ingested file id within the batch
Clear enough to supply this argument.
selected
UEF 2.0 document paths of the review's proposal rows to commit, e.g. $.events[0].days[1].run_of_show[2], $.events[0].shifts[3].crew[0], $.events[0].ledger_items[4], $.leads[1]. Paths index the review's proposals (or edited_uef_json when sent); a path that names no row is a 400.
Clear enough to supply this argument.
edited_uef_json
optional corrected UEF document as a JSON string; selected paths name rows in it
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "commit_ingestion_file",
"title": "Commit ingestion file",
"description": "Commit the selected proposals from ONE ingested file onto the event — WRITES live data. Not reversible. Always call get_ingestion_file_review first and pass the rows to commit as selected: their UEF 2.0 document paths in the review's proposals ($.events[0].days[d].run_of_show[c], $.events[0].shifts[s].crew[k], $.events[0].ledger_items[i], $.leads[l]). Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"batch_id",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "the ingested file id within the batch"
},
"batch_id": {
"type": "string",
"description": "the ingestion batch id"
},
"event_id": {
"type": "string",
"description": "the event the ingestion batch belongs to"
},
"selected": {
"type": "array",
"items": {
"type": "string"
},
"description": "UEF 2.0 document paths of the review's proposal rows to commit, e.g. $.events[0].days[1].run_of_show[2], $.events[0].shifts[3].crew[0], $.events[0].ledger_items[4], $.leads[1]. Paths index the review's proposals (or edited_uef_json when sent); a path that names no row is a 400."
},
"edited_uef_json": {
"type": "string",
"description": "optional corrected UEF document as a JSON string; selected paths name rows in it"
},
"organization_id": {
"type": "string",
"description": "defaults to caller's active org — pass explicitly if the event belongs to a different org"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Commit ingestion file",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Commit the selected proposals from the batch's MERGED review onto the event — WRITES live data. Always call get_ingestion_batch with view=review first; merge_version must match. Pass the rows to commit as selected: their UEF 2.0 document paths in the review's proposals ($.events[0].days[d].run_of_show[c], $.events[0].shifts[s].crew[k], $.events[0].ledger_items[i], $.leads[l]). Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
organization_id
defaults to caller's active org — pass explicitly if the event belongs to a different org
Clear enough to supply this argument.
event_id
the event the ingestion batch belongs to
Clear enough to supply this argument.
batch_id
the ingestion batch id
Clear enough to supply this argument.
selected
UEF 2.0 document paths of the review's proposal rows to commit, e.g. $.events[0].days[1].run_of_show[2], $.events[0].shifts[3].crew[0], $.events[0].ledger_items[4], $.leads[1]. Paths index the review's proposals (or edited_uef_json when sent); a path that names no row is a 400.
Clear enough to supply this argument.
event_field_keys
event-level fields to overwrite from the merged proposal: 'venue' and/or 'location'. Omit to write NO event fields.
Clear enough to supply this argument.
edited_uef_json
optional corrected UEF document as a JSON string; selected paths name rows in it
Clear enough to supply this argument.
merge_version
the merge_version from get_ingestion_batch view=review — the commit is rejected (409) if a re-merge happened since you reviewed
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "commit_ingestion_batch",
"title": "Commit ingestion batch",
"description": "Commit the selected proposals from the batch's MERGED review onto the event — WRITES live data. Always call get_ingestion_batch with view=review first; merge_version must match. Pass the rows to commit as selected: their UEF 2.0 document paths in the review's proposals ($.events[0].days[d].run_of_show[c], $.events[0].shifts[s].crew[k], $.events[0].ledger_items[i], $.leads[l]). Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"batch_id",
"merge_version"
],
"properties": {
"batch_id": {
"type": "string",
"description": "the ingestion batch id"
},
"event_id": {
"type": "string",
"description": "the event the ingestion batch belongs to"
},
"selected": {
"type": "array",
"items": {
"type": "string"
},
"description": "UEF 2.0 document paths of the review's proposal rows to commit, e.g. $.events[0].days[1].run_of_show[2], $.events[0].shifts[3].crew[0], $.events[0].ledger_items[4], $.leads[1]. Paths index the review's proposals (or edited_uef_json when sent); a path that names no row is a 400."
},
"merge_version": {
"type": "integer",
"description": "the merge_version from get_ingestion_batch view=review — the commit is rejected (409) if a re-merge happened since you reviewed"
},
"edited_uef_json": {
"type": "string",
"description": "optional corrected UEF document as a JSON string; selected paths name rows in it"
},
"organization_id": {
"type": "string",
"description": "defaults to caller's active org — pass explicitly if the event belongs to a different org"
},
"event_field_keys": {
"type": "array",
"items": {
"type": "string"
},
"description": "event-level fields to overwrite from the merged proposal: 'venue' and/or 'location'. Omit to write NO event fields."
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Commit ingestion batch",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Invite people to a specific gig (event-scoped — NOT org membership; use invite_org_member for that). Each invitation names an org member by user_id (IN_APP) or an external person by email (EMAIL) or phone_number (SMS), optionally with org_position_id from list_org_positions, call_order (0 primary, 1+ backup), and a performance_fee. On an ACTIVE gig the person is notified immediately by email/SMS/push by default; pass send_invitation=false to store unsent drafts and send them later with send_event_invitations. On a DRAFT gig every invitation is held unsent until the gig is published with publish_event or the Soundcheck app, whatever send_invitation says, so do not tell the user anyone was notified. Gig coordinators may only invite existing members by user_id. Pass invitations:[{"email":"[email protected]"}] (or the emails:["[email protected]"] shorthand); this tool is event-scoped and takes no organization_id. Writes to real people, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set. Verify with list_event_invitations.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig to invite people to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
invitations › items › user_id
user id of an org member (list_org_members / list_users); required for IN_APP
Clear enough to supply this argument.
invitations › items › email
email address for an external EMAIL invitee
Clear enough to supply this argument.
invitations › items › phone_number
phone number for an external SMS invitee
Clear enough to supply this argument.
invitations › items › first_name
external invitee first name
Clear enough to supply this argument.
invitations › items › last_name
external invitee last name
Clear enough to supply this argument.
invitations › items › type
defaults to IN_APP when user_id is set, else EMAIL when email is set, else SMS
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
invitations › items › org_position_id
the role they are invited to fill, from list_org_positions
Clear enough to supply this argument.
invitations › items › call_order
0 = primary (default); 1+ = backup order. Backups are always stored unsent (send_invitation is forced false) — the API rejects a backup that is notified immediately
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
invitations › items › performance_fee
fee offered for the gig
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
invitations › items › fee_notes
notes shown with the fee
Clear enough to supply this argument.
invitations › items › send_invitation
default true for primaries (call_order 0): notify the person now. false stores an unsent draft you can send later with send_event_invitations. Backups (call_order 1+) default to false and may not be true
Clear enough to supply this argument.
emails
shorthand for invitations:[{email}] — EMAIL invitations with no other fields
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "create_event_invitations",
"title": "Create event invitations",
"description": "Invite people to a specific gig (event-scoped — NOT org membership; use invite_org_member for that). Each invitation names an org member by user_id (IN_APP) or an external person by email (EMAIL) or phone_number (SMS), optionally with org_position_id from list_org_positions, call_order (0 primary, 1+ backup), and a performance_fee. On an ACTIVE gig the person is notified immediately by email/SMS/push by default; pass send_invitation=false to store unsent drafts and send them later with send_event_invitations. On a DRAFT gig every invitation is held unsent until the gig is published with publish_event or the Soundcheck app, whatever send_invitation says, so do not tell the user anyone was notified. Gig coordinators may only invite existing members by user_id. Pass invitations:[{\"email\":\"[email protected]\"}] (or the emails:[\"[email protected]\"] shorthand); this tool is event-scoped and takes no organization_id. Writes to real people, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set. Verify with list_event_invitations.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"emails": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "shorthand for invitations:[{email}] — EMAIL invitations with no other fields"
},
"event_id": {
"type": "string",
"description": "the gig to invite people to"
},
"invitations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"enum": [
"EMAIL",
"SMS",
"IN_APP"
],
"type": "string",
"description": "defaults to IN_APP when user_id is set, else EMAIL when email is set, else SMS"
},
"email": {
"type": "string",
"description": "email address for an external EMAIL invitee"
},
"user_id": {
"type": "string",
"description": "user id of an org member (list_org_members / list_users); required for IN_APP"
},
"fee_notes": {
"type": "string",
"description": "notes shown with the fee"
},
"last_name": {
"type": "string",
"description": "external invitee last name"
},
"call_order": {
"type": "integer",
"minimum": 0,
"description": "0 = primary (default); 1+ = backup order. Backups are always stored unsent (send_invitation is forced false) — the API rejects a backup that is notified immediately"
},
"first_name": {
"type": "string",
"description": "external invitee first name"
},
"phone_number": {
"type": "string",
"description": "phone number for an external SMS invitee"
},
"org_position_id": {
"type": "string",
"description": "the role they are invited to fill, from list_org_positions"
},
"performance_fee": {
"type": "number",
"minimum": 0,
"description": "fee offered for the gig"
},
"send_invitation": {
"type": "boolean",
"description": "default true for primaries (call_order 0): notify the person now. false stores an unsent draft you can send later with send_event_invitations. Backups (call_order 1+) default to false and may not be true"
}
},
"additionalProperties": false
},
"minItems": 1,
"description": "one entry per person, e.g. [{\"email\":\"[email protected]\"}]"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create event invitations",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Send a gig's unsent (draft) invitations — the ones created with send_invitation=false — by email/SMS/push. Pass invitation_ids from list_event_invitations to send a subset, or omit the field entirely to send every unsent invitation on the event — those are resolved when you call and the confirmation token binds exactly that list, so a draft added afterwards needs its own approval (an empty list is rejected, never treated as send-all). Already-sent invitations are not re-sent (use send_reminder kind=invitation for that). The event must be ACTIVE: on a DRAFT gig nothing is sent and results comes back empty, because invitations go out when the gig is published with publish_event or the Soundcheck app — never report them as sent. Messages real people, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig whose invitations to send
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
invitation_ids
subset from list_event_invitations; omit to send all pending
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "send_event_invitations",
"title": "Send event invitations",
"description": "Send a gig's unsent (draft) invitations — the ones created with send_invitation=false — by email/SMS/push. Pass invitation_ids from list_event_invitations to send a subset, or omit the field entirely to send every unsent invitation on the event — those are resolved when you call and the confirmation token binds exactly that list, so a draft added afterwards needs its own approval (an empty list is rejected, never treated as send-all). Already-sent invitations are not re-sent (use send_reminder kind=invitation for that). The event must be ACTIVE: on a DRAFT gig nothing is sent and results comes back empty, because invitations go out when the gig is published with publish_event or the Soundcheck app — never report them as sent. Messages real people, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig whose invitations to send"
},
"invitation_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "subset from list_event_invitations; omit to send all pending"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Send event invitations",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Add a position (role) to the organization roster so staffing, call lists, and crew offers have something to bind to. Enable a catalog role with default_position_id (from list_org_positions source=defaults) OR create a custom one with custom_name (+ optional custom_section). Optional default_day_rate seeds fees; display_order orders the roster. Fails with a clear conflict error when the role already exists (check list_org_positions active_only=false first — a deactivated role should be reactivated with update_org_position is_active=true, not re-created). Requires org admin. Nobody is notified.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clear enough to supply this argument.
default_position_id
catalog position id from list_org_positions source=defaults (enables a built-in role)
Clear enough to supply this argument.
custom_name
name for a custom role when the catalog has no match (e.g. "A2", "Runner")
Clear enough to supply this argument.
custom_section
section label for a custom role (e.g. Audio, Lighting, Production)
Clear enough to supply this argument.
display_order
roster sort order
Clear enough to supply this argument.
default_day_rate
default per-day rate
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
{
"name": "create_org_position",
"title": "Create organization position",
"description": "Add a position (role) to the organization roster so staffing, call lists, and crew offers have something to bind to. Enable a catalog role with default_position_id (from list_org_positions source=defaults) OR create a custom one with custom_name (+ optional custom_section). Optional default_day_rate seeds fees; display_order orders the roster. Fails with a clear conflict error when the role already exists (check list_org_positions active_only=false first — a deactivated role should be reactivated with update_org_position is_active=true, not re-created). Requires org admin. Nobody is notified.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"custom_name": {
"type": "string",
"description": "name for a custom role when the catalog has no match (e.g. \"A2\", \"Runner\")"
},
"display_order": {
"type": "integer",
"minimum": 0,
"description": "roster sort order"
},
"custom_section": {
"type": "string",
"description": "section label for a custom role (e.g. Audio, Lighting, Production)"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"default_day_rate": {
"type": "number",
"minimum": 0,
"description": "default per-day rate"
},
"default_position_id": {
"type": "string",
"description": "catalog position id from list_org_positions source=defaults (enables a built-in role)"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create organization position",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Rename, reorder, re-rate, deactivate (is_active=false), or reactivate (is_active=true) an organization position. position_id is the org position id from list_org_positions (pass active_only=false to see deactivated roles). Name/section edits apply to custom roles only; catalog roles keep their catalog name. Deactivated roles stop being offered for staffing but keep their history. Requires org admin. Nobody is notified.
The description explains the capability, when to use it, and what to expect.
Inputs79/100
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Clear enough to supply this argument.
position_id
org position id from list_org_positions
Clear enough to supply this argument.
custom_name
new name (custom roles only)
Clear enough to supply this argument.
custom_section
new section (custom roles only)
Explain the meaning of this value, not just its name.
display_order
roster sort order
Explain the meaning of this value, not just its name.
default_day_rate
default per-day rate
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Shorten the title to an action and subject; move usage details into the description.
Description89/100
List crew offers. scope="mine" (default) is the recipient-side view: offers sent to you (or user_id), filtered by status. scope="organization" lists the organization's shifts on each gig's Staffing board, including DRAFT ones that apply_calllist_to_event or create_crew_offer created but nobody has been sent yet; each row carries status (DRAFT, OPEN, FILLED, EXPIRED, CANCELLED), offer_type, event_id, org_position_id, days, and recipients with their per-person status. Filter organization rows by status, type, event_id, or a from/to civil-day window (YYYY-MM-DD). Read-only; organization scope is for org members only.
Describe the returned information so the agent knows whether it will answer the request.
Inputs73/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
scope
mine (default): offers sent to you; organization: every shift in the org
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
user_id
scope=mine only; defaults to you
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
status
DRAFT | OPEN | FILLED | EXPIRED | CANCELLED
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
type
JOB_OFFER | OPEN_SHIFT
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event_id
limit to one gig
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
from
inclusive YYYY-MM-DD on the shift days
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
to
inclusive YYYY-MM-DD on the shift days
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
scope=organization page size, max 200
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
scope=organization pagination offset
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
Shorten the title to an action and subject; move usage details into the description.
Description95/100
Get one crew offer (shift) with its days and every recipient (user_id, status, fee, delivery). Use before send_crew_offer to review who is attached, and after to confirm delivery. Read-only; org members only.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
organization_id
defaults to your active organization
Clear enough to supply this argument.
offer_id
crew offer id from list_crew_offers / list_mailbox
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Review a gig's staffing board before anything is sent: every shift grouped by position, with title, days and call times (in the gig's timezone), fee, seats_needed / max_acceptances, each day's spots and accepted count, and status, each attached person's name with their status, fee and delivery, and seat counts (needed vs attached vs accepted; an open shift needs its busiest day's spots). Flags the shifts that still have people nobody has sent anything to (sendable). Read-only and sends nothing; to send a shift call send_crew_offer (confirmation-gated). Org members only.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig whose staffing board to review
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "review_staffing_draft",
"title": "Review staffing draft",
"description": "Review a gig's staffing board before anything is sent: every shift grouped by position, with title, days and call times (in the gig's timezone), fee, seats_needed / max_acceptances, each day's spots and accepted count, and status, each attached person's name with their status, fee and delivery, and seat counts (needed vs attached vs accepted; an open shift needs its busiest day's spots). Flags the shifts that still have people nobody has sent anything to (sendable). Read-only and sends nothing; to send a shift call send_crew_offer (confirmation-gated). Org members only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig whose staffing board to review"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Review staffing draft",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
Shorten the title to an action and subject; move usage details into the description.
Description94/100
Create a DRAFT shift on a gig's Staffing board by hand (the alternative to apply_calllist_to_event). Give it a title, the event_id, the org_position_id it staffs (from list_org_positions — create one first with create_org_position if the roster is empty), a single date or explicit days[], call times, and a fee. offer_type JOB_OFFER (default) targets named people and fills seats_needed; OPEN_SHIFT is a first-to-accept broadcast capped by max_acceptances. recipient_ids / recipients attach people as UNSENT draft recipients (both spellings are merged; recipients[] adds a per-person fee). NOTHING IS SENT AND NOBODY IS NOTIFIED by this tool — review with get_crew_offer, then send_crew_offer (gated) sends it. Org members with gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs73/100
Explain the meaning of this value, not just its name.
title
shift name shown to crew (e.g. "FOH — Saturday show")
Clear enough to supply this argument.
description
details shown to crew
Explain the meaning of this value, not just its name.
date
YYYY-MM-DD for a single-day shift (not with days)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › date
YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › start_time
RFC3339 call time with UTC offset on this day, in the gig timezone (e.g. 2026-10-03T18:00:00-05:00)
Clear enough to supply this argument.
days › items › end_time
RFC3339 end time with UTC offset on this day, in the gig timezone (e.g. 2026-10-03T23:00:00-05:00)
Clear enough to supply this argument.
days › items › fee
per-day fee override
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › seats_needed
JOB_OFFER seats for this day
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › capacity
OPEN_SHIFT spots for this day; a day without one takes max_acceptances
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
start_time
RFC3339 call time with UTC offset on the first shift day, in the gig timezone (e.g. 2026-10-03T18:00:00-05:00)
Clear enough to supply this argument.
end_time
RFC3339 end time with UTC offset on the first shift day, in the gig timezone (e.g. 2026-10-03T23:00:00-05:00)
Clear enough to supply this argument.
fee
fee per person
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fee_type
FIXED (flat) or HOURLY
Clear enough to supply this argument.
currency
ISO currency code, default USD
Clear enough to supply this argument.
seats_needed
JOB_OFFER: how many people to fill
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
max_acceptances
OPEN_SHIFT: first-N-to-accept spots, set on every day; the shift reports its busiest day
Clear enough to supply this argument.
expires_at
RFC3339 deadline for responses
Clear enough to supply this argument.
recipient_ids
user ids to attach as recipients (not notified until send_crew_offer)
Clear enough to supply this argument.
recipients › items › user_id
org member user id
Clear enough to supply this argument.
recipients › items › fee
fee for this person, overriding the offer fee
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
event_id
the gig this shift belongs to
Clear enough to supply this argument.
org_position_id
role from list_org_positions
Clear enough to supply this argument.
offer_type
JOB_OFFER (default) or OPEN_SHIFT broadcast
Clear enough to supply this argument.
calllist_id
attach the members of this call list as draft recipients
Clear enough to supply this argument.
auto_add_available_workers
also attach org members who marked themselves available that day
{
"name": "create_crew_offer",
"title": "Create crew offer (draft shift)",
"description": "Create a DRAFT shift on a gig's Staffing board by hand (the alternative to apply_calllist_to_event). Give it a title, the event_id, the org_position_id it staffs (from list_org_positions — create one first with create_org_position if the roster is empty), a single date or explicit days[], call times, and a fee. offer_type JOB_OFFER (default) targets named people and fills seats_needed; OPEN_SHIFT is a first-to-accept broadcast capped by max_acceptances. recipient_ids / recipients attach people as UNSENT draft recipients (both spellings are merged; recipients[] adds a per-person fee). NOTHING IS SENT AND NOBODY IS NOTIFIED by this tool — review with get_crew_offer, then send_crew_offer (gated) sends it. Org members with gig-operations access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title"
],
"properties": {
"fee": {
"type": "number",
"minimum": 0,
"description": "fee per person"
},
"date": {
"type": "string",
"description": "YYYY-MM-DD for a single-day shift (not with days)"
},
"days": {
"type": "array",
"items": {
"type": "object",
"required": [
"date"
],
"properties": {
"fee": {
"type": "number",
"minimum": 0,
"description": "per-day fee override"
},
"date": {
"type": "string",
"description": "YYYY-MM-DD"
},
"capacity": {
"type": "integer",
"minimum": 1,
"description": "OPEN_SHIFT spots for this day; a day without one takes max_acceptances"
},
"end_time": {
"type": "string",
"description": "RFC3339 end time with UTC offset on this day, in the gig timezone (e.g. 2026-10-03T23:00:00-05:00)"
},
"start_time": {
"type": "string",
"description": "RFC3339 call time with UTC offset on this day, in the gig timezone (e.g. 2026-10-03T18:00:00-05:00)"
},
"seats_needed": {
"type": "integer",
"minimum": 1,
"description": "JOB_OFFER seats for this day"
}
},
"additionalProperties": false
},
"description": "explicit per-day set for a multi-day shift (not with date)"
},
"title": {
"type": "string",
"description": "shift name shown to crew (e.g. \"FOH — Saturday show\")"
},
"currency": {
"type": "string",
"description": "ISO currency code, default USD"
},
"end_time": {
"type": "string",
"description": "RFC3339 end time with UTC offset on the first shift day, in the gig timezone (e.g. 2026-10-03T23:00:00-05:00)"
},
"event_id": {
"type": "string",
"description": "the gig this shift belongs to"
},
"fee_type": {
"enum": [
"FIXED",
"HOURLY"
],
"type": "string",
"description": "FIXED (flat) or HOURLY"
},
"expires_at": {
"type": "string",
"description": "RFC3339 deadline for responses"
},
"offer_type": {
"enum": [
"JOB_OFFER",
"OPEN_SHIFT"
],
"type": "string",
"description": "JOB_OFFER (default) or OPEN_SHIFT broadcast"
},
"recipients": {
"type": "array",
"items": {
"type": "object",
"required": [
"user_id"
],
"properties": {
"fee": {
"type": "number",
"minimum": 0,
"description": "fee for this person, overriding the offer fee"
},
"user_id": {
"type": "string",
"description": "org member user id"
}
},
"additionalProperties": false
},
"description": "recipients with per-person fees (not notified until send_crew_offer)"
},
"start_time": {
"type": "string",
"description": "RFC3339 call time with UTC offset on the first shift day, in the gig timezone (e.g. 2026-10-03T18:00:00-05:00)"
},
"calllist_id": {
"type": "string",
"description": "attach the members of this call list as draft recipients"
},
"description": {
"type": "string",
"description": "details shown to crew"
},
"seats_needed": {
"type": "integer",
"minimum": 1,
"description": "JOB_OFFER: how many people to fill"
},
"recipient_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "user ids to attach as recipients (not notified until send_crew_offer)"
},
"max_acceptances": {
"type": "integer",
"minimum": 1,
"description": "OPEN_SHIFT: first-N-to-accept spots, set on every day; the shift reports its busiest day"
},
"org_position_id": {
"type": "string",
"description": "role from list_org_positions"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"auto_add_available_workers": {
"type": "boolean",
"description": "also attach org members who marked themselves available that day"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create crew offer (draft shift)",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
Shorten the title to an action and subject; move usage details into the description.
Description87/100
Edit a shift: title, description, date or days[], call times, fee/fee_type/currency, seats_needed or max_acceptances, expires_at, and (while still DRAFT) the attached recipients — recipient_ids and/or recipients[] (per-person fees) are merged into one full set to keep; anyone omitted from that set is dropped. Pass start_time or end_time as "" to clear the offer-level time. Per-day overrides: day_fees[{date, fee}] (fee 0 clears), day_seats[{date, seats_needed}] (0 clears), day_times[{date, start_time, end_time}]. Days that already passed cannot change times. Editing does not notify anyone; to withdraw or send a shift use the dedicated flows (send_crew_offer to send). Org members with gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs82/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
offer_id
crew offer id from list_crew_offers
Clear enough to supply this argument.
title
shift name shown to crew
Clear enough to supply this argument.
description
details shown to crew
Clear enough to supply this argument.
date
YYYY-MM-DD for a single-day shift (not with days)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › date
YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › start_time
RFC3339 call time with UTC offset on this day, in the gig timezone (e.g. 2026-10-03T18:00:00-05:00)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › end_time
RFC3339 end time with UTC offset on this day, in the gig timezone (e.g. 2026-10-03T23:00:00-05:00)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › fee
per-day fee override
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › seats_needed
JOB_OFFER seats for this day
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › capacity
OPEN_SHIFT spots for this day; a day without one takes max_acceptances
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
start_time
RFC3339 call time with UTC offset on the first shift day, in the gig timezone (e.g. 2026-10-03T18:00:00-05:00)
Clear enough to supply this argument.
end_time
RFC3339 end time with UTC offset on the first shift day, in the gig timezone (e.g. 2026-10-03T23:00:00-05:00)
Clear enough to supply this argument.
fee
fee per person
Clear enough to supply this argument.
fee_type
FIXED (flat) or HOURLY
Clear enough to supply this argument.
currency
ISO currency code, default USD
Clear enough to supply this argument.
seats_needed
JOB_OFFER: how many people to fill
Clear enough to supply this argument.
max_acceptances
OPEN_SHIFT: first-N-to-accept spots, set on every day; the shift reports its busiest day
Clear enough to supply this argument.
expires_at
RFC3339 deadline for responses
Clear enough to supply this argument.
recipient_ids
user ids to attach as recipients (not notified until send_crew_offer)
Clear enough to supply this argument.
recipients › items › user_id
org member user id
Clear enough to supply this argument.
recipients › items › fee
fee for this person, overriding the offer fee
Clear enough to supply this argument.
day_fees › items › date
YYYY-MM-DD
Clear enough to supply this argument.
day_fees › items › fee
fee for that day; 0 (or null) clears the override
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
day_seats › items › date
YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
day_seats › items › seats_needed
seats for that day; 0 clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
day_times › items › date
YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
day_times › items › start_time
RFC3339 with UTC offset on that day (e.g. 2026-10-03T18:00:00-05:00)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
day_times › items › end_time
RFC3339 with UTC offset on that day (e.g. 2026-10-03T23:00:00-05:00)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Add someone who has no Soundcheck account (an outside singer on a personal email, a sub engineer, a phone-only contact) to a shift. Give first_name and email. phone_number and sms_consent (true only when that person agreed to texts) are optional, and company shows on the roster. On a DRAFT shift they are attached unsent; on an OPEN or FILLED shift they are emailed a link to accept or decline without signing up, so that call is confirmation-gated. Org members with gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offer_id
crew offer id from list_crew_offers / create_crew_offer
Clear enough to supply this argument.
first_name
first name
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
last_name
last name
Clear enough to supply this argument.
email
where the shift link is sent (required)
Clear enough to supply this argument.
phone_number
E.164, for example +13105550123
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sms_consent
true only when that person agreed to be texted at phone_number
Clear enough to supply this argument.
company
their company or vendor, shown on the roster
Clear enough to supply this argument.
org_position_id
role from list_org_positions; must be the shift role
Clear enough to supply this argument.
fee
their pay for this shift, in dollars
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Add a person without an account to a shift",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema47/100
Describe the returned fields so an agent can interpret the result.
{
"name": "add_external_crew_member",
"title": "Add a person without an account to a shift",
"description": "Add someone who has no Soundcheck account (an outside singer on a personal email, a sub engineer, a phone-only contact) to a shift. Give first_name and email. phone_number and sms_consent (true only when that person agreed to texts) are optional, and company shows on the roster. On a DRAFT shift they are attached unsent; on an OPEN or FILLED shift they are emailed a link to accept or decline without signing up, so that call is confirmation-gated. Org members with gig-operations access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"offer_id",
"first_name",
"email"
],
"properties": {
"fee": {
"type": "number",
"minimum": 0,
"description": "their pay for this shift, in dollars"
},
"email": {
"type": "string",
"description": "where the shift link is sent (required)"
},
"company": {
"type": "string",
"description": "their company or vendor, shown on the roster"
},
"offer_id": {
"type": "string",
"description": "crew offer id from list_crew_offers / create_crew_offer"
},
"last_name": {
"type": "string",
"description": "last name"
},
"first_name": {
"type": "string",
"description": "first name"
},
"sms_consent": {
"type": "boolean",
"description": "true only when that person agreed to be texted at phone_number"
},
"phone_number": {
"type": "string",
"description": "E.164, for example +13105550123"
},
"org_position_id": {
"type": "string",
"description": "role from list_org_positions; must be the shift role"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Add a person without an account to a shift",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Set one person's own call details on one shift: sound check time, special instructions, leader role (MUSIC_DIRECTOR, MC or LEADER; one holder per role per gig), act unit and lead, and per-day call windows or day notes. Pass only what changes; null clears a field. A pending or accepted person is sent an update when a value really changes. Call times on an hourly shift are the pay, so day windows are refused there. Org members with gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs79/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offer_id
crew offer id from list_crew_offers
Clear enough to supply this argument.
user_id
the person, as user_id on the shift recipients
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
sound_check_at
RFC3339 instant on a day of this shift
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
special_instructions
instructions for this person, up to 2000 characters
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
leader_role
leader role on this gig; one holder per role
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
act_id
act (unit) id; null detaches
Clear enough to supply this argument.
is_act_lead
true makes this person the unit contact
Clear enough to supply this argument.
days › items › date
YYYY-MM-DD, a day of this shift
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › start_time
RFC3339 instant, or null
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › end_time
RFC3339 instant, or null
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › sound_check_at
RFC3339 sound check on this day, or null
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
days › items › special_instructions
instructions for this day, or null
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Update one person's call details on a shift",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema45/100
Describe the returned fields so an agent can interpret the result.
{
"name": "update_shift_recipient",
"title": "Update one person's call details on a shift",
"description": "Set one person's own call details on one shift: sound check time, special instructions, leader role (MUSIC_DIRECTOR, MC or LEADER; one holder per role per gig), act unit and lead, and per-day call windows or day notes. Pass only what changes; null clears a field. A pending or accepted person is sent an update when a value really changes. Call times on an hourly shift are the pay, so day windows are refused there. Org members with gig-operations access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"offer_id",
"user_id"
],
"properties": {
"days": {
"type": "array",
"items": {
"type": "object",
"required": [
"date"
],
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD, a day of this shift"
},
"end_time": {
"type": [
"string",
"null"
],
"description": "RFC3339 instant, or null"
},
"start_time": {
"type": [
"string",
"null"
],
"description": "RFC3339 instant, or null"
},
"sound_check_at": {
"type": [
"string",
"null"
],
"description": "RFC3339 sound check on this day, or null"
},
"special_instructions": {
"type": [
"string",
"null"
],
"description": "instructions for this day, or null"
}
},
"additionalProperties": false
},
"description": "per-day call window or day note for this person"
},
"act_id": {
"type": [
"string",
"null"
],
"description": "act (unit) id; null detaches"
},
"user_id": {
"type": "string",
"description": "the person, as user_id on the shift recipients"
},
"offer_id": {
"type": "string",
"description": "crew offer id from list_crew_offers"
},
"is_act_lead": {
"type": "boolean",
"description": "true makes this person the unit contact"
},
"leader_role": {
"anyOf": [
{
"enum": [
"MUSIC_DIRECTOR",
"MC",
"LEADER"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "leader role on this gig; one holder per role"
},
"sound_check_at": {
"type": [
"string",
"null"
],
"description": "RFC3339 instant on a day of this shift"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"special_instructions": {
"type": [
"string",
"null"
],
"description": "instructions for this person, up to 2000 characters"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Update one person's call details on a shift",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Replace one live person on a shift with another in one request. The replacement is added first and gets the offer email with the outgoing person's days; then the outgoing person is removed and gets a cancellation. Give remove_user_id and exactly one of add_user_id (an org member) or add_person (first_name, email, and optional phone, consent and company). A PENDING or STANDBY person needs gig-operations access; removing an accepted person needs finance access. If the add lands but the removal fails the response is SWAP_PARTIAL with both ids, so no seat is lost. Confirmation-gated: it messages two people.
Describe the returned information so the agent knows whether it will answer the request.
Inputs87/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clear enough to supply this argument.
offer_id
crew offer id from list_crew_offers
Clear enough to supply this argument.
remove_user_id
the person coming off the shift
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
add_user_id
org member taking the seat
Clear enough to supply this argument.
add_person › first_name
first name
Explain the meaning of this value, not just its name.
add_person › last_name
last name
Explain the meaning of this value, not just its name.
add_person › email
where the shift link is sent
Clear enough to supply this argument.
add_person › phone_number
E.164, for example +13105550123
Clear enough to supply this argument.
add_person › sms_consent
true only when that person agreed to be texted
Clear enough to supply this argument.
add_person › company
their company or vendor
Clear enough to supply this argument.
fee
the replacement pay, in dollars
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
copy_days
default true: the replacement takes the outgoing person's days
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Swap a person on a shift",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
Output schema37/100
Describe the returned fields so an agent can interpret the result.
{
"name": "swap_shift_recipient",
"title": "Swap a person on a shift",
"description": "Replace one live person on a shift with another in one request. The replacement is added first and gets the offer email with the outgoing person's days; then the outgoing person is removed and gets a cancellation. Give remove_user_id and exactly one of add_user_id (an org member) or add_person (first_name, email, and optional phone, consent and company). A PENDING or STANDBY person needs gig-operations access; removing an accepted person needs finance access. If the add lands but the removal fails the response is SWAP_PARTIAL with both ids, so no seat is lost. Confirmation-gated: it messages two people.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"offer_id",
"remove_user_id"
],
"properties": {
"fee": {
"type": "number",
"minimum": 0,
"description": "the replacement pay, in dollars"
},
"offer_id": {
"type": "string",
"description": "crew offer id from list_crew_offers"
},
"copy_days": {
"type": "boolean",
"description": "default true: the replacement takes the outgoing person's days"
},
"add_person": {
"type": "object",
"required": [
"first_name",
"email"
],
"properties": {
"email": {
"type": "string",
"description": "where the shift link is sent"
},
"company": {
"type": "string",
"description": "their company or vendor"
},
"last_name": {
"type": "string",
"description": "last name"
},
"first_name": {
"type": "string",
"description": "first name"
},
"sms_consent": {
"type": "boolean",
"description": "true only when that person agreed to be texted"
},
"phone_number": {
"type": "string",
"description": "E.164, for example +13105550123"
}
},
"description": "a person without an account taking the seat",
"additionalProperties": false
},
"add_user_id": {
"type": "string",
"description": "org member taking the seat"
},
"remove_user_id": {
"type": "string",
"description": "the person coming off the shift"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Swap a person on a shift",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
Shorten the title to an action and subject; move usage details into the description.
Description94/100
Send a shift to crew: flips a DRAFT to OPEN and notifies recipients by email/SMS/push. Omit recipient_ids/recipients to send to the recipients already attached (or the linked call list); pass them to add or target specific people. recipients[] carries per-person fees for people this send ADDS and its user_ids are sent too (no need to repeat them in recipient_ids); a fee for someone already attached is refused here — set it with update_crew_offer first. The confirmation token binds the exact people who will be notified (named plus already attached) and their fees, so attaching someone or changing a fee after approval re-gates the send. Re-sending an OPEN shift reaches newly added people and attached PENDING recipients whose delivery status is NOT_SENT (the tool refuses a no-op send and says so); use send_reminder kind=crew_offer for nudges. To ask someone who declined again, name them in recipient_ids and pass reask_dates with the day or days to re-ask. With no recipients given, the current members of the linked call list are resolved now and sent by id. Messages real people, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set — the confirmation summary names the shift and who will be notified.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
offer_id
crew offer id from list_crew_offers / create_crew_offer
Clear enough to supply this argument.
recipient_ids
user ids to send to
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recipients › items › user_id
org member user id
Clear enough to supply this argument.
recipients › items › fee
fee for this person, overriding the offer fee
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
reask_dates
YYYY-MM-DD days to ask the people in recipient_ids again after they declined them (one day or several). Their declined days on those dates go back to pending and they are notified. Days that have passed stay declined. Without this, a send never re-asks someone who declined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "send_crew_offer",
"title": "Send crew offer (shift)",
"description": "Send a shift to crew: flips a DRAFT to OPEN and notifies recipients by email/SMS/push. Omit recipient_ids/recipients to send to the recipients already attached (or the linked call list); pass them to add or target specific people. recipients[] carries per-person fees for people this send ADDS and its user_ids are sent too (no need to repeat them in recipient_ids); a fee for someone already attached is refused here — set it with update_crew_offer first. The confirmation token binds the exact people who will be notified (named plus already attached) and their fees, so attaching someone or changing a fee after approval re-gates the send. Re-sending an OPEN shift reaches newly added people and attached PENDING recipients whose delivery status is NOT_SENT (the tool refuses a no-op send and says so); use send_reminder kind=crew_offer for nudges. To ask someone who declined again, name them in recipient_ids and pass reask_dates with the day or days to re-ask. With no recipients given, the current members of the linked call list are resolved now and sent by id. Messages real people, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set — the confirmation summary names the shift and who will be notified.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"offer_id"
],
"properties": {
"offer_id": {
"type": "string",
"description": "crew offer id from list_crew_offers / create_crew_offer"
},
"recipients": {
"type": "array",
"items": {
"type": "object",
"required": [
"user_id"
],
"properties": {
"fee": {
"type": "number",
"minimum": 0,
"description": "fee for this person, overriding the offer fee"
},
"user_id": {
"type": "string",
"description": "org member user id"
}
},
"additionalProperties": false
},
"description": "recipients with per-person fees"
},
"reask_dates": {
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"minItems": 1,
"description": "YYYY-MM-DD days to ask the people in recipient_ids again after they declined them (one day or several). Their declined days on those dates go back to pending and they are notified. Days that have passed stay declined. Without this, a send never re-asks someone who declined."
},
"recipient_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "user ids to send to"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Send crew offer (shift)",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
List the organization's ledger accounts (value = account id, label, type income|expense). create_ledger_item needs an income account for INCOME/RECEIVABLE items and an expense account for EXPENSE/PAYABLE items; it resolves the account automatically when the org has exactly one of that type, otherwise pass account_id from this list. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Add a line to a gig's finances, as the GUI Finances tab does: ledger_type INCOME (money received), RECEIVABLE (an invoice/what a client owes), EXPENSE (money spent), or PAYABLE (a cost or payout still owed — set counterparty_user_id or counterparty_name). amount is positive in the item's currency (default USD); date is the civil day YYYY-MM-DD. account_id is resolved automatically when the org has one account of the matching type; otherwise pick one from list_ledger_accounts. Bookkeeping only: no money moves and no email is sent. INCOME and EXPENSE are created PAID and cannot then be edited with update_ledger_item; RECEIVABLE and PAYABLE start UNPAID. To log a cost or income that has not changed hands yet, use PAYABLE or RECEIVABLE. Use record_ledger_payment for payments already made outside Soundcheck; settle_event only closes the gig after payouts are settled and does not pay lines. Members see only items involving them; admins/owners see all.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event_id
the gig whose ledger to add to
Clear enough to supply this argument.
organization_id
defaults to caller's active org; must be the event's org
Clear enough to supply this argument.
ledger_type
INCOME | EXPENSE | PAYABLE | RECEIVABLE
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
amount
positive amount in the currency
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
description
what the line is for
Clear enough to supply this argument.
date
civil day YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
account_id
from list_ledger_accounts; auto-resolved when omitted
Clear enough to supply this argument.
currency
ISO code, default USD
Clear enough to supply this argument.
counterparty_user_id
the person paid (PAYABLE) or paying (RECEIVABLE), by user id
Clear enough to supply this argument.
counterparty_name
free-text counterparty when not a user
Clear enough to supply this argument.
assigned_to_user_id
member responsible for the line
Clear enough to supply this argument.
budget_category
budget bucket label
Explain the meaning of this value, not just its name.
tax_rate
percentage tax rate
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
tax_inclusive
amount already includes tax
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "create_ledger_item",
"title": "Create ledger item",
"description": "Add a line to a gig's finances, as the GUI Finances tab does: ledger_type INCOME (money received), RECEIVABLE (an invoice/what a client owes), EXPENSE (money spent), or PAYABLE (a cost or payout still owed — set counterparty_user_id or counterparty_name). amount is positive in the item's currency (default USD); date is the civil day YYYY-MM-DD. account_id is resolved automatically when the org has one account of the matching type; otherwise pick one from list_ledger_accounts. Bookkeeping only: no money moves and no email is sent. INCOME and EXPENSE are created PAID and cannot then be edited with update_ledger_item; RECEIVABLE and PAYABLE start UNPAID. To log a cost or income that has not changed hands yet, use PAYABLE or RECEIVABLE. Use record_ledger_payment for payments already made outside Soundcheck; settle_event only closes the gig after payouts are settled and does not pay lines. Members see only items involving them; admins/owners see all.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"ledger_type",
"amount",
"description",
"date"
],
"properties": {
"date": {
"type": "string",
"description": "civil day YYYY-MM-DD"
},
"notes": {
"type": "string",
"description": "internal notes"
},
"amount": {
"type": "number",
"description": "positive amount in the currency",
"exclusiveMinimum": 0
},
"currency": {
"type": "string",
"description": "ISO code, default USD"
},
"event_id": {
"type": "string",
"description": "the gig whose ledger to add to"
},
"tax_rate": {
"type": "number",
"minimum": 0,
"description": "percentage tax rate"
},
"account_id": {
"type": "string",
"description": "from list_ledger_accounts; auto-resolved when omitted"
},
"description": {
"type": "string",
"description": "what the line is for"
},
"ledger_type": {
"enum": [
"INCOME",
"EXPENSE",
"PAYABLE",
"RECEIVABLE"
],
"type": "string",
"description": "INCOME | EXPENSE | PAYABLE | RECEIVABLE"
},
"invitation_id": {
"type": "string",
"description": "link a PAYABLE to a gig invitation"
},
"tax_inclusive": {
"type": "boolean",
"description": "amount already includes tax"
},
"budget_category": {
"type": "string",
"description": "budget bucket label"
},
"organization_id": {
"type": "string",
"description": "defaults to caller's active org; must be the event's org"
},
"counterparty_name": {
"type": "string",
"description": "free-text counterparty when not a user"
},
"assigned_to_user_id": {
"type": "string",
"description": "member responsible for the line"
},
"counterparty_user_id": {
"type": "string",
"description": "the person paid (PAYABLE) or paying (RECEIVABLE), by user id"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create ledger item",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Edit an UNPAID ledger line (amount, description, date, currency, counterparty, assignee, tax, notes, account_id, ledger_type). Pass counterparty_user_id, assigned_to_user_id, counterparty_name, or notes as "" to clear them. Paid or settled lines cannot be edited — void_ledger_item and create a corrected line instead. ledger_item_id comes from get_event_ledger. No money moves and nobody is notified.
The description explains the capability, when to use it, and what to expect.
Inputs87/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig the line belongs to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
ledger_item_id
ledger item id from get_event_ledger
Clear enough to supply this argument.
organization_id
defaults to caller's active org; must be the event's org
Clear enough to supply this argument.
ledger_type
INCOME | EXPENSE | PAYABLE | RECEIVABLE
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
amount
positive amount in the currency
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
description
what the line is for
Clear enough to supply this argument.
date
civil day YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
account_id
from list_ledger_accounts
Clear enough to supply this argument.
currency
ISO code
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
counterparty_user_id
person paid or paying, by user id; "" clears
Clear enough to supply this argument.
counterparty_name
free-text counterparty; "" clears
Clear enough to supply this argument.
assigned_to_user_id
member responsible for the line; "" clears
Clear enough to supply this argument.
tax_rate
percentage tax rate
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Void a ledger line so it no longer counts toward the gig totals or settlement (the row stays for the audit trail; it is not deleted). Use for mistaken or cancelled invoices and payouts. Only UNPAID lines can be voided; PAID lines, including newly created INCOME and EXPENSE lines, are refused. Cannot be undone and changes the outstanding balance, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set. Owner, Admin or Finance only.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig the line belongs to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
ledger_item_id
ledger item id from get_event_ledger
Clear enough to supply this argument.
organization_id
defaults to caller's active org; must be the event's org
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "void_ledger_item",
"title": "Void ledger item",
"description": "Void a ledger line so it no longer counts toward the gig totals or settlement (the row stays for the audit trail; it is not deleted). Use for mistaken or cancelled invoices and payouts. Only UNPAID lines can be voided; PAID lines, including newly created INCOME and EXPENSE lines, are refused. Cannot be undone and changes the outstanding balance, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set. Owner, Admin or Finance only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"ledger_item_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig the line belongs to"
},
"ledger_item_id": {
"type": "string",
"description": "ledger item id from get_event_ledger"
},
"organization_id": {
"type": "string",
"description": "defaults to caller's active org; must be the event's org"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Void ledger item",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Record a payment that was made OUTSIDE Soundcheck (cash, check, Zelle, Venmo, PayPal, wire, other) against a payout or invoice on a gig. A payment that covers the remaining balance marks the line PAID; a smaller one leaves status UNPAID, and the returned line shows payment_status partial with paid_amount and remaining_amount. Does not move money — card and bank payouts stay in the Soundcheck app. Omit amount to record the full remaining balance; paid_on defaults to today and cannot be in the future. ledger_item_id comes from get_event_ledger. Only the org owner, a Finance member, or a member with finance access can record against any line; crew can record only their own payout. Undo with reverse_ledger_payment. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig the line belongs to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
ledger_item_id
ledger item id from get_event_ledger
Clear enough to supply this argument.
method
how it was paid off-platform: MANUAL_CASH | MANUAL_CHECK | MANUAL_ZELLE | MANUAL_VENMO | MANUAL_PAYPAL | MANUAL_WIRE | MANUAL_OTHER
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
amount
amount paid; omit for the full remaining balance
Clear enough to supply this argument.
paid_on
civil day YYYY-MM-DD the money changed hands; defaults to today
Clear enough to supply this argument.
notes
reference, check number, or memo
Clear enough to supply this argument.
organization_id
defaults to caller's active org; must be the event's org
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "record_ledger_payment",
"title": "Record ledger payment",
"description": "Record a payment that was made OUTSIDE Soundcheck (cash, check, Zelle, Venmo, PayPal, wire, other) against a payout or invoice on a gig. A payment that covers the remaining balance marks the line PAID; a smaller one leaves status UNPAID, and the returned line shows payment_status partial with paid_amount and remaining_amount. Does not move money — card and bank payouts stay in the Soundcheck app. Omit amount to record the full remaining balance; paid_on defaults to today and cannot be in the future. ledger_item_id comes from get_event_ledger. Only the org owner, a Finance member, or a member with finance access can record against any line; crew can record only their own payout. Undo with reverse_ledger_payment. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"ledger_item_id",
"method"
],
"properties": {
"notes": {
"type": "string",
"description": "reference, check number, or memo"
},
"amount": {
"type": "number",
"description": "amount paid; omit for the full remaining balance",
"exclusiveMinimum": 0
},
"method": {
"enum": [
"MANUAL_CASH",
"MANUAL_CHECK",
"MANUAL_ZELLE",
"MANUAL_VENMO",
"MANUAL_PAYPAL",
"MANUAL_WIRE",
"MANUAL_OTHER"
],
"type": "string",
"description": "how it was paid off-platform: MANUAL_CASH | MANUAL_CHECK | MANUAL_ZELLE | MANUAL_VENMO | MANUAL_PAYPAL | MANUAL_WIRE | MANUAL_OTHER"
},
"paid_on": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "civil day YYYY-MM-DD the money changed hands; defaults to today"
},
"event_id": {
"type": "string",
"description": "the gig the line belongs to"
},
"ledger_item_id": {
"type": "string",
"description": "ledger item id from get_event_ledger"
},
"organization_id": {
"type": "string",
"description": "defaults to caller's active org; must be the event's org"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Record ledger payment",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Undo the most recent payment recorded outside Soundcheck on a ledger line (one recorded with record_ledger_payment or the app's Mark as paid). The line returns to UNPAID or its earlier partially-paid balance; the reversal stays on the audit trail. Only manual payments can be reversed — card/Stripe payments need a refund in the app. Does not move money. Only the org owner, a Finance member, or a member with finance access can reverse any line; crew only a payment they recorded on their own payout. Each call reverses one more payment, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig the line belongs to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
ledger_item_id
ledger item id from get_event_ledger
Clear enough to supply this argument.
organization_id
defaults to caller's active org; must be the event's org
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "reverse_ledger_payment",
"title": "Reverse ledger payment",
"description": "Undo the most recent payment recorded outside Soundcheck on a ledger line (one recorded with record_ledger_payment or the app's Mark as paid). The line returns to UNPAID or its earlier partially-paid balance; the reversal stays on the audit trail. Only manual payments can be reversed — card/Stripe payments need a refund in the app. Does not move money. Only the org owner, a Finance member, or a member with finance access can reverse any line; crew only a payment they recorded on their own payout. Each call reverses one more payment, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"ledger_item_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig the line belongs to"
},
"ledger_item_id": {
"type": "string",
"description": "ledger item id from get_event_ledger"
},
"organization_id": {
"type": "string",
"description": "defaults to caller's active org; must be the event's org"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Reverse ledger payment",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Edit your organization's copy of a venue as the GUI venue page does: name, address, latitude/longitude, phone_number, website, notes, capacity, load_in/load_out, parking, dock, elevator, wifi, venue_type, dressing_rooms, green_room, contact_*, restrictions[], amenities[]. Edits stay inside your organization; other organizations that saved the same venue keep their own copy. photo_url and place_id describe the shared directory listing. stage_size and house_tech[] belong to stages: prefer save_venue_stage; sent here they land on the venue's first stage. Pass just the fields to change — omitted fields are untouched; an explicit empty string clears a text field and an explicit null clears capacity, dressing_rooms, or green_room (name cannot be blank; latitude/longitude can be set but not cleared — the API keeps the stored coordinates when they are omitted or null). Your organization's private notes, status, metadata, and access code live on the overlay — use update_venue_org_details for those (kept separate so each call is one atomic write). Errors if no field is given. Requires CRM-manager access. Verify with get_venue.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
venue_id
venue id from list_venues / get_venue
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
name
venue name (cannot be blank)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
address
line1, city, state, postal_code, country
Clear enough to supply this argument.
latitude
venue latitude (set only; cannot be cleared)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
longitude
venue longitude (set only; cannot be cleared)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
phone_number
contact phone number; "" clears
Clear enough to supply this argument.
website
venue website url; "" clears
Clear enough to supply this argument.
notes
shared venue notes; "" clears
Clear enough to supply this argument.
capacity
audience capacity; null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
dressing_rooms
dressing room count; null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
green_room
has a green room; null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
load_in
load-in notes
Explain the meaning of this value, not just its name.
load_out
load-out notes
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Edit your organization's private overlay on a venue: org_notes (notes only your org sees), org_status (your status label), org_metadata (free-form), and access_code (door/gate code). The shared venue record is untouched — use update_venue for that. Pass just the fields to change; an explicit empty string clears a text field. Errors if no field is given. One atomic write. Requires CRM-manager access. Verify with get_venue.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Input documentation gives an agent enough context to populate the arguments.
venue_id
venue id from list_venues / get_venue
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
org_notes
notes private to your organization; "" clears
Clear enough to supply this argument.
org_status
your org's status label for this venue; "" clears
Clear enough to supply this argument.
org_metadata
private free-form metadata
Clear enough to supply this argument.
access_code
door/gate code private to your organization; "" clears
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Create or edit a customer (client/contact) in an organization, as the GUI CRM form does. Without customer_id this creates one: name is required. With customer_id (from list_customers) it edits that customer: pass just the fields to change — omitted fields are untouched, an explicit empty string clears a text field, a blank name is rejected, and it errors if no field is given. Requires CRM-manager access. Returns the customer; verify edits with get_customer.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
customer_id
edit this customer (from list_customers); omit to create one
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
name
customer name; required when creating, never blank
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
email
contact email
Clear enough to supply this argument.
phone
contact phone number
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
website
customer website url
Clear enough to supply this argument.
address
free-form address object
Explain the meaning of this value, not just its name.
status
org's status label for this customer
Explain the meaning of this value, not just its name.
notes
notes about the customer
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Create or edit a sponsor in an organization, as the GUI CRM form does. Without sponsor_id this creates one: name is required. With sponsor_id (from list_sponsors) it edits that sponsor: pass just the fields to change — omitted fields are untouched, an explicit empty string clears a text field, a blank name is rejected, and it errors if no field is given. Requires CRM-manager access. Returns the sponsor; verify edits with list_sponsors.
The description explains the capability, when to use it, and what to expect.
Inputs73/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sponsor_id
edit this sponsor (from list_sponsors); omit to create one
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
name
sponsor name; required when creating, never blank
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
email
contact email
Clear enough to supply this argument.
phone
contact phone number
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
website
sponsor website url
Clear enough to supply this argument.
status
org's status label for this sponsor
Explain the meaning of this value, not just its name.
tier
sponsorship tier label
Explain the meaning of this value, not just its name.
notes
notes about the sponsor
Explain the meaning of this value, not just its name.
metadata
free-form sponsor metadata
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Take one or more people (by user id) off a gig's roster, as the GUI Manage Team remove does. Side effects: their pending invitations for the gig are cleared and they are dropped from the gig's calendar event. NOT done for you (see ENG-494): an UNPAID payable for them stays on get_event_ledger (void_ledger_item if it should not be paid) and any crew offer they accepted stays as-is (check list_crew_offers scope=organization). Removing a person does not notify them. Because it alters staffing and leaves money to reconcile, it is confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires gig-operations access. Verify with list_event_members.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event_id
the gig to remove people from
Clear enough to supply this argument.
user_ids
user ids from list_event_members
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to caller's active org; must be the event's org
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "remove_event_member",
"title": "Remove event member",
"description": "Take one or more people (by user id) off a gig's roster, as the GUI Manage Team remove does. Side effects: their pending invitations for the gig are cleared and they are dropped from the gig's calendar event. NOT done for you (see ENG-494): an UNPAID payable for them stays on get_event_ledger (void_ledger_item if it should not be paid) and any crew offer they accepted stays as-is (check list_crew_offers scope=organization). Removing a person does not notify them. Because it alters staffing and leaves money to reconcile, it is confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires gig-operations access. Verify with list_event_members.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"user_ids"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig to remove people from"
},
"user_ids": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "user ids from list_event_members"
},
"organization_id": {
"type": "string",
"description": "defaults to caller's active org; must be the event's org"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Remove event member",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Message the people on an organization mailbox thread — the close-the-loop reply the GUI Mailbox lacks. kind + thread_id identify the thread from list_mailbox: INVITATION (thread_id = event_id), CREW_OFFER (offer_id), or AVAILABILITY_REQUEST (request_id). recipients picks who gets it: pending (default — people who have not answered), responded (accepted/declined, or available/unavailable on availability threads), or all; user_ids narrows further. The reply goes by channel SMS (sms_body) or EMAIL (email_subject + email_body) through the same delivery as send_message, tagged to the thread's gig. Only recipients with a Soundcheck user id can be reached (external email-only invitees are skipped). Messages real people, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set — the summary states exactly how many people will be messaged.
The description explains the capability, when to use it, and what to expect.
Inputs78/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
kind
thread kind from list_mailbox
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
thread_id
event_id for INVITATION, offer_id for CREW_OFFER, request_id for AVAILABILITY_REQUEST
Clear enough to supply this argument.
channel
delivery channel
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sms_body
required when channel is SMS
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
email_subject
required when channel is EMAIL
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
email_body
required when channel is EMAIL
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recipients
pending (default) | responded | all
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
user_ids
only these people on the thread
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "reply_to_mailbox_thread",
"title": "Reply to mailbox thread",
"description": "Message the people on an organization mailbox thread — the close-the-loop reply the GUI Mailbox lacks. kind + thread_id identify the thread from list_mailbox: INVITATION (thread_id = event_id), CREW_OFFER (offer_id), or AVAILABILITY_REQUEST (request_id). recipients picks who gets it: pending (default — people who have not answered), responded (accepted/declined, or available/unavailable on availability threads), or all; user_ids narrows further. The reply goes by channel SMS (sms_body) or EMAIL (email_subject + email_body) through the same delivery as send_message, tagged to the thread's gig. Only recipients with a Soundcheck user id can be reached (external email-only invitees are skipped). Messages real people, so it is confirmation-gated when MCP_CONFIRMATION_SECRET is set — the summary states exactly how many people will be messaged.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"kind",
"thread_id",
"channel"
],
"properties": {
"kind": {
"enum": [
"INVITATION",
"CREW_OFFER",
"AVAILABILITY_REQUEST"
],
"type": "string",
"description": "thread kind from list_mailbox"
},
"channel": {
"enum": [
"SMS",
"EMAIL"
],
"type": "string",
"description": "delivery channel"
},
"sms_body": {
"type": "string",
"description": "required when channel is SMS"
},
"user_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "only these people on the thread"
},
"thread_id": {
"type": "string",
"description": "event_id for INVITATION, offer_id for CREW_OFFER, request_id for AVAILABILITY_REQUEST"
},
"email_body": {
"type": "string",
"description": "required when channel is EMAIL"
},
"recipients": {
"enum": [
"pending",
"responded",
"all"
],
"type": "string",
"description": "pending (default) | responded | all"
},
"email_subject": {
"type": "string",
"description": "required when channel is EMAIL"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Reply to mailbox thread",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
List the bookable stages, rooms or spaces your organization has set up at its venues (Main Stage, Side Room, Patio…). Each stage has id, venue_id, venue_name, name, capacity, notes, stage_size, house_tech, latitude/longitude (its map pin), and sort_order. Stages are private to your organization. Pass venue_id to list one venue's stages. Use the stage ids with set_event_stages, check_venue_stage_conflicts and list_venue_stage_bookings.
The description explains the capability, when to use it, and what to expect.
Inputs63/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
venue_id
only stages at this venue
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Add or edit a bookable stage, room or space at a venue. Without stage_id this adds one: name is required, names must be unique per venue (409 STAGE_NAME_TAKEN), a venue holds up to 50 stages, and the venue is saved to your organization's directory if it is not already. With stage_id (from list_venue_stages) it edits that stage: pass just the fields to change among name, capacity, notes, stage_size, house_tech, latitude/longitude, or archived (true hides it from pickers but keeps past bookings; false restores it). Requires CRM-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
venue_id
venue id from list_venues / get_venue
Clear enough to supply this argument.
stage_id
edit this stage (from list_venue_stages); omit to add one
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
name
stage name, for example "Main Stage" (up to 80 characters); required when adding
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
capacity
audience capacity of this stage; null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
notes
private notes for your team (never shown publicly); null clears
Clear enough to supply this argument.
stage_size
stage dimensions, for example "40' x 30'"; null clears
Clear enough to supply this argument.
house_tech
in-house sound/lighting/backline on this stage, one item per entry; replaces the list
Clear enough to supply this argument.
latitude
map pin latitude for this stage; send with longitude, or both null to clear
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
longitude
map pin longitude for this stage; send with latitude, or both null to clear
Clear enough to supply this argument.
archived
when editing: true archives the stage; false restores it
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Permanently delete a venue stage that has no gigs booked on it. A stage with bookings answers 409 STAGE_HAS_BOOKINGS — archive it instead with save_venue_stage archived=true, which keeps its history. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
venue_id
venue id the stage belongs to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
stage_id
stage id from list_venue_stages
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "delete_venue_stage",
"title": "Delete venue stage",
"description": "Permanently delete a venue stage that has no gigs booked on it. A stage with bookings answers 409 STAGE_HAS_BOOKINGS — archive it instead with save_venue_stage archived=true, which keeps its history. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"venue_id",
"stage_id"
],
"properties": {
"stage_id": {
"type": "string",
"description": "stage id from list_venue_stages"
},
"venue_id": {
"type": "string",
"description": "venue id the stage belongs to"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Delete venue stage",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Book a gig onto one or more stages at its venue. stage_ids is the FULL set (it replaces the current stages); pass [] to clear. Every stage must be an active stage at the gig's linked venue (link the venue first with link_venue_to_event), else 400 STAGE_NOT_AT_EVENT_VENUE. Overlaps never block the booking: the response lists stage_conflicts (other gigs on the same stage at an overlapping time). Always tell the user about any conflicts. Requires gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig to book
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
{
"name": "set_event_stages",
"title": "Set event stages",
"description": "Book a gig onto one or more stages at its venue. stage_ids is the FULL set (it replaces the current stages); pass [] to clear. Every stage must be an active stage at the gig's linked venue (link the venue first with link_venue_to_event), else 400 STAGE_NOT_AT_EVENT_VENUE. Overlaps never block the booking: the response lists stage_conflicts (other gigs on the same stage at an overlapping time). Always tell the user about any conflicts. Requires gig-operations access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"stage_ids"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig to book"
},
"stage_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "stage ids from list_venue_stages; [] clears"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Set event stages",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Check whether stages are free for a date and time before booking, for example "is Main Stage free on Oct 10 from 8pm to 11pm". Returns conflicts: the gigs already on those stages at an overlapping time (drafts included; cancelled and archived gigs ignored). Without start_time the whole day is checked. Pass exclude_event_id when re-checking a gig that is already booked. Nothing is written.
Describe the returned information so the agent knows whether it will answer the request.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
stage_ids
stage ids from list_venue_stages
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event_date
first day, YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
end_date
last day for a multi-day booking, YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
start_time
start as an ISO date-time with offset, e.g. 2026-10-10T20:00:00-05:00
Clear enough to supply this argument.
end_time
end as an ISO date-time with offset; an end before the start runs past midnight
Clear enough to supply this argument.
timezone
IANA zone of the booking; defaults to your organization's timezone
Clear enough to supply this argument.
exclude_event_id
ignore this gig (the one being edited)
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "check_venue_stage_conflicts",
"title": "Check venue stage conflicts",
"description": "Check whether stages are free for a date and time before booking, for example \"is Main Stage free on Oct 10 from 8pm to 11pm\". Returns conflicts: the gigs already on those stages at an overlapping time (drafts included; cancelled and archived gigs ignored). Without start_time the whole day is checked. Pass exclude_event_id when re-checking a gig that is already booked. Nothing is written.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"stage_ids",
"event_date"
],
"properties": {
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "last day for a multi-day booking, YYYY-MM-DD"
},
"end_time": {
"type": "string",
"description": "end as an ISO date-time with offset; an end before the start runs past midnight"
},
"timezone": {
"type": "string",
"description": "IANA zone of the booking; defaults to your organization's timezone"
},
"stage_ids": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "stage ids from list_venue_stages"
},
"event_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "first day, YYYY-MM-DD"
},
"start_time": {
"type": "string",
"description": "start as an ISO date-time with offset, e.g. 2026-10-10T20:00:00-05:00"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"exclude_event_id": {
"type": "string",
"description": "ignore this gig (the one being edited)"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Check venue stage conflicts",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
List gigs booked on stages between two days (at most 92 days apart), one row per gig and stage, with start, end, all_day and conflict_event_ids (other gigs overlapping on the same stage). Cancelled and archived gigs are left out unless include_cancelled is true. Pass venue_id to limit to one venue. Use it to answer "what is on the Side Room next week" or to spot double-bookings.
The description explains the capability, when to use it, and what to expect.
Inputs85/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
from
first day, YYYY-MM-DD
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
to
last day, YYYY-MM-DD (at most 92 days after from)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
venue_id
only stages at this venue
Clear enough to supply this argument.
include_cancelled
include cancelled and archived gigs
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_venue_stage_bookings",
"title": "List venue stage bookings",
"description": "List gigs booked on stages between two days (at most 92 days apart), one row per gig and stage, with start, end, all_day and conflict_event_ids (other gigs overlapping on the same stage). Cancelled and archived gigs are left out unless include_cancelled is true. Pass venue_id to limit to one venue. Use it to answer \"what is on the Side Room next week\" or to spot double-bookings.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "last day, YYYY-MM-DD (at most 92 days after from)"
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "first day, YYYY-MM-DD"
},
"venue_id": {
"type": "string",
"description": "only stages at this venue"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"include_cancelled": {
"type": "boolean",
"description": "include cancelled and archived gigs"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List venue stage bookings",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Research a venue on the web (via context.dev) and return a PROPOSAL of venue details and stages: capacity, venue type, stage size, load-in/out, dock, elevator, parking, wifi, dressing rooms, green room, house tech, amenities, restrictions, published booking contact, plus the stages or rooms the venue books separately. Each value carries a source_url and a short evidence excerpt. NOTHING is written. Show the proposal to the user, and only after they confirm apply what they choose with update_venue (venue fields) and save_venue_stage (stages, including stage_size and house_tech). The same venue is cached for 24 hours and each organization has a daily limit. Returns 503 ENRICHMENT_UNAVAILABLE when research is not configured, and 422 VENUE_IDENTITY_MISSING when the venue has neither an address nor a website.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
{
"name": "enrich_venue",
"title": "Research venue details",
"description": "Research a venue on the web (via context.dev) and return a PROPOSAL of venue details and stages: capacity, venue type, stage size, load-in/out, dock, elevator, parking, wifi, dressing rooms, green room, house tech, amenities, restrictions, published booking contact, plus the stages or rooms the venue books separately. Each value carries a source_url and a short evidence excerpt. NOTHING is written. Show the proposal to the user, and only after they confirm apply what they choose with update_venue (venue fields) and save_venue_stage (stages, including stage_size and house_tech). The same venue is cached for 24 hours and each organization has a daily limit. Returns 503 ENRICHMENT_UNAVAILABLE when research is not configured, and 422 VENUE_IDENTITY_MISSING when the venue has neither an address nor a website.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"venue_id"
],
"properties": {
"venue_id": {
"type": "string",
"description": "venue id from list_venues / get_venue"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Research venue details",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
List your organization's projects (tours, festivals, residencies, runs of gigs): id, name, status, dates, client and gig counts. Flights and hotel stays belong to a project, so use these ids with the project flight and hotel tools. Every gig also has one owning project (get_event returns its project_id); one-gig projects made automatically for single gigs are left out unless include_implicit is true. Returns up to limit projects (default 100, max 500); when next_cursor is set, pass it back as cursor for the next page.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
include_implicit
include the one-gig projects made for single gigs
Clear enough to supply this argument.
limit
page size, default 100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
next_cursor from the previous page
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_projects",
"title": "List projects",
"description": "List your organization's projects (tours, festivals, residencies, runs of gigs): id, name, status, dates, client and gig counts. Flights and hotel stays belong to a project, so use these ids with the project flight and hotel tools. Every gig also has one owning project (get_event returns its project_id); one-gig projects made automatically for single gigs are left out unless include_implicit is true. Returns up to limit projects (default 100, max 500); when next_cursor is set, pass it back as cursor for the next page.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "page size, default 100"
},
"cursor": {
"type": "string",
"description": "next_cursor from the previous page"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"include_implicit": {
"type": "boolean",
"description": "include the one-gig projects made for single gigs"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List projects",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Read the flights and hotel stays that cover one gig, across its projects. Returns { flights, hotels }. Each flight has id, project_id, project_name, airline, flight_number, depart_airport, arrive_airport, depart_at/depart_timezone, arrive_at/arrive_timezone, booking_reference, cost/cost_currency (only with financial access), notes, event_ids (the gigs it covers) and passengers (id, user_id, user_name, confirmation_code, seat, ticket_number, baggage_count, notes). Crew members see only their own passenger and guest rows. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs46/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
List the flights and hotel stays recorded on a project. Returns { flights, hotels }; kind="flights" or kind="hotels" returns just that list. Each flight has id, project_id, project_name, airline, flight_number, depart_airport, arrive_airport, depart_at/depart_timezone, arrive_at/arrive_timezone, booking_reference, cost/cost_currency (only with financial access), notes, event_ids (the gigs it covers) and passengers (id, user_id, user_name, confirmation_code, seat, ticket_number, baggage_count, notes). Each stay has id, project_id, project_name, hotel_id, hotel_name, check_in_date, check_out_date, confirmation_number, room_count, notes, event_ids (the gigs it covers) and guests (id, user_id, user_name, room_number, confirmation_number, notes). Requires project-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
kind
all (default): flights and hotel stays; flights or hotels: just that list
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Record a flight leg on a project. Every field is optional, but give at least the airline, flight number, airports and times you know. Instants need an offset and each end gets its airport's IATA zone. Pass event_id or event_ids with the gig so get_event_travel lists it. Add travellers afterwards with save_flight_passenger. This records a booking made elsewhere; it books nothing. Requires project-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
event_id
one gig this booking covers; merged into event_ids when both are set
Clear enough to supply this argument.
airline
airline name, for example "United"; null clears
Clear enough to supply this argument.
flight_number
flight number, for example "UA 1234"; null clears
Clear enough to supply this argument.
depart_airport
departure airport IATA code, for example "ORD"; null clears
Clear enough to supply this argument.
arrive_airport
arrival airport IATA code, for example "AUS"; null clears
Clear enough to supply this argument.
depart_at
departure as an ISO-8601 instant with an offset, e.g. 2026-10-10T08:05:00-05:00; null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
depart_timezone
IANA zone of the departure airport, e.g. America/Chicago; null clears
Clear enough to supply this argument.
arrive_at
arrival as an ISO-8601 instant with an offset; not before depart_at; null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
arrive_timezone
IANA zone of the arrival airport; null clears
Clear enough to supply this argument.
booking_reference
the booking record locator for the whole leg; null clears
Clear enough to supply this argument.
cost
airfare for the leg; needs cost_currency and financial access (403 without it); null clears. No ledger line is created
Clear enough to supply this argument.
cost_currency
3-letter ISO currency of cost, e.g. USD; null clears
Clear enough to supply this argument.
notes
notes for the team; null clears
Clear enough to supply this argument.
event_ids
gigs on this project the booking covers (list_projects gig ids or get_event); include the gig here so get_event_travel lists it for that gig; replaces the list; every id must be one of the project's own gigs
{
"name": "create_project_flight",
"title": "Record project flight",
"description": "Record a flight leg on a project. Every field is optional, but give at least the airline, flight number, airports and times you know. Instants need an offset and each end gets its airport's IATA zone. Pass event_id or event_ids with the gig so get_event_travel lists it. Add travellers afterwards with save_flight_passenger. This records a booking made elsewhere; it books nothing. Requires project-manager access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"project_id"
],
"properties": {
"cost": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "airfare for the leg; needs cost_currency and financial access (403 without it); null clears. No ledger line is created"
},
"notes": {
"type": [
"string",
"null"
],
"description": "notes for the team; null clears"
},
"airline": {
"type": [
"string",
"null"
],
"description": "airline name, for example \"United\"; null clears"
},
"event_id": {
"type": "string",
"description": "one gig this booking covers; merged into event_ids when both are set"
},
"arrive_at": {
"type": [
"string",
"null"
],
"description": "arrival as an ISO-8601 instant with an offset; not before depart_at; null clears"
},
"depart_at": {
"type": [
"string",
"null"
],
"description": "departure as an ISO-8601 instant with an offset, e.g. 2026-10-10T08:05:00-05:00; null clears"
},
"event_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "gigs on this project the booking covers (list_projects gig ids or get_event); include the gig here so get_event_travel lists it for that gig; replaces the list; every id must be one of the project's own gigs"
},
"project_id": {
"type": "string",
"description": "project id from list_projects, or a gig's project_id from get_event"
},
"cost_currency": {
"type": [
"string",
"null"
],
"description": "3-letter ISO currency of cost, e.g. USD; null clears"
},
"flight_number": {
"type": [
"string",
"null"
],
"description": "flight number, for example \"UA 1234\"; null clears"
},
"arrive_airport": {
"type": [
"string",
"null"
],
"description": "arrival airport IATA code, for example \"AUS\"; null clears"
},
"depart_airport": {
"type": [
"string",
"null"
],
"description": "departure airport IATA code, for example \"ORD\"; null clears"
},
"arrive_timezone": {
"type": [
"string",
"null"
],
"description": "IANA zone of the arrival airport; null clears"
},
"depart_timezone": {
"type": [
"string",
"null"
],
"description": "IANA zone of the departure airport, e.g. America/Chicago; null clears"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"booking_reference": {
"type": [
"string",
"null"
],
"description": "the booking record locator for the whole leg; null clears"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Record project flight",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Edit a recorded flight leg. Pass just the fields to change; null clears a field. event_ids replaces the covered gigs. Changing cost needs financial access. Requires project-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
flight_id
flight id from list_project_travel
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
airline
airline name, for example "United"; null clears
Clear enough to supply this argument.
flight_number
flight number, for example "UA 1234"; null clears
Clear enough to supply this argument.
depart_airport
departure airport IATA code, for example "ORD"; null clears
Clear enough to supply this argument.
arrive_airport
arrival airport IATA code, for example "AUS"; null clears
Clear enough to supply this argument.
depart_at
departure as an ISO-8601 instant with an offset, e.g. 2026-10-10T08:05:00-05:00; null clears
Clear enough to supply this argument.
depart_timezone
IANA zone of the departure airport, e.g. America/Chicago; null clears
Clear enough to supply this argument.
arrive_at
arrival as an ISO-8601 instant with an offset; not before depart_at; null clears
Clear enough to supply this argument.
arrive_timezone
IANA zone of the arrival airport; null clears
Clear enough to supply this argument.
booking_reference
the booking record locator for the whole leg; null clears
Clear enough to supply this argument.
cost
airfare for the leg; needs cost_currency and financial access (403 without it); null clears. No ledger line is created
Clear enough to supply this argument.
cost_currency
3-letter ISO currency of cost, e.g. USD; null clears
Clear enough to supply this argument.
notes
notes for the team; null clears
Clear enough to supply this argument.
event_ids
gigs on this project the booking covers (list_projects gig ids or get_event); include the gig here so get_event_travel lists it for that gig; replaces the list; every id must be one of the project's own gigs
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Permanently delete a recorded flight leg and its passenger rows. It cancels nothing with the airline. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires project-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
flight_id
flight id from list_project_travel
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Put a member of your organization on a recorded flight leg, or edit their row. Without passenger_id this adds user_id (from list_users; a person can be on a leg once) with their own confirmation code, seat, ticket number and bags. With passenger_id (passengers[].id, not user_id) it edits that row: pass just the fields to change; null clears. Returns the whole flight. Passports and frequent-flyer numbers stay on the person profile and are not set here. Requires project-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
flight_id
flight id from list_project_travel
Clear enough to supply this argument.
passenger_id
edit this passenger row (passengers[].id, not user_id); omit to add one
Clear enough to supply this argument.
user_id
when adding: the traveller, a member of your organization
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_code
this traveller's PNR or confirmation code; null clears
{
"name": "save_flight_passenger",
"title": "Save flight passenger",
"description": "Put a member of your organization on a recorded flight leg, or edit their row. Without passenger_id this adds user_id (from list_users; a person can be on a leg once) with their own confirmation code, seat, ticket number and bags. With passenger_id (passengers[].id, not user_id) it edits that row: pass just the fields to change; null clears. Returns the whole flight. Passports and frequent-flyer numbers stay on the person profile and are not set here. Requires project-manager access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"project_id",
"flight_id"
],
"properties": {
"seat": {
"type": [
"string",
"null"
],
"description": "seat, for example \"14C\"; null clears"
},
"notes": {
"type": [
"string",
"null"
],
"description": "notes for this traveller; null clears"
},
"user_id": {
"type": "string",
"description": "when adding: the traveller, a member of your organization"
},
"flight_id": {
"type": "string",
"description": "flight id from list_project_travel"
},
"project_id": {
"type": "string",
"description": "project id from list_projects, or a gig's project_id from get_event"
},
"passenger_id": {
"type": "string",
"description": "edit this passenger row (passengers[].id, not user_id); omit to add one"
},
"baggage_count": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
],
"description": "checked bags; null clears"
},
"ticket_number": {
"type": [
"string",
"null"
],
"description": "e-ticket number; null clears"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_code": {
"type": [
"string",
"null"
],
"description": "this traveller's PNR or confirmation code; null clears"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Save flight passenger",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Take a traveller off a recorded flight leg. Returns the whole flight. It cancels nothing with the airline. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires project-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
flight_id
flight id from list_project_travel
Clear enough to supply this argument.
passenger_id
the passenger row's id (passengers[].id), not user_id
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
Align the title with the capability actually described by this tool.
Description87/100
Record a hotel stay (a room block) on a project. hotel_id comes from search_hotels; when the property is not there, add it with create_hotel first. Pass event_id or event_ids with the gig so get_event_travel lists it. Assign rooms afterwards with save_hotel_guest. This records a booking made elsewhere; it books nothing. Requires project-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
hotel_id
hotel id from search_hotels or create_hotel
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
event_id
one gig this booking covers; merged into event_ids when both are set
Clear enough to supply this argument.
check_in_date
check-in day, YYYY-MM-DD; null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
check_out_date
check-out day, YYYY-MM-DD, not before check-in; null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
confirmation_number
the booking confirmation for the block; null clears
Clear enough to supply this argument.
room_count
rooms booked; null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
notes
notes for the team; null clears
Clear enough to supply this argument.
event_ids
gigs on this project the booking covers (list_projects gig ids or get_event); include the gig here so get_event_travel lists it for that gig; replaces the list; every id must be one of the project's own gigs
{
"name": "create_project_hotel",
"title": "Record project hotel stay",
"description": "Record a hotel stay (a room block) on a project. hotel_id comes from search_hotels; when the property is not there, add it with create_hotel first. Pass event_id or event_ids with the gig so get_event_travel lists it. Assign rooms afterwards with save_hotel_guest. This records a booking made elsewhere; it books nothing. Requires project-manager access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"project_id",
"hotel_id"
],
"properties": {
"notes": {
"type": [
"string",
"null"
],
"description": "notes for the team; null clears"
},
"event_id": {
"type": "string",
"description": "one gig this booking covers; merged into event_ids when both are set"
},
"hotel_id": {
"type": "string",
"description": "hotel id from search_hotels or create_hotel"
},
"event_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "gigs on this project the booking covers (list_projects gig ids or get_event); include the gig here so get_event_travel lists it for that gig; replaces the list; every id must be one of the project's own gigs"
},
"project_id": {
"type": "string",
"description": "project id from list_projects, or a gig's project_id from get_event"
},
"room_count": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
],
"description": "rooms booked; null clears"
},
"check_in_date": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"description": "check-in day, YYYY-MM-DD; null clears"
},
"check_out_date": {
"anyOf": [
{
"$ref": "#/properties/check_in_date/anyOf/0"
},
{
"type": "null"
}
],
"description": "check-out day, YYYY-MM-DD, not before check-in; null clears"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_number": {
"type": [
"string",
"null"
],
"description": "the booking confirmation for the block; null clears"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Record project hotel stay",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
Edit a recorded hotel stay: hotel_id (move it to another property), dates, confirmation_number, room_count, notes or event_ids. Pass just the fields to change; null clears. Requires project-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
stay_id
stay id from list_project_travel
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
hotel_id
move the stay to this hotel
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
check_in_date
check-in day, YYYY-MM-DD; null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
check_out_date
check-out day, YYYY-MM-DD, not before check-in; null clears
Clear enough to supply this argument.
confirmation_number
the booking confirmation for the block; null clears
Clear enough to supply this argument.
room_count
rooms booked; null clears
Clear enough to supply this argument.
notes
notes for the team; null clears
Clear enough to supply this argument.
event_ids
gigs on this project the booking covers (list_projects gig ids or get_event); include the gig here so get_event_travel lists it for that gig; replaces the list; every id must be one of the project's own gigs
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Permanently delete a recorded hotel stay and its room assignments. It cancels nothing with the hotel. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires project-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
stay_id
stay id from list_project_travel
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "delete_project_hotel",
"title": "Delete project hotel stay",
"description": "Permanently delete a recorded hotel stay and its room assignments. It cancels nothing with the hotel. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires project-manager access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"project_id",
"stay_id"
],
"properties": {
"stay_id": {
"type": "string",
"description": "stay id from list_project_travel"
},
"project_id": {
"type": "string",
"description": "project id from list_projects, or a gig's project_id from get_event"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Delete project hotel stay",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Assign a member of your organization to a recorded hotel stay, or edit their room assignment. Without guest_id this adds user_id (from list_users) with room number, their own confirmation number and notes. With guest_id (guests[].id, not user_id) it edits that row: pass just the fields to change; null clears. Returns the whole stay. Requires project-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
stay_id
stay id from list_project_travel
Clear enough to supply this argument.
guest_id
edit this guest row (guests[].id, not user_id); omit to add one
Clear enough to supply this argument.
user_id
when adding: the guest, a member of your organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Take a guest off a recorded hotel stay. Returns the whole stay. It cancels nothing with the hotel. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires project-manager access.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
project_id
project id from list_projects, or a gig's project_id from get_event
Clear enough to supply this argument.
stay_id
stay id from list_project_travel
Clear enough to supply this argument.
guest_id
the guest row's id (guests[].id), not user_id
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "remove_hotel_guest",
"title": "Remove hotel guest",
"description": "Take a guest off a recorded hotel stay. Returns the whole stay. It cancels nothing with the hotel. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires project-manager access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"project_id",
"stay_id",
"guest_id"
],
"properties": {
"stay_id": {
"type": "string",
"description": "stay id from list_project_travel"
},
"guest_id": {
"type": "string",
"description": "the guest row's id (guests[].id), not user_id"
},
"project_id": {
"type": "string",
"description": "project id from list_projects, or a gig's project_id from get_event"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Remove hotel guest",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Search the hotel directory by name, brand, website, address or amenity (up to 50 matches). Each hotel has id, name, address, phone_number, website, brand, check-in/out times, and is_saved_for_org; negotiated rates only show with financial access. Use the id as hotel_id on create_project_hotel. When nothing matches, add the property with create_hotel.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
search
text to match; empty lists the first 50
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Add a hotel to the directory so a stay can be recorded there. Search with search_hotels first to avoid duplicates. Returns the hotel with its id. Requires gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs82/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
name
hotel name, for example "Hotel Van Zandt"
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
address › line1
street and number
Clear enough to supply this argument.
address › line2
suite or building
Clear enough to supply this argument.
address › city
city
Clear enough to supply this argument.
address › state
state or region
Clear enough to supply this argument.
address › postal_code
postal code
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
address › country
country
Clear enough to supply this argument.
phone_number
front desk phone
Clear enough to supply this argument.
website
hotel website
Clear enough to supply this argument.
brand
chain or brand, for example "Kimpton"
Clear enough to supply this argument.
notes
notes about the property
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Read the full Run of Show document for a gig (sections, items, cues, song lists) including version for optimistic edits. Use expected_version from this response with update_event_run_of_show. Prefer this over get_event_schedule when the org adopted Run of Show. Event participants can read.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"title": "Get run of show",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
Output schema38/100
Describe the returned fields so an agent can interpret the result.
{
"name": "get_event_run_of_show",
"title": "Get run of show",
"description": "Read the full Run of Show document for a gig (sections, items, cues, song lists) including version for optimistic edits. Use expected_version from this response with update_event_run_of_show. Prefer this over get_event_schedule when the org adopted Run of Show. Event participants can read.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig id"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get run of show",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Add timeline rows to a gig that still uses the legacy schedule (not Run of Show). Each item needs name and start_time as RFC3339 with offset. Returns the full schedule. Orgs that adopted Run of Show respond 409 RUN_OF_SHOW_ADOPTED — use update_event_run_of_show instead. Gig managers only.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
schedule_items › items › id
existing row id when updating or deleting
Clear enough to supply this argument.
schedule_items › items › name
label shown on the timeline
Clear enough to supply this argument.
schedule_items › items › start_time
RFC3339 instant with offset, e.g. 2026-10-10T18:00:00-05:00
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
schedule_items › items › end_time
RFC3339 instant with offset, e.g. 2026-10-10T18:00:00-05:00
Explain what happens when this optional value is omitted.
schedule_items › items › notes
optional notes for the row
Clear enough to supply this argument.
schedule_items › items › location
optional location label for the row
Clear enough to supply this argument.
schedule_items › items › ensemble
optional ensemble or group label
Clear enough to supply this argument.
schedule_items › items › order
sort order within the day
Explain what happens when this optional value is omitted.
schedule_items › items › past_midnight
true when the item is after midnight on a multi-day gig
Clear enough to supply this argument.
schedule_items › items › _delete
upsert only: true removes this id from the gig timeline
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Replace the entire legacy gig timeline: PUT sends the full schedule_items list and any existing row whose id is omitted is deleted. Times are RFC3339 with offset. Orgs that adopted Run of Show respond 409 RUN_OF_SHOW_ADOPTED — use update_event_run_of_show. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Gig managers only.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
schedule_items › items › id
existing row id when updating or deleting
Clear enough to supply this argument.
schedule_items › items › name
label shown on the timeline
Clear enough to supply this argument.
schedule_items › items › start_time
RFC3339 instant with offset, e.g. 2026-10-10T18:00:00-05:00
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
schedule_items › items › end_time
RFC3339 instant with offset, e.g. 2026-10-10T18:00:00-05:00
Explain what happens when this optional value is omitted.
schedule_items › items › notes
optional notes for the row
Clear enough to supply this argument.
schedule_items › items › location
optional location label for the row
Clear enough to supply this argument.
schedule_items › items › ensemble
optional ensemble or group label
Clear enough to supply this argument.
schedule_items › items › order
sort order within the day
Clear enough to supply this argument.
schedule_items › items › past_midnight
true when the item is after midnight on a multi-day gig
Clear enough to supply this argument.
schedule_items › items › _delete
upsert only: true removes this id from the gig timeline
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Replace the full Run of Show document for a gig in an org that adopted Run of Show: sections, items, cues, and song lists. Pass expected_version from the current run-of-show GET (version field alongside sections/items). Times use RFC3339 with offset. Set allow_empty=true only to clear a previously non-empty show. Items may be sent back as the GET returned them: their songs and document_attachments become song_ids and document_ids. song_lists_complete defaults to true unless an existing item has neither song_ids nor songs. Returns 412 when expected_version is stale. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Run-of-show editors only.
The description explains the capability, when to use it, and what to expect.
Inputs79/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
expected_version
version from the run-of-show GET before editing
Clear enough to supply this argument.
sections
full section list after the edit
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
items
full item list after the edit
Explain the meaning of this value, not just its name.
allow_empty
must be true to replace a populated run of show with zero sections/items
Explain what happens when this optional value is omitted.
song_lists_complete
default true; false only for legacy clients that send partial song_ids
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Update run of show",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
Output schema52/100
Describe the returned fields so an agent can interpret the result.
{
"name": "update_event_run_of_show",
"title": "Update run of show",
"description": "Replace the full Run of Show document for a gig in an org that adopted Run of Show: sections, items, cues, and song lists. Pass expected_version from the current run-of-show GET (version field alongside sections/items). Times use RFC3339 with offset. Set allow_empty=true only to clear a previously non-empty show. Items may be sent back as the GET returned them: their songs and document_attachments become song_ids and document_ids. song_lists_complete defaults to true unless an existing item has neither song_ids nor songs. Returns 412 when expected_version is stale. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Run-of-show editors only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"expected_version",
"sections",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
},
"description": "full item list after the edit"
},
"event_id": {
"type": "string",
"description": "the gig id"
},
"sections": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
},
"description": "full section list after the edit"
},
"allow_empty": {
"type": "boolean",
"description": "must be true to replace a populated run of show with zero sections/items"
},
"expected_version": {
"type": "integer",
"description": "version from the run-of-show GET before editing",
"exclusiveMinimum": 0
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
},
"song_lists_complete": {
"type": "boolean",
"description": "default true; false only for legacy clients that send partial song_ids"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Update run of show",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
List the music request lists the clients and staff filled in for a gig (the Music requests form). Returns each submission with its song-list rows grouped by category, the guidance notes, whether the client can still revise (can_revise) and the last day they can (editable_through, null when there is no end or the gig was removed), and per-category counts. Library match (In library, Possible match, Not in library) and library song ids are returned only to organization members.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig (event) id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_music_requests",
"title": "List music requests",
"description": "List the music request lists the clients and staff filled in for a gig (the Music requests form). Returns each submission with its song-list rows grouped by category, the guidance notes, whether the client can still revise (can_revise) and the last day they can (editable_through, null when there is no end or the gig was removed), and per-category counts. Library match (In library, Possible match, Not in library) and library song ids are returned only to organization members.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig (event) id"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List music requests",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Check a gig's run-of-show songs against its do-not-play requests. Returns each warning (the run-of-show item, the song, and the rule it matched) and any genre rules that cannot be checked against the library. Warnings do not block saving the run of show.
The description explains the capability, when to use it, and what to expect.
Inputs68/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event_id
the gig (event) id
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
Align the title with the capability actually described by this tool.
Description84/100
Replace the answers to named questions on a form submission (for example the song list) on the client's behalf. Only the questions you name change; the rest are kept. Each song_list value replaces that question's rows, and duplicate rows are refused. Requires crm.manage and the client-portal-forms flag.
The description explains the capability, when to use it, and what to expect.
Inputs78/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
submission_id
the form submission id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
category: MUST_HAVE (must play), YES (requested), OFF_LIST (to learn, not on the usual list), DO_NOT_PLAY (never play; a warning fires when a run-of-show song matches)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Shorten the title to an action and subject; move usage details into the description.
Description91/100
Enter answers to a form assignment on the client's behalf when the client has not answered yet (for example, a music request list from a phone call). Required questions may be left out. Fails with SUBMISSION_EXISTS when the assignment already has an answer; use update_form_submission_answers then. No notification is sent. Requires crm.manage and the client-portal-forms flag.
The description explains the capability, when to use it, and what to expect.
Inputs85/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
category: MUST_HAVE (must play), YES (requested), OFF_LIST (to learn, not on the usual list), DO_NOT_PLAY (never play; a warning fires when a run-of-show song matches)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Set the last day (YYYY-MM-DD, in the gig's time zone) on which the client can revise the answers to a form assignment. The day only bounds revisions: the client's first answer is always accepted. The day applies even when it falls after the gig. From the next day the client sees a locked response and the stored answers do not change. Pass null to follow the gig: the answers stay revisable until the gig is over, or at any time when the assignment has no gig. Staff can always edit. Requires crm.manage and the client-portal-forms flag.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Clear enough to supply this argument.
assignment_id
the form assignment id
Explain the meaning of this value, not just its name.
editable_until
last day the client may revise (YYYY-MM-DD), or null to follow the gig
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Set when a client can revise a form",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema48/100
Describe the returned fields so an agent can interpret the result.
{
"name": "set_form_assignment_editable_until",
"title": "Set when a client can revise a form",
"description": "Set the last day (YYYY-MM-DD, in the gig's time zone) on which the client can revise the answers to a form assignment. The day only bounds revisions: the client's first answer is always accepted. The day applies even when it falls after the gig. From the next day the client sees a locked response and the stored answers do not change. Pass null to follow the gig: the answers stay revisable until the gig is over, or at any time when the assignment has no gig. Staff can always edit. Requires crm.manage and the client-portal-forms flag.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"assignment_id",
"editable_until"
],
"properties": {
"assignment_id": {
"type": "string",
"description": "the form assignment id"
},
"editable_until": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"description": "last day the client may revise (YYYY-MM-DD), or null to follow the gig"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Set when a client can revise a form",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
List a gig's advance contacts: the outside people on the show that are not crew — venue GM and production manager, promoter rep, house electrician, union steward, box office, hospitality, catering, runners. Each has id, role, name, company, phone, email, notes and sort_order. Anyone on the gig can read them; phone and email are returned only to callers who manage the gig.
Describe the returned information so the agent knows whether it will answer the request.
Inputs48/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Add or edit a person in a gig's advance contact directory (venue, promoter, union, vendor). Without contact_id this adds a contact: pass at least a role or a name. With contact_id (from list_show_contacts) it edits that contact: pass only the fields to change; null or "" clears a field. These are not crew and receive no invitation or message. Requires gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
contact_id
edit this contact (from list_show_contacts); omit to add one
Clear enough to supply this argument.
role
role or department, e.g. "Venue PM", "IATSE Steward", "Box Office"
Clear enough to supply this argument.
name
person or desk name
Clear enough to supply this argument.
company
organization, e.g. "Live Nation"
Clear enough to supply this argument.
role_type
typed role: PLANNER (event planner), CLIENT, ON_SITE (on-site contact), VENUE, VENDOR or OTHER; null clears it
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
phone
phone, or a radio channel like "Ch 1"
Clear enough to supply this argument.
cell_phone
cell phone, up to 40 characters
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
work_phone
work phone, up to 40 characters
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
List a gig's web links: the event page it was imported from, ticket and RSVP pages, the organizer site, community and online join links, and links people added. Each has id, label, url, kind, position and source (IMPORT rows were written by an event-link import and are replaced when the page is imported again; MANUAL rows were added or edited by a person). Anyone on the gig can read them.
The description explains the capability, when to use it, and what to expect.
Inputs47/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "list_event_links",
"title": "List gig links",
"description": "List a gig's web links: the event page it was imported from, ticket and RSVP pages, the organizer site, community and online join links, and links people added. Each has id, label, url, kind, position and source (IMPORT rows were written by an event-link import and are replaced when the page is imported again; MANUAL rows were added or edited by a person). Anyone on the gig can read them.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "List gig links",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Add or edit a web link on a gig. Without link_id this adds url: the label and kind default from the link (a discord.gg link is a community link labelled Discord), and a gig keeps each address once, so adding the same address again returns 409. With link_id (from list_event_links) it edits that link: pass only the fields to change; an edited link counts as added by a person, so a later import of the event page leaves it alone. Requires gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
link_id
edit this link (from list_event_links); omit to add one
Clear enough to supply this argument.
url
http or https link; required when adding
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
label
shown text, up to 200 characters
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
kind
tickets, organizer, community (Discord, Slack), online (join link), source (the event page) or other
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
position
when editing: position in the list; lower sorts first
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "save_event_link",
"title": "Save gig link",
"description": "Add or edit a web link on a gig. Without link_id this adds url: the label and kind default from the link (a discord.gg link is a community link labelled Discord), and a gig keeps each address once, so adding the same address again returns 409. With link_id (from list_event_links) it edits that link: pass only the fields to change; an edited link counts as added by a person, so a later import of the event page leaves it alone. Requires gig-operations access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"url": {
"type": "string",
"description": "http or https link; required when adding"
},
"kind": {
"enum": [
"tickets",
"organizer",
"community",
"online",
"other",
"source"
],
"type": "string",
"description": "tickets, organizer, community (Discord, Slack), online (join link), source (the event page) or other"
},
"label": {
"type": "string",
"description": "shown text, up to 200 characters"
},
"link_id": {
"type": "string",
"description": "edit this link (from list_event_links); omit to add one"
},
"event_id": {
"type": "string",
"description": "the gig"
},
"position": {
"type": "integer",
"minimum": 0,
"description": "when editing: position in the list; lower sorts first"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Save gig link",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Get a gig's local labor call: the stagehand order placed with the venue or union (e.g. IATSE), one row per department with a call time and a headcount of hands for load-in, show and load-out. Hands are counts, not named crew — for named crew use the staffing tools. Call times are HH:MM wall clocks in the gig's timezone. Returns the whole labor call: union_local, steward, steward_call, head_electrician, head_electrician_call, notes, departments (id, department, load_in_call, load_in_hands, show_call, show_hands, load_out_call, load_out_hands, load_out_next_day, notes, sort_order) and totals (load_in_hands, show_hands, load_out_hands). Each department phase with hands or a call is a house labor shift on the gig's Staffing board: load-in on the first day, show every day, load-out on the last day. A load-out call earlier than the show call (or the load-in call, or 06:00 when neither is set) falls on the next morning and load_out_next_day is true. Anyone on the gig can read it.
The description explains the capability, when to use it, and what to expect.
Inputs46/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_event_labor_call",
"title": "Get gig labor call",
"description": "Get a gig's local labor call: the stagehand order placed with the venue or union (e.g. IATSE), one row per department with a call time and a headcount of hands for load-in, show and load-out. Hands are counts, not named crew — for named crew use the staffing tools. Call times are HH:MM wall clocks in the gig's timezone. Returns the whole labor call: union_local, steward, steward_call, head_electrician, head_electrician_call, notes, departments (id, department, load_in_call, load_in_hands, show_call, show_hands, load_out_call, load_out_hands, load_out_next_day, notes, sort_order) and totals (load_in_hands, show_hands, load_out_hands). Each department phase with hands or a call is a house labor shift on the gig's Staffing board: load-in on the first day, show every day, load-out on the last day. A load-out call earlier than the show call (or the load-in call, or 06:00 when neither is set) falls on the next morning and load_out_next_day is true. Anyone on the gig can read it.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get gig labor call",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Set the labor call header: union_local (e.g. "IATSE Local 51"), steward (name or contact), steward_call (HH:MM in the gig timezone), head_electrician (the house electrician tying in company power), head_electrician_call (HH:MM) and notes (union rules and penalties: meal breaks, dark stage, overtime). Pass only the fields to change; null or "" clears. Departments are edited with add/update/remove_event_labor_call_department. Returns the whole labor call: union_local, steward, steward_call, head_electrician, head_electrician_call, notes, departments (id, department, load_in_call, load_in_hands, show_call, show_hands, load_out_call, load_out_hands, load_out_next_day, notes, sort_order) and totals (load_in_hands, show_hands, load_out_hands). Each department phase with hands or a call is a house labor shift on the gig's Staffing board: load-in on the first day, show every day, load-out on the last day. A load-out call earlier than the show call (or the load-in call, or 06:00 when neither is set) falls on the next morning and load_out_next_day is true. Requires gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
union_local
union local supplying the hands, e.g. "IATSE Local 51"
Clear enough to supply this argument.
steward
union steward name or contact
Clear enough to supply this argument.
steward_call
steward call time, HH:MM in the gig timezone
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
head_electrician
house head electrician name or contact
Clear enough to supply this argument.
head_electrician_call
head electrician call time, HH:MM in the gig timezone
Clear enough to supply this argument.
notes
union rules and penalty thresholds
Explain the meaning of this value, not just its name.
{
"name": "update_event_labor_call",
"title": "Update gig labor call",
"description": "Set the labor call header: union_local (e.g. \"IATSE Local 51\"), steward (name or contact), steward_call (HH:MM in the gig timezone), head_electrician (the house electrician tying in company power), head_electrician_call (HH:MM) and notes (union rules and penalties: meal breaks, dark stage, overtime). Pass only the fields to change; null or \"\" clears. Departments are edited with add/update/remove_event_labor_call_department. Returns the whole labor call: union_local, steward, steward_call, head_electrician, head_electrician_call, notes, departments (id, department, load_in_call, load_in_hands, show_call, show_hands, load_out_call, load_out_hands, load_out_next_day, notes, sort_order) and totals (load_in_hands, show_hands, load_out_hands). Each department phase with hands or a call is a house labor shift on the gig's Staffing board: load-in on the first day, show every day, load-out on the last day. A load-out call earlier than the show call (or the load-in call, or 06:00 when neither is set) falls on the next morning and load_out_next_day is true. Requires gig-operations access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"notes": {
"type": [
"string",
"null"
],
"description": "union rules and penalty thresholds"
},
"steward": {
"type": [
"string",
"null"
],
"description": "union steward name or contact"
},
"event_id": {
"type": "string",
"description": "the gig"
},
"union_local": {
"type": [
"string",
"null"
],
"description": "union local supplying the hands, e.g. \"IATSE Local 51\""
},
"steward_call": {
"anyOf": [
{
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$|^$"
},
{
"type": "null"
}
],
"description": "steward call time, HH:MM in the gig timezone"
},
"head_electrician": {
"type": [
"string",
"null"
],
"description": "house head electrician name or contact"
},
"head_electrician_call": {
"$ref": "#/properties/steward_call",
"description": "head electrician call time, HH:MM in the gig timezone"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Update gig labor call",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Add or edit a department row on a gig's labor call. Without department_id this adds a row, e.g. department "Rigging — Ground" with load_in_call 09:00 and load_in_hands 11. With department_id (from get_event_labor_call) it edits that row: pass only the fields to change; null or "" clears a call time, null sets hands to 0. Returns the whole labor call: union_local, steward, steward_call, head_electrician, head_electrician_call, notes, departments (id, department, load_in_call, load_in_hands, show_call, show_hands, load_out_call, load_out_hands, load_out_next_day, notes, sort_order) and totals (load_in_hands, show_hands, load_out_hands). Each department phase with hands or a call is a house labor shift on the gig's Staffing board: load-in on the first day, show every day, load-out on the last day. A load-out call earlier than the show call (or the load-in call, or 06:00 when neither is set) falls on the next morning and load_out_next_day is true. Requires gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
department_id
edit this row (from get_event_labor_call); omit to add one
Clear enough to supply this argument.
department
department, e.g. "Audio", "Carpenters", "Followspots"; required when adding
Clear enough to supply this argument.
load_in_call
load-in call time, HH:MM in the gig timezone; "" or null clears
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
load_in_hands
local hands called for load-in (a headcount); null = 0
Clear enough to supply this argument.
show_call
show call time, HH:MM in the gig timezone
Explain what happens when this optional value is omitted.
show_hands
local hands called for the show; null = 0
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
load_out_call
load-out call time, HH:MM in the gig timezone
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
load_out_hands
local hands called for load-out; null = 0
Clear enough to supply this argument.
notes
notes for this department
Explain the meaning of this value, not just its name.
sort_order
position in the list; lower sorts first
Explain what happens when this optional value is omitted.
{
"name": "save_event_labor_call_department",
"title": "Save labor call department",
"description": "Add or edit a department row on a gig's labor call. Without department_id this adds a row, e.g. department \"Rigging — Ground\" with load_in_call 09:00 and load_in_hands 11. With department_id (from get_event_labor_call) it edits that row: pass only the fields to change; null or \"\" clears a call time, null sets hands to 0. Returns the whole labor call: union_local, steward, steward_call, head_electrician, head_electrician_call, notes, departments (id, department, load_in_call, load_in_hands, show_call, show_hands, load_out_call, load_out_hands, load_out_next_day, notes, sort_order) and totals (load_in_hands, show_hands, load_out_hands). Each department phase with hands or a call is a house labor shift on the gig's Staffing board: load-in on the first day, show every day, load-out on the last day. A load-out call earlier than the show call (or the load-in call, or 06:00 when neither is set) falls on the next morning and load_out_next_day is true. Requires gig-operations access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"notes": {
"type": [
"string",
"null"
],
"description": "notes for this department"
},
"event_id": {
"type": "string",
"description": "the gig"
},
"show_call": {
"$ref": "#/properties/load_in_call",
"description": "show call time, HH:MM in the gig timezone"
},
"department": {
"type": "string",
"description": "department, e.g. \"Audio\", \"Carpenters\", \"Followspots\"; required when adding"
},
"show_hands": {
"$ref": "#/properties/load_in_hands",
"description": "local hands called for the show; null = 0"
},
"sort_order": {
"type": "integer",
"description": "position in the list; lower sorts first"
},
"load_in_call": {
"anyOf": [
{
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$|^$"
},
{
"type": "null"
}
],
"description": "load-in call time, HH:MM in the gig timezone; \"\" or null clears"
},
"department_id": {
"type": "string",
"description": "edit this row (from get_event_labor_call); omit to add one"
},
"load_in_hands": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
],
"description": "local hands called for load-in (a headcount); null = 0"
},
"load_out_call": {
"$ref": "#/properties/load_in_call",
"description": "load-out call time, HH:MM in the gig timezone"
},
"load_out_hands": {
"$ref": "#/properties/load_in_hands",
"description": "local hands called for load-out; null = 0"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Save labor call department",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Remove a department row from a gig's labor call. Returns the whole labor call: union_local, steward, steward_call, head_electrician, head_electrician_call, notes, departments (id, department, load_in_call, load_in_hands, show_call, show_hands, load_out_call, load_out_hands, load_out_next_day, notes, sort_order) and totals (load_in_hands, show_hands, load_out_hands). Each department phase with hands or a call is a house labor shift on the gig's Staffing board: load-in on the first day, show every day, load-out on the last day. A load-out call earlier than the show call (or the load-in call, or 06:00 when neither is set) falls on the next morning and load_out_next_day is true. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires gig-operations access.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
department_id
department id from get_event_labor_call
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "remove_event_labor_call_department",
"title": "Remove labor call department",
"description": "Remove a department row from a gig's labor call. Returns the whole labor call: union_local, steward, steward_call, head_electrician, head_electrician_call, notes, departments (id, department, load_in_call, load_in_hands, show_call, show_hands, load_out_call, load_out_hands, load_out_next_day, notes, sort_order) and totals (load_in_hands, show_hands, load_out_hands). Each department phase with hands or a call is a house labor shift on the gig's Staffing board: load-in on the first day, show every day, load-out on the last day. A load-out call earlier than the show call (or the load-in call, or 06:00 when neither is set) falls on the next morning and load_out_next_day is true. Confirmation-gated when MCP_CONFIRMATION_SECRET is set. Requires gig-operations access.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"department_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig"
},
"department_id": {
"type": "string",
"description": "department id from get_event_labor_call"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Remove labor call department",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Read what the crew must wear and remember for a gig: the dress preset (label plus men, women and any text), the gig's dress notes, its own reminders and the org standing reminders every gig inherits.
The description explains the capability, when to use it, and what to expect.
Inputs46/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Set a gig's dress code and crew reminders. Only the fields you pass change; pass null to clear one. dress_preset_key must be one of the org dress presets. Reminders are one per line. Requires gig-manager access. Does not notify crew.
The description explains the capability, when to use it, and what to expect.
Inputs61/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
dress_preset_key
org dress preset key
Explain the meaning of this value, not just its name.
dress_notes
extra dress instructions
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
List the gear outside parties bring to a gig (the band, a vendor or the venue): name, count, who provides it and notes. Owned inventory is listed by the inventory tools.
The description explains the capability, when to use it, and what to expect.
Inputs49/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Add a line of gear an outside party brings to a gig, such as a vendor sound package, band fronts or venue instruments. It does not touch inventory. Requires gig-manager access.
The description explains the capability, when to use it, and what to expect.
Inputs71/100
Explain the meaning of this value, not just its name.
event_id
the gig
Explain the meaning of this value, not just its name.
name
what the gear is
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
provided_by
who brings it
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
quantity
how many; 1 when omitted
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
provider_name
the band, vendor or venue by name
Clear enough to supply this argument.
notes
anything else about the gear
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
List native gig agreements (contracts) for one event, with canCreate and eligible recipients when the caller can edit finances. Recipients see only their own rows.
Describe the returned information so the agent knows whether it will answer the request.
Inputs50/100
Explain the meaning of this value, not just its name.
event_id
the gig id
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Create a native gig agreement for signature on the Venue tab. Supply title, recipient_id, recipient_kind (musician or client), and either content text and/or pdf_base64 + pdf_filename (inline base64 — not request_attachment_upload, which is ingestion-only). recipient_id and recipient_kind must match a row from list_event_agreements (published roster crew or a client contact linked to the gig). EventMembers added as INVITED on draft or template gigs are rejected until the gig is published (ACTIVE). notify_recipient defaults false; when true, queues the assignment email if an address exists. Requires financial editing access. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs78/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
title
agreement title shown to the recipient
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
content
agreement terms as text; required unless pdf_base64 is set
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
pdf_base64
base64-encoded PDF bytes; pair with pdf_filename
Clear enough to supply this argument.
pdf_filename
filename for pdf_base64, required when pdf_base64 is set
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
recipient_id
recipient id from list_event_agreements recipients
Clear enough to supply this argument.
recipient_kind
musician for crew recipients, client for buyers
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
notify_recipient
when true, email the recipient about the new agreement
Explain what happens when this optional value is omitted.
recipient_email
optional email override
Explain the meaning of this value, not just its name.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "create_event_agreement",
"title": "Create event agreement",
"description": "Create a native gig agreement for signature on the Venue tab. Supply title, recipient_id, recipient_kind (musician or client), and either content text and/or pdf_base64 + pdf_filename (inline base64 — not request_attachment_upload, which is ingestion-only). recipient_id and recipient_kind must match a row from list_event_agreements (published roster crew or a client contact linked to the gig). EventMembers added as INVITED on draft or template gigs are rejected until the gig is published (ACTIVE). notify_recipient defaults false; when true, queues the assignment email if an address exists. Requires financial editing access. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"title",
"recipient_id",
"recipient_kind"
],
"properties": {
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "agreement title shown to the recipient"
},
"content": {
"type": "string",
"maxLength": 50000,
"description": "agreement terms as text; required unless pdf_base64 is set"
},
"event_id": {
"type": "string",
"description": "the gig id"
},
"pdf_base64": {
"type": "string",
"description": "base64-encoded PDF bytes; pair with pdf_filename"
},
"pdf_filename": {
"type": "string",
"maxLength": 200,
"description": "filename for pdf_base64, required when pdf_base64 is set"
},
"recipient_id": {
"type": "string",
"description": "recipient id from list_event_agreements recipients"
},
"recipient_kind": {
"enum": [
"musician",
"client"
],
"type": "string",
"description": "musician for crew recipients, client for buyers"
},
"recipient_email": {
"type": "string",
"description": "optional email override"
},
"notify_recipient": {
"type": "boolean",
"description": "when true, email the recipient about the new agreement"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create event agreement",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Void an unsigned native gig agreement. Signed agreements keep their record; this marks the agreement void for the gig. Requires financial editing access. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Input documentation gives an agent enough context to populate the arguments.
agreement_id
agreement id from list_event_agreements
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
List the organization's event plans (brief-to-plan drafts) newest first, with status, step hint, title, date, and readiness. Statuses: DRAFTING (still being filled in), REVIEWED (summary accepted, ready for create_draft_event_from_plan), CREATED (a draft gig exists), ABANDONED. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs67/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
organization_id
defaults to your active organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
status
filter to one plan status
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
page size, max 100 (default 25)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Read one event plan in full: details (title, date, timezone, clocks, location, guest count) with per-field provenance and competing candidates, schedule entries, staffing roles, checklist phases, matched venue/customer records, the plan's own open questions, conflicts, and readiness (can_review / can_create_draft plus what is blocking). The plan is the source of truth — ask the user the plan's `questions` verbatim rather than inventing answers. Every edit needs the `version` this returns. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Input documentation gives an agent enough context to populate the arguments.
plan_id
plan id from create_event_plan or list_event_plans
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Rank the organization's gig templates against a plan and explain each match: template_event_id, title, template_version, score, human-readable reasons, and what the template would contribute (schedule entries, roles, seats, tasks). Show the user the ranked options and let them choose — do not silently pick the top one. Apply the choice with update_event_plan {op:"set_template"} or rebase_event_plan_template. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Input documentation gives an agent enough context to populate the arguments.
plan_id
plan id from create_event_plan or list_event_plans
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "suggest_plan_templates",
"title": "Suggest plan templates",
"description": "Rank the organization's gig templates against a plan and explain each match: template_event_id, title, template_version, score, human-readable reasons, and what the template would contribute (schedule entries, roles, seats, tasks). Show the user the ranked options and let them choose — do not silently pick the top one. Apply the choice with update_event_plan {op:\"set_template\"} or rebase_event_plan_template. Read-only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"plan_id"
],
"properties": {
"plan_id": {
"type": "string",
"description": "plan id from create_event_plan or list_event_plans"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Suggest plan templates",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
Align the title with the capability actually described by this tool.
Description98/100
Preview what saving a gig as a reusable template would keep and drop: retained sections with counts, excluded sections with reasons, what is always left out (people, money, client data), the existing templates a new version could replace, and a preview_token. Pass target_template_id when the user is replacing an existing template — that mode forces extra exclusions (attachments, inventory), and previewing without it mints a token bound to the wrong mode, which save_event_as_template will reject. Writes nothing — pass the preview_token to save_event_as_template to save exactly what was previewed.
The description explains the capability, when to use it, and what to expect.
Inputs70/100
Explain the meaning of this value, not just its name.
event_id
the gig to preview as a template
Clear enough to supply this argument.
include
section keys to keep that the template would otherwise drop
Explain the meaning of this value, not just its name.
exclude
section keys to drop from the template
Explain the meaning of this value, not just its name.
target_template_id
existing template id being replaced with a new version, if any
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"title": "Preview save gig as template",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
Output schema26/100
Describe the returned fields so an agent can interpret the result.
{
"name": "preview_save_event_as_template",
"title": "Preview save gig as template",
"description": "Preview what saving a gig as a reusable template would keep and drop: retained sections with counts, excluded sections with reasons, what is always left out (people, money, client data), the existing templates a new version could replace, and a preview_token. Pass target_template_id when the user is replacing an existing template — that mode forces extra exclusions (attachments, inventory), and previewing without it mints a token bound to the wrong mode, which save_event_as_template will reject. Writes nothing — pass the preview_token to save_event_as_template to save exactly what was previewed.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"exclude": {
"type": "array",
"items": {
"type": "string"
},
"description": "section keys to drop from the template"
},
"include": {
"type": "array",
"items": {
"type": "string"
},
"description": "section keys to keep that the template would otherwise drop"
},
"event_id": {
"type": "string",
"description": "the gig to preview as a template"
},
"target_template_id": {
"type": "string",
"description": "existing template id being replaced with a new version, if any"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Preview save gig as template",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Turn a client brief into a reviewable event plan. Pass the brief verbatim as brief_text, attach it as brief_file (base64, max 8 MiB), and/or start from a gig template with template_event_id — at least one is required. The plan is the source of truth — after this call, ask the user the plan's own `questions` verbatim (the ones with `blocking:"draft"` first, `batch:true`). Never infer or default a year, date, timezone, budget, headcount, venue, or client the brief does not state. Nothing here sends an invitation, offer, message, or notification. Nothing is created on the calendar either: a plan becomes a gig only through create_draft_event_from_plan.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Explain the meaning of this value, not just its name.
organization_id
defaults to your active organization
Explain the meaning of this value, not just its name.
brief_text
the client's brief, pasted verbatim — do not summarize, rewrite, or fill in gaps
Clear enough to supply this argument.
brief_file › filename
file name, e.g. "brief.pdf" or "rider.docx"
Clear enough to supply this argument.
brief_file › content_base64
the file bytes, base64-encoded (max 8 MiB once decoded)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
brief_file › content_type
MIME type, e.g. application/pdf; defaults to application/octet-stream
Clear enough to supply this argument.
template_event_id
a TEMPLATE-status event id to plan from (list_events with event_status="TEMPLATE" lists gig templates)
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Create event plan from a brief",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema41/100
Describe the returned fields so an agent can interpret the result.
{
"name": "create_event_plan",
"title": "Create event plan from a brief",
"description": "Turn a client brief into a reviewable event plan. Pass the brief verbatim as brief_text, attach it as brief_file (base64, max 8 MiB), and/or start from a gig template with template_event_id — at least one is required. The plan is the source of truth — after this call, ask the user the plan's own `questions` verbatim (the ones with `blocking:\"draft\"` first, `batch:true`). Never infer or default a year, date, timezone, budget, headcount, venue, or client the brief does not state. Nothing here sends an invitation, offer, message, or notification. Nothing is created on the calendar either: a plan becomes a gig only through create_draft_event_from_plan.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"brief_file": {
"type": "object",
"required": [
"filename",
"content_base64"
],
"properties": {
"filename": {
"type": "string",
"description": "file name, e.g. \"brief.pdf\" or \"rider.docx\""
},
"content_type": {
"type": "string",
"description": "MIME type, e.g. application/pdf; defaults to application/octet-stream"
},
"content_base64": {
"type": "string",
"description": "the file bytes, base64-encoded (max 8 MiB once decoded)"
}
},
"description": "a brief document to read instead of (or alongside) brief_text",
"additionalProperties": false
},
"brief_text": {
"type": "string",
"description": "the client's brief, pasted verbatim — do not summarize, rewrite, or fill in gaps"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"template_event_id": {
"type": "string",
"description": "a TEMPLATE-status event id to plan from (list_events with event_status=\"TEMPLATE\" lists gig templates)"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create event plan from a brief",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Apply edits to a plan: answer or dismiss its questions, set a field, choose between competing candidates, resolve the venue/customer match, edit schedule entries and anchors, adjust staffing roles, edit checklist tasks, acknowledge a conflict, or switch template. Send the user's own answers — never infer or default a year, date, timezone, budget, headcount, venue, or client the brief does not state. When a field has more than one candidate, show every candidate to the user and let them choose. dry_run=true previews the effect (including how anchored schedule entries move) and writes nothing. On a version conflict, call get_event_plan again and retry with the fresh version. Nothing here sends an invitation, offer, message, or notification.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
plan_id
plan id from create_event_plan or list_event_plans
Clear enough to supply this argument.
plan_version
the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
operations
edits to apply, in order, each an object with an "op" discriminant and flat fields (never a nested "entry"/"role"/"task" object). Value edits: {op:"set_value", path, value} and {op:"answer_question", question_id, value} / {op:"dismiss_question", question_id}. Ambiguity: {op:"choose_candidate", path, candidate_index} and {op:"resolve_record", kind:"venue"|"customer", resolution:"matched"|"none"|"create_later", record_id?, record_name?}. Schedule: {op:"set_schedule_entry", key, title?, timing?, duration_minutes?}, {op:"add_schedule_entry", title, timing, duration_minutes?}, {op:"remove_schedule_entry", key}, {op:"pin_entry", key}, {op:"unpin_entry", key}, {op:"set_anchor", anchor_key, clock, day_offset, move_entry_keys}. timing is {mode:"untimed"} or {mode:"clock", clock, day_offset} or {mode:"relative", anchor_key, offset_minutes}. Staffing: {op:"set_role", key, title?, quantity?, org_position_id?}, {op:"add_role", title, quantity, org_position_id?}, {op:"remove_role", key}. Checklist: {op:"add_task", phase_key, title, notes?}, {op:"set_task", key, title?, notes?}, {op:"remove_task", key}. Also {op:"acknowledge_conflict", conflict_id} and {op:"set_template", template_event_id}. The server validates each entry and returns a 400 naming the index that is wrong.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
dry_run
true previews the change and writes nothing; the plan version does not move
{
"name": "update_event_plan",
"title": "Update event plan",
"description": "Apply edits to a plan: answer or dismiss its questions, set a field, choose between competing candidates, resolve the venue/customer match, edit schedule entries and anchors, adjust staffing roles, edit checklist tasks, acknowledge a conflict, or switch template. Send the user's own answers — never infer or default a year, date, timezone, budget, headcount, venue, or client the brief does not state. When a field has more than one candidate, show every candidate to the user and let them choose. dry_run=true previews the effect (including how anchored schedule entries move) and writes nothing. On a version conflict, call get_event_plan again and retry with the fresh version. Nothing here sends an invitation, offer, message, or notification.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"plan_id",
"plan_version",
"operations"
],
"properties": {
"dry_run": {
"type": "boolean",
"description": "true previews the change and writes nothing; the plan version does not move"
},
"plan_id": {
"type": "string",
"description": "plan id from create_event_plan or list_event_plans"
},
"operations": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
},
"maxItems": 50,
"minItems": 1,
"description": "edits to apply, in order, each an object with an \"op\" discriminant and flat fields (never a nested \"entry\"/\"role\"/\"task\" object). Value edits: {op:\"set_value\", path, value} and {op:\"answer_question\", question_id, value} / {op:\"dismiss_question\", question_id}. Ambiguity: {op:\"choose_candidate\", path, candidate_index} and {op:\"resolve_record\", kind:\"venue\"|\"customer\", resolution:\"matched\"|\"none\"|\"create_later\", record_id?, record_name?}. Schedule: {op:\"set_schedule_entry\", key, title?, timing?, duration_minutes?}, {op:\"add_schedule_entry\", title, timing, duration_minutes?}, {op:\"remove_schedule_entry\", key}, {op:\"pin_entry\", key}, {op:\"unpin_entry\", key}, {op:\"set_anchor\", anchor_key, clock, day_offset, move_entry_keys}. timing is {mode:\"untimed\"} or {mode:\"clock\", clock, day_offset} or {mode:\"relative\", anchor_key, offset_minutes}. Staffing: {op:\"set_role\", key, title?, quantity?, org_position_id?}, {op:\"add_role\", title, quantity, org_position_id?}, {op:\"remove_role\", key}. Checklist: {op:\"add_task\", phase_key, title, notes?}, {op:\"set_task\", key, title?, notes?}, {op:\"remove_task\", key}. Also {op:\"acknowledge_conflict\", conflict_id} and {op:\"set_template\", template_event_id}. The server validates each entry and returns a 400 naming the index that is wrong."
},
"plan_version": {
"type": "integer",
"description": "the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version",
"exclusiveMinimum": 0
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Update event plan",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Replace the plan's brief with a corrected or more complete one and re-extract. This REPLACES, it does not merge: send the full brief text again (the original content plus whatever changed), not just a follow-up snippet — any unlocked value or schedule/staffing item the new text doesn't repeat is dropped from the plan (named in the diff as removed). Returns the plan plus a per-field diff of what changed; user answers already recorded are kept. Never infer or default a year, date, timezone, budget, headcount, venue, or client the brief does not state. dry_run=true previews the diff and writes nothing. On a version conflict, call get_event_plan again and retry with the fresh version. Nothing here sends an invitation, offer, message, or notification.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
plan_id
plan id from create_event_plan or list_event_plans
Clear enough to supply this argument.
plan_version
the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
brief_text
the client's brief, pasted verbatim — do not summarize, rewrite, or fill in gaps
Clear enough to supply this argument.
brief_file › filename
file name, e.g. "brief.pdf" or "rider.docx"
Clear enough to supply this argument.
brief_file › content_base64
the file bytes, base64-encoded (max 8 MiB once decoded)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
brief_file › content_type
MIME type, e.g. application/pdf; defaults to application/octet-stream
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
dry_run
true previews the change and writes nothing; the plan version does not move
{
"name": "revise_event_plan_brief",
"title": "Revise event plan brief",
"description": "Replace the plan's brief with a corrected or more complete one and re-extract. This REPLACES, it does not merge: send the full brief text again (the original content plus whatever changed), not just a follow-up snippet — any unlocked value or schedule/staffing item the new text doesn't repeat is dropped from the plan (named in the diff as removed). Returns the plan plus a per-field diff of what changed; user answers already recorded are kept. Never infer or default a year, date, timezone, budget, headcount, venue, or client the brief does not state. dry_run=true previews the diff and writes nothing. On a version conflict, call get_event_plan again and retry with the fresh version. Nothing here sends an invitation, offer, message, or notification.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"plan_id",
"plan_version"
],
"properties": {
"dry_run": {
"type": "boolean",
"description": "true previews the change and writes nothing; the plan version does not move"
},
"plan_id": {
"type": "string",
"description": "plan id from create_event_plan or list_event_plans"
},
"brief_file": {
"type": "object",
"required": [
"filename",
"content_base64"
],
"properties": {
"filename": {
"type": "string",
"description": "file name, e.g. \"brief.pdf\" or \"rider.docx\""
},
"content_type": {
"type": "string",
"description": "MIME type, e.g. application/pdf; defaults to application/octet-stream"
},
"content_base64": {
"type": "string",
"description": "the file bytes, base64-encoded (max 8 MiB once decoded)"
}
},
"description": "a brief document to read instead of (or alongside) brief_text",
"additionalProperties": false
},
"brief_text": {
"type": "string",
"description": "the client's brief, pasted verbatim — do not summarize, rewrite, or fill in gaps"
},
"plan_version": {
"type": "integer",
"description": "the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version",
"exclusiveMinimum": 0
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Revise event plan brief",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Re-apply the plan's template at its newest version when get_event_plan reports `template.update`. Template-sourced schedule entries, roles, and tasks are refreshed; anything the user pinned or edited is kept and the returned diff names every change. dry_run=true previews the diff and writes nothing. On a version conflict, call get_event_plan again and retry with the fresh version. Nothing here sends an invitation, offer, message, or notification.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
plan_id
plan id from create_event_plan or list_event_plans
Clear enough to supply this argument.
plan_version
the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
dry_run
true previews the change and writes nothing; the plan version does not move
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Rebase event plan onto the newer template",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema45/100
Describe the returned fields so an agent can interpret the result.
{
"name": "rebase_event_plan_template",
"title": "Rebase event plan onto the newer template",
"description": "Re-apply the plan's template at its newest version when get_event_plan reports `template.update`. Template-sourced schedule entries, roles, and tasks are refreshed; anything the user pinned or edited is kept and the returned diff names every change. dry_run=true previews the diff and writes nothing. On a version conflict, call get_event_plan again and retry with the fresh version. Nothing here sends an invitation, offer, message, or notification.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"plan_id",
"plan_version"
],
"properties": {
"dry_run": {
"type": "boolean",
"description": "true previews the change and writes nothing; the plan version does not move"
},
"plan_id": {
"type": "string",
"description": "plan id from create_event_plan or list_event_plans"
},
"plan_version": {
"type": "integer",
"description": "the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version",
"exclusiveMinimum": 0
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Rebase event plan onto the newer template",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Mark a plan REVIEWED and get the proposed-changes summary: the exact gig that would be created (title, date, timezone, clocks, DRAFT status), the venue and customer that would be linked, how many schedule entries, roles, seats, and checklist tasks come across, and which decisions carry onto the gig for later. Show this summary to the user verbatim before create_draft_event_from_plan — it is the thing they are approving. Reversible: another edit sends the plan back to DRAFTING. On a version conflict, call get_event_plan again and retry with the fresh version. Nothing here sends an invitation, offer, message, or notification.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
plan_id
plan id from create_event_plan or list_event_plans
Clear enough to supply this argument.
plan_version
the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "review_event_plan",
"title": "Review event plan",
"description": "Mark a plan REVIEWED and get the proposed-changes summary: the exact gig that would be created (title, date, timezone, clocks, DRAFT status), the venue and customer that would be linked, how many schedule entries, roles, seats, and checklist tasks come across, and which decisions carry onto the gig for later. Show this summary to the user verbatim before create_draft_event_from_plan — it is the thing they are approving. Reversible: another edit sends the plan back to DRAFTING. On a version conflict, call get_event_plan again and retry with the fresh version. Nothing here sends an invitation, offer, message, or notification.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"plan_id",
"plan_version"
],
"properties": {
"plan_id": {
"type": "string",
"description": "plan id from create_event_plan or list_event_plans"
},
"plan_version": {
"type": "integer",
"description": "the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version",
"exclusiveMinimum": 0
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Review event plan",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Create ONE DRAFT gig from a reviewed plan: details, schedule, staffing roles, and checklist come across, and the venue/customer links are made. Nothing is sent — no invitations, offers, or messages — and the gig stays a DRAFT until someone promotes it. Publishing (which sends any held invitations) happens in the Soundcheck app (web or mobile), not over MCP: offer get_soundcheck_link to the gig. Unanswered execution-blocking decisions carry onto the gig as open items. Call review_event_plan first and show the user its summary. Confirmation-gated: the first call returns confirmation_required with a summary, and only the second call with that confirmation_token creates the gig. Re-running after a successful create returns the same gig instead of a second one.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
plan_id
plan id from create_event_plan or list_event_plans
Clear enough to supply this argument.
plan_version
the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Create a draft gig from a plan",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema38/100
Describe the returned fields so an agent can interpret the result.
{
"name": "create_draft_event_from_plan",
"title": "Create a draft gig from a plan",
"description": "Create ONE DRAFT gig from a reviewed plan: details, schedule, staffing roles, and checklist come across, and the venue/customer links are made. Nothing is sent — no invitations, offers, or messages — and the gig stays a DRAFT until someone promotes it. Publishing (which sends any held invitations) happens in the Soundcheck app (web or mobile), not over MCP: offer get_soundcheck_link to the gig. Unanswered execution-blocking decisions carry onto the gig as open items. Call review_event_plan first and show the user its summary. Confirmation-gated: the first call returns confirmation_required with a summary, and only the second call with that confirmation_token creates the gig. Re-running after a successful create returns the same gig instead of a second one.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"plan_id",
"plan_version"
],
"properties": {
"plan_id": {
"type": "string",
"description": "plan id from create_event_plan or list_event_plans"
},
"plan_version": {
"type": "integer",
"description": "the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version",
"exclusiveMinimum": 0
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create a draft gig from a plan",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Discard a plan the user no longer wants. The plan moves to ABANDONED and stops appearing in the working list; nothing that was already created is touched. On a version conflict, call get_event_plan again and retry with the fresh version. Nothing here sends an invitation, offer, message, or notification.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
plan_id
plan id from create_event_plan or list_event_plans
Clear enough to supply this argument.
plan_version
the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "abandon_event_plan",
"title": "Abandon event plan",
"description": "Discard a plan the user no longer wants. The plan moves to ABANDONED and stops appearing in the working list; nothing that was already created is touched. On a version conflict, call get_event_plan again and retry with the fresh version. Nothing here sends an invitation, offer, message, or notification.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"plan_id",
"plan_version"
],
"properties": {
"plan_id": {
"type": "string",
"description": "plan id from create_event_plan or list_event_plans"
},
"plan_version": {
"type": "integer",
"description": "the plan version from the latest get_event_plan / create_event_plan / list_event_plans response — every edit must use the CURRENT version",
"exclusiveMinimum": 0
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Abandon event plan",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Save a gig as a reusable gig template (a TEMPLATE-status event) that brief-to-plan can plan from. Structure is kept — schedule shape, roles, checklist — while people, money, and client data are always left out. Run preview_save_event_as_template first, show the user what is kept and dropped, and pass its preview_token back so the save matches the preview. target_template_id saves a NEW VERSION of an existing template instead of creating another one. Nobody is notified.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Input documentation gives an agent enough context to populate the arguments.
event_id
the gig to save as a template
Clear enough to supply this argument.
title
template name; defaults to the gig title
Clear enough to supply this argument.
notes
notes stored on the template
Clear enough to supply this argument.
include
section keys to keep that the template would otherwise drop
Clear enough to supply this argument.
exclude
section keys to drop from the template
Clear enough to supply this argument.
preview_token
token from preview_save_event_as_template, so the save matches the preview
Clear enough to supply this argument.
target_template_id
existing template id to save a new version of, instead of creating a new one
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Save a gig as a template",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema47/100
Describe the returned fields so an agent can interpret the result.
{
"name": "save_event_as_template",
"title": "Save a gig as a template",
"description": "Save a gig as a reusable gig template (a TEMPLATE-status event) that brief-to-plan can plan from. Structure is kept — schedule shape, roles, checklist — while people, money, and client data are always left out. Run preview_save_event_as_template first, show the user what is kept and dropped, and pass its preview_token back so the save matches the preview. target_template_id saves a NEW VERSION of an existing template instead of creating another one. Nobody is notified.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"notes": {
"type": "string",
"description": "notes stored on the template"
},
"title": {
"type": "string",
"description": "template name; defaults to the gig title"
},
"exclude": {
"type": "array",
"items": {
"type": "string"
},
"description": "section keys to drop from the template"
},
"include": {
"type": "array",
"items": {
"type": "string"
},
"description": "section keys to keep that the template would otherwise drop"
},
"event_id": {
"type": "string",
"description": "the gig to save as a template"
},
"preview_token": {
"type": "string",
"description": "token from preview_save_event_as_template, so the save matches the preview"
},
"target_template_id": {
"type": "string",
"description": "existing template id to save a new version of, instead of creating a new one"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Save a gig as a template",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Set the planning rules on a gig template: anchors (named schedule landmarks such as doors or downbeat), constraints between entries, the entry keys that stay fixed when a plan moves, and match hints (event types and keywords) that steer suggest_plan_templates. Rules make every future plan built from this template land better. The event must be a TEMPLATE and the caller an org admin or gig manager. Nobody is notified.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
event_id
the TEMPLATE-status event id (list_events event_status="TEMPLATE")
Clear enough to supply this argument.
anchors
anchor key → schedule entry key, e.g. {"doors": "doors_open"}
Clear enough to supply this argument.
constraints
ordering rules, each {id, rule: "before" | "after" | "within" | "minDuration", ...rule fields}; the server validates and names any bad field
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fixed_entry_keys
schedule entry keys that keep their clock time when the plan is re-anchored
Clear enough to supply this argument.
match_hints › event_types
event types this template suits, e.g. ["Wedding", "Gala"]
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Load the organization's knowledge-base profile — how this event business works, curated from its website, reviews, closeout notes, lost leads and saved playbook. Call once at the start of a session before planning, quoting or staffing work. Returns {status, playbook, static, dynamic, sections}: static = durable facts, dynamic = recent context, sections = [{key, title, facts}] in knowledge-base order (overview, services, service_area, clients, venues, staffing, operations, money_rules, incidents, voice, playbook, glossary). status is ready, not_enabled (the org has not turned the knowledge base on; playbook is still returned) or not_configured. For the team-reviewed written pages, use get_org_knowledge_page. This is guidance, never the source of truth for dates, crew, or money — verify those with the event, staffing and ledger tools. Read-only; managers and admins only.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sections
only return these knowledge-base sections; omit for all
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_org_agent_profile",
"title": "Get organization agent profile",
"description": "Load the organization's knowledge-base profile — how this event business works, curated from its website, reviews, closeout notes, lost leads and saved playbook. Call once at the start of a session before planning, quoting or staffing work. Returns {status, playbook, static, dynamic, sections}: static = durable facts, dynamic = recent context, sections = [{key, title, facts}] in knowledge-base order (overview, services, service_area, clients, venues, staffing, operations, money_rules, incidents, voice, playbook, glossary). status is ready, not_enabled (the org has not turned the knowledge base on; playbook is still returned) or not_configured. For the team-reviewed written pages, use get_org_knowledge_page. This is guidance, never the source of truth for dates, crew, or money — verify those with the event, staffing and ledger tools. Read-only; managers and admins only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"sections": {
"type": "array",
"items": {
"enum": [
"overview",
"services",
"service_area",
"clients",
"venues",
"staffing",
"operations",
"money_rules",
"incidents",
"voice",
"playbook",
"glossary"
],
"type": "string"
},
"description": "only return these knowledge-base sections; omit for all"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get organization agent profile",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Search the organization's knowledge base for what it has learned: venue quirks, past incidents and how they were fixed, staffing lessons, and why leads were lost. Ask in plain language (e.g. "load-in problems at The Fillmore", "why do we lose corporate leads"). Each result has text, similarity, kind (profile | incident | learning), occurred_on, and source {type, id} citing the record it came from — use that id with the matching tool (get_event, get_venue) to confirm details before acting. Returns status not_enabled with no results when the org has not turned the knowledge base on. Read-only; managers and admins only.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
what you want to know, in plain language (max 500 characters)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
kinds
only return these kinds; incident = something went wrong, learning = a lesson or pattern
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
max results, 1-25 (default 10)
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "search_org_knowledge",
"title": "Search organization knowledge",
"description": "Search the organization's knowledge base for what it has learned: venue quirks, past incidents and how they were fixed, staffing lessons, and why leads were lost. Ask in plain language (e.g. \"load-in problems at The Fillmore\", \"why do we lose corporate leads\"). Each result has text, similarity, kind (profile | incident | learning), occurred_on, and source {type, id} citing the record it came from — use that id with the matching tool (get_event, get_venue) to confirm details before acting. Returns status not_enabled with no results when the org has not turned the knowledge base on. Read-only; managers and admins only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"kinds": {
"type": "array",
"items": {
"enum": [
"profile",
"incident",
"learning"
],
"type": "string"
},
"description": "only return these kinds; incident = something went wrong, learning = a lesson or pattern"
},
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "max results, 1-25 (default 10)"
},
"query": {
"type": "string",
"description": "what you want to know, in plain language (max 500 characters)"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Search organization knowledge",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Read the written knowledge-base page for one section (or all sections) — the same pages the team sees under Settings → Knowledge base. Pages are written from the org's curated knowledge and may have been edited by the team (origin HUMAN), which makes them the most trusted guidance. Returns {status, updated_at, sections: [{key, title, version, origin, markdown, updated_at}]}. Omit section for every written page. Guidance only — verify dates, crew, and money with the SoR tools. Read-only; managers and admins only.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
section
one section key; omit for all
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_org_knowledge_page",
"title": "Get organization knowledge page",
"description": "Read the written knowledge-base page for one section (or all sections) — the same pages the team sees under Settings → Knowledge base. Pages are written from the org's curated knowledge and may have been edited by the team (origin HUMAN), which makes them the most trusted guidance. Returns {status, updated_at, sections: [{key, title, version, origin, markdown, updated_at}]}. Omit section for every written page. Guidance only — verify dates, crew, and money with the SoR tools. Read-only; managers and admins only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"section": {
"enum": [
"overview",
"services",
"service_area",
"clients",
"venues",
"staffing",
"operations",
"money_rules",
"incidents",
"voice",
"playbook",
"glossary"
],
"type": "string",
"description": "one section key; omit for all"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get organization knowledge page",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Preview what cancelling a gig would touch before calling cancel_event: crew who will be released and notified, open offers, and ledger lines affected. Read-only; gig managers (owner/admin/coordinator).
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Explain the meaning of this value, not just its name.
event_id
the gig to preview
Explain the meaning of this value, not just its name.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Cancel a DRAFT or ACTIVE gig: sets it CANCELLED, releases booked crew and notifies them. The gig and its history stay (unlike delete_event). Call get_event_cancellation_impact first and show the user who is affected. Calling again on an already-cancelled gig retries the crew release. Gig managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
event_id
the gig to cancel
Explain the meaning of this value, not just its name.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "cancel_event",
"title": "Cancel gig",
"description": "Cancel a DRAFT or ACTIVE gig: sets it CANCELLED, releases booked crew and notifies them. The gig and its history stay (unlike delete_event). Call get_event_cancellation_impact first and show the user who is affected. Calling again on an already-cancelled gig retries the crew release. Gig managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig to cancel"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Cancel gig",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Delete a gig: it is hidden right away, crew are told it is cancelled, and it is permanently removed after 30 days unless restored with restore_event. Prefer cancel_event (keeps history) or archive_event (hides it) unless the gig was created by mistake. The server refuses (422) for COMPLETED or SETTLED gigs (proof of work) and for gigs with payment activity — cancel or archive those instead. Gig managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Explain the meaning of this value, not just its name.
event_id
the gig to delete
Explain the meaning of this value, not just its name.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "delete_event",
"title": "Delete gig",
"description": "Delete a gig: it is hidden right away, crew are told it is cancelled, and it is permanently removed after 30 days unless restored with restore_event. Prefer cancel_event (keeps history) or archive_event (hides it) unless the gig was created by mistake. The server refuses (422) for COMPLETED or SETTLED gigs (proof of work) and for gigs with payment activity — cancel or archive those instead. Gig managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig to delete"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Delete gig",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Bring back a gig deleted in the last 30 days (see list_events with event_status=DELETED). It comes back as a DRAFT with nobody notified: its crew invitations are reset to unsent, and publishing it (event_status ACTIVE) re-invites them. Its sent crew offers go back to DRAFT with every answer cleared, so send each one again (send_crew_offer) to ask the crew afresh. Fails with 409 once the 30 days have passed and the gig is being permanently deleted. Gig managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Clarify ID sources, units, or usage conventions not already expressed in the schema.
event_id
the deleted gig to restore
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "restore_event",
"title": "Restore deleted gig",
"description": "Bring back a gig deleted in the last 30 days (see list_events with event_status=DELETED). It comes back as a DRAFT with nobody notified: its crew invitations are reset to unsent, and publishing it (event_status ACTIVE) re-invites them. Its sent crew offers go back to DRAFT with every answer cleared, so send each one again (send_crew_offer) to ask the crew afresh. Fails with 409 once the 30 days have passed and the gig is being permanently deleted. Gig managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the deleted gig to restore"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Restore deleted gig",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Delete a crew offer (shift) from a gig. If it was OPEN, its recipients are emailed that it was withdrawn; payables for accepted recipients are voided. To drop just one person, use remove_crew_offer_recipient. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
offer_id
crew offer id from list_crew_offers / get_crew_offer
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "delete_crew_offer",
"title": "Delete crew offer",
"description": "Delete a crew offer (shift) from a gig. If it was OPEN, its recipients are emailed that it was withdrawn; payables for accepted recipients are voided. To drop just one person, use remove_crew_offer_recipient. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"offer_id"
],
"properties": {
"offer_id": {
"type": "string",
"description": "crew offer id from list_crew_offers / get_crew_offer"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Delete crew offer",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Take one person off an OPEN or FILLED crew offer — the whole shift, or only some days (days as YYYY-MM-DD; they keep the rest). Owner/admin only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Explain the meaning of this value, not just its name.
offer_id
crew offer id
Explain the meaning of this value, not just its name.
user_id
the recipient to remove
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
days
only these YYYY-MM-DD days; omit to remove them from the whole shift
Clear enough to supply this argument.
notes
reason, kept on the record
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "remove_crew_offer_recipient",
"title": "Remove crew offer recipient",
"description": "Take one person off an OPEN or FILLED crew offer — the whole shift, or only some days (days as YYYY-MM-DD; they keep the rest). Owner/admin only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"offer_id",
"user_id"
],
"properties": {
"days": {
"type": "array",
"items": {
"type": "string"
},
"description": "only these YYYY-MM-DD days; omit to remove them from the whole shift"
},
"notes": {
"type": "string",
"description": "reason, kept on the record"
},
"user_id": {
"type": "string",
"description": "the recipient to remove"
},
"offer_id": {
"type": "string",
"description": "crew offer id"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Remove crew offer recipient",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Remove someone from the organization. Owners cannot be removed. expected_role must be the member's CURRENT role from list_org_members (e.g. org:member, org:admin); a mismatch returns 409 so a stale view never removes the wrong person. Org admins/owners only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Explain the meaning of this value, not just its name.
user_id
the member to remove
Explain the meaning of this value, not just its name.
expected_role
the member's current role, from list_org_members
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "remove_org_member",
"title": "Remove org member",
"description": "Remove someone from the organization. Owners cannot be removed. expected_role must be the member's CURRENT role from list_org_members (e.g. org:member, org:admin); a mismatch returns 409 so a stale view never removes the wrong person. Org admins/owners only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"user_id",
"expected_role"
],
"properties": {
"user_id": {
"type": "string",
"description": "the member to remove"
},
"expected_role": {
"type": "string",
"description": "the member's current role, from list_org_members"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Remove org member",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Hard-delete an UNPAID ledger line that is not tied to an invitation (for example a duplicate entered by mistake). Prefer void_ledger_item, which keeps the audit trail. Admins/owners, or crew for their own non-payable lines. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig the line belongs to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
ledger_item_id
ledger item id from get_event_ledger
Clear enough to supply this argument.
organization_id
defaults to caller's active org; must be the event's org
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "delete_ledger_item",
"title": "Delete ledger item",
"description": "Hard-delete an UNPAID ledger line that is not tied to an invitation (for example a duplicate entered by mistake). Prefer void_ledger_item, which keeps the audit trail. Admins/owners, or crew for their own non-payable lines. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id",
"ledger_item_id"
],
"properties": {
"event_id": {
"type": "string",
"description": "the gig the line belongs to"
},
"ledger_item_id": {
"type": "string",
"description": "ledger item id from get_event_ledger"
},
"organization_id": {
"type": "string",
"description": "defaults to caller's active org; must be the event's org"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Delete ledger item",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Delete a saved call list (staffing template). Gigs it was already applied to keep their crew. Gig managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
calllist_id
call list id from list_calllists
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Delete one availability entry (an AVAILABLE/UNAVAILABLE block) from a person's calendar. Anyone can delete their own; availability managers can delete an org member's. availability_id comes from get_user_availability. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
user_id
whose calendar
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
availability_id
entry id from get_user_availability
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Delete an availability request (the "are you free on these dates?" ask) and its responses. CRM managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
request_id
request id from list_availability_requests
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
One offering from the catalog (what the org sells: rentals, crew day rates, packages) with sell_rate, cogs, unit, category and flags. Read-only; any org member.
Describe the returned information so the agent knows whether it will answer the request.
Inputs88/100
Input documentation gives an agent enough context to populate the arguments.
offering_id
offering id from list_offerings
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Add an offering to the catalog. sell_rate and cogs are amounts in the org currency per unit (e.g. 450 or 450.50). Returns the offering. Org admins/owners only.
Describe the returned information so the agent knows whether it will answer the request.
Inputs90/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
offering name
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
category
what kind of offering
Explain the meaning of this value, not just its name.
sell_rate
price per unit
Clear enough to supply this argument.
description
customer-facing description
Clear enough to supply this argument.
unit
pricing unit (default DAY on create; unchanged when omitted on update)
Clear enough to supply this argument.
cogs
cost of goods per unit, same currency as sell_rate
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Delete an offering from the catalog. Prefer update_offering with is_active=false to retire it and keep quote history readable. Org admins/owners only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Input documentation gives an agent enough context to populate the arguments.
offering_id
offering id from list_offerings
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Delete an invoice/quote template built from offerings (from list_offerings view=templates). The offerings themselves stay. Org admins/owners only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
template_id
template id from list_offerings view=templates
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
The organization's reusable gig checklist templates, each with its id and version (pass version to delete_checklist_template). Read-only; any org member. source="starter_packs" instead lists Soundcheck starter packs of gig task templates an org can add in one step with add_checklist_starter_pack: business packs (production, venue, DJ, band, produced event, general) and event packs (wedding, corporate, festival, tour, private party). Each pack lists its sections and tasks, whether the org already has it (added, template_id) and recommended_pack_id for the org business type; gig managers only.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
source
organization (default): the org's templates; starter_packs: Soundcheck packs
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
Align the title with the capability actually described by this tool.
Description91/100
Add a Soundcheck starter pack as a task template the org can edit and attach to gigs. pack_id comes from list_checklist_templates source=starter_packs. Adding a pack the org already has returns the existing template, so it is safe to retry. Event packs are tagged with the matching gig type when the org has one. Gig managers only.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Input documentation gives an agent enough context to populate the arguments.
pack_id
pack id from list_checklist_templates source=starter_packs, e.g. "wedding"
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Delete a checklist template. expected_version is the template version from list_checklist_templates; a stale version is rejected so a concurrent edit is never lost. Gigs that used it keep their checklists. Gig managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Input documentation gives an agent enough context to populate the arguments.
template_id
template id from list_checklist_templates
Clear enough to supply this argument.
expected_version
the version list_checklist_templates returned
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "delete_checklist_template",
"title": "Delete checklist template",
"description": "Delete a checklist template. expected_version is the template version from list_checklist_templates; a stale version is rejected so a concurrent edit is never lost. Gigs that used it keep their checklists. Gig managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"template_id",
"expected_version"
],
"properties": {
"template_id": {
"type": "string",
"description": "template id from list_checklist_templates"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"expected_version": {
"type": "integer",
"description": "the version list_checklist_templates returned"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Delete checklist template",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Forms the organization built in Soundcheck for client intake and questionnaires: id, title, purpose, active, status (draft or published). Pass include_inactive=true for retired forms. CRM managers only.
Describe the returned information so the agent knows whether it will answer the request.
Inputs67/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
purpose
only forms with this purpose
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
include_inactive
include deactivated forms
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Create a client form in Soundcheck, optionally from a starter template. Creates a draft unless publish is true. A published form can't be edited, and publishing needs at least one question, so a blank form starts as a draft. Publish a draft later with publish_form or in Settings > Forms. purpose is EVENT_QUESTIONNAIRE, GENERAL or FEEDBACK and defaults from the template. Form titles are unique within the organization, ignoring case and extra spaces and counting archived forms: a title you choose that is taken fails with 409, while a template or default title that is taken gets the next free number, such as "Wedding or private event (2)". CRM managers only.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
form title shown in Soundcheck; defaults from the template
Clear enough to supply this argument.
name
alias for title; when both are passed they must match
Clear enough to supply this argument.
purpose
what the form is for
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_key
starter template key, such as general_questionnaire, wedding_private_event or post_event_feedback
Clear enough to supply this argument.
publish
true creates the form already published, so it can be assigned right away; needs a template with questions
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
{
"name": "create_form",
"title": "Create form",
"description": "Create a client form in Soundcheck, optionally from a starter template. Creates a draft unless publish is true. A published form can't be edited, and publishing needs at least one question, so a blank form starts as a draft. Publish a draft later with publish_form or in Settings > Forms. purpose is EVENT_QUESTIONNAIRE, GENERAL or FEEDBACK and defaults from the template. Form titles are unique within the organization, ignoring case and extra spaces and counting archived forms: a title you choose that is taken fails with 409, while a template or default title that is taken gets the next free number, such as \"Wedding or private event (2)\". CRM managers only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"type": "string",
"description": "alias for title; when both are passed they must match"
},
"title": {
"type": "string",
"description": "form title shown in Soundcheck; defaults from the template"
},
"publish": {
"type": "boolean",
"description": "true creates the form already published, so it can be assigned right away; needs a template with questions"
},
"purpose": {
"enum": [
"EVENT_QUESTIONNAIRE",
"GENERAL",
"FEEDBACK"
],
"type": "string",
"description": "what the form is for"
},
"template_key": {
"type": "string",
"description": "starter template key, such as general_questionnaire, wedding_private_event or post_event_feedback"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create form",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Change a form: purpose or active (false retires it). Only fields you pass change. A form is renamed from its editor in Settings > Forms. CRM managers only.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs85/100
Explain the meaning of this value, not just its name.
form_id
form id from list_forms
Clear enough to supply this argument.
purpose
new purpose
Explain the meaning of this value, not just its name.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Delete a form with no submissions, or archive it when it has any. Prefer update_form with active=false to keep past submissions linked. CRM managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
form_id
form id from list_forms
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "delete_form",
"title": "Delete form",
"description": "Delete a form with no submissions, or archive it when it has any. Prefer update_form with active=false to keep past submissions linked. CRM managers only. Confirmation-gated when MCP_CONFIRMATION_SECRET is set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "string",
"description": "form id from list_forms"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Delete form",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Assign a published native form to a customer for one gig. customer_id and event_id are required, and the customer must be linked to that gig (each assignment is one form, one gig, one client). due_at is RFC3339. editable_until (YYYY-MM-DD, in the gig's time zone) is the last day the client may revise the answers; omit it or pass null to keep the answers revisable until the gig is over. notify_customer true queues a portal email when the form is active (confirmation-gated when MCP_CONFIRMATION_SECRET is set). The form must be published (use publish_form first). CRM managers only.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
form_id
form id from list_forms (must be published)
Clear enough to supply this argument.
customer_id
customer id to assign the form to
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
gig id the client is linked to
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
due_at
optional due date-time (RFC3339)
Explain what happens when this optional value is omitted.
editable_until
optional last day the client may revise (YYYY-MM-DD); omit or null to follow the gig
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
notify_customer
when true, email the customer portal login about the assignment
Clear enough to supply this argument.
required
when true, the assignment is marked required
Clear enough to supply this argument.
organization_id
defaults to your active organization
Clear enough to supply this argument.
confirmation_token
leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed
{
"name": "create_form_assignment",
"title": "Create form assignment",
"description": "Assign a published native form to a customer for one gig. customer_id and event_id are required, and the customer must be linked to that gig (each assignment is one form, one gig, one client). due_at is RFC3339. editable_until (YYYY-MM-DD, in the gig's time zone) is the last day the client may revise the answers; omit it or pass null to keep the answers revisable until the gig is over. notify_customer true queues a portal email when the form is active (confirmation-gated when MCP_CONFIRMATION_SECRET is set). The form must be published (use publish_form first). CRM managers only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_id",
"customer_id",
"event_id"
],
"properties": {
"due_at": {
"type": "string",
"description": "optional due date-time (RFC3339)"
},
"form_id": {
"type": "string",
"description": "form id from list_forms (must be published)"
},
"event_id": {
"type": "string",
"minLength": 1,
"description": "gig id the client is linked to"
},
"required": {
"type": "boolean",
"description": "when true, the assignment is marked required"
},
"customer_id": {
"type": "string",
"description": "customer id to assign the form to"
},
"editable_until": {
"anyOf": [
{
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
{
"type": "null"
}
],
"description": "optional last day the client may revise (YYYY-MM-DD); omit or null to follow the gig"
},
"notify_customer": {
"type": "boolean",
"description": "when true, email the customer portal login about the assignment"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
},
"confirmation_token": {
"type": "string",
"description": "leave empty on the first call; the server returns confirmation_required + a token, then resend the SAME args with that token to proceed"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create form assignment",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Publish a draft native form so clients can receive assignments and respond in the portal. Reads the draft and publishes it unchanged; edit questions in Settings > Forms first if needed. A published form is locked: its title and questions can't change, and publishing it again fails. CRM managers only.
The description explains the capability, when to use it, and what to expect.
Inputs84/100
Input documentation gives an agent enough context to populate the arguments.
{
"name": "publish_form",
"title": "Publish form",
"description": "Publish a draft native form so clients can receive assignments and respond in the portal. Reads the draft and publishes it unchanged; edit questions in Settings > Forms first if needed. A published form is locked: its title and questions can't change, and publishing it again fails. CRM managers only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "string",
"description": "form id from list_forms"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Publish form",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Build a URL that opens a page in the Soundcheck web app, so the user can see or finish something there. Use it to hand off: (1) visual review — a gig, its staffing board, finances, or a plan; (2) work this server does not do — sending a new contract (PDF upload), billing and payouts, integrations, email domains, branding, or deleting the organization. Share the returned url with the user as a link. Targets: event = one gig (event_id); events = the gigs list; event_plan = one gig plan (plan_id); venue = one venue; venues = the venues list; customer = one customer; customers = the customers list; person = one person (user_id); people = the crew / people list; setlist = one setlist; run_of_show = one run-of-show template; import = one import job; availability = availability; crew_offers = crew offers board; crew_members = crew (non-staff) members and their removal; opens the Crew workspace when the org has it, otherwise the full member roster; leads = the leads pipeline; sponsors = sponsors; inventory = inventory; offerings = the offering catalog; finances = org finances; inbox = the org mailbox; org_members = org staff and members, roles, and removal (staff only when the org has the Crew workspace; use crew_members for crew); org_positions = org crew positions; org_billing = plan and billing; org_payments = payout and payment settings; org_integrations = integrations (connect / disconnect); org_email = email sending domains; org_profile = organization name, logo, timezone, public profile, and deletion. Read-only; no data is fetched, so pass ids you already have.
The description explains the capability, when to use it, and what to expect.
Inputs67/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
target
which page to open
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
id
record id for the single-record targets (event, event_plan, venue, …)
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
tab
event target only: open this tab of the gig page
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"title": "Get a Soundcheck web link",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
Output schema53/100
Describe the returned fields so an agent can interpret the result.
{
"name": "get_soundcheck_link",
"title": "Get a Soundcheck web link",
"description": "Build a URL that opens a page in the Soundcheck web app, so the user can see or finish something there. Use it to hand off: (1) visual review — a gig, its staffing board, finances, or a plan; (2) work this server does not do — sending a new contract (PDF upload), billing and payouts, integrations, email domains, branding, or deleting the organization. Share the returned url with the user as a link. Targets: event = one gig (event_id); events = the gigs list; event_plan = one gig plan (plan_id); venue = one venue; venues = the venues list; customer = one customer; customers = the customers list; person = one person (user_id); people = the crew / people list; setlist = one setlist; run_of_show = one run-of-show template; import = one import job; availability = availability; crew_offers = crew offers board; crew_members = crew (non-staff) members and their removal; opens the Crew workspace when the org has it, otherwise the full member roster; leads = the leads pipeline; sponsors = sponsors; inventory = inventory; offerings = the offering catalog; finances = org finances; inbox = the org mailbox; org_members = org staff and members, roles, and removal (staff only when the org has the Crew workspace; use crew_members for crew); org_positions = org crew positions; org_billing = plan and billing; org_payments = payout and payment settings; org_integrations = integrations (connect / disconnect); org_email = email sending domains; org_profile = organization name, logo, timezone, public profile, and deletion. Read-only; no data is fetched, so pass ids you already have.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"target"
],
"properties": {
"id": {
"type": "string",
"description": "record id for the single-record targets (event, event_plan, venue, …)"
},
"tab": {
"enum": [
"details",
"staffing",
"checklist",
"finances",
"venue",
"clients",
"files",
"activity",
"closeout",
"chats"
],
"type": "string",
"description": "event target only: open this tab of the gig page"
},
"target": {
"enum": [
"event",
"events",
"event_plan",
"venue",
"venues",
"customer",
"customers",
"person",
"people",
"setlist",
"run_of_show",
"import",
"availability",
"crew_offers",
"crew_members",
"leads",
"sponsors",
"inventory",
"offerings",
"finances",
"inbox",
"org_members",
"org_positions",
"org_billing",
"org_payments",
"org_integrations",
"org_email",
"org_profile"
],
"type": "string",
"description": "which page to open"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get a Soundcheck web link",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Search the Soundcheck help docs (docs.soundchecklive.io) for how the product works: features, workflows, settings, terminology (gig vs event, crew offer vs shift), and what each MCP tool does. Use it before guessing how a feature behaves or when the user asks "how do I…". Returns [{title, url, content}] — cite the url when you answer. Docs describe the product, not this organization’s data; use the other tools for facts about gigs, crew, or money. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
what you want to know, in plain language (e.g. "how do crew offers work")
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "search_soundcheck_docs",
"title": "Search Soundcheck docs",
"description": "Search the Soundcheck help docs (docs.soundchecklive.io) for how the product works: features, workflows, settings, terminology (gig vs event, crew offer vs shift), and what each MCP tool does. Use it before guessing how a feature behaves or when the user asks \"how do I…\". Returns [{title, url, content}] — cite the url when you answer. Docs describe the product, not this organization’s data; use the other tools for facts about gigs, crew, or money. Read-only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 500,
"description": "what you want to know, in plain language (e.g. \"how do crew offers work\")"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Search Soundcheck docs",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Send feedback to the people who build this product (not the user's organization, crew, or clients). It carries bug reports, feature suggestions, support questions, and praise, plus problems with these tools that the user agreed to report, and contains only what the user asked or agreed to send. It creates a Linear issue for the product team (email fallback if Linear is unavailable); it does not message anyone in the user's organization (the messaging tools do that). The team replies to the user's account email when there is something to answer.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
category
IDEA = feature request or suggestion, PROBLEM = bug or something confusing, QUESTION = ask Soundcheck support, PRAISE = something that works well
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
message
the feedback in the user's own words, with enough detail to act on: what they tried, what happened, and what they expected
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization; included so the team has context
{
"name": "send_feedback",
"title": "Send feedback to Soundcheck",
"description": "Send feedback to the people who build this product (not the user's organization, crew, or clients). It carries bug reports, feature suggestions, support questions, and praise, plus problems with these tools that the user agreed to report, and contains only what the user asked or agreed to send. It creates a Linear issue for the product team (email fallback if Linear is unavailable); it does not message anyone in the user's organization (the messaging tools do that). The team replies to the user's account email when there is something to answer.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"category",
"message"
],
"properties": {
"message": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "the feedback in the user's own words, with enough detail to act on: what they tried, what happened, and what they expected"
},
"category": {
"enum": [
"IDEA",
"PROBLEM",
"QUESTION",
"PRAISE"
],
"type": "string",
"description": "IDEA = feature request or suggestion, PROBLEM = bug or something confusing, QUESTION = ask Soundcheck support, PRAISE = something that works well"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization; included so the team has context"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Send feedback to Soundcheck",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Open the Gigs view: the caller's upcoming gigs (nearest first, including today) in their active organization, or across their organizations when none is active. Clients that support MCP Apps render a list where selecting a gig opens its detail in place, with Ask about this gig and a link to the gig in the Soundcheck web app (the view also follows deep links to /gigs/{event_id}); other clients get the same list as text with event ids. Takes no arguments. Use open_gig for one gig's detail view. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"name": "open_gigs",
"title": "Gigs",
"description": "Open the Gigs view: the caller's upcoming gigs (nearest first, including today) in their active organization, or across their organizations when none is active. Clients that support MCP Apps render a list where selecting a gig opens its detail in place, with Ask about this gig and a link to the gig in the Soundcheck web app (the view also follows deep links to /gigs/{event_id}); other clients get the same list as text with event ids. Takes no arguments. Use open_gig for one gig's detail view. Read-only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Gigs",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Composer @-mention search for ChatGPT: returns the caller's upcoming gigs whose title, venue, or date match every word of query (empty query returns the nearest gigs) as resource links to soundcheck://gig/{event_id}, a short text summary of the gig. Called by the host's mention picker, not by agents; use list_events or open_gigs instead. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
typeahead text; may be empty
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Find a gig to mention",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema64/100
Describe the returned fields so an agent can interpret the result.
Name the specific action and subject instead of using a generic label such as ‘manage’ or ‘tool’.
Description95/100
Open one gig in the Gig view: title, status, date and time in the gig's timezone, venue and load-in notes, client contact, gig leads, crew with positions and offer status, and the run of show or schedule. Money (invoices, expenses, payouts) is included only when the caller has finance access on the gig. Clients that support MCP Apps render a detail page with Ask about this gig and Open in Soundcheck; other clients get the same summary as text. Takes { event_id } from open_gigs, list_events or my_agenda. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
event_id
the gig (event) id
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
{
"name": "open_gig",
"title": "Gig",
"description": "Open one gig in the Gig view: title, status, date and time in the gig's timezone, venue and load-in notes, client contact, gig leads, crew with positions and offer status, and the run of show or schedule. Money (invoices, expenses, payouts) is included only when the caller has finance access on the gig. Clients that support MCP Apps render a detail page with Ask about this gig and Open in Soundcheck; other clients get the same summary as text. Takes { event_id } from open_gigs, list_events or my_agenda. Read-only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"event_id"
],
"properties": {
"event_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "the gig (event) id"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Gig",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
List the third-party tools this organization has connected to Soundcheck (QuickBooks, HubSpot, Flex, Google Drive, Dropbox, Slack), whether each one is connected, and the read-only resources and filters read_integration_data accepts for each. Call it before read_integration_data. Org admins and owners only. organization_id defaults to your active organization.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Read live data from one of the organization's connected integrations, for example open QuickBooks invoices, HubSpot deals, Flex inventory, files in a Google Drive folder, or messages in a gig's Slack channel. Read-only: it never changes anything in the other tool. Use list_org_integrations first to see what is connected and which resources and filters exist; unknown filters are rejected. Rows come back normalized, with a url to open the record in the other tool when there is one. Pass next_cursor back as cursor for the next page. Org admins and owners only. organization_id defaults to your active organization.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
organization_id
defaults to your active organization
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
provider
which integration to read from
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
resource
resource name from list_org_integrations, e.g. invoices, deals, files, messages
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters
filters for this resource, keyed by the filter names list_org_integrations returns; dates are YYYY-MM-DD
Clear enough to supply this argument.
limit
rows per page, default 25
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
next_cursor from the previous page
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"title": "Read data from a connected integration",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
Output schema66/100
Describe the returned fields so an agent can interpret the result.
{
"name": "read_integration_data",
"title": "Read data from a connected integration",
"description": "Read live data from one of the organization's connected integrations, for example open QuickBooks invoices, HubSpot deals, Flex inventory, files in a Google Drive folder, or messages in a gig's Slack channel. Read-only: it never changes anything in the other tool. Use list_org_integrations first to see what is connected and which resources and filters exist; unknown filters are rejected. Rows come back normalized, with a url to open the record in the other tool when there is one. Pass next_cursor back as cursor for the next page. Org admins and owners only. organization_id defaults to your active organization.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"provider",
"resource"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "rows per page, default 25"
},
"cursor": {
"type": "string",
"description": "next_cursor from the previous page"
},
"filters": {
"type": "object",
"description": "filters for this resource, keyed by the filter names list_org_integrations returns; dates are YYYY-MM-DD",
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
},
"provider": {
"enum": [
"quickbooks",
"hubspot",
"flex",
"google_drive",
"dropbox",
"slack"
],
"type": "string",
"description": "which integration to read from"
},
"resource": {
"type": "string",
"minLength": 1,
"description": "resource name from list_org_integrations, e.g. invoices, deals, files, messages"
},
"organization_id": {
"type": "string",
"description": "defaults to your active organization"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ok"
],
"properties": {
"ok": {
"type": "boolean",
"description": "true on success (including confirmation_required prompts)"
},
"data": {
"description": "tool payload (API/composite/confirmation object); object, array, or primitive JSON"
},
"error": {
"type": "string",
"description": "when ok is false"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Read data from a connected integration",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "reject_confirmation",
"title": "Reject confirmation",
"description": "Used by the Soundcheck approval card when the user clicks Reject: voids the confirmation_token so it can never be used. Not for agents.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tool",
"confirmation_token"
],
"properties": {
"tool": {
"type": "string",
"minLength": 1,
"description": "the confirmation-gated tool whose approval the user rejected"
},
"organization_id": {
"type": "string",
"description": "the organization_id argument of the original call, when it had one"
},
"confirmation_token": {
"type": "string",
"minLength": 1,
"description": "the confirmation_token the user rejected"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Reject confirmation",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Search Soundcheck docsSearch the Soundcheck help docs (docs.soundchecklive.io) for how the product works: features, workflows, settings, terminology (gig vs event, crew offer vs s…
02Get my agendaList the authenticated user's events across all their organizations (defaults to ACTIVE).
03List customersList customers (clients/contacts) for an organization.
04List projectsList your organization's projects (tours, festivals, residencies, runs of gigs): id, name, status, dates, client and gig counts.
05Get organization briefLoad a compact, one-call snapshot of an organization to ground org-wide work: the org profile, its crew positions, its venues, its ACTIVE events ordered near…
Want to run these tasks against your MCP server with us?
Soundcheck — Live Event Staffing setup, tools, quality score, publishing readiness, and alternatives.
How do I add Soundcheck — Live Event Staffing to Claude, ChatGPT, or Cursor?
Add Soundcheck — Live Event Staffing to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.soundchecklive.io/mcp.
Is Soundcheck — Live Event Staffing MCP ready for ChatGPT and Claude?
As of October 18, 2026, Soundcheck — Live Event Staffing scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Soundcheck — Live Event Staffing's MCP tool documentation?
As of October 18, 2026, Soundcheck — Live Event Staffing scores 84/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 253 of 253 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Soundcheck — Live Event Staffing?
As of October 20, 2026, alternatives to Soundcheck — Live Event Staffing in productivity on the Manufact MCP leaderboard include Autodesk Product Help, BoardWise, FlagStat, Keenable Web Search, and PomoDial.
How can Soundcheck — Live Event Staffing improve its MCP documentation?
list_event_links is the lowest-scoring reviewed tool at 66/100. Describe the returned fields so an agent can interpret the result. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.