MCP tools reference
Every tool Portal's MCP server gives a coding tool, generated from the server's own tool definitions.
Warnings and limits
- Portal is open to anyone with an active Clusy account and a verified email address.
- A tool acts with the scopes its sign-in holds: an agent token is never given the
adminscope, so a run with stored secrets is refused today (Known issues), and tools that change settings or clean up leaks are refused by hosted Portal (an Owner does both in the console). runuploads only a directory inside the one the server started in, or oneportal mcp --root DIRadded; never your home directory or a directory above it, and never one inside a dot directory.connect_from_climakes changes in your cloud account only withconfirm=true, after you agreed to the plan it showed, and only as it was shown.loginsigns in only to the controller the CLI uses, or Portal's own: a page or a message cannot point it anywhere else.
portal mcp serves these tools over stdio; portal setup registers it with the coding tools it finds (Set up your coding tool). Each tool answers with Portal's JSON as text. Jobs may be named by id, a unique start of an id, or name.
| Tool | What it does |
|---|---|
login | Sign this machine in to Portal through the browser, with no token pasted or shown, to the controller the CLI uses (cli.json), or to Portal's own (https://gateway.clusy.io) when it uses none. |
prices | Compare compute quotes in USD/hour, with resources, regions, purchase models and pricing provenance when known. |
run | Compare quotes, then run a script on a selected machine. |
status | A job's estimated cost, saving, progress, hops, moves and events; without a job, the overview. |
logs | A job's output: the last lines (a progress bar's line as its last drawing), or with offset exactly what came after an earlier call's next. |
explain | Every policy decision about a job, oldest first: when, which policy (spot, return, oom, cheaper, lifetime, rightsize, budget, idle, ttl), what it did, and why. |
move | Move a running job to another machine (it continues where it paused), or with plan only show where. |
stop | Stop a job; its machine is terminated. |
suspend | Suspend a job: its state is parked in storage and its machine terminated; resume continues it. |
resume | Resume a suspended job from its checkpoint when you or the user choose; on selects an exact destination. |
audit | Everything Portal runs across providers. |
connections | Connected providers with their methods and fields, caps, states and setup, and the names of stored secrets (never values). |
connect | Add a cloud connection or update one (its credentials, region or cap): the controller verifies the credentials with the provider, keeps them as the method's stored text in connections says (sealed for a token or key; nothing replayable for an AWS role or a federated identity) and sets up what the provider needs. |
detect_compute | The cloud CLIs installed and signed in on this machine (aws, az, modal, Lambda's key in LAMBDA_API_KEY, gcloud, kubectl, e2b): for each, who it is signed in as (identity), whether Portal can connect it from here (connectable, checked against the controller in use) and what to do (how), and connectable, the providers connect_from_cli can connect. |
connect_from_cli | Connect a cloud with the login of its CLI on this machine, by each cloud's recommended method unless told otherwise (AWS: a role in the person's account that the controller assumes, with Portal's policy, nothing stored that a thief could use, or an IAM user and key with keys=true; Azure: a federated credential on an app Contributor on the resource group soma only, or a client secret with secret=true; Google Cloud: the approved keyless federation when the controller offers it (federated=true requires it), else or with keys=true a service account key; Modal: a token the person approves on modal.com; Lambda: the key in LAMBDA_API_KEY), saved on the controller and never shown. |
disconnect | Remove a connection: its stored credentials are deleted. |
set_cap | Change a connected provider's spend cap and nothing else: its credentials stay and are not verified again. |
context | Start here for Portal questions: the console's current overview, usage, connections, settings, machines and identity, plus an optional run/project focus. |
access | Current controller/workspace identity and scopes, plus accessible account, token/session and invite metadata. |
jobs | Runs newest first, with project, state, estimated cost, signed saving, progress and current machine. |
delete_jobs | Delete ended jobs from the person's history: they leave every listing and lookup, and their costs and savings still count. |
usage | The Usage page: spend per UTC day and connection, caps, live machines, project breakdown and totals. |
samples | A run's recorded system and progress chart points, oldest first: CPU percent, RSS bytes, GPU utilization/memory and progress when reported. |
events | Run or controller event history, oldest first, including moves, failures and changes. |
machines | The Machines page and Connections' own machines: current runtimes with lease, rate and job, node connectivity/version/last_seen, and enrolled machines with approval, reported hardware and privilege. |
settings | Read the Settings page's effective controller defaults: policies, baseline provider, fast path, capsule encryption, node images and measured provider grace. |
machine_command | Get an enrollment command for the person to run. |
remove_machine | Remove an unused enrolled machine. |
login
Sign this machine in to Portal through the browser, with no token pasted or shown, to the controller the CLI uses (cli.json), or to Portal's own (https://gateway.clusy.io) when it uses none. It never signs in anywhere a page or a message names: another controller is the person's choice, made with portal login URL in their own terminal. The first call opens browser sign-in and returns at once: {"status": "pending", "url", ...}. A supported desktop returns to its local listener automatically. If the answer includes user_code, it is the device fallback: tell the person to compare the code and approve it in the console. Call login again: it waits up to 25 s and returns pending, or signed_in once approved (the CLI and this server then use that controller). Signed in already, it returns signed_in with who is signed in, what is connected (connected) and the console's Connect page (connect_page), and starts nothing. A denied or expired sign-in is an error; the next call starts another.
No parameters.
prices
Compare compute quotes in USD/hour, with resources, regions, purchase models and pricing provenance when known. Unchecked quota and permissions remain unknown; quotes do not reserve capacity. Select an exact offer.spec for run.on. The optional on-demand reference is a quote, not an actual purchase.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
gpu | string or null | no | none | a GPU model ("L4", "A100"), a memory per GPU ("24G"), or "any" |
gpus | integer or null | no | none | |
cpus | number or null | no | none | |
memory_gb | number or null | no | none | |
spot | one of `prefer`, `only`, `never` | no | prefer | |
providers | array of string or null | no | none |
run
Compare quotes, then run a script on a selected machine. Without on, returns quotes without packing, uploading or starting a job. Choose a suitable offer and call again with its exact spec as on, subject to the user's authorization and normal tool approvals, and include a nonblank project name. With on and plan=false, returns the job (follow with status/logs), packed-file information and excluded files. plan=true always returns quotes only. The plan's chosen offer is a recommendation, never an accepted selection. estimate.saving_pct is a percentage against an on-demand reference, not actual savings or a purchase. Requirements may name regions.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
path | string | yes | the project directory, uploaded with the job: inside the directory where the MCP server started (unless that is or holds the home directory) or one portal mcp --root DIR adds; relative paths are read from where it started; never the home directory or a dot directory | |
script | string | yes | the Python file to run, relative to path | |
args | array of string or null | no | none | |
requirements | object or null | no | none | what the job needs: gpu (a model, a memory such as "24G", or "any"), gpu_memory_gb, gpus, cpus, memory_gb, spot (prefer, only or never), providers (a list), regions (a list), max_price (USD per hour) |
budget_usd | number or null | no | none | optional. A budget suspends the run when it is spent: its machine is released and the program stops until someone resumes it. Leave it unset unless a spending limit is wanted. |
plan | boolean | no | false | only return quotes, even when on selects an exact machine |
name | string or null | no | none | |
project | string or null | no | none | required to launch, optional for quotes: a project name (1 to 100 characters); status and the console group jobs and their cost estimates and comparisons by it |
on | string or null | no | none | launch on the exact offer.spec selected from returned quotes; without on, return quotes only |
env | object of string or null | no | none | environment variables for the script, {NAME: value}: never a secret; use secrets=NAME for stored secrets |
secrets | array of string or null | no | none | stored secrets to pass as variables |
policy | object or null | no | none | policy overrides over the project's portal.yaml and the controller's defaults, e.g. {"return": {"on": false}, "rightsize": {"mode": "off"}}; the policies are spot, return, oom, cheaper, lifetime, rightsize (mode on_move, active or off), budget, idle, ttl. A spot or preemption notice, recoverable out-of-memory failure or known impending provider time limit checkpoints to storage and suspends the job; you or the user choose when and where to resume it |
gpu_fallback | one of `none`, `same_provider`, `any` or null | no | none | what Portal does when the GPU asked for (on, or a move's to) is not scheduled within its bounded wait (5 min on Modal): same_provider runs on that provider's cheapest other GPU of the job's size, any on any connected provider's; none, the default, ends the run (or leaves a move unmade) with the choices for the person to pick from. An event names what was asked, what runs instead and the price difference |
status
A job's estimated cost, saving, progress, hops, moves and events; without a job, the overview. saved_usd is the estimated saving against one machine for the whole job (without_portal.method without_portal_v2): baseline_usd is what the dearest machine the job used would have cost at its standard price for the machine time paid, plus the work Portal preserved; saved_usd = max(0, baseline_usd - actual_usd), never negative. without_portal.breakdown gives spot_usd, cheaper_machines_usd, preserved_usd and rescues_usd (what Portal did) and overhead_usd beside them (what was paid beyond rate times time, zero or more); without_portal.segments give each machine's chosen_by, price_per_hour (p), standard_price_per_hour (s), reference_price_per_hour (the one machine's price for that stretch), counted_s (t), running_s (u) and rescues_after (r). savings_status: available, unavailable (reason says why; null amounts are unknown, never zero) or not_applicable (own machines only, or never ran); basis inferred means reckoned from older records. Totals sum available runs only and count the rest in unavailable_comparisons and not_applicable_comparisons (status partial when some are left out); comparison_cost_usd is their Actual, cost_usd every run's. saved_pct is a fraction: 0.32 means 32% (a plan's saving_pct, unlike it, is a percentage). Costs are estimates, not provider invoices. A job's carry is its node's last capture check (ok, problems a checkpoint cannot carry, blocked, warning) and notice_fit whether its memory is above what its spot machine's notice can save; both are warnings the person should see (context has capture_check and state_fit).
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
job | string or null | no | none | a job; without one, the overview |
logs
A job's output: the last lines (a progress bar's line as its last drawing), or with offset exactly what came after an earlier call's next. eof is true once the job has ended and everything was read.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
job | string | yes | a job id, a unique start of one, or a job name | |
tail | integer | no | 100 | lines from the end |
offset | integer or null | no | none | read from here instead (a next from before) |
wait | number | no | 0 | seconds to wait for new output, at most 30 |
explain
Every policy decision about a job, oldest first: when, which policy (spot, return, oom, cheaper, lifetime, rightsize, budget, idle, ttl), what it did, and why.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
job | string | yes | a job id, a unique start of one, or a job name |
move
Move a running job to another machine (it continues where it paused), or with plan only show where. The answer's outcome is accepted (not followed: wait is 0), landed, aborted (with the reason), parked or pending (still under way after the wait), and outcome_in says where to read it later: events(job) says when it lands or why it did not, status(job) where it runs. A job whose program has exited is refused with its end: the job already finished.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
job | string | yes | a job id, a unique start of one, or a job name | |
to | string or null | no | none | exactly here, e.g. modal:gpu=L4 |
requirements | object or null | no | none | what the job needs: gpu (a model, a memory such as "24G", or "any"), gpu_memory_gb, gpus, cpus, memory_gb, spot (prefer, only or never), providers (a list), regions (a list), max_price (USD per hour) |
plan | boolean | no | false | only return where it would go and at what price |
on | string or null | no | none | same as to |
gpu_fallback | one of `none`, `same_provider`, `any` or null | no | none | what Portal does when the GPU asked for (on, or a move's to) is not scheduled within its bounded wait (5 min on Modal): same_provider runs on that provider's cheapest other GPU of the job's size, any on any connected provider's; none, the default, ends the run (or leaves a move unmade) with the choices for the person to pick from. An event names what was asked, what runs instead and the price difference |
wait | number | no | 0 | seconds to wait for the move's outcome, at most 15; 0 returns once it is accepted |
stop
Stop a job; its machine is terminated.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
job | string | yes | a job id, a unique start of one, or a job name |
suspend
Suspend a job: its state is parked in storage and its machine terminated; resume continues it.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
job | string | yes | a job id, a unique start of one, or a job name |
resume
Resume a suspended job from its checkpoint when you or the user choose; on selects an exact destination.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
job | string | yes | a job id, a unique start of one, or a job name | |
on | string or null | no | none | exactly here instead of the best offer |
audit
Everything Portal runs across providers. When work is done leaks, untracked (Portal machines no controller tracks) and unlistable (providers that could not be listed, so not checked) must be empty, and no resource's state unknown.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
fix | boolean | no | false | terminate leaked resources, then audit again |
connections
Connected providers with their methods and fields, caps, states and setup, and the names of stored secrets (never values). quota_guidance describes the checks and provider request paths to help make a connected account usable; quotas remain unchecked until read from that account for the intended workload.
No parameters.
connect
Add a cloud connection or update one (its credentials, region or cap): the controller verifies the credentials with the provider, keeps them as the method's stored text in connections says (sealed for a token or key; nothing replayable for an AWS role or a federated identity) and sets up what the provider needs. Prefer each cloud's recommended_method, and tell the person how the values are kept before saving. Returns the connection as connections lists it, never a value, with notes when the save's check said something to tell the person (Google Cloud: private networking chosen because the organization's policy denies external IPs, or that policy unreadable; Modal: no environment named, so the connection uses Modal's default environment main). Prefer from_env or file for the credentials; with file, the import's result (imported, secrets, unknown, failed, and notes by connection name) comes with it.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
provider | string | yes | a connection name: aws, aws.research, azure.lab, gcp.research, modal, lambda, local or machine.box | |
method | string or null | no | none | how to connect, one of the methods connections lists for it (default: the one the fields given fit, or its current one) |
cap_usd | number or null | no | none | spend cap in USD for every machine the connection runs: machines whose worst case would cross it are refused (optional: new connections have no cap unless set; an update keeps the existing cap) |
region | string or null | no | none | the method's region or location field (aws keys: region; azure: location); refused for a method without one. Jobs choose any region unless their requirements name regions |
from_env | object of string or array of string or null | no | none | environment variables of the MCP server's own process that hold the method's values, read here so that the values never pass through the model: a list of names, each naming its field by its ending (AWS_ACCESS_KEY_ID is access_key_id, MODAL_TOKEN_SECRET is token_secret, LAMBDA_API_KEY is api_key), or {field: VARIABLE} |
file | string or null | no | none | a KEY=value secrets file on the MCP server's machine (AWS_ACCESS_KEY_ID, MODAL_TOKEN_ID, AZURE_CLIENT_SECRET, PORTAL_SECRET_NAME, ...), imported by the controller; it connects every provider it names and its values never pass through the model. Not with method, values or from_env |
values | object of string or null | no | none | the method's fields as plain values ({"api_key": ...}): the last resort, since they pass through the model and the chat; prefer from_env or file. Secret fields left out keep their stored values |
detect_compute
The cloud CLIs installed and signed in on this machine (aws, az, modal, Lambda's key in LAMBDA_API_KEY, gcloud, kubectl, e2b): for each, who it is signed in as (identity), whether Portal can connect it from here (connectable, checked against the controller in use) and what to do (how), and connectable, the providers connect_from_cli can connect. Read-only: nothing is created, and no credential is read or returned.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
ssh_hosts | boolean | no | false |
connect_from_cli
Connect a cloud with the login of its CLI on this machine, by each cloud's recommended method unless told otherwise (AWS: a role in the person's account that the controller assumes, with Portal's policy, nothing stored that a thief could use, or an IAM user and key with keys=true; Azure: a federated credential on an app Contributor on the resource group soma only, or a client secret with secret=true; Google Cloud: the approved keyless federation when the controller offers it (federated=true requires it), else or with keys=true a service account key; Modal: a token the person approves on modal.com; Lambda: the key in LAMBDA_API_KEY), saved on the controller and never shown. Every plan's steps say how the values are kept; say that to the person. Without confirm nothing is created: it returns who the CLI is signed in as and the steps (status confirm); show them to the person and pass confirm=true, with the same options, only after they agreed. confirm=true runs exactly the steps the last call showed: when the plan made again then differs (another account signed in since, other options, or no steps shown yet), it creates nothing and returns the new steps (status confirm, changed) to show instead. Then it returns status connected with the connection, or for Modal pending with the approval page (opened in the browser): call again until connected.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
provider | string | yes | the cloud to connect from its CLI's login: aws, azure, gcp, modal or lambda | |
profile | string or null | no | none | aws: the AWS CLI profile to use |
subscription | string or null | no | none | azure: the subscription, by name or id (default: az's current one) |
project | string or null | no | none | gcp: project ID (default: gcloud's selected project) |
network | string or null | no | none | gcp: existing network name or resource path; omitting creates or validates soma-net |
subnetwork | string or null | no | none | gcp: existing subnetwork resource path in the chosen region; requires network |
private_network | boolean or null | no | none | gcp: omit external IPs; the existing network must supply Cloud NAT or another outbound path |
federated | boolean | no | false | gcp: pair an operator-approved AWS Workload Identity Federation binding (the default whenever the controller offers one); creates no service account key |
keys | boolean | no | false | aws or gcp: make a dedicated IAM user and access key (AWS) or a service account key (Google Cloud), sealed on the controller, instead of the default keyless method (the role the controller assumes, the approved federation), which stores nothing a thief could use |
secret | boolean | no | false | azure: make a client secret (sealed on the controller) instead of the default federated credential, which stores nothing a thief could use |
region | string or null | no | none | aws or gcp: the connection's region (GCP defaults to us-central1) |
location | string or null | no | none | azure: where the resource group soma goes (default eastus) |
cap_usd | number or null | no | none | spend cap in USD for every machine the connection runs: machines whose worst case would cross it are refused (optional: new connections have no cap unless set; an update keeps the existing cap) |
confirm | boolean | no | false | true only after the person agreed in the chat to the steps an earlier call without confirm returned: they create things in the person's own cloud account. Without it nothing is created, and with it only the steps last shown run (other steps come back to show instead) |
connection | string or null | no | none |
disconnect
Remove a connection: its stored credentials are deleted. Refused (409) while machines run at its providers, since its credentials are what terminates them: stop or suspend their jobs first.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
provider | string | yes | a connection name: aws, aws.research, azure.lab, gcp.research, modal, lambda, local or machine.box |
set_cap
Change a connected provider's spend cap and nothing else: its credentials stay and are not verified again.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
provider | string | yes | a connection name: aws, aws.research, azure.lab, gcp.research, modal, lambda, local or machine.box | |
cap_usd | number | yes | the spend cap in USD, 0 or more, for every machine the connection runs |
context
Start here for Portal questions: the console's current overview, usage, connections, settings, machines and identity, plus an optional run/project focus. Includes controller, scopes, source endpoints, UTC observation window, per-section errors, array truncation and a guide to querying details. Reads existing grants only; no live provider audit, CLI detection or mutations. This is an observation window, not an atomic snapshot; refresh before actions. Browser selection and unsaved edits are not sent.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
job | string or null | no | none | focus on this run's details and decisions |
project | string or null | no | none | also list this project's runs |
days | one of `0`, `1`, `7`, `30`, `90`, `365` | no | 30 | |
limit | integer | no | 20 | maximum items per array; omissions are explicit, use the drill-down tools for more |
access
Current controller/workspace identity and scopes, plus accessible account, token/session and invite metadata. Each section names its source and any denial or unsupported route. Reads use this credential's existing permissions; gateway console-only reads remain unavailable. No token values, hashes, invite codes or browser-shared Clusy identity are returned. Token and invite lists are independently paged, with total and next_offset; a live listing can shift as records are added.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
limit | integer | no | 20 | maximum metadata rows per array |
offset | integer | no | 0 | rows to skip in token/invite lists; use next_offset |
jobs
Runs newest first, with project, state, estimated cost, signed saving, progress and current machine. Pages the controller's listing, normally its newest 500 runs (before filtering by state). This is not all-time history; use status with an exact older job id for its detail. next_offset pages this live listing, which can shift when runs are added. status() gives all-time aggregate money and projects.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
project | string or null | no | none | only this project's runs |
status | one of `queued`, `provisioning`, `starting`, `running`, `moving`, `suspending`, `suspended`, `resuming`, `finished`, `failed`, `stopped`, `no_capacity` or null | no | none | |
limit | integer | no | 50 | maximum rows returned, from 1 to 500 |
offset | integer | no | 0 | rows to skip within the current listing; use next_offset |
delete_jobs
Delete ended jobs from the person's history: they leave every listing and lookup, and their costs and savings still count. Only ended jobs go; running or suspended ones are refused. Without confirm nothing is deleted: it returns the plan (status confirm): how many go and their ids, which of them could still be continued from checkpoints kept after an end Portal decided (deleted, they can no longer be continued: say so to the person), and what is refused. Show it, and call again with the same arguments and confirm=true only after the person agreed. When the jobs changed since the plan was shown, nothing is deleted and the new plan comes back to show instead.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
jobs | array of string or null | no | none | the jobs to delete: ids, unique starts of ids, or names |
ended | boolean | no | false | every ended job instead of named ones; project and before narrow it |
project | string or null | no | none | with ended: only this project's jobs |
before | number or null | no | none | with ended: only jobs created before this time, in seconds since the epoch |
confirm | boolean | no | false | true only after the person agreed in the chat to the plan an earlier call without confirm returned, with the same arguments: it deletes exactly that plan |
usage
The Usage page: spend per UTC day and connection, caps, live machines, project breakdown and totals. Money is USD and rate_per_hour is USD/hour. Daily estimated spend is clipped to the requested period; project savings cover runs created in it and their lifetime estimates, so their cost can differ from daily spend. Savings are against one machine for the whole job (without_portal_v2), never negative: saved_usd, baseline_usd, comparison_cost_usd (their Paid) and breakdown (spot, cheaper machines, preserved, rescues, with the overhead beside them) sum the runs with an available figure; unavailable_comparisons and not_applicable_comparisons count the runs left out, and historical_comparisons the included ones reckoned from older records. savings_status is available, partial (some left out), unavailable or not_applicable. saved_usd is signed; null is never zero. saved_pct is a fraction (0.32 means 32%); null when the baseline is not positive. These are not provider invoices. totals.deleted_runs and deleted_usd are the runs deleted from the history in the period and what they cost: out of every listing, still in spent_usd and counted toward the spend caps. Providers are named connections, such as aws.research, not interchangeable accounts.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
days | one of `0`, `1`, `7`, `30`, `90`, `365` | no | 30 | UTC calendar days including today; 0 means all available history |
samples
A run's recorded system and progress chart points, oldest first: CPU percent, RSS bytes, GPU utilization/memory and progress when reported. next is a time cursor, not a row count; repeat with since=next until a page is empty to read the history, and poll again for new points. Missing metrics are unknown, not zero. Each call returns at most limit points; status(job) includes the latest metrics and machine history.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
job | string | yes | a job id, a unique start of one, or a job name | |
since | number | no | 0 | Unix seconds, exclusive; use the previous response's next, initially 0 |
limit | integer | no | 250 | maximum rows returned, from 1 to 500 |
events
Run or controller event history, oldest first, including moves, failures and changes. next is an event id; repeat with since=next until an empty page, then poll for new events. Unlike status(job)'s recent events, this can read the whole retained event history. explain(job) gives structured policy decisions.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
job | string or null | no | none | only this run; otherwise controller events |
since | integer | no | 0 | event id, exclusive; use the previous response's next, initially 0 |
limit | integer | no | 100 | maximum rows returned, from 1 to 500 |
machines
The Machines page and Connections' own machines: current runtimes with lease, rate and job, node connectivity/version/last_seen, and enrolled machines with approval, reported hardware and privilege. Each list is paged independently with limit and offset; pagination gives each list's next_offset. Missing older-controller endpoints are explicitly unavailable. connected=null means unknown, not offline. Portal stops its runs on an own machine, never that machine itself; an unset own-machine price is unknown.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
machine | string or null | no | none | an enrolled machine's id for its detail; omit for all runtime machines, node health and own machines |
limit | integer | no | 100 | maximum rows returned, from 1 to 500 |
offset | integer | no | 0 | rows to skip within the current listing; use next_offset |
settings
Read the Settings page's effective controller defaults: policies, baseline provider, fast path, capsule encryption, node images and measured provider grace. This changes nothing. A run's requirements and policy overrides are in status(job); project/command overrides apply over these defaults. This does not list credentials, token values, browser identity preferences or account access grants.
No parameters.
machine_command
Get an enrollment command for the person to run. With host, give an SSH CLI command; never execute SSH. The person approves the machine in Portal with its printed pairing code before any job can run there.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
name | string or null | no | none | |
host | string or null | no | none |
remove_machine
Remove an unused enrolled machine. Stop or suspend its runs first; Portal never powers off the host.
| Parameter | Type | Required | Default | What it is |
|---|---|---|---|---|
machine | string | yes |