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
47 — 19 read, 28 write. No refunds, check-in or bulk email. Publish and unpublish need the separate events:publish scope. The only deletes are an unsold ticket type, switching off a discount or a checkout question, and parts of an unpublished online event's program.
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.

Well-known and OAuth endpoints for the Swarmtix MCP server
Endpoint Purpose
/.well-known/oauth-protected-resourceNames the authorization server for the /mcp resource (RFC 9728). Also served path-suffixed.
/.well-known/oauth-authorization-serverAuthorization server metadata.
/.well-known/jwksPublic signing keys (RS256).
/connect/authorizeAuthorization endpoint. PKCE S256 required; a request without it is refused.
/connect/tokenToken endpoint.
/connect/userinfoUser 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

47 tools. Every one declares all four MCP annotations explicitly. All are openWorldHint: false except swarmtix_event_images_set, swarmtix_speakers_create and swarmtix_speakers_update, which fetch an image from a URL you give them. Reads are readOnlyHint: true, idempotentHint: true; eight tools are destructiveHint: true: swarmtix_ticket_types_delete, swarmtix_checkout_questions_delete, swarmtix_discounts_delete, swarmtix_events_unpublish, swarmtix_online_categories_delete, swarmtix_speakers_delete, swarmtix_talks_delete and swarmtix_hosts_delete. Full per-tool reference, with parameters and worked examples, is at /docs/mcp/tools.

Every tool the Swarmtix MCP server exposes, with the scope it requires and whether it reads or writes
Tool Description Scope Mode
swarmtix_whoamiReturns the signed-in user and the organisation this connection is authorized forprofileread
swarmtix_events_listLists the organisation's events, pagedevents:readread
swarmtix_events_getReturns one event's full detail, by ID or URL slugevents:readread
swarmtix_event_dates_listLists the scheduled dates of a multi-date eventevents:readread
swarmtix_ticket_types_listLists an event's ticket types with price, capacity and availabilityevents:readread
swarmtix_checkout_questions_listLists the custom questions buyers answer at checkoutevents:readread
swarmtix_orders_listLists the orders placed for an event, pagedorders:readread
swarmtix_orders_getReturns one order and the tickets it containsorders:readread
swarmtix_tickets_summaryReturns on-sale, sold and checked-in ticket counts for one scheduled date of an eventorders:readread
swarmtix_attendees_listLists an event's attendees, pagedattendees:readread
swarmtix_attendees_searchFinds an attendee's tickets for an event by email addressattendees:readread
swarmtix_analytics_eventReturns sales analytics for a single eventanalytics:readread
swarmtix_analytics_summaryReturns revenue and sales rolled up across the organisationanalytics:readread
swarmtix_discounts_listLists the promo codes and discount offers on an eventdiscounts:readread
swarmtix_discounts_check_codeChecks whether a promo code is valid for an event, and what it takes offdiscounts:readread
swarmtix_teams_listLists the teams in the organisation this organizer belongs toorganization:readread
swarmtix_venues_listLists the saved venues and seat mapsorganization:readread
swarmtix_event_readinessReports what blocks an event from being published, plus warnings and payment account statusevents:readread
swarmtix_online_program_getReturns an online event's categories, speakers, hosts and talksevents:readread
swarmtix_events_createCreates a new event as a draftevents:writewrite, not idempotent
swarmtix_events_duplicateCopies an existing event into a new draftevents:writewrite, not idempotent
swarmtix_event_dates_setSets the dates for a multi-date eventevents:writewrite, idempotent
swarmtix_ticket_types_createAdds a ticket type to an eventevents:writewrite, not idempotent
swarmtix_ticket_types_updateChanges an existing ticket typeevents:writewrite, idempotent
swarmtix_checkout_questions_createAdds a custom checkout question to an eventevents:writewrite, not idempotent
swarmtix_discounts_createCreates a promo code or discount offerdiscounts:writewrite, not idempotent
swarmtix_events_updateChanges an event's details: name, text, place, visibility, fees, timezoneevents:writewrite, idempotent
swarmtix_event_images_setSets an event's cover image and host logo from a public https URL or base64events:writewrite, not idempotent, open world
swarmtix_ticket_types_deleteDeletes a ticket type that nobody has orderedevents:writewrite, destructive
swarmtix_ticket_types_reorderSets the order buyers see the ticket types inevents:writewrite, idempotent
swarmtix_checkout_questions_updateChanges a checkout questionevents:writewrite, idempotent
swarmtix_checkout_questions_deleteSwitches a checkout question offevents:writewrite, destructive, idempotent
swarmtix_discounts_updateChanges a promo code or discount offerdiscounts:writewrite, idempotent
swarmtix_discounts_deleteSwitches a promo code or discount offer offdiscounts:writewrite, destructive, idempotent
swarmtix_access_codes_createCreates a code that unlocks a hidden ticket typediscounts:writewrite, not idempotent
swarmtix_events_publishPublishes an event so its tickets go on sale; refused while any blocker remainsevents:publishwrite, idempotent
swarmtix_events_unpublishTakes a published event off sale and back to a draft; orders are keptevents:publishwrite, destructive, idempotent
swarmtix_online_categories_createAdds a category to an online eventevents:writewrite, not idempotent
swarmtix_online_categories_deleteRemoves a category from an online event and its talksevents:writewrite, destructive
swarmtix_speakers_createAdds a speaker, with an optional photo, to an online eventevents:writewrite, not idempotent, open world
swarmtix_speakers_updateChanges a speaker of an online eventevents:writewrite, not idempotent, open world
swarmtix_speakers_deleteRemoves a speaker from an online event and its talksevents:writewrite, destructive
swarmtix_talks_createAdds a talk, with speakers, categories and a video, to an online eventevents:writewrite, not idempotent
swarmtix_talks_updateChanges a talk: time, speakers, categories, videoevents:writewrite, idempotent
swarmtix_talks_deleteDeletes a talk nobody has ordered, on an unpublished eventevents:writewrite, destructive
swarmtix_hosts_createAdds a host to an online event; the host connects Zoom in the dashboardevents:writewrite, not idempotent
swarmtix_hosts_deleteDeletes a host that is not connected and not usedevents:writewrite, destructive

