mait.sh1.132.1

Private beta: features and content may change. No warranty; use at your own risk.

Settings

What the person who runs MCP Console can set: how it starts, how many terminals it allows and for how long, how it watches resources and the optional browser bridge.

Beta
Overview

The settings belong to whoever runs the service.

The agent never changes these. They belong to the person who installs and runs MCP Console, in the environment where it runs. Settings are read by the service: setting a variable in another shell does not reconfigure it. Coordinate changes with its owner because some take effect on later operations and others need a restart. An ordinary stop can end existing terminals, so read persistent terminals first.

MCP Console runs real commands as its own service account, with that account's files, network access, programs and inherited environment. Configure it for a group of people who are trusted with that environment: use a separate approved command environment for unrelated groups.

Requirements

What the service needs on the machine.

RequirementDetail
Operating systemLinux (amd64, arm64). On macOS and Windows, MCP Console runs in the managed Linux environment that AIDC Launch provides
Shellsbash (the default), sh, zsh or fish, installed in the service environment
UtilitiesA compatible base64 -d for structured command execution
Reload continuityAsk the service owner whether this installation supports persistent terminals through the intended reload
NetworkLocal terminal use needs no external service; workloads use the environment's available network, and browser access needs its provided route

In the MAIT image, Console is available through MCP Registry as console, with browser access enabled. A standalone installation can differ. Ask its owner which connection and browser route are provided before changing settings.

Run it

Pick one transport with serve.

Outside the registry, choose one MCP transport with mcp-console serve:

TransportCommandNotes
Standard input and outputmcp-console serve --transport stdioThe MCP client starts and owns the process; closing its input stops the service
Unix socketmcp-console serve --transport unix --socket /absolute/private/dir/console.sockCreate the socket's parent as a private directory only your account can enter; the server deletes any file already at the socket path, so use a path that holds nothing else. Do not use /tmp.
HTTPmcp-console serve --transport http --http-addr 127.0.0.1:8080Keep HTTP on loopback, or put an authenticated, encrypted proxy that you operate in front of it.

--session-mode per-connection is the default and gives each connection its own terminal namespace. --session-mode shared puts every connection in one namespace, so everyone connected can operate on one another's terminals; use it only where all participants trust each other's work. Reconnecting does not restore an earlier session.

For standard input and output, capture standard error separately, because standard output carries the protocol. Leave MAIT_LOG_FORMAT=json unset there: that log format writes to standard output and breaks the stream.

Keep the service account's runtime directory private and ask its owner to resolve startup failures. Accept a new service with the first command and named-shell exercise in Get started. If reload continuity or browser access is required, verify each separately; a first command does not establish either.

Capacity

How many terminals, and how long they live.

SettingDefaultEffect
MCP_CONSOLE_MAX_TERMINALS50Most terminals one connection may hold
MCP_CONSOLE_MAX_ATTACHED_IDLE3600 secondsIdle time after which an attached terminal is detached (persistent) or closed (not persistent)
MCP_CONSOLE_MAX_DETACH_DURATION86400 secondsAge after which a detached persistent terminal is closed

The cleanup check runs every five minutes, so these are not exact deadlines. Plan capacity with the service owner and inspect actual terminals after concurrent creation requests. A malformed number falls back to the default and zero is not a general way to switch a limit off. Do not use these settings as resource isolation or billing limits.

Resources

Defaults for terminal_watch and terminal_stats.

SettingDefaultEffect
MCP_CONSOLE_RESOURCE_INTERVAL_MS2000Default interval of a resource watch, held between 500 and 300000 milliseconds
MCP_CONSOLE_RESOURCE_DEFAULT_SUSTAINED_MS15000How long a threshold must stay exceeded before an alert
MCP_CONSOLE_RESOURCE_CADENCE_MS1000How often the shared process snapshot is refreshed

A single watch can set its own interval and sustained time. Asking more often than the snapshot cadence returns the same measurement.

Browser bridge

Let a person join one terminal from a browser.

SettingDefaultEffect
MCP_CONSOLE_WEBOffTurns the bridge on when set to exactly 1, true, yes or on (lowercase)
MCP_CONSOLE_WEB_ADDRA detected address, port 7680IP address and port, for example 127.0.0.1:7680, used both to listen and to build the attachUrl. Host names are not accepted
MCP_CONSOLE_WEB_MAX_CONN4Live browser connections admitted per terminal

The bridge works beside any MCP transport, standard input and output included, so turning it on adds a network listener even when MCP has none. For a browser on the same machine:

sh
MCP_CONSOLE_WEB=1 MCP_CONSOLE_WEB_ADDR=127.0.0.1:7680 mcp-console serve --transport unix --socket /absolute/private/dir/console.sock

Reach it only through an HTTPS route you operate, and only from trusted clients. Because one address is used to listen and to advertise, an address the service cannot bind locally, such as a host port mapped into a container, cannot be set directly. For access through a reverse proxy or tunnel, keep the local address and forward the scheme, host, port, path, query string and WebSocket at the proxy; a page served over HTTPS uses a secure WebSocket. The returned attachUrl is built from configuration and does not prove the listener started: if binding fails, the service logs it and MCP keeps working.

Each terminal must still be opted in one by one with web: true. What the person with the link can do, and how to take it back, is in Let a person watch or type:

  • A link is a credential: anyone who holds it can read the terminal, type into it and resize it. Send it only through a private channel agreed in advance, and never put it in a public issue, screenshot or diagnostic.
  • Confirm the HTTPS route with the service owner before confidential input is typed.
  • Repeating web: true replaces the private link. Disable the link with web: false. To end browser access at once, close the terminal with terminal_close.
  • Disable the link with web: false before you detach a terminal. Plan for the idle-cleanup rules even while someone is typing in the browser.
  • Obtain a new private link after a reload.
Persistence

What survives a handoff, a reload and a stop.

A persistent terminal supports a cooperative handoff while the service remains available and can survive a supported reload when the installation preserves it. It is not a job queue and does not promise survival through an ordinary stop, host restart or loss of the execution environment.

What endsWhat happens to a persistent terminal
The owning session is reclaimed while the service remains runningActive persistent terminals are detached for later attachment; other terminal records are cleaned up
A supported service reload arranged by the ownerEligible work may return detached when the installation preserves it
An ordinary stop (SIGTERM, SIGINT or closing standard input)The service attempts to close every terminal it tracks, persistent ones included. Setting persistent: true does not turn a stop into a reload, so do not count on continuity
The required execution environment or continuity state is lostPrior work cannot be recovered through attachment

Closing a Unix or HTTP connection alone does not establish session cleanup and can leave terminal records and work present until explicit close, expiry or service shutdown. Closing standard input for a client-owned stdio server stops that service; it is the ordinary-stop case above. Close or detach owned terminals deliberately before disconnecting.

After a reload, persistent terminals can return detached with reconstructed basic details. Execution history, read positions, run captures, watches, browser links and original timestamps are not restored. Read the current output and establish the workload's actual state before continuing. A tracked command can defer idle cleanup for up to 24 hours; browser activity and statistics or frame polling do not keep a terminal active by themselves.

For work that must survive machine loss, the workload needs its own checkpoints and saved results. The steps for an actual handoff are in Hand a terminal to the next connection.

Rates

How often tools may be called and how long they wait.

LimitValue
All console tools together600 calls per minute
terminal_run60 calls per minute
terminal_stats120 calls per minute
The other terminal tools together120 calls per minute
terminal_run foreground wait120 seconds by default, set with timeout
A wait inside terminal_sendTen seconds at most

Limits refill over time and allow an initial burst. A call that is too frequent returns an error with a retry interval. Client and transport deadlines can end a wait separately.

Data

What is kept, where, and what you must protect.

DataWhere it livesHow long
Terminal processes and screen historyThe selected execution environmentUntil closed, cleaned up or continuity is lost
Run-output capturesService memory, at most 500 entries and 64 MiBUntil evicted or the service restarts
Frame historyService memory, 120 frames per terminalUntil evicted or the terminal closes
Browser linksService memoryUntil replaced, disabled or the service restarts
Persistent-terminal metadataThe installation's continuity stateUntil the terminal closes

Commands can write files and use the environment's network. Keep required reports and checkpoints in the workload's durable output; do not treat terminal history as its only copy.

  • Treat access to any console endpoint, socket or attachUrl as permission to run commands as the service account.
  • Keep each socket in a directory only your account can enter, and keep HTTP on loopback, or put an authenticated, encrypted proxy that you operate in front of it.
  • Avoid inheriting credentials that the intended commands do not need.
  • Remove browser links, environment values, command arguments and unrelated terminal text from any diagnostic you share.
Next

Where to go next.