Connect Claude, ChatGPT, Cursor or your own code to Swarmtix, and your assistant answers from your real numbers instead of guessing. Ask it for next year's conference and it builds the draft from this year's. Setup takes about five minutes, and there is no API key to generate.
$ claude mcp add --transport http \
swarmtix https://swarmtix.com/mcp/v1
✓ Added server "swarmtix"
✓ Browser opened, consent approved
✓ Tools loaded for the permissions you granted
> how did DevConf Berlin sell this year?
Calling swarmtix_analytics_event...
Calling swarmtix_tickets_summary...
What the connection gives you
24
Tools
9
Permissions You Approve
5
Protocol Revisions
0
API Keys to Manage
Real asks, phrased the way you would say them. The tools underneath are named so you can see exactly what the assistant reaches for.
Before
Open the dashboard, pick the event, open Analytics, open Tickets, copy both into a spreadsheet to compare.
After
“How is DevConf Berlin selling? Break it down by ticket type.”
Revenue, tickets sold against capacity, refunds, page visits and the daily sales curve — in one answer.
swarmtix_analytics_event · swarmtix_tickets_summary · swarmtix_ticket_types_list
Before
Search the attendee list, cross-check the order, work out whether the promo code applied, then reply.
After
“Did the buyer on this email get their ticket for Friday?”
Their tickets, the type and price, the order it came from, and whether it has been scanned. Never the barcode.
swarmtix_attendees_search · swarmtix_orders_get
Before
Retype six ticket tiers, three dates and five checkout questions into a form, from a brief you already wrote.
After
“Copy last year's conference and move it to March.”
A new draft with the same branding and setup, new dates, new tiers. You review it, then publish it yourself.
swarmtix_events_duplicate · swarmtix_event_dates_set · swarmtix_ticket_types_create
Before
Open the discounts screen, find the offer, read the dates and the usage count, work out whether it still applies.
After
“Is EARLYBIRD still valid for the workshop, and what does it take off?”
Whether it would be accepted right now, which offer it belongs to, and the exact reduction.
swarmtix_discounts_check_code · swarmtix_discounts_list
"How is early bird doing against last year?" means four screens and a spreadsheet. Your assistant could answer it in one line, if it could see the numbers.
Six ticket tiers, three dates, a promo code and five checkout questions. All of it already exists in the brief you wrote. You retype it into a form.
A key is a bearer credential. Whoever holds a copy is you, with every permission you have, until someone notices. Most platforms hand you one and wish you luck.
The reason not to connect an assistant is usually the same one: one misread instruction and it refunds an order or emails four thousand people.
24 tools: 17 that read, 7 that write safely. No refunds, no publishing, no check-in, no bulk email, no deletes. Scoped by OAuth, revocable in one click, and every created event lands as a draft.
Pick your client. Each block is complete on its own — you do not need to read the others, and you do not need an account on anything but Swarmtix.
https://swarmtix.com/mcp/v1
With the /v1 on the end. The page you are reading is /mcp, and it is for people.
https://swarmtix.com/mcp/v1
https://swarmtix.com/mcp/v1
Run this in your project:
claude mcp add --transport http swarmtix https://swarmtix.com/mcp/v1
Add --scope user to get it in every project rather than just this one. Then run /mcp inside Claude Code, pick swarmtix, and authenticate.
Create .vscode/mcp.json in your workspace, or put the same block in your user configuration to get it everywhere:
{
"servers": {
"swarmtix": {
"type": "http",
"url": "https://swarmtix.com/mcp/v1"
}
}
}
Reload the window, start the server from the MCP view, and sign in when the browser opens.
Create .cursor/mcp.json in your project, or ~/.cursor/mcp.json for every project:
{
"mcpServers": {
"swarmtix": {
"url": "https://swarmtix.com/mcp/v1"
}
}
}
Then open Settings → MCP and sign in.
JSON-RPC 2.0 over Streamable HTTP. Every call is a POST to the same URL. Authorize with the standard OAuth 2.1 authorization code flow and PKCE — an unauthenticated call answers with a 401 naming the metadata document that tells you where to go next.
curl -X POST https://swarmtix.com/mcp/v1 \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: tools/list" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
You do not choose a session mode. A client that opens with initialize gets a session; a 2026-07-28 client is served statelessly. Same endpoint, both work. The full endpoint list, headers and a worked discovery example are on the reference for agents.
Whichever client you used, the last step is the same. Nothing is copied, pasted or stored.
A real Swarmtix page, at the top level of your browser and never inside the assistant. Sign in as you normally would.
One connection covers one organisation. If you run several, add the server once per organisation and name each connection.
Written in plain English, not scope names. Leave out anything you do not want the assistant to have — those tools then never appear in its list at all.
Nothing is generated, nothing is copied into a config file, and nothing sits in a password manager going stale. Authorization is OAuth 2.1 with PKCE: the assistant gets a token scoped to one organisation and the permissions you ticked, and you can end it at any time. The older 90-day API token used by Zapier and the REST API is unaffected and keeps working.
Grouped by the permission you approve on the consent page. Approve none of them and the tools do not appear in the list at all.
List and read your events by ID or URL slug, including dates, ticket types, prices, remaining stock and checkout questions.
events:readevents:writeCreate an event from a description, duplicate last year's, set multi-day dates, add ticket tiers and checkout questions. It always lands as a draft.
events:writeTicket counts on sale, sold and checked in, sales and traffic analytics for one event, and revenue rolled up across the whole organisation.
analytics:readorders:readRead orders and the tickets in them, list attendees, and find someone's tickets by email. This is buyer personal data, and the consent page says so in those words.
orders:readattendees:readList promo codes and offers, check whether a code is valid for an event and what it takes off, and create a new one. It cannot delete or disable an existing code.
discounts:readdiscounts:writeYour teams and your saved venues and seat maps. Not billing, not payouts, not account settings. No permission covers those.
organization:readprofileThese are not gaps we intend to close. The worst outcome of a misread instruction should be that a draft event got edited.
Refunds and charges
Moves real money.
Publishing an event
Going public stays your click.
Check-in and barcode scanning
The product has no undo for it.
Bulk attendee email
Nothing recalls a send.
Guest-list import
Creates orders and emails tickets in one step.
Any delete
Nothing in the catalog removes a record.
Returning ticket barcodes
They are the credential for admission.
Registering a webhook
Pointing order data at a URL stays a human action.
The middle column is the exact sentence you will see on the consent page. Nothing here is a paraphrase of it.
| Permission | What the consent page says | What that covers |
|---|---|---|
| profile | Read your name and email address. | Who you are and which organisation this connection covers. Every connection includes it. |
| events:read | Read your events, event dates and ticket types. | Events, dates, ticket types, prices, remaining inventory and checkout questions. Not who bought anything. |
| events:write | Create and update your events, event dates and ticket types. New events are always created as drafts. | Create an event, duplicate one, set its dates, add and change ticket types, add a checkout question. Cannot publish and cannot delete. |
| orders:read | Read your orders and attendee lists, including ticket buyers' names and email addresses. | Personal data. Order buyer first name, last name and email address; ticket attendee first and last name. Plus ticket counts on sale, sold and checked in. |
| attendees:read | Read your orders and attendee lists, including ticket buyers' names and email addresses. | Personal data. Attendee lists and lookup by email address. Cannot email anyone and cannot check anyone in. |
| analytics:read | Read sales and attendance figures for your events. | Sales and revenue analytics per event, and a roll-up across the organisation. Totals only, no names. |
| discounts:read | Read your discount codes and promotions. | Promo codes and discount offers, and whether a given code is currently valid for an event. |
| discounts:write | Create and update discount codes and promotions. | Creates a new code. It cannot delete or disable an existing one. |
| organization:read | Read your organization's teams and venues. | Your teams and saved venue layouts. Not billing, payouts or account settings — no permission covers those. |
Orders and attendees share one sentence on the consent page on purpose: they describe the same access to the same personal data, and printing two softer lines instead of one clear one would understate it.
Go to Settings → Developers → Connections and revoke the connection.
It takes effect immediately, on that connection's very next call — not whenever its token happens to expire. Every access token is checked against our store on every request, which is the whole reason it works that way. A "Revoke" button that leaves an assistant working for another hour is a lie, so we do not have one.
Revoking ends that assistant's access to Swarmtix. Anything it already told you stays in your chat history, which is between you and the assistant.
The client says it cannot connect, or nothing happens after you paste the URL
Check the URL is https://swarmtix.com/mcp/v1, including the /v1. Pasting /mcp points your assistant at this marketing page, which is not a protocol endpoint. This is by far the most common cause.
The assistant says a tool is missing, or cannot find one you expected
You did not approve that permission. Tools you did not grant are hidden from the assistant entirely rather than shown and then refused — otherwise it would keep retrying something it can never do. Reconnect and tick the permission you need. If a client held on to an older tool list, the call comes back with "This connection is not authorized for <permission>. Reconnect and grant it to use this tool."
"Event not found, or this connection does not have access to it."
Either the event does not exist, or it belongs to a different organisation. Both cases give the same sentence on purpose, so nobody can use the error to work out which organisation owns what. One connection covers one organisation — if you run several, add the server again and pick the other one.
"Rate limit reached. Retry in N seconds."
You went over 60 requests in a minute for that organisation, counted across every connection you have made for it. Wait the number of seconds it names and it resumes. An assistant working through a long attendee list is the usual cause.
Still stuck? Email [email protected], or read the full documentation for depth on any of this.
You pay the same per-ticket fee whether you use the dashboard, the REST API or an assistant. There is no developer tier and no per-call charge.
per paid ticket sold
Add one URL, approve one consent screen. No key to generate, nothing to store.
No credit card. $0.99 + 1.5% per paid ticket. Free events are always free.
Building against it? See the reference for agents and the documentation.