What it is
A budget authority for agent loops. Before a costly step — an LLM call, a tool invocation, an external action — the agent reserves against a scope; afterwards it commits the real usage or releases the hold. Scopes nest from tenant down through workspace, app, workflow, agent and toolset, so a per-customer or per-task cap is enforced by the Cycles runtime rather than by prompt.
Requirements
Node.js 20 or newer, run over stdio from npm as @runcycles/mcp-server, or with --transport http for streamable HTTP. Two variables are required in live use: CYCLES_API_KEY and CYCLES_BASE_URL pointing at your Cycles server. CYCLES_MOCK=true explores the tools with no server and no key, prefixing generated IDs with mock_ and enforcing nothing; it is refused under NODE_ENV=production unless CYCLES_ALLOW_MOCK_IN_PRODUCTION is also set. CYCLES_DEFAULT_TENANT and its siblings fill in subject fields an agent omits, and explicit fields win. Every mutating call requires an idempotencyKey — only the caller can hold one stable across a retry. On HTTP, MCP_HTTP_AUTH_TOKEN makes a bearer token mandatory on /mcp while /health stays public.
Setup effort
One command plus a key — npx -y @runcycles/mcp-server, then supply credentials