Remote MCP/mcp — stateless Streamable HTTP (§9's MCP-as-adapter-over-REST, now real): the same 10 read/compute tools as the REST core, one MCP tool per REST operation. Write/Trigger/WakeEvent capability is intentionally NOT exposed here — that lives only on the Temporal Port desktop app's Local MCP (github.com/kakon77777-commits/ctcl-app)
CLInot on this Web deployment — curl/SDK/MCP are the interfaces here. A CLI exists for the separate Temporal Port desktop app (ctcl-cli, github.com/kakon77777-commits/ctcl-app)
Webhook relaynot yet implemented — deliberately deferred (§9.4/§28): ranked last of the WakeEvent delivery transports pending real design for SSRF/replay/secret-management risk
Error codes
INVALID_TIME_VALUE400
malformed, missing, or out-of-range input value
UNKNOWN_ENCODING400
encoding not recognized (unix_s|unix_ms|unix_us|unix_ns|rfc3339)
INVALID_TIMEZONE400
not a valid IANA timezone name
NONEXISTENT_LOCAL_TIME400
DST spring-forward gap — this local time never occurred
AMBIGUOUS_LOCAL_TIME400
DST fall-back overlap — this local time occurred twice
UNSUPPORTED_POLICY400
invalid rate/system policy in a custom system definition
UNKNOWN_SYSTEM404
no such custom system id
UNKNOWN_GROUP404
no such Temporal Group id
UNKNOWN_WORKSPACE404
no such Shared Workspace id
UNKNOWN_PROVIDER404
no such OAuth sign-in provider
AUTH_DISABLED503
this deployment has no client id/secret configured for that provider
AUTH_DENIED400
the sign-in provider returned an error (e.g. the user cancelled)
AUTH_STATE_INVALID400
OAuth state missing/expired/reused — restart the sign-in flow
AUTH_PROVIDER_ERROR502
the OAuth provider's token or userinfo endpoint failed
NOT_AUTHENTICATED401
no active session — sign in first
FORBIDDEN403
authenticated, but not the owner of this resource
UNKNOWN_INSTANT404
no such registered instant id
UNKNOWN_TRANSFORM404
no such transform type id
REGISTRY_UNAVAILABLE503
CTCL_KV not bound on this deployment
SIGNING_DISABLED503
no Ed25519 signing key configured (CTCL_SIGN_KEY unset)
RATE_LIMITED429
over 120 requests/min for this IP on /v1/*
NOT_FOUND404
unknown route
Version policy
All routes here are v1. The response envelope shape
({ok, data, meta} / {ok:false, error, meta}) will not change within v1 — new
optional fields may be added, but existing fields won't be removed or repurposed. A breaking change would
ship as /v2, not a silent mutation of /v1.
Changelog
2026-08-02Remote MCP Gateway (/mcp, §12.1) — stateless Streamable HTTP, 10 read/compute tools mirroring the REST API 1:1; write/Trigger/WakeEvent capability stays on the Temporal Port desktop app's Local MCP (whitepaper §12.3's read/write separation), never exposed here
2026-07-14Shared Workspaces (/v1/workspaces) + Google/GitHub sign-in (§Phase 5) — owned workspaces are protected, everything else stays accountless; QR Code on Share Instant (§6.6); every persisted resource type Ed25519-signed (§31.1); tai/gps timescales now leap-aware via the full 1972-2017 historical offset table
2026-07-12Registered instants (/v1/instants) now Ed25519-signed (§31); SDK gained monotonic() (§32), guardedNow() rollback detection (§33), offlineNow() degraded mode (§39), and a maxAgeMs staleness check in verifyInstant()
2026-07-11Constraint Planner, Semantic Resolution, Share Instant, Boundary Inspector, Temporal Groups — CommonInstant Web whitepaper P1–P6