Contents

Limits and errors

The limits that keep tool calls fast and predictable, and what an AI client sees when a call fails.

Limits per call

WhatLimit
Command output (exec, shell_run)32,000 bytes; longer output is cut
Command timeout60 seconds by default, 900 seconds at most; use job_start for longer work
Machines per exec_many8, each with half the output limit
read_file200,000 bytes by default per call, up to 4,000,000; continue from next_offset
write_file, copy_between_hosts4,000,000 bytes; use transfer_start for larger files
transfer_startNo size limit; 2 at a time per connection, up to 10,000 files each
Job output (job_output)64,000 bytes per read
Terminal output per call20,000 characters; waits up to 600 seconds
Port-forward HTTP body (tunnel_http)32 KB

Open sessions

WhatLimit
Shell sessions4 per machine; closed after 30 minutes idle
Terminals8 per connection; closed after 30 minutes idle
TunnelsClosed after 1 hour
Schedules200 per account
Web shares24 hours by default when an AI creates one, 30 days at most
Waiting approvals20 per connection

Calls that take longer than 10 seconds send MCP progress notifications every 10 seconds when the client asks for them, so the client does not time out while a command, a transfer or an approval is pending.

Plan limits

Plans set how many machines and members an account has, and which features its policies can use, such as per-folder file rules, command rules, schedules, web shares and secret environment variables. See pricing. A call that needs a feature the plan does not include fails with a message saying so.

Errors

A refused or failed call returns an MCP tool result with isError: true and a plain-language message that tells the AI what happened and what to do next. The messages you are most likely to see:

Message begins withMeaning
token lacks fleet.…The connection was approved without the scope this tool needs. Reconnect and approve the scope.
refused by this connection's command rulesThe policy's command rules deny this command.
high-risk operationThe AI must show you the exact command, then call again with confirm=true.
refused by guardrailA command LetKite never runs, such as wiping a disk.
waiting for a person to approve thisAn approval is pending; the message says who was asked and until when.
this connection's authorization is no longer validThe connection was disconnected. Reconnect the client to sign in again.

Sign-in errors use the standard OAuth error codes (invalid_grant, invalid_client, access_denied and so on). A missing or expired token gets HTTP 401 with a WWW-Authenticate header, and clients sign in again or refresh by themselves.