Skip to content
SZ-MCP
Get Support

Limits and quotas

Most surprising SZ-MCP behaviour is a limit doing its job. This page collects them, with what each one does when you reach it.

LimitValueOn reaching it
code_mode run budget20 seconds wall clock, shared across every call the program makesThe run is cut off with code_mode exceeded 20000ms wallclock budget, returned as a tool error
One call request to SmartZone15 secondsThe request is aborted; surfaces as a network_error envelope, and the time still counts against the run budget
Service ticket mint (login)15 secondsinvalid_host — the controller did not respond in time
API version detection, per candidate15 secondsDetection stops; a timeout is not treated as “try the next version”

The run budget is per code_mode call, not per conversation. Every new call gets a fresh 20 seconds, which is why the right response to hitting it is to split the work rather than retry the same program.

LimitValueOn exceeding it
code_mode program source20,000 charactersRejected before execution: code must be under 20,000 characters
Host / FQDN253 charactersRejected on save
SmartZone username200 charactersRejected on save
SmartZone password500 charactersRejected on save
Credential label100 charactersRejected on save

These bound what the discovery primitives return in one call. Neither is a cap on what exists — both report the full total separately.

PrimitiveDefaultMaximumTotal available
search_endpoints20 results50count gives the pre-limit total
list_endpoints_by_tag50 results200count gives the total under the tag

list_endpoints_by_tag takes an offset, so a tag larger than 200 operations is paged rather than truncated. search_endpoints has no offset — narrow the query or add a tag instead.

get_endpoint_details inlines $ref pointers to a depth of 3. Deeper references, and any cycle, are left as { $ref: "…" } rather than expanded.

ItemLifetimeNotes
Service ticket25 minutesCached in KV per user, deliberately shorter than SmartZone’s idle timeout. Flushed on credentials save, delete and Test connection
Full OpenAPI specPer isolate, until evictionLoaded from object storage on the first get_endpoint_details for that surface; adds a few hundred ms to that one call
Web session cookie30 daysszmcp_session
MCP access token30 daysPrefixed szmk_
MCP refresh token90 daysRotated on every use; the old one is revoked
OAuth authorization code10 minutesSingle use
MCP client registration30 daysClaude re-registers automatically

call never throws on an HTTP error, and retries exactly one thing:

StatusBehaviour
401The cached ticket is discarded, a fresh one is minted, and the request is retried once. A second 401 is returned to you
Everything elseReturned as-is. No automatic retry on 429, 5xx or anything other status

There is no backoff, no Retry-After handling, and no retry budget beyond that single 401 attempt. A rate-limited or flapping controller surfaces directly to the model.

LimitValueOn reaching it
MCP client registrations20 per IP per hour429 with {"error": "rate_limited"}

This bounds the Dynamic Client Registration endpoint only. Normal use registers once per connector, so reaching it usually means something is re-registering in a loop.

LimitValue
SmartZone controllers per accountOne
MCP scopesOnesz:call
MCP tools exposedOnecode_mode

Saving new credentials replaces the stored controller; there is no list of connections to switch between.

Two ceilings sit outside this service and are worth naming, because they look like SZ-MCP limits from the inside:

  • Your SmartZone account’s permissions. Anything it cannot do returns a 403 from the controller. SZ-MCP adds no restrictions of its own — see Security model.
  • The controller’s own pagination. WSG list endpoints typically take listSize and index and return { list, hasMore, totalCount }. Those caps are SmartZone’s; SZ-MCP passes your query through unchanged.