Docs & Help
Everything you need to get productive with Termalin — the fast SSH client for you and your agents. New here? Download it and start with the first two sections.
Onboard your agents to Termalin
Copy a ready-made prompt that teaches your AI agent how to reach your servers through Termalin — safely, never holding your keys, with every action audited. It covers both paths: AI apps and remote agents reaching your servers through Connectors with no desktop app running, or an agent on your machine driving the desktop app. Paste it into Claude, ChatGPT, Claude Code, Codex, Cursor or any MCP-capable agent.
You now have access to the user's servers through Termalin — an SSH client that exposes hosts to AI agents through an MCP server. You never see or hold the user's SSH keys (on the hosted path the Connector signs in with short-lived certificates; on the local path Termalin's key agent signs on your behalf), and every action you take is written to the user's audit log; on the local path it is also shown live in their app.
CONNECT — pick the path that matches where you run:
1) You are a chat app or a remote agent (ChatGPT, claude.ai, Claude Code, Codex, Cursor…). Use the hosted MCP server. If Termalin is already connected as a connector or app, just call hosts_list. Otherwise:
- OAuth: https://termal.in/mcp — the user signs in with their Termalin account.
- Claude Code: claude mcp add --transport http termalin https://termal.in/mcp
- Codex: codex mcp add termalin --url https://termal.in/mcp
- Cursor: add "url": "https://termal.in/mcp" to mcp.json.
- claude.ai and ChatGPT: the Termalin listing in their connector or app directory. The user may need to enable Termalin in the chat's tools (+) menu.
1b) API key, for any client without OAuth:
Endpoint: https://termal.in/mcp
Header: Authorization: Bearer tk_live_…
The user creates the key at https://termal.in/account → "API keys & MCP".
This path reaches ONLY the user's servers that run a Termalin Connector. Servers saved only in the app are invisible here. It needs Pro (or the trial).
2) You run on the user's machine and the Termalin app is installed. Use the local MCP server:
claude mcp add termalin -- <path>/termalin-mcp
The app shows the exact path and command under Settings → Security → "Agent Access (MCP)" → "Connect an assistant". It reaches the hosts the user ticks there. Free on every plan; it needs the app running for the live-terminal tools.
WHAT YOU CAN DO:
Hosted path: list hosts; run a command (60 s a call by default, timeout up to 300 s); ssh_exec_many for up to 10 servers at once; job_start / job_status / job_stop / job_list for anything longer; server_metrics and alerts_list (already-collected monitoring — nothing runs on the server); sftp_list / sftp_read / sftp_write (text, up to 512 KB); data_tables / data_schema / data_query.
Local path: all of the shared tools plus persistent SSH sessions, port forwards, and — with the user's consent toggles on — live terminal tabs, stepping into a session the user already has open, a shell on the local machine, and the user's saved database connections.
RULES — follow these:
- Always list the hosts first to learn what you can reach, and use the host ids from that list.
- Each server in hosts_list may carry an ownerNote — the owner's instructions for that server. Read it and follow it.
- runsAs shows the login user (root when none is set). Pass username only when the task needs a different user.
- If hosts_list is empty, tell the user to install a Connector (termal.in/account#connector) instead of guessing hosts. If it says AI access is off or the plan doesn't include it, relay that message as is.
- For "how is the server doing" or an alert, read server_metrics / alerts_list before running commands.
- Each host (local) or each key / app connection (hosted) has an access level the user set: Full access, an allowlist (Only listed commands), or Read-only / blocked — no commands or file writes. If an action is refused, do NOT try to work around it — tell the user exactly which host and command was blocked and ask how to proceed.
- Anything longer than about a minute: job_start, then poll job_status. Don't re-run a command that already timed out.
- Never read, copy, print, or move private keys, credentials, tokens, or the contents of ~/.ssh.
- Prefer non-destructive commands. Before anything irreversible — deleting data, dropping tables, overwriting files, restarting services — state precisely what you will run and why, then wait for the user's explicit go-ahead. For databases, data_query is read-only; only pass allowWrites after the user approves the exact statement.
- Don't loop: hosted runs are limited per account (about 60 a minute).
- Work one server at a time unless asked otherwise, and report what you ran and its output in plain language.
Begin by listing the available hosts and telling the user what you can see. Install & first run
Grab the installer for your OS from the download page — Windows .exe, macOS .dmg or Linux .AppImage (x86_64). On Windows you can also install from the Microsoft Store or with winget install Termalin.Termalin; on macOS with Homebrew, brew install --cask termalinapp/termalin/termalin; on Windows with Scoop, scoop bucket add termalin https://github.com/termalinapp/scoop-termalin then scoop install termalin. The Windows build installs per-user (no admin prompt) into your local app folder, the same way Chrome or VS Code does, so auto-updates stay silent.
.exe isn't code-signed yet, so SmartScreen may say "unknown publisher" — click More info → Run anyway. On Linux, chmod +x the AppImage. On first launch you'll land on an empty hosts list. Termalin runs on Windows, macOS and Linux, has native iPhone, iPad and Apple Watch apps, and there's a browser cabinet for Android and anything else — a Pro feature, with a free browser demo to try it.
Your first connection
- Click Add host and fill in the address, port and username.
- Pick an auth method: password, a private key, or the built-in key agent. For a server you reach through a bastion, set a jump host on the form; for one behind a firewall or NAT, pick the Connector type and run one command on it (see Connectors).
- Save, then click the host to open a terminal tab. On first connect Termalin pins the server's host key (TOFU) so future connections detect tampering.
Every open host is a browser-style tab; sessions stay alive when you switch between them. Settings → Terminal → "Restore Sessions" (on by default) brings your tabs back after a restart — hosts that authenticate without a prompt reconnect on their own, the rest wait for a click.
Hosts & folders
A host can be SSH, SFTP, FTP, Telnet, Serial/COM, a database, S3, an RDP or VNC remote desktop, a Local shell on this computer, or a Connector — pick the type on the host form and it opens in the same tabbed workspace. (Serial and Local are desktop-only; both are hidden on phones.) Organise hosts into folders (drag & drop), give them tags and colours, and reach them from the sidebar inside any terminal. Reusable commands live in Snippets; run one into the focused session with a click, or flip the broadcast toggle to run it on every connected host at once.
Import & export. From the toolbar above the hosts list, bring hosts in from an ~/.ssh/config, a CSV, a Termalin JSON backup, PuTTY (read saved sessions on Windows in one click, or paste a .reg export) or MobaXterm (a .mxtsessions export or MobaXterm.ini bookmarks, folders and all). Passwords are never imported — re-enter them or use a key. Export any time to a Termalin backup (JSON), an SSH config or a CSV. No lock-in, either direction.
Tunnels & port forwarding
Save port forwards per host — local (-L), remote (-R) and SOCKS (dynamic) — and reconnect them on demand. Create and manage them in the app: right-click a host → Tunnels. The browser cabinet shows your saved tunnels read-only. An agent can open a forward itself with tunnel_open on the local MCP server.
Connectors
A Connector is a small agent you install with one command on a Linux, macOS or Windows server. It dials out to Termalin, so there's no inbound port to open and no SSH key on your device — it authenticates with a short-lived SSH certificate. A Connector is what lets the web terminal, remote desktops, AI apps and API keys, server monitoring and backups reach a server. Full guide on the Connector page.
- Add one — in the cabinet, Add Connector (or Hosts → + → Connector); on the desktop, the host form's Connector type; or hit "Make it available" when you open a plain server in the web terminal. Get install command gives a one-time line under the tabs Linux / macOS and Windows — single-use, good for an hour:
curl -fsSL https://termal.in/i/<token> | sudo sh # Linux / macOS irm https://termal.in/i/<token>.ps1 | iex # Windows PowerShell
On Windows the installer asks for administrator rights itself (a UAC prompt). - Platforms — Linux (x86_64 and aarch64; a
termalin-agent.servicesystemd unit, ortermalin-agent runwhere there's no systemd), macOS (Apple Silicon or Intel; Remote Login is switched on and a launchd daemon installed) and Windows (x64 or ARM64; Windows 10/11 and Windows Server — it adds the built-in OpenSSH Server if missing, keeps sshd on automatic start, runs as theTermalinAgentservice and gives SSH sessions PowerShell; when it added OpenSSH, sshd listens on the machine only and port 22 stays closed — see Windows servers). Remove a Connector withtermalin-agent uninstallon macOS, or& "$env:ProgramFiles\Termalin\termalin-agent.exe" uninstallon Windows. - Settings — a Name (what AI apps see too), a Login user (AI apps use
rootif it's empty), an AI access switch, and a Note for AI the apps read before working on that server.
Windows servers
Run the Windows install line (irm https://termal.in/i/<token>.ps1 | iex, then approve the UAC prompt) on Windows 10/11 or Windows Server, and the Connector sets the machine up:
- installs the built-in OpenSSH Server if it's missing and keeps sshd on automatic start; an OpenSSH Server that was already there is left as it was;
- makes PowerShell the SSH login shell;
- when it added OpenSSH, sshd listens on the machine itself only and port 22 stays closed — the firewall rule for it stays off;
- runs as the
TermalinAgentWindows service. Remove it later with& "$env:ProgramFiles\Termalin\termalin-agent.exe" uninstall.
You then get a PowerShell terminal in the browser cabinet or the app, an SFTP file browser, an RDP desktop to the machine with the Files button, and monitoring and alerts. For AI apps, ssh_exec and the background job tools run in PowerShell on a Windows server; the hosted SFTP and database tools are for Linux servers for now. Full setup on Windows Server over SSH.
Remote desktops (RDP / VNC)
A Windows desktop over RDP, or any VNC desktop, opens in a tab in the desktop app or in the web cabinet — through the server's Connector (no inbound port, same path as the web terminal) or directly, when the desktop is reachable from the internet. In the cabinet, right-click a Connector or a host → Remote desktop…; in the app, add a host of type RDP or VNC. Either way you choose Through a Connector (an address on the Connector's network; an empty address or 127.0.0.1 is the machine the Connector runs on) or Direct (the desktop's public address). Then protocol, port, and the VNC password or the Windows user, password and domain. Saved as a host, the Connect choice is Directly (the desktop has a public address) or Through Connector {name}; the desktop app needs 0.1.48 or newer.
- Reach. RDP on port 3389, VNC on 5900–5999. Through a Connector: private addresses only (the Connector's own machine, or 10.x / 192.168.x / 172.16–31.x on its network). Direct: public addresses only — termal.in connects to the desktop itself, so the port must be open to the internet; a computer on a private network needs a Connector. 4 open desktops at once on Pro, 10 on Team; a session idle for 30 minutes closes.
- In the viewer. Tabs for several desktops, Ctrl+Alt+Del, fit to window or actual size, and hide the pane to come back later. Clipboard: in the browser you paste your clipboard into the desktop (paste in only); the desktop app syncs it both ways, with a per-host switch.
- Files beside the desktop. A desktop opened through a Connector on the Connector's own machine (empty address,
127.0.0.1,localhostor::1) gets a Files button that browses that machine's files through the same Connector, no key — docked on the right in the cabinet, beside the desktop in the app. Windows drive paths work (C:\Users…). Direct desktops and other addresses get no button. - Windows settings to check. Remote Desktop enabled, the user in the Remote Desktop Users group, and Network Level Authentication on (the default) — with it the password is never sent in the clear. A domain account signed in with Kerberos cannot work through the relay: use a local account, or NTLM.
- Brakes against guessing. Three failed sign-ins in a row to the same desktop pause it for 30 minutes; each later pause doubles, up to a day, and the count is forgotten after a quiet day. Direct mode allows at most 30 new sessions and 5 different addresses an hour.
- What passes where. The RDP stream is relayed by termal.in in memory and nothing of it is stored; with NLA the password is never in the clear; the RDP certificate is pinned on first use, and a change stops the session with both fingerprints and a trust button. The VNC password goes straight to the server; direct VNC is not encrypted between termal.in and the server — prefer a Connector for VNC. A direct session from the desktop app doesn't touch our servers at all. Sessions show in the gateway log like web-terminal sessions.
SSH keys & the key agent
Generate Ed25519 or RSA (2048 or 4096-bit) keys, or import existing ones — including ECDSA, which is import-only (passphrase-protected keys are supported). View the public key and fingerprint any time from the Keys screen.
Termalin ships its own SSH key agent. Unlock a key once and it authenticates your sessions — and your agents — without re-typing the passphrase. Keys are never written back to disk in plaintext, and a per-key timeout re-locks them after a while. Settings → Security → "Agent Keys" chooses which keys the agent may hand to an AI agent.
\\.\pipe\termalin-ssh-agent) on Windows, and a Unix socket in a private per-user directory on macOS and Linux — so other tools that speak the protocol can use it too.Master password & locks
Set a master password to encrypt your vault. It's verified with PBKDF2-HMAC-SHA256 (600,000 iterations) and used to derive the key that seals everything before sync. There is no reset by email: if you set up a recovery code (Settings → Security → "Recovery code"), you can use it on the lock screen or "Forgot password" to choose a new master password. Setting one needs cloud sync, because the code is stored on your Termalin account. Without a recovery code, lost means lost.
- Auto-lock — lock after a period of inactivity (Settings → Security).
- Lock on minimize — lock whenever the window is hidden.
- Unlock with biometrics — Touch ID on macOS, Windows Hello on Windows, the platform equivalent elsewhere.
- Remember master password — optional, off by default, stored in your OS keystore (Windows DPAPI, macOS Keychain or Linux Secret Service) and bound to your OS user. It's set by a number of days, and anyone signed into your OS account can then open Termalin.
- Also lock SSH keys — while locked, stop handing keys to agents (MCP).
- Pause AI agents while locked — refuse agents' requests until you unlock.
Locking shows an overlay over the running app — your sessions stay connected underneath, so unlocking picks up exactly where you left off. By default, agents you connected keep working behind the lock; turn on "Pause AI agents while locked" to stop them until you're back.
Sync & your account
Create an account to sync across devices. Your hosts, keys, snippets and recordings are encrypted on the device with your master-password key before upload — the server only ever stores encrypted blobs. See how security works for the full model.
From Settings → Account you manage devices, verify your email, change your account password or delete your account, see Activity & devices and your synced Command history (the commands you ran, by host — 90 days on Pro, a year on Team), and Refer a friend. There's also a full browser cabinet — a real terminal on your hosts plus SFTP, FTP and S3 file browsers, snippets and recording replay, all from any device and adapting to a phone. The cabinet also adds two-factor sign-in (TOTP + backup codes), passkeys, and sign-in with GitHub, Google or Apple, and keeps an Activity log of who did what. Right-click the web terminal for "Copy screen" or "Select text…" (the last 2,000 lines, with Copy selected / Copy all). Recordings are decrypted client-side, so the server never sees plaintext.
Recording & replay
Termalin can record sessions (asciicast format) and replay them with a scrubbable timeline. Recordings capture terminal output and event markers — never raw keystrokes — so a password typed at a hidden prompt (sudo and the like) is never echoed and never lands in a recording. Anything the terminal prints is part of the tape, so output that displays a secret still shows up.
- Toggle recording globally, or per host (Settings → Terminal, or the host form).
- The timeline is marked: green for agent commands, amber for your commands and system events. Click a marker to jump.
- Set a retention window so old recordings prune automatically.
Recordings sync to your account on Pro (kept 90 days) and Team (kept a year), sharing one cloud storage pool with backups — 25 GB on Pro, 100 GB on Team; when recordings alone fill it the oldest go first. Free keeps recordings locally. "Summarize with AI" on a recording hands it to your AI assistant — it's decrypted on your device only when you ask.
Backups
Encrypted backups of folders on a Linux server that has a Connector, taken by Termalin's cloud on a schedule — nothing to install on the server. In the cabinet (Account → Backups) or in the desktop app (Settings → Account → Backups; a job's key made in one opens in the other): + Add backup: the server, the paths (one per line, absolute), optional exclude patterns, a schedule (hourly, daily at an hour UTC — 03:00 by default, weekly on Sunday, or manual), how many copies to keep (1–365, default 7), a Read speed limit, MB/s (20 by default, 0 = no limit), and where to store them. File backups run on Linux, Windows and macOS servers; database backups (below) on Linux and macOS.
- Light on the server.
tarruns there at the lowest CPU and disk priority (niceandionice), and the archive is read back at the capped speed above. - Databases, not just files. A job can also dump PostgreSQL and MySQL/MariaDB — on the server or inside a Docker container, one database or all — into the same encrypted archive, with a README inside on how to restore. No database password is kept at Termalin: it uses the server's own local trust (a credentials file like
.pgpassormy.cnf, or the container's own settings). Linux and macOS servers; a dump needs free disk on the server about its own size while it runs. - Encrypted before it is stored. Adding a backup creates a key pair in your browser or the app; the public half goes with the job, the private half is encrypted with your master password (a key made in one client opens the other's archives). Termalin's storage, an S3 bucket and your own server hold ciphertext only. Download gives you the raw archive; Decrypt & save opens it and hands you a
.tar.gz(needs your master password). While an archive is being encrypted the stream passes through our backend in memory — the same trust model as the web terminal. - Where it goes. Three destinations under Your storage:
- Termalin storage — one pool with your recordings, 25 GB on Pro and 100 GB on Team; recordings keep priority, so a backup that would not fit does not start.
- + Add S3 bucket — your own S3-compatible bucket (AWS, Backblaze B2, Cloudflare R2, Hetzner, MinIO…), added with a test write; doesn't count against the pool.
- + Add my server — My server (via Connector): over SFTP to another of your servers that has a Connector (a second VPS, a home NAS). Default folder
termalin-backupsin the sign-in user's home, or a folder you give (relative to the home folder, or an absolute path; created if missing). Doesn't count against the pool.
- Rotation. The newest keep copies of a job stay; older ones are removed after each run.
- When it fails. A scheduled run that fails reaches you like an alert (email, push, Telegram, webhook). Run now shows the error directly.
- For agents. Over the hosted MCP,
backup_createtakes a backup before a risky change,backup_listchecks the last ones, andbackup_job_createdrafts a new job for you to confirm in the cabinet — for full-access connections and keys.
.tar.gz to the server over SFTP and unpack it — a one-click restore is on the list.Watch grid
Toggle the grid icon in the tab bar to mirror every open session at once, side by side. Tiles are live and read-only until you tap one to select it — the selected tile takes your keystrokes while the rest stay read-only. Sessions an agent is driving are highlighted. Type into the "send to all sessions" bar to run a command across every connected host at once.
SFTP & the editor
Open the SFTP browser from any connected session to move files around. It's an all-in-one viewer:
- Built-in editor with syntax highlighting, line numbers and find & replace.
- Viewers for images, video & audio, PDF, SVG, Markdown (rendered), CSV (as a table) and archives (browse and extract).
- Large media streams over a range request instead of loading into memory.
Database client
Termalin is a database client too — 13 engines in the same host picker: PostgreSQL, MySQL/MariaDB, SQLite, ClickHouse, MongoDB/DocumentDB, Redis, Elasticsearch/OpenSearch, RabbitMQ, Cassandra/ScyllaDB, Neo4j, InfluxDB, SQL Server and Cloudflare D1. Connect directly, through an SSH host (Termalin opens the port forward for you), or through a Connector to a database with no inbound port.
Pick a TLS mode (prefer, require or disable), browse tables and run queries with a results grid. Agents get read-only access by default through the data_* MCP tools. More on the database client page.
Server metrics & alerts
Every server with a Connector is monitored, in the web cabinet and in the desktop app (Settings → Account → Monitoring: an overview of every Connector server, collection switches, 1h / 24h / 7d charts, and the alert list and settings; the rarer panels open the web cabinet). Once a minute Termalin reads a few numbers over the Connector's existing connection — on Linux from /proc, df, ps and the like; on Windows through CIM/WMI (CPU, memory, page file, fixed drives, network, disk traffic, processes, uptime); on macOS from the system's own tools (load, CPU, memory, swap, volumes, network, processes, uptime). Nothing extra is installed, and containers, failed systemd services and PSI pressure are read on Linux only. Open the web cabinet → Server metrics for the list of servers, then a server for its dashboards and tables, over any range from 15 minutes to your plan's history (90 days on Pro, two years on Team). Part of Pro and Team. Overview →
- Switches — monitoring is on by default for every Connector. There is one switch for all servers and one for each server. Switching it off erases what was collected for that server, and alerts only work for servers with monitoring on.
- Alerts work with nothing set up: every monitored server is watched with default thresholds. Open Alert settings to change them.
- Where to send — email (the default), push to the iOS app, Telegram (one tap to connect the bot), or a webhook that Slack and Discord accept as is. Webhook requests are signed (HMAC-SHA256).
- Thresholds — the defaults (disk at 90% and 95%, a certificate 14 and 3 days before expiry, and the rest) can be changed.
- Tell me when a problem clears — a second message when the problem is over.
- Repeat — tell you again each time the same problem comes back, and remind you once a day while a critical one stays open. With repeat off, a problem that comes back the same day is not sent again unless it is critical and lasts.
- Mute — on an alert, mute that kind of alert on that server (for a day, or until you unmute it); on a server's page, Mute alerts for the whole server. Muted alerts stay in the list; only the messages stop.
- Send a test / Pause all alerts — fire a test notification to each channel, or pause every alert while you work. On the desktop, Settings → Security → "Server alerts" pings this device when one of your Connectors drops off or comes back.
The most recent two weeks are kept minute-by-minute; older history rolls into 5-minute averages (up to three months) and then hourly averages, with each interval's peak preserved. AI apps read the same numbers through server_metrics and open alerts through alerts_list. No Connector yet? Add one from Hosts → + → Connector in the cabinet.
AI assistant
Termalin has a built-in AI assistant (Settings → Security → "AI assistant") for session summaries, explanations of what you're looking at, turning a request into a command, and describing a Connector's server. It's optional and stays off until you set a provider.
- Summarize with AI on a recording.
- Explain with AI on selected terminal output — it returns what it means, the likely cause and what to do, plus a "Check:" block of read-only commands.
- Ask AI for a command from a plain-language request, and describe a Connector's server.
Providers. Use Termalin's built-in (Anthropic) allowance — 400 requests a month on Pro, 1,000 on Team, 40 on the trial (plus 80 a day), none on Free — or plug in your own Anthropic key (no allowance, any plan). Or point it at your own endpoint: any OpenAI-compatible API (OpenAI, Gemini, OpenRouter, Groq, DeepSeek) or a local model through Ollama or LM Studio, in which case requests go straight from your device and Termalin's server never sees them.
AI apps & hosted MCP
Chat apps and remote agents reach your servers through the hosted MCP server, with no desktop app running. They reach only servers that run a Connector — a host saved only in the app is invisible here — and this path is Pro (or the trial). There are 23 tools; see the MCP overview or the full tool reference.
Connect
- claude.ai and ChatGPT — add Termalin from their connector / apps directory and sign in with your Termalin account (OAuth 2.1 + PKCE). Then enable Termalin in the conversation's tools (+) menu.
- Claude Code —
claude mcp add --transport http termalin https://termal.in/mcp - Codex —
codex mcp add termalin --url https://termal.in/mcp - Cursor — add
"url": "https://termal.in/mcp"undermcpServersinmcp.json. - Anything without OAuth — create an API key in the cabinet ("API keys & MCP") and point the client at
https://termal.in/mcpwithAuthorization: Bearer tk_live_…. Up to 10 keys on Pro, 25 on Team; a key needs a verified email (7-day grace).
Termalin for Chrome. A browser extension adds a Run on server button to code blocks on ChatGPT, Claude, GitHub and Stack Overflow — pick a server, check the command, run, and send the output back into the chat. A side panel shows your servers, open alerts and metrics with a command box; the toolbar badge counts open alerts. It signs in like any AI app and follows the same command rules, in nine languages. Install it from the Chrome Web Store.
Control
- Each AI-app connection and each API key carries a command rule: Full access, Only listed commands, or Read-only — no commands or file writes. In the key form you also scope which servers it reaches and set an expiry (In 90 days by default, 30 days, 1 year, or Never). A Test key button and per-client setup snippets (Claude Code, Cursor, VS Code, Claude Desktop, Manus and others, curl) appear after you create one.
- A server is reachable only while its Connector's AI access is on; its Note for AI rides along as
ownerNoteinhosts_list. - Every action is written to the cabinet's audit log ("Ran a command"), and — if you turn on "Keep command output" — to a log sealed with your master password. Disconnecting an app cuts it off immediately.
- Runs are rate-limited per account (about 60 a minute) and each call is time-boxed (60 seconds by default, up to 300 with
timeout; some chat apps stop waiting sooner); usejob_startfor anything longer.
Tools at a glance
hosts_list, ssh_exec, ssh_exec_many (up to 10 servers), job_start / job_status / job_stop / job_list, server_metrics, alerts_list, backup_create / backup_list / backup_job_create, sftp_list / sftp_read / sftp_write (text, 512 KB), data_tables / data_schema / data_query (read-only unless the key or connection grants writes), and generate_password.
Agents & MCP — the local server
On your own machine, agents reach your hosts through a real MCP server bundled with the app, using your key agent — so agents never touch your keys — while you watch and review every move. The local server has 22 tools; the hosted endpoint has 23, and the two sets differ. For chat apps and remote agents with no app running, use AI apps & hosted MCP instead.
Point your agent's MCP client at the bundled termalin-mcp binary. With Claude Code, for example:
claude mcp add termalin -- <path>/termalin-mcp
It reaches the hosts you tick in Settings → Security → "Agent Access (MCP)" — there's a "Connect an assistant" button with Copy command / Run it for me for Claude Code and a ready config for Claude Desktop, Cursor, Windsurf, Cline and more. Each host (written with agent-only auth, no passwords on disk) carries an agent access level — full, an allowlist of commands, or blocked. The tools cover the whole workflow: list hosts, run one-off commands, open and reuse persistent SSH sessions, read and write files over SFTP, open port forwards, and — while the app is running with the consent toggles on — open live terminal tabs, step into a session you already have open, run a shell on this computer, or query your saved database connections. The local server is free on every plan.
Staying in control
- On your machine, every agent toggle in Settings → Security is off until you turn it on — "Agent in Terminal", "Let agents run commands", "Let agents use the local terminal" and "Let agents query your databases" are each separate — and only the hosts you tick are exported.
- On the hosted side, you choose by connecting an AI app or creating a key; a server's AI access is on by default, so switch it off on any Connector you don't want reached.
- Local agent commands are marked in the recording (green) and visible live in the watch grid. Hosted commands don't run in a desktop tab — they land in the cabinet audit log and, if you turn it on, the "Keep command output" log.
- Access is granular — per host on the desktop (full / allowlist / blocked), and per AI-app connection or API key on the hosted side (Full / Only listed commands / Read-only).
- Hosted runs are rate-limited per account (about 60 a minute) and time-boxed (60 s a call by default, up to 300 s with
timeout); usejob_startfor longer work.
Plans at a glance
The whole local desktop app is free forever — SSH/SFTP, the database client, RDP and VNC desktops opened directly from the app, recording and replay, the watch grid, and the local MCP server (an agent stepping into a session you already have open costs nothing). Free has no sync, no web cabinet, no Connectors, no API keys and no bundled AI requests (it works with your own key).
Pro ($10/mo, or $96/year) and Team add the hosted side: cloud sync, the web cabinet and web terminal, Connectors, the hosted MCP (OAuth + API keys), encrypted server backups, remote desktops (RDP/VNC) through a Connector or the browser, cloud storage for recordings and backups, monitoring and the AI assistant's monthly allowance. Every new account gets a 14-day Pro trial (28 days if referred; one trial per device or server). See pricing for the Team price, the Lifetime offer and the full table.
Cancelling. A card subscription: open the cabinet → your plan → Manage subscription to cancel or change the card (the payment receipt email has the same link). Pro stays on until the end of the period you paid for. A plan paid from your balance: switch off Auto-renew plans from balance in the cabinet. Bought in the iPhone app: cancel in iPhone Settings → Apple ID → Subscriptions.
Updates
Termalin updates itself silently. Each release is signed with an offline key; the app verifies the signature and the installer's checksum before installing, so a compromised update server can withhold an update but never inject one. Check manually from Settings → About → "Check for updates".
Troubleshooting
SmartScreen blocks the installer
The standalone Windows .exe isn't code-signed yet — More info → Run anyway, or install the signed build from the Microsoft Store.
An agent can't connect (local)
Check that the app is running, "Agent in Terminal" (and "Let agents run commands" for injection) are on, and the host allows headless connection (no interactive passphrase needed, or the key is already unlocked in the agent).
A chat app sees no servers
Hosts saved in the app or cabinet are not visible to AI apps — only servers running a Connector are. Install one (termal.in/account, or "Make it available" in the web terminal). If servers are connected but still hidden, turn on AI access in the Connector's settings. If the chat says the plan doesn't include it, the trial ended — the hosted MCP is Pro.
An API key is refused
Check the reason shown next to the key in the cabinet — copy cut off, expired, plan, unverified email, or revoked — and use Test key. If the chat never calls Termalin, enable it in the conversation's tools (+) menu. If a command was cut off, it ran past its time limit (60 s by default, timeout up to 300 s) or the chat app stopped waiting — use job_start / job_status.
I forgot my master password
There's no reset by email. If you set a recovery code beforehand, use it on the lock screen or "Forgot password" to choose a new one. Without one, you can reset the app and start fresh, but locally encrypted data tied to that password is unrecoverable.
Someone's server was hit by a Termalin user? See report abuse. Still stuck? Open a support request or email hello@termal.in — we read everything.