Tool Reference
All 24 Swarmtix MCP tools, what each one does, the scope it needs, and whether it reads or writes
Tool Reference
The Swarmtix MCP server exposes 24 tools: 17 that read your data and 7 that make safe changes. This page is the index — every tool, the permission it needs, whether it only looks or also writes, and a link to its own page.
Quick Start
You do not call these by name. Ask your assistant for what you want and it picks the tool:
How did ticket sales go for spring-summit-2026?Add a $45 early-bird ticket to the spring showcase, capped at 100.To see exactly which tools your connection holds, ask your client to list them — Claude Code shows them under /mcp, VS Code in the tool picker, and a raw client gets them from tools/list. Each entry carries its own JSON Schema, so the exact parameter names and types always come from the live server rather than from a page that can drift.
You only see the tools your approved scopes cover. A missing tool almost always means a missing scope, not a broken server. See Authentication and Scopes.
Reads
Seventeen tools. None of them change anything. All are marked read-only, non-destructive and idempotent, so a client is free to retry one safely.
The order and attendee tools return your buyers' names and email addresses. They never return a ticket's barcode or security code — that is the credential that admits someone to an event, and no tool produces one.
| Tool | What it does | Scope |
|---|---|---|
swarmtix_whoami | Returns the organisation and organizer account this connection acts for, and the scopes it holds | profile |
swarmtix_events_list | Lists the events this connection can see, alphabetically, with paging | events:read |
swarmtix_events_get | Returns one event's full detail, by id or URL slug | events:read |
swarmtix_event_dates_list | Lists an event's scheduled dates and their ids | events:read |
swarmtix_ticket_types_list | Lists an event's ticket types with price, quantity and remaining availability | events:read |
swarmtix_checkout_questions_list | Lists the custom questions buyers answer at checkout | events:read |
swarmtix_orders_list | Lists the orders placed for an event, newest first, with paging | orders:read |
swarmtix_orders_get | Returns one order and a line for each ticket in it | orders:read |
swarmtix_tickets_summary | Returns on-sale, sold and checked-in counts for one scheduled date | orders:read |
swarmtix_attendees_list | Lists an event's individual ticket holders, with paging | attendees:read |
swarmtix_attendees_search | Finds the tickets one buyer holds for an event, by email address | attendees:read |
swarmtix_analytics_event | Returns one event's sales and traffic figures — totals only, no names | analytics:read |
swarmtix_analytics_summary | Rolls up events, tickets sold and orders across the organisation | analytics:read |
swarmtix_discounts_list | Lists the active discount offers created by this organizer account on an event | discounts:read |
swarmtix_discounts_check_code | Checks whether a discount code would be accepted for an event, and why not | discounts:read |
swarmtix_teams_list | Lists the teams in this organisation that the authorizing organizer belongs to | organization:read |
swarmtix_venues_list | Lists the saved venue seating layouts belonging to the authorizing organizer account | organization:read |
Safe Writes
Seven tools. Each one creates or edits something, and none of them can publish, delete, charge, refund or send.
The Repeatable column says whether calling the tool twice with the same arguments leaves you in the same place. Yes means a retry is safe. No means a second call creates a second thing — a duplicate draft event, a duplicate ticket type — so a client should not retry blindly.
| Tool | What it does | Scope | Repeatable |
|---|---|---|---|
swarmtix_events_create | Creates a new event as an unpublished draft | events:write | No |
swarmtix_events_duplicate | Copies an existing event's setup into a new unpublished draft | events:write | No |
swarmtix_event_dates_set | Replaces the dates an event runs on | events:write | Yes |
swarmtix_ticket_types_create | Adds a ticket type to an event | events:write | No |
swarmtix_ticket_types_update | Changes an existing ticket type | events:write | Yes |
swarmtix_checkout_questions_create | Adds a custom checkout question to an event | events:write | No |
swarmtix_discounts_create | Creates a discount code on an event | discounts:write | No |
Every event created through MCP is a draft. Making an event public is not something any tool in this catalog can do — you publish from the dashboard, after you have looked at what was built.
Editing an existing event's own details — its name, description, venue, host or branding — is not available through MCP yet. You can create a draft, duplicate an event, set its schedule, and build its ticket types, checkout questions and discounts; the event record itself is edited in the dashboard.
Not Tools, But Next to Them
Two of these tools have a second way in, and four ready-made requests are built on top of the catalog.
- Resources —
swarmtix://events/{idOrSlug}andswarmtix://events/{idOrSlug}/analyticsreturn exactly whatswarmtix_events_getandswarmtix_analytics_eventreturn, addressed by URI so an assistant can attach an event as context instead of spending a call. Same scopes, same ownership check. They are listed byresources/templates/list, notresources/list. - Prompts — four workflow requests covering a readiness check, a sales review, an orders-against-attendees reconciliation and a post-event write-up. Each is offered only when every scope its work touches was granted.
What Is Not Here
There is no tool for refunds or charges, publishing or unpublishing, check-in or barcode scanning, bulk attendee email, guest-list import, deleting anything, closing an account, changing a subscription, injecting tracking scripts, or registering a webhook.
These are absent by design, not pending. The reasoning is on the overview page. The short version: the catalog stays honestly labelled — no tool mixes a safe operation with a dangerous one — and the worst case of a misread instruction stays "a draft was edited".
How the Tools Behave
Naming
Every tool is swarmtix_<resource>_<action>. The prefix is redundant inside a server that is already namespaced, but some clients flatten tool names into a single list, and there the prefix is what keeps events_list from colliding with another connector's.
Each tool's page on this site drops the prefix and swaps underscores for dashes, so swarmtix_events_list is documented at /docs/mcp/tools/events-list.
Identifiers
Where something has a human-readable identifier, tools accept it. Events have a URL slug, so spring-summit-2026 works anywhere an event id works. You do not have to look up an id to ask a question about an event you can name.
Everything else is addressed by the id a read tool gave you. Scheduled dates come from swarmtix_event_dates_list, ticket types from swarmtix_ticket_types_list, orders from swarmtix_orders_list.
Paging
Every list tool pages, and every one of them spells it the same way: limit for the page size, cursor for where to resume. The default page size is 50 and the maximum is 200.
Asking for more than 200 is refused rather than quietly reduced:
limit is not valid: it was 500. Expected a whole number from 1 to 200, or nothing for 50.Silently returning 200 rows to a caller who asked for 5,000 looks exactly like the list ending.
Paging is cursor-based, not offset-based. A page that does not cover everything ends with a continuation line naming the cursor for the next call:
Showing 50 of 1284. Call again with cursor "NGUxYzhhOTMtNzdmMi00YjVkLTljMDYtMmE4ZTVkMWYzYjc0" for the rest.The line sits after the JSON, separated by a blank line. Pass the quoted string back as cursor on the next call and you get the rows after it.
Offsets were not an option: ticket sales insert rows while you are reading, so "rows 51 to 100" means something different each time you ask, and records get skipped or repeated. A cursor names a row, so it does not drift.
You never need to construct or interpret a cursor. It is opaque; pass back exactly what you were given. One tool, swarmtix_attendees_search, uses a positional cursor instead, because the data it reads carries no stable key — its page explains the difference and when it matters.
A partial page is a success, not an error. A result carrying a continuation line is a normal result with no error flag on it. Treating paging as a failure mode would teach an assistant to stop asking.
Response size
A single tool result is capped at 60,000 characters. That is roughly a quarter of the 25,000-token ceiling Claude Code puts on a tool response, which leaves room for the client's own framing around it.
The cap applies to the JSON only. The continuation line is appended afterwards, so a full page plus its line can never push past it.
Truncation is never silent, and the two cases read differently:
- A list is shortened. Fewer rows come back than the
limitasked for, the continuation line says how many were sent, and the cursor points at the last row that actually made it into the result rather than at the one the tool intended to send. - A single record that will not fit is cut and labelled. The notice is prose rather than another JSON field, because a record cut at 60,000 characters no longer parses and the reason has to survive that:
-- Truncated. This record is 74210 characters and the response budget is 60000, so the last 14210 characters of the JSON above were cut and it will not parse. Open the record in the Swarmtix dashboard for the full version.A silent cut-off is worse than a stated one, because an assistant that does not know it is looking at part of the data will answer confidently from the part it has.
Errors
When a tool cannot do what was asked, it says why in a sentence — which argument was wrong, what it expected, what to try instead. Not a numeric code and not a stack trace. Every message opens with a stable phrase, so both you and your assistant can recognise the case:
| What happened | What you see |
|---|---|
| The event does not exist, or is not yours | Event not found, or this connection does not have access to it. |
| The order does not exist on that event | Order not found, or this connection does not have access to it. |
| The connection lacks the scope | This connection is not authorized for <scope>. Reconnect and grant it to use this tool. |
| The tool is not one this connection may call | This connection cannot use the tool <name>. List the available tools to see what it is authorized for. |
| An argument was wrong | <param> is not valid: <reason>. Expected <expectation>. |
| The token carries no organisation | This connection is not carrying a Swarmtix organizer and organisation. Reconnect to Swarmtix and authorize again. |
| You are being rate limited | Rate limit reached. Retry in <n> seconds. |
| Something failed on our side | Swarmtix could not complete this request. Nothing was changed. |
| A write got part way and stopped | Swarmtix applied part of this request and then stopped. Applied: <what>. Not applied: <what>. Check the current state before trying again. |
An event belonging to another organisation returns the same message as an event that does not exist. That is deliberate. A distinguishable "you do not have access" error would confirm the record exists, which is itself a fact about another organisation's data. Orders work the same way.
The last two rows are the ones worth reading twice. Swarmtix could not complete this request. Nothing was changed. promises a clean slate, so a retry is safe. Swarmtix applied part of this request and then stopped. promises the opposite, and it names what landed so you can look before trying again. Only swarmtix_event_dates_set can produce it.
Two write refusals have wording of their own rather than the shapes above, because neither is an argument problem:
swarmtix_ticket_types_updaterefuses a price change once tickets of that type have sold.- The creating tools refuse to report an event as a draft if the stored row says otherwise.
Both pages quote the exact sentence.
Rate limits
60 requests per minute per organisation, on a sliding window, counted across every credential that organisation has — two assistants and a Zapier integration share one budget, they do not each get their own.
Going over returns 429 with Retry-After in seconds, and the tool message Rate limit reached. Retry in <n> seconds. The number in the sentence is the same integer as the header. Most clients wait and retry without being told.
This limit is separate from, and on top of, the site-wide per-IP limit that applies to all Swarmtix traffic. Staying under one does not exempt you from the other.
Annotations
Every tool declares all four MCP annotations explicitly, so your client can show you accurate warnings before it runs anything:
| Annotation | Reads | Writes |
|---|---|---|
readOnlyHint | true | false |
destructiveHint | false | false |
idempotentHint | true | per the Repeatable column above |
openWorldHint | false | false |
openWorldHint is false across the board: every tool works against Swarmtix data only, and none reaches out to a third-party service.
Troubleshooting
"This connection is not authorized for analytics:read. Reconnect and grant it to use this tool."
The message names the scope the tool needs. Find that tool in the tables above to confirm, then revoke the connection and authorize it again with that permission approved.
The assistant says a tool does not exist, and there is no error at all
Same underlying cause, but silent. A tool your connection has no scope for is removed from the list rather than refused on call, so there is nothing for the assistant to report — it simply cannot see the capability. Look the tool up in the tables above and re-authorize with its scope.
"This connection cannot use the tool swarmtix_events_update. List the available tools to see what it is authorized for."
The name does not exist in this catalog. Editing an existing event's own details is not available through MCP yet — see the note under Safe Writes. Ask your client to list the tools rather than guessing a name.
"Event not found, or this connection does not have access to it."
Either the event does not exist, it belongs to a different organisation than this connection covers, or it belongs to a team the authorizing organizer is not on. Every tool verifies ownership before doing anything else, and every one of those cases returns this same sentence on purpose — see the note under Errors.
If the event is sitting in your dashboard, check which organisation the connection was granted, in Settings → Developers → Connections, and which account authorized it.
"Showing 50 of 1284. Call again with cursor … for the rest."
Nothing is wrong. The list was longer than one page, and the result is telling your assistant how to fetch the next 50. Ask it to continue, or narrow the request — one event rather than all of them, one date rather than every date.
Raising the page size helps up to a point: 200 is the maximum, and a result is still capped at 60,000 characters regardless.
"cursor is not valid: it was not issued by this server."
The cursor was made up, edited, or taken from a different tool. Drop it and start the list again from the beginning.
A different sentence — cursor is not valid: the <thing> it points at is no longer in this list. — means the cursor was genuine but the row it named has gone, usually because a filter changed between the two calls or the row was refunded or deactivated. Resuming from the top would silently repeat rows you already have, so the tool refuses instead. Start the list again.
"limit is not valid: it was 500. Expected a whole number from 1 to 200, or nothing for 50."
An argument was out of range or the wrong shape. The message names the parameter, what was wrong with it, and what the tool expected. Assistants usually correct this and retry on their own.
"Rate limit reached. Retry in 24 seconds."
Your organisation went past 60 requests a minute, counted across all its credentials. Wait the number of seconds given. Most clients do this without help. If it keeps happening, something is polling in a loop — check Settings → Developers → Usage to see which tool.
"Swarmtix could not complete this request. Nothing was changed."
A failure on our side. The second sentence is the useful one: nothing partly applied, so a retry will not leave you with a duplicate. If it persists, contact support with the time, so the call can be found in Settings → Developers → Logs.
A write succeeded but nothing is public
That is the expected outcome. Created events are drafts. Open the event in the dashboard, check it, and publish it yourself.