Swarmtix MCP Server
- Server URL
- https://swarmtix.com/mcp/v1
- Protocol
- 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05
- Auth
- OAuth 2.1 authorization code with PKCE (S256). No API key.
- Transport
- Streamable HTTP, JSON-RPC 2.0. One endpoint for stateful and stateless clients.
- Tools
- 24 — 17 read, 7 write. No refunds, publishing, check-in, bulk email or deletes.
- Tenancy
- One token, one organisation. The organisation comes from the token, never from a parameter.
This page is the dense version of /mcp, written to be read by a program. Prose documentation is at /docs/mcp/.
Connect
Each block below is complete on its own. Take the one for your client; you do not need to read the others. Every path ends the same way: a browser opens a Swarmtix consent page, you approve, and the tools appear.
Claude (web and desktop)
Settings → Connectors → Add custom connector. Paste this URL, click Add, then Connect.
https://swarmtix.com/mcp/v1
ChatGPT
Settings → Connectors → create a connector. Paste this URL, choose OAuth, leave any API key field empty, then Connect. ChatGPT's redirect URIs are allowed explicitly, so nothing needs registering first.
https://swarmtix.com/mcp/v1
Claude Code
claude mcp add --transport http swarmtix https://swarmtix.com/mcp/v1
Add --scope user for every project rather than the current one. Then run /mcp inside Claude Code, pick swarmtix, and authenticate.
VS Code
Write .vscode/mcp.json in the workspace, or the same block in the user configuration for every workspace.
{
"servers": {
"swarmtix": {
"type": "http",
"url": "https://swarmtix.com/mcp/v1"
}
}
}
Cursor
Write .cursor/mcp.json in the project, or ~/.cursor/mcp.json for every project. Then Settings → MCP and sign in.
{
"mcpServers": {
"swarmtix": {
"url": "https://swarmtix.com/mcp/v1"
}
}
}
Raw HTTP
JSON-RPC 2.0 over Streamable HTTP. Every call is a POST to the same URL. On 2026-07-28 the MCP-Protocol-Version, Mcp-Method and Mcp-Name headers are mandatory and must agree with the body; a header that contradicts the body is refused with JSON-RPC error -32020.
curl -X POST https://swarmtix.com/mcp/v1 \
-H "Authorization: Bearer $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 select a session mode. A client that opens with initialize is given a session; a 2026-07-28 client is served statelessly. Same endpoint, both work.
End-to-end example
Discovery, authorization, then a call. Nothing here needs a credential you were given out of band.
1. Discover
An unauthenticated call names the metadata document.
curl -i -X POST https://swarmtix.com/mcp/v1 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://swarmtix.com/.well-known/oauth-protected-resource", scope="events:read"
Fetch that document. It names the authorization server, whose own metadata gives the endpoints below.
| Endpoint | Purpose |
|---|---|
| /.well-known/oauth-protected-resource | Names the authorization server for the /mcp resource (RFC 9728). Also served path-suffixed. |
| /.well-known/oauth-authorization-server | Authorization server metadata. |
| /.well-known/jwks | Public signing keys (RS256). |
| /connect/authorize | Authorization endpoint. PKCE S256 required; a request without it is refused. |
| /connect/token | Token endpoint. |
| /connect/userinfo | User info endpoint. |
2. Authorize
Register with Dynamic Client Registration (RFC 7591) or identify yourself with a Client ID Metadata Document — both are supported.
Then run the authorization code flow. The resource parameter (RFC 8707) is echoed into aud, and the authorization response carries iss (RFC 9207).
GET https://swarmtix.com/connect/authorize
?response_type=code
&client_id=YOUR_CLIENT_ID
&redirect_uri=YOUR_REDIRECT_URI
&scope=events:read%20orders:read
&resource=https://swarmtix.com/mcp/v1
&code_challenge=BASE64URL_SHA256_OF_VERIFIER
&code_challenge_method=S256
&state=OPAQUE
POST https://swarmtix.com/connect/token
grant_type=authorization_code
&code=RETURNED_CODE
&redirect_uri=YOUR_REDIRECT_URI
&client_id=YOUR_CLIENT_ID
&code_verifier=YOUR_VERIFIER
&resource=https://swarmtix.com/mcp/v1
The user sees a top-level consent page, never an iframe — X-Frame-Options: SAMEORIGIN is set.
Do not forward a Swarmtix access token to any other service, and do not present a token issued for a different audience; the server validates that a token was issued for this resource.
3. Call
curl -X POST https://swarmtix.com/mcp/v1 \
-H "Authorization: Bearer $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/call" \
-H "Mcp-Name: swarmtix_events_list" \
-d '{
"jsonrpc":"2.0",
"id":2,
"method":"tools/call",
"params":{"name":"swarmtix_events_list","arguments":{"limit":50}}
}'
tools/list returns only the tools your approved scopes cover. A tool you were not granted is absent from the list rather than failing on call.
Tools
24 tools. Every one declares all four MCP annotations explicitly, and all are openWorldHint: false.
Reads are readOnlyHint: true, idempotentHint: true; no tool in the catalog is destructiveHint: true.
Full per-tool reference, with parameters and worked examples, is at /docs/mcp/tools.
| Tool | Description | Scope | Mode |
|---|---|---|---|
| swarmtix_whoami | Returns the signed-in user and the organisation this connection is authorized for | profile | read |
| swarmtix_events_list | Lists the organisation's events, paged | events:read | read |
| swarmtix_events_get | Returns one event's full detail, by ID or URL slug | events:read | read |
| swarmtix_event_dates_list | Lists the scheduled dates of a multi-date event | events:read | read |
| swarmtix_ticket_types_list | Lists an event's ticket types with price, capacity and availability | events:read | read |
| swarmtix_checkout_questions_list | Lists the custom questions buyers answer at checkout | events:read | read |
| swarmtix_orders_list | Lists the orders placed for an event, paged | orders:read | read |
| swarmtix_orders_get | Returns one order and the tickets it contains | orders:read | read |
| swarmtix_tickets_summary | Returns on-sale, sold and checked-in ticket counts for one scheduled date of an event | orders:read | read |
| swarmtix_attendees_list | Lists an event's attendees, paged | attendees:read | read |
| swarmtix_attendees_search | Finds an attendee's tickets for an event by email address | attendees:read | read |
| swarmtix_analytics_event | Returns sales analytics for a single event | analytics:read | read |
| swarmtix_analytics_summary | Returns revenue and sales rolled up across the organisation | analytics:read | read |
| swarmtix_discounts_list | Lists the promo codes and discount offers on an event | discounts:read | read |
| swarmtix_discounts_check_code | Checks whether a promo code is valid for an event, and what it takes off | discounts:read | read |
| swarmtix_teams_list | Lists the teams in the organisation this organizer belongs to | organization:read | read |
| swarmtix_venues_list | Lists the saved venues and seat maps | organization:read | read |
| swarmtix_events_create | Creates a new event as a draft | events:write | write, not idempotent |
| swarmtix_events_duplicate | Copies an existing event into a new draft | events:write | write, not idempotent |
| swarmtix_event_dates_set | Sets the dates for a multi-date event | events:write | write, idempotent |
| swarmtix_ticket_types_create | Adds a ticket type to an event | events:write | write, not idempotent |
| swarmtix_ticket_types_update | Changes an existing ticket type | events:write | write, idempotent |
| swarmtix_checkout_questions_create | Adds a custom checkout question to an event | events:write | write, not idempotent |
| swarmtix_discounts_create | Creates a promo code or discount offer | discounts:write | write, not idempotent |
Scopes
Nine. Request only what the task needs; the user sees each one in plain English before approving. Scopes gate tool visibility, not just invocation.
| Scope | Grants |
|---|---|
| profile | Who the user is and which organisation this connection covers. Every connection includes it. |
| events:read | Events, dates, ticket types, prices, remaining inventory, checkout questions. Not who bought anything. |
| events:write | Create and change events, ticket types, dates and checkout questions. Everything created arrives as a draft. Cannot publish, cannot delete. |
| orders:read | Includes buyer personal data: order buyer first name, last name and email address; ticket attendee first and last name. Plus on-sale, sold and checked-in ticket counts per event date. |
| attendees:read | Attendee lists and lookup by email address. Personal data. Cannot email and cannot check in. |
| analytics:read | Sales and revenue analytics, per event and across the organisation. |
| discounts:read | Promo codes and discount offers, and code validity checks. |
| discounts:write | Create a promo code or discount offer. Cannot delete or disable an existing one. |
| organization:read | Team members, saved venues and seat maps. Not billing, payouts or account settings — no scope covers those. |
Limits and behaviour
| Subject | Value |
|---|---|
| Rate limit | 60 requests per minute per organisation, sliding window, counted across every credential for that organisation. Over it: 429 with Retry-After in seconds. |
| Pagination | Opaque cursors. Parameters are cursor and limit on every list tool. Default page 50, maximum 200. |
| Partial pages | A success, not an error. isError stays unset and the result ends: Showing <n> of <total>. Call again with cursor "<cursor>" for the rest. |
| Response budget | 60,000 characters per tool result. Truncation is always stated in the body: what was cut, how much there was, and how to get the rest. |
| Access token | 1 hour. A reference token, checked against the store on every call, so a revocation takes effect immediately rather than at expiry. |
| Refresh token | 30 days, rotating. A used refresh token is consumed; reuse of a consumed token revokes the whole grant chain. |
| Identifiers | Where an event has a URL slug, tools accept either the slug or the ID. |
| Schemas | Flat and inlined. No $ref, no 2020-12-only keywords. |
| Barcodes | Never returned by any tool. They are the bearer credential for admission. |
Errors
Errors are sentences with stable leading phrases, so you can match on them. A cross-tenant record returns the same message as a genuinely missing one, by design.
| Condition | Message |
|---|---|
| Unknown or inaccessible event | Event not found, or this connection does not have access to it. |
| Missing scope | This connection is not authorized for <scope>. Reconnect and grant it to use this tool. |
| Invalid argument | <param> is not valid: <reason>. Expected <expectation>. |
| Rate limited | Rate limit reached. Retry in <n> seconds. |
| Upstream failure | Swarmtix could not complete this request. Nothing was changed. |
<n> in the rate-limit message is the same integer as the Retry-After header.
Not available
No tool exists for any of these, and no combination of the tools that do exist produces them. Asking differently will not help.
- Refunds and charges
- Publishing or unpublishing an event
- Check-in and barcode scanning
- Bulk attendee email
- Guest-list import
- Deleting anything — events, tickets, orders, attendees, discounts
- Account closure and subscription changes
- Registering a webhook
- Reading or writing billing, payout or account settings
An assistant can prepare an event completely. It cannot launch it, spend money, or contact the organiser's attendees.
Resources and prompts
Beyond tools, the server exposes two resources you can attach as context without a tool call, and four workflow prompts. Both resources are templated, so they are listed by resources/templates/list — resources/list covers parameterless URIs and is empty here.
| Kind | Value |
|---|---|
| Resource | swarmtix://events/{idOrSlug} |
| Resource | swarmtix://events/{idOrSlug}/analytics |
| Prompt | Pre-event readiness check |
| Prompt | Sales-performance review |
| Prompt | Attendee reconciliation |
| Prompt | Post-event summary |
Sampling, elicitation and roots are deliberately not implemented. All three are deprecated in 2026-07-28; no tool needs them.
More
- MCP documentation — overview, per-client setup, scopes, and a page per tool
- Connecting — the same client setups in prose, with troubleshooting
- Authentication and scopes — the consent flow, lifetimes, and revocation
- MCP server overview — the same thing written for a person
- MCP integration page — setup steps and FAQs
- llms.txt — index of the whole site for language models
- Privacy policy and terms of use
Support: [email protected]