Scopes

Ten. Request only what the task needs; the user sees each one in plain English before approving. Scopes gate tool visibility, not just invocation.

The ten OAuth scopes the Swarmtix MCP server defines
Scope Grants
profileWho the user is and which organisation this connection covers. Every connection includes it.
events:readEvents, dates, ticket types, prices, remaining inventory, checkout questions. Not who bought anything.
events:writeCreate and change events, their details and images, ticket types, dates and checkout questions. Can delete an unsold ticket type on an unpublished event and switch off a checkout question. Build an online event's talks, speakers, categories and hosts (Zoom stays in the dashboard). Everything created arrives as a draft. Cannot publish.
events:publishPublish an event, which puts its tickets on sale, and unpublish it. Only an event with nothing missing can be published. Orders are kept, nobody is emailed or refunded. Does not create or change anything else.
orders:readIncludes 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:readAttendee lists and lookup by email address. Personal data. Cannot email and cannot check in.
analytics:readSales and revenue analytics, per event and across the organisation.
discounts:readPromo codes and discount offers, and code validity checks.
discounts:writeCreate, change and switch off promo codes, discount offers and access codes. Cannot publish or move money.
organization:readTeam members, saved venues and seat maps. Not billing, payouts or account settings — no scope covers those.

Limits and behaviour

Operational limits and response behaviour
Subject Value
Rate limit60 requests per minute per organisation, sliding window, counted across every credential for that organisation. Over it: 429 with Retry-After in seconds.
PaginationOpaque cursors. Parameters are cursor and limit on every list tool. Default page 50, maximum 200.
Partial pagesA success, not an error. isError stays unset and the result ends: Showing <n> of <total>. Call again with cursor "<cursor>" for the rest.
Response budget60,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 token1 hour. A reference token, checked against the store on every call, so a revocation takes effect immediately rather than at expiry.
Refresh token30 days, rotating. A used refresh token is consumed; reuse of a consumed token revokes the whole grant chain.
IdentifiersWhere an event has a URL slug, tools accept either the slug or the ID.
SchemasFlat and inlined. No $ref, no 2020-12-only keywords.
BarcodesNever 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.

Tool error messages and what each one means
Condition Message
Unknown or inaccessible eventEvent not found, or this connection does not have access to it.
Missing scopeThis connection is not authorized for <scope>. Reconnect and grant it to use this tool.
Invalid argument<param> is not valid: <reason>. Expected <expectation>.
Rate limitedRate limit reached. Retry in <n> seconds.
Upstream failureSwarmtix 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.

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.

Resource URI templates and workflow prompts
Kind Value
Resourceswarmtix://events/{idOrSlug}
Resourceswarmtix://events/{idOrSlug}/analytics
PromptPre-event readiness check
PromptSales-performance review
PromptAttendee reconciliation
PromptPost-event summary

Sampling, elicitation and roots are deliberately not implemented. All three are deprecated in 2026-07-28; no tool needs them.

More

Support: [email protected]