Get started with Tessera
Rent Linux machines by the hour and run them with a prompt. You can go from nothing to a machine you control through Claude with a single command — no dashboard visit required.
Get started in one line
Two real paths. If you have never signed up, create your whole account straight from the terminal or from Claude itself. If you already have an API token, connect and go.
New accounts start with a free trial worth about 5 running hours of the smallest machine — no card required. When the trial credit runs out your machines simply pause (nothing is deleted) until you add funds. A card is needed only to continue past the trial, and is entered only on the payment processor's own secure page. One free trial per email address.
Brand new? Create an account through Claude — no website
Two equivalent ways, both with the free trial above — and both hand you a full-access token, so Claude can create your machine and build inside it (open a shell, run commands), the whole flow from one chat. Pick whichever fits how you work.
Paste this into your terminal. It shows the trial terms and the live per-hour prices, asks you to confirm, takes your email and a password, creates your account, and runs claude mcp add for you.
curl -fsSL https://tesserahosting.com/start | sh
It needs only curl plus python3 or node (you already have node if you run an MCP client). Your API token is printed once — save it. If Claude Code is installed, the connection is wired up automatically.
Point Claude at Tessera's public onboarding server — no token needed — then just ask.
claude mcp add --transport http tessera-start https://api.tesserahosting.com/mcp
Claude calls account_create, shows you the token to save, wires up the full Tessera server with it, and builds the machine. Ask it to add_funds for a pay-link when you want to continue past the trial, and it can poll account_status to confirm the funds landed.
Already have a token? Connect and go
If you already created an account (on the web or earlier), connect the full Tessera server with your token. Paste your token in place of orb_YOURPREFIX_YOURSECRET:
claude mcp add --transport http tessera https://api.tesserahosting.com/mcp --header "Authorization: Bearer orb_YOURPREFIX_YOURSECRET"
Paste the token literally — no leading $. Writing Bearer $orb_… makes your shell treat $orb_… as an empty variable, so an empty token is sent and every call fails with 401 Unauthorized. The string starts with orb_, never $.
Full connection details — changing a token later, --scope user, and connecting ChatGPT — are in AI access (MCP).
Sign up & create your first machine
Prefer a dashboard? Sign up in the browser and build your first machine with the guided wizard. This creates exactly the same account the one-liner does — you can add AI access to it any time.
1. Create your account
Head to dashboard.tesserahosting.com and create an organisation. Everything you build lives inside your organisation, and you can invite teammates to it later.
- Open the sign-up page and fill in your organisation name, your name (optional), your email, and a password of at least 12 characters. Result: your organisation is created and you are signed straight in.
- Choose Create an API key when prompted, or skip it — you can always mint one later under Settings → API tokens. Result: if you create one, the key is shown once along with a ready-to-paste command for Claude Code. Copy it before you leave the screen.
- Choose Create my first machine to jump straight into the wizard, or Skip to dashboard.
You sign in with your email and password. If your account has an authenticator app enrolled, you will be asked for a six-digit code after your password.
2. Create your first machine
The New machine wizard walks you through everything a machine needs. Its steps stay open on a rail down the left — go back to any of them to change your mind before you build.
- What are we making? — give the machine a name (like
orders-api), an optional note about what it is for, and pick an operating system. Optionally choose a one-click stack (like LAMP) to have software installed and configured at first boot. - How big should it be? — pick a preset size, or choose Custom and set processors, memory and storage yourself. An allowance panel shows how much of your quota the choice uses. Result: storage can be grown later but never shrunk, so choose it deliberately.
- How should the storage be laid out? — keep one system disk, or add a separate data disk with its own mount point.
- Where does it live? — join a private network (or create one on the spot). The machine's address is assigned for you out of the network's range.
- What can reach it? — nothing is open until you say so. Add the ports you need, and choose who each is reachable from. (SSH on port 22 is handled separately and is always available through the secure door.)
- Who can sign in? — tick the SSH keys to install, make a new key in your browser, or paste a public key. Set a console username and password for the in-browser console. Result: a browser-made private key is downloaded to you when the machine is created — the platform only ever receives the public half.
- Ready to build — review every choice, optionally attach a git repository to deploy from, then press Create machine. Result: the wizard takes you to the machine's own page, where the one-time console password, the connect command, and any stack credential are shown. Save the password — nothing keeps a readable copy of it.
Prefer not to click? Everything the wizard does is one prompt to your AI, or one API call. Once you have connected an AI (next section), just say "create a 2-vCPU Debian machine called orders-api and open port 443".
AI access (MCP)
Connect Tessera to Claude Code or ChatGPT and your AI can build and run your infrastructure for you — create machines, wait for them to come up, run commands inside them, open ports, attach domains, and check your spend, all in plain language.
In a hurry? Get started in one line connects you (and can even create your account) with a single command. This section is the full reference for connecting and what your AI can do once it is wired up.
Get an API token
Your AI authenticates with an API token. Every token looks like orb_YOURPREFIX_YOURSECRET and carries only the scopes you grant it — a read-only token is perfect for letting an assistant explore; creating and deleting machines needs the matching :write scopes.
- In the dashboard, open Settings → API tokens and mint a new token (the onboarding screen can create one named "AI access (MCP)" for you). Result: the secret is shown once and never again. Copy it now.
- Keep the whole string, including the
orb_prefix. This is what you paste below.
Connect Claude Code
Run this once in your terminal, pasting your token in place of orb_YOURPREFIX_YOURSECRET:
$ claude mcp add --transport http tessera https://api.tesserahosting.com/mcp \ --header "Authorization: Bearer orb_YOURPREFIX_YOURSECRET"
Paste the token literally — no leading $. Writing Bearer $orb_… makes your shell treat $orb_… as a variable, which is empty, so an empty token is sent and every call fails with 401 Unauthorized. The string starts with orb_, never $.
To change the token later, remove the connection first, then add it again: claude mcp remove tessera, then re-run the command above with the new token.
Add --scope user to the command to make Tessera available in every project, not just the current one.
Connect ChatGPT
Tessera publishes an OpenAPI description you can import as a custom GPT Action:
- In the GPT editor, add a new Action and import the schema from
https://api.tesserahosting.com/api/openapi.json. - Set the authentication to API Key → Bearer, and paste your
orb_…token as the key. Result: the GPT can now call every Tessera endpoint your token's scopes allow.
Use Tessera on mobile — the Claude connector
There is a third way to connect, and it is the one that reaches your phone. Add Tessera once as a custom connector in claude.ai (in a browser) or in Claude Desktop, and it syncs to the Claude mobile apps automatically — so you can create and run machines, check your spend, and more from a chat on the go. It talks to the same MCP server as the claude mcp add command above; you are just wiring it up through Claude's own settings instead of the terminal.
- Open claude.ai in a browser, or the Claude Desktop app — not the mobile app. Custom connectors are added from web or desktop; your phone picks them up afterwards.
- Go to Settings → Connectors and choose Add custom connector.
- Paste the Tessera MCP server URL, give it a name such as Tessera, and click Add:
https://api.tesserahosting.com/mcp
- Authenticate with your API token. Provide your
orb_YOURPREFIX_YOURSECRETtoken where the connector asks for authentication — for example as anAuthorizationheader with the valueBearer orb_YOURPREFIX_YOURSECRET. Result: the connector shows as connected and Tessera's tools become available in your chats.
Tessera authenticates with your API token, not an OAuth login. There is no "sign in with Tessera" pop-up — you paste your own orb_… token as the connector's Bearer credential. Don't have one yet? Mint it under Get an API token above, and paste the whole string including the orb_ prefix.
Once it is added on web or desktop, the connector syncs to your Claude mobile apps automatically — nothing to set up on the phone. From a mobile chat you can then just ask in plain language, and Claude uses Tessera's tools to do it: "spin up a small Ubuntu machine and tell me when it's ready," or "what have I spent this month?"
What your AI can do
Once connected, your AI has a full toolbox. You never call these tools yourself — you describe what you want and the AI chooses them. A few things to try:
Create, wait, and build inside a machine
The AI can create a machine, block until it is genuinely ready, then run commands and build your app inside it.
Under the hood it creates the machine, polls until it reports running, enables operator access, and runs your build commands — reporting progress as it goes.
Lifecycle: start, stop, reboot, resize, delete
Networking: ports and domains
Check your spend
Almost every change is asynchronous: the AI is told the request was accepted, then waits for the machine to reach the state you asked for. A first build can take a few minutes — the AI keeps waiting and updates you, rather than assuming it is done.
Accessing your machine
You can reach a machine three ways: over SSH with your own key, through the in-browser console, or by granting your AI operator access so it can work inside the machine for you.
a. SSH with your own key
SSH is key-only — passwords are never accepted over SSH. Every connection goes through a single secure door that authenticates you with a key you registered, then forwards you only to machines your organisation owns. You never need a public address for the machine itself.
- Install a key on the machine: tick it in the wizard's Who can sign in? step, or add one under Settings → SSH keys and include it when you create a machine. (Keys are installed at build time.)
- Open the machine's page in the dashboard and copy the connection command shown there. It is generated for your machine and already routes through the secure door.
- Replace
{key}with the path to your private key and run it. Result: you land on the machine as your login user. If SSH for the machine is restricted to your VPN, the page tells you so and gives you the direct command to use once the tunnel is up.
The command takes this shape (copy the real one from your machine's page rather than typing it by hand):
$ ssh -i {key} -o IdentitiesOnly=yes \ -o "ProxyCommand=ssh -i {key} -o IdentitiesOnly=yes -W %h:%p -p 2222 <door>" \ {user}@<machine-address>
The page also gives you an equivalent ~/.ssh/config block. Once it is saved, connecting is just ssh <machine-name>. The explicit IdentitiesOnly=yes matters — it stops your client offering the wrong keys to the door first.
b. The in-browser console
Every machine has a console you can open from its page in the dashboard — no SSH client, no key, and no network path into the machine required. It is the way back in if you ever lock yourself out over the network.
- Sign in at the console with the console username and password you set in the wizard's Who can sign in? step (the one-time password was shown on the machine's page right after it was built).
- The console works from anywhere and is unaffected by your firewall or VPN rules, because it does not reach the machine over the network at all.
c. AI operator access
To let your AI work inside a machine — run commands, read and write files, tail logs — you grant operator access. It is off by default, granted per machine, and completely revocable.
Enabling it provisions one dedicated, non-root account on the machine called ai-operator. Everything the AI does lands as that account. You will see it in the machine's account list — operator access is a visible, removable account, never a hidden backdoor.
- Ask the AI to enable operator access (or turn it on from the machine's page). If the machine needs one restart to pick up its agent, you are asked to consent to that first. Result: the AI waits until access is fully live before it runs anything.
- For native-speed SSH, the AI authorises its own public key onto the
ai-operatoraccount — the platform only ever sees the public half. - Grant sudo only if the AI needs administrative rights. This is a separate, explicit escalation from enabling access — the operator stays non-root until you grant it, and you can revoke it at any time.
Revoking is complete and immediate. Disabling operator access closes the command channel at once, revokes the AI's authorised key, and removes the ai-operator account — locking the AI out of both commands and SSH. Every command the AI runs is recorded in your audit log (the command and its result size, never its output).
Auto-scaling
Let a machine grow itself when it is busy, between a floor and a ceiling size you choose. It is an opt-in you set per machine — Tessera never resizes a machine you have not put a policy on.
What it does
Auto-scaling moves a machine up and down through the standard sizes (Small → Standard → Large → X-Large) in response to how hard it is working. You set the smallest and largest size it is allowed to reach; it never goes below your floor or above your ceiling.
Wherever the hardware allows, growth is live, with no interruption:
| Resource | Scaling up | Scaling down |
|---|---|---|
| Processors | Added live, no restart | A brief restart at the smaller size (removing CPU or memory live is not safe) |
| Memory | Added live where the machine supports it; otherwise a brief restart, and the machine tells you which happened | |
| Storage | Grown live; the machine enlarges its own filesystem | Never shrunk |
If a machine has to move to make room to grow, that move is also live — you are told it "scaled up to give it room, with no interruption". Every scale is written to the machine's history with an honest note of what happened and whether there was any downtime.
Thresholds, hysteresis and cooldown
A policy decides when to move using sustained utilisation, so a brief spike never triggers a resize:
| Setting | What it means | Default | Range |
|---|---|---|---|
| Scale-up metric | What to watch: processor, memory, or either | Processor | cpu / mem / either |
| Scale-up level | Grow when usage stays above this | 80% | 1–100% |
| Scale-up sustained for | How long usage must stay high first | 5 minutes | 1 min – 24 h |
| Scale-down | Optionally shrink when it goes quiet | Off | on / off |
| Scale-down level | Shrink when usage stays below this | 25% | 0–100% |
| Scale-down sustained for | How long usage must stay low first | 30 minutes | 1 min – 24 h |
| Cooldown | Minimum wait between scales | 10 minutes | 1 min – 24 h |
The scale-down level must sit below the scale-up level — that gap is the hysteresis that stops a machine bouncing between two sizes. The cooldown makes it wait after every change before it will move again.
Enabling a policy
- Open the machine's Auto-scale settings, or ask your AI to set it up.
- Pick the smallest and largest size it may use, adjust the levels if you want, and turn it on. Enabling with defaults means "grow up to the largest size if you need to, never below where you are now".
Your wallet gates scale-up. If your balance will not cover the larger size, the machine stays where it is and the history notes "it is busy but your balance will not cover the larger size yet". Keep your wallet topped up (or turn on auto-refill) so a busy machine can grow when it needs to.
Live growth needs a machine that was built to grow. A machine that was not can still scale, but a memory change may need a brief restart — the history always tells you which path was taken.
Images & one-click apps
Start from a clean operating system, or from a turnkey stack that arrives already installed and configured. Ask your AI to "list the images" or "list the stacks" any time to see the live catalogue.
Operating system images
Eight current, signature-verified Linux images:
| Image | Id | Family |
|---|---|---|
| Debian 13 | debian-13 | Debian |
| Debian 12 | debian-12 | Debian |
| Ubuntu 24.04 LTS | ubuntu-24-04 | Ubuntu |
| Ubuntu 22.04 LTS | ubuntu-22-04 | Ubuntu |
| Rocky Linux 9 | rocky-9 | Rocky |
| AlmaLinux 9 | almalinux-9 | AlmaLinux |
| Fedora 44 | fedora-44 | Fedora |
| Alpine Linux 3.24 | alpine-3-24 | Alpine |
You can also boot from your own installer media instead of an image and install by hand at the machine's console.
One-click stacks
Fourteen turnkey setups. Choose one in the wizard's first step, or pass it when you create a machine, and it is installed and configured at first boot. Stacks that serve the web publish on your domain over HTTPS; database and cache stacks are reachable only from your own machines and your VPN.
Apache, PHP and MariaDB, with your domain published over HTTPS.
Nginx, PHP-FPM and MariaDB, published on your domain over HTTPS.
A PostgreSQL server with a database and an application account, reachable only from your own machines and your VPN.
A MySQL-compatible database, reachable only from your own machines and your VPN.
An in-memory cache and queue, reachable only from your own machines and your VPN.
Docker Engine and Compose, ready to run your own containers.
A single-node Kubernetes cluster, reachable from your own machines and your VPN.
Self-hosted Git service (Gitea-compatible), published on your domain.
Self-hosted workflow automation, published on your domain.
A self-hosted publishing and newsletter platform, published on your domain.
Privacy-friendly, self-hosted web analytics, published on your domain.
A self-hosted status and uptime monitor, published on your domain.
A self-hosted password manager (Bitwarden-compatible), published on your domain.
Your own WireGuard VPN server with a web admin UI.
Machines
A machine is a Linux server you rent by the hour. Pick a preset size, or dial in exactly the processors, memory and storage you want.
Preset sizes
| Size | Id | Processors | Memory | Storage |
|---|---|---|---|---|
| Small | s1.small | 1 vCPU | 2 GiB | 40 GiB |
| Standard | s1.medium | 2 vCPU | 4 GiB | 80 GiB |
| Large | s1.large | 4 vCPU | 8 GiB | 160 GiB |
| X-Large | s1.xlarge | 8 vCPU | 16 GiB | 320 GiB |
Custom sizes
Choose Custom in the size step to set your own shape within these bounds:
- Processors: 1 to 16 vCPU
- Memory: 0.5 GiB to 64 GiB, in 0.5 GiB steps
- Storage: 10 GiB to 2 TiB, in 10 GiB steps
Lifecycle
- Start / stop / reboot — a machine bills while it is running; stop it when you are done.
- Resize — change the size at any time. The machine must be stopped to resize by hand, and storage can only grow, never shrink. (Running machines can grow live under an auto-scale policy.)
- Delete — permanently removes the machine and its disks. This cannot be undone.
- Export — download a machine as a standard portable disk image plus its configuration, so you can run it elsewhere. There is no export fee, and no lock-in.
Networking
Private networks wire your machines together; a firewall controls what can reach them; custom domains publish them; and a personal VPN lets you reach them privately.
Private networks
Machines on the same private network reach each other privately, and nothing else can. Each machine is assigned a fixed address out of the network's range when it is built, and keeps it for as long as the machine exists. When you create a network you choose its size:
| Size | Usable addresses |
|---|---|
| Compact | 126 |
| Small | 254 |
| Medium | 1,022 |
Firewall (open ports)
Inbound is deny-by-default — nothing is reachable until you open a port. Rules can apply to one machine or to your whole organisation.
- Presets for common services:
http,https,postgres,mysql,rdp,ping. - Or a protocol (
tcp,udp,icmp) with a single port like8080or a range like8000-8100. - Reachable from: Anywhere, only through your VPN, only your other machines, or a specific address or range.
Port 22 (SSH) is reserved and cannot be opened as a firewall rule — SSH is always handled through the secure door and governed by your VPN access policy. Replies to connections a machine started are always allowed.
Custom domains & TLS
Attach your own domain (like shop.example.com) to a machine from the machine's own page. You choose who terminates TLS — the platform edge or the machine itself — and, if verification is pending, Tessera gives you the exact DNS record to add. Point the domain elsewhere any time; it is yours.
VPN
Enrol a WireGuard device to reach your private networks over an encrypted tunnel. You generate the keypair and register only the public key — the private key never leaves you — and get back a ready-to-use configuration. Choose a split tunnel (only Tessera traffic goes through it) or a full tunnel.
Billing
Tessera is prepaid: you keep a wallet topped up, and machines draw from it by the hour while they run.
How charges work
- Billing is prepaid, in US dollars.
- A machine is metered by the hour it runs, on its processors, memory and storage. Stop a machine and the compute charge stops.
- Ask your AI "what's my current bill?" or open the wallet in the dashboard to see the running total, the current unit prices, and the per-line charges.
Current unit prices are shown live in your dashboard wallet and on the size step of the create wizard, so you always see the real number before you build.
Top-ups
Add funds to your wallet at any time. The dashboard offers quick top-up amounts, or enter your own within the allowed range.
Running low
You choose what happens as your balance runs down (under your wallet's low-balance setting):
- Auto-refill — when the balance drops below a threshold you set, Tessera automatically charges your saved card for a top-up amount you choose, so your machines keep running.
- Pause at zero — let machines stop when the wallet empties, rather than spending more.
If the balance reaches zero (and auto-refill is off or cannot charge), your machines are paused — stopped with their state saved, never deleted — and a top-up brings them straight back. There is a grace period before that pause, and further notice before anything is ever removed, so running out is always recoverable.
API
Every action in Tessera is a REST call with a bearer token. Curl it, put it in CI, or build your own control panel — the same API your AI uses over MCP.
Base URL and authentication
- Base URL:
https://api.tesserahosting.com/api - Auth: send your token as
Authorization: Bearer orb_YOURPREFIX_YOURSECRET. - OpenAPI: the full machine-readable description lives at
https://api.tesserahosting.com/api/openapi.json— import it into ChatGPT, Postman, or a client generator.
$ curl -X POST https://api.tesserahosting.com/api/machines \ -H "Authorization: Bearer orb_YOURPREFIX_YOURSECRET" \ -H "Content-Type: application/json" \ -d '{"name":"web-1","image":"debian-13","size":"s1.medium"}'
Tokens and scopes
Mint tokens under Settings → API tokens. The secret is shown once and cannot be shown again — copy it when it appears. You also choose when it expires (30, 90, or 365 days, or never).
Every token carries scopes — grant a token only what it needs. A read-only set is ideal for letting an assistant explore; creating and deleting needs the matching :write scopes. The full scope vocabulary:
Tokens created in the dashboard are granted full access. To restrict a token to specific scopes, create it through the API (POST /api/org/tokens with a scopes array) — pass ["*"] for full access.
Asynchronous operations
Anything that changes a machine (create, start, stop, resize, delete, and more) is asynchronous. The API accepts the request and returns 202 immediately with a job to track. Read the machine back until its status settles into the state you asked for — rather than assuming the change is instant. Your AI does this waiting for you over MCP.
The OpenAPI document lists every endpoint, its parameters, and the scope it needs. It is the authoritative reference — this page is the tour.