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.

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

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.

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_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

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.

The nine 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, ticket types, dates and checkout questions. Everything created arrives as a draft. Cannot publish, cannot delete.
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 a promo code or discount offer. Cannot delete or disable an existing one.
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/listresources/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]