Skip to content

October 14, 2026

The Python SDK, CLI and MCP server 1.2.0 edit pods and storage like the console, open storage over SSH and start pods with a model set. They also add local storage created with a pod, a choice of CPU line, template port changes, storage usage warnings, starts that follow the console or wait for room, and failed pod creations reported right away.

  • Edit pods. update_pod(), meshive pod-update <workspace> <pod> and the new update_pod tool change a pod like the console’s edit screen: name, template, rental type, GPU or CPU line and size, environment variables, ports, start command and storage — attach network storage or local storage on the pod’s machine, create new local storage, or detach. Send only what changes. The estimate (estimate_pod_update, --estimate, or the tool’s preview) lists the changes, the hourly price before and after, and whether the pod restarts: a running pod restarts with the new settings, a stopped pod uses them at its next start, and a rename alone doesn’t restart it. The pod type, premiums and image can’t change.
  • Moving a pod for an edit needs consent. If the pod’s machine can’t fit the change, nothing changes until you allow a move (allow_node_migration, CLI: --allow-node-migration). A pod with unpreserved workspace files also needs the separate data-loss consent (allow_data_loss), and attached local storage keeps a pod on its machine until you detach it. An edit that detaches the storage holding watched folders asks you to confirm dropping those folders first.
  • Edit storage. update_storage(), meshive storage-update <workspace> <storage> and the update_storage tool rename a volume, grow it — storage can’t shrink — and turn its usage warning on or off, showing the new price first.
  • SSH into storage. connect_storage(), meshive storage-connect <workspace> <storage> and the connect_storage tool open a volume for SSH and SFTP, like the console’s Connect, and return a one-time login. Encrypted storage is unlocked for this and locks again automatically after a while.
  • Model sets. list_model_sets(), meshive model-sets <workspace> --template <id> and the model_sets tool list the model sets a template offers. Pass one as model_set (CLI: --model-set) when you create a pod. Its files are added before the pod is created, which can take several minutes; if any file can’t be added, no pod is created, and the files already added are reused next time.
  • Watched folders and input assets as on the console’s create screen. When you create a pod, watched_template_folders (CLI: --watch-off) turns off the template’s own watched folders or changes their patterns from the start, a folder in watched_folders can be added turned off, and an input asset with paths can keep the chosen files’ folder structure ("strip_prefix": ""), like the console’s Keep structure.

Code written for 1.0 keeps working. To use the new features, upgrade to meshive>=1.2,<2. Agents connected to the hosted MCP server need no changes; if you run the server yourself, use the meshive/meshive-mcp:1.2.0 or latest image.

Python SDK → · CLI → · MCP server →

These were planned as 1.1.0. 1.1.0 was not released on its own, so they ship in 1.2.0.

  • Local storage with a pod. Create local storage on the pod’s machine together with the pod: local_volumes in the SDK and MCP server, meshive pod-create --local-volume scratch:/scratch:50 in the CLI (add :encrypted to encrypt it). Each volume needs at least 10 GiB, and spot pods can’t have one. The estimate includes its hourly price.
  • Choose a CPU line. list_cpus(), meshive cpus and the new cpus tool list the CPU lines you can rent, with prices per vCPU and per GiB of RAM. Pass one as cpu_line (CLI: --cpu-line) to choose where a CPU pod runs; without it, the cheapest line that fits is used.
  • Starts that wait for room. Starting a stopped pod also takes the placements wait_same_node and wait_any_node (CLI: pod-start --placement): the pod waits until a machine has room, then starts by itself. wait_any_node can move the pod, so it needs the same data-loss consent as any_node.
  • Failed creations reported right away. Pass transaction_id=created.transaction_id to wait_for_new_pod and a creation that fails — for example because the image can’t be pulled — ends the wait at once with the reason instead of running into the timeout. meshive pod-create --wait does this for you.
  • Template ports. Rename, renumber, expose or hide the ports a template opens, as on the console’s deploy screen: template_ports=[{"port": 8080, "name": "ide", "new_port": 8443}] in the SDK and MCP server, meshive pod-create --template-port 8080:ide:8443 in the CLI. Template ports can’t be removed; ports (--port) still opens new ones.
  • Storage usage warnings. create_storage(..., usage_warning=True, usage_warning_threshold=0.8), meshive storage-create --usage-warning 80 and the create_storage tool’s usage_warning email you when the storage fills past the threshold — 90% if you leave it out — like the console’s usage warning.
  • One operation by ID. get_transaction(), meshive transaction <workspace> <id> and the transactions tool with transaction_id show a pod operation’s status, steps and failure reason, even after it has dropped off the list of operations in flight.

Code written for 1.0 keeps working; starting a pod without a placement now follows the console (see below). To use the new features, upgrade to meshive>=1.2,<2. Agents connected to the hosted MCP server need no changes; if you run the server yourself, use the meshive/meshive-mcp:1.2.0 or latest image.

Python SDK → · CLI → · MCP server →

These come with 1.2.0. Three of them are enforced by the server, so from October 15 they also apply to older SDK, CLI and MCP server versions: the same checks as the console, the larger default CPU pods, and storage created on its own being network storage of at least 10 GiB.

Pods and storage follow the console’s rules

Section titled “Pods and storage follow the console’s rules”
  • Same checks as the console. vCPU and RAM must be sizes the console offers, a port the template already opens or a port listed twice is refused, environment variables the template requires need a value, and a start command can be at most 4,096 characters. The error says what is allowed.
  • Larger default CPU pods. CPU pods now get 8 vCPU and 32 GiB of RAM by default (or the nearest sizes the line offers), as in the console, instead of 2 vCPU and 4 GiB.
  • Starting without a placement picks what the console would. A start without a placement (start_pod, meshive pod-start, the start_pod tool) used to mean same_node. Now the server picks like the console’s Start button — the original machine, another machine when the original one can no longer run the pod, or a placement that waits when there’s no room right now or the pod is already waiting for any machine — and the result says which (SDK: ResourceAction.placement). A pick that would move a pod with unpreserved workspace files is refused with the data-loss consent error naming the placement; run it again with that placement and allow_data_loss=True (CLI: --allow-data-loss). Pass same_node to keep the old behavior.
  • Network storage on its own, local storage with a pod. Storage created on its own is network storage of at least 10 GiB, as in the console; a smaller size, or local storage created that way, is refused. A new pod’s volumes attach existing network storage only — use local_volumes for local storage.
  • The server decides which values are allowed. The SDK and CLI no longer check placements, storage types, disk types or the GPU count themselves, so new values work without upgrading.
  • Unknown input asset keys are refused. An input_assets entry with a key the SDK doesn’t know, such as include_paths instead of paths, now raises an error instead of being ignored, which attached the whole asset.
  • The default watch rule stays with the pod. A pod created through the SDK, CLI or MCP server from a template that declares no output folders now keeps the /outputs rule it was created with, as console-created pods do, so a later change to the template doesn’t change it when you edit the pod.

These are still accepted but ignored. They warn — a DeprecationWarning in the SDK, a note in the CLI — and will be removed in 2.0.

  • region on pods and storage, and --region on pod-create and storage-create. Pods and storage are placed without a region.
  • disk_type on storage, and --disk on storage-create. Storage is always NVMe.