Google Cloud tool for deploying applications to Cloud Run via MCP.
Xcelsior Compute is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Connects your AI agent to the Xcelsior GPU marketplace.
- Find capacity: search available GPUs and spot prices, estimate what a job will cost, and preview where an instance would be placed.
- Run work: create, watch, snapshot and terminate instances; run training jobs and pipelines; deploy serverless endpoints and send them jobs.
- Storage and access: create, attach and snapshot volumes; manage SSH keys and open access to instances.
- Billing: check your wallet balance and history, invoices, payment methods and funding options.
- Providers: see your provider account and earnings.
86 tools, each marked read-only or write. Run it locally with npx -y @xcelsior-gpu/mcp and an access token, or connect to https://mcp.xcelsior.ca/mcp and sign in with OAuth.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --env 'XCELSIOR_ACCESS_TOKEN=${XCELSIOR_ACCESS_TOKEN}' --transport stdio xcelsior-compute-mcp '--' npx -y @xcelsior-gpu/mcp
# 2 — ask your agent for something these tools do
# list_available_gpus, get_spot_prices, get_pricing_reference and 83 more
It needs XCELSIOR_ACCESS_TOKEN: this reads it from your environment, so export it first.
Xcelsior Compute costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one can run either way — at an address its publisher runs, or as a process under your own user, with your files and your network — and this marketplace is in the path of neither.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. Claude Code reads XCELSIOR_ACCESS_TOKEN (Your access token, from https://xcelsior.ca/dashboard/mcp (keep it secret)) from your environment each time it starts the server, so the value stays out of its config: export it in your shell profile (macOS, Linux), or run setx XCELSIOR_ACCESS_TOKEN … and open a new terminal (Windows). The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user --env 'XCELSIOR_ACCESS_TOKEN=${XCELSIOR_ACCESS_TOKEN}' --transport stdio xcelsior-compute-mcp '--' npx -y @xcelsior-gpu/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
Its publisher also runs it at https://mcp.xcelsior.ca/mcp: nothing to start on your machine, and this marketplace is not in the path.
claude mcp add --scope user --transport http xcelsior-compute-mcp https://mcp.xcelsior.ca/mcpIt reaches a system of yours, so it needs your own credential rather than the publisher’s: XCELSIOR_ACCESS_TOKEN — Your access token, from https://xcelsior.ca/dashboard/mcp (keep it secret). You set it in your own client’s config, on your machine — this marketplace never holds it.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
86 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
List GPUs currently offered by independent hosts on the Xcelsior marketplace, with VRAM, region, available count, and CAD hourly rate. Use when the user asks what hardware is available, or before launching anything, to find a real GPU model and region rather than assuming one. Read-only and free. Inventory is third-party and changes continuously, so a result from earlier in the conversation may al
| Parameter | Type | Required | Notes |
|---|---|---|---|
| region | string | no | Filter by region code (e.g. ca-east) |
Get live interruptible (spot) hourly rates in CAD for each GPU model. Use when the workload can checkpoint and resume, which is most training and batch work — spot is materially cheaper than on-demand and is the right default there. Do not use for a workload that cannot tolerate preemption. Read-only and free; prices are set by competing third-party hosts and move throughout the day.
Takes no parameters.
Get Xcelsior's on-demand hourly rate table in CAD, by GPU model. Use when quoting a price or comparing models, instead of estimating a rate from memory. Read-only and free. This is the reference table, not a quote for a specific host — call estimate_job_cost for what a particular job will actually cost.
Takes no parameters.
Search live marketplace listings by GPU model, minimum VRAM, region, and host reputation, sorted by price, reputation, region, or VRAM. Use when the user has a constraint to satisfy — a region, a VRAM floor, a trusted host — rather than just wanting to see what exists. Read-only and free. Listings belong to independent hosts and change without notice.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| gpu_model | string | no | — |
| min_vram_gb | number | no | — |
| region | string | no | — |
| min_reputation | number | no | — |
| sort_by | string | no | — |
List Standard, Premium and Dedicated service tiers and their queue and isolation policies. Supply gpu_model to include exact Stripe Prices, the optional GPU-only exclusivity add-on and qualified whole-host GPU counts. Use before choosing a paid launch tier. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| gpu_model | string | no | GPU model to include its live Stripe tier and exclusivity Prices |
| pricing_mode | string | no | — |
Get the account's wallet balance and available credits in CAD. Use before committing to spend, or when the user asks what they have left. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| customer_id | string | no | Customer ID; omit to use your account |
List the wallet's transactions — deposits, charges and refunds, newest first, each with an amount and what it was for. Use when a balance is lower than expected, or the user asks where their money went or what they were billed for: get_wallet_balance returns the number and this is the only tool that explains it. For what the balance will do next rather than what it did, use get_spend_envelope, whi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| customer_id | string | no | Customer ID; omit to use your account |
| limit | integer | no | — |
| before | string | no | next_cursor from a previous call, to read the older transactions after it |
List the ways this account can add funds, and which are working right now: card, Bitcoin, Lightning and PayPal, with the current BTC rate when crypto is available. Use when a card is declined or the user has none on file, and before telling anyone they must visit the dashboard — the crypto and Lightning rails need no browser at all, so a refused charge is usually not a dead end. A rail can be conf
Takes no parameters.
Create a Bitcoin deposit and return the address to send to, the exact BTC amount, and when the quoted rate expires. Use after list_funding_options shows crypto available and the user wants to fund without a card or a browser — this is the whole rail, no dashboard step. It creates a request, it does not move money: nothing is added until the user sends the coins and the network confirms, which get_
| Parameter | Type | Required | Notes |
|---|---|---|---|
| amount_cad | number | yes | How much to add, in CAD |
| customer_id | string | no | Customer ID; omit to use your account |
| idempotency_key | string | no | Reuse the same key to retry safely; a new amount under an old key is refused |
Check a Bitcoin deposit: whether the coins arrived, how many confirmations, and whether the wallet has been credited. Use after create_crypto_deposit to tell the user where their funding is, and prefer it to guessing from get_wallet_balance — an unconfirmed deposit is not a balance yet, and the difference is why the number has not moved. The deposit_id comes from create_crypto_deposit. Read-only a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| deposit_id | string | yes | From create_crypto_deposit |
Create a Lightning invoice to add funds, returning the BOLT11 invoice to pay and when it expires. Use when the user wants to fund over Lightning rather than on-chain — it settles in seconds instead of waiting for block confirmations, which is the reason to prefer it. Check list_funding_options first: this rail can be configured and still be down, and it answers 503 when it is. It creates an invoic
| Parameter | Type | Required | Notes |
|---|---|---|---|
| amount_cad | number | yes | How much to add, in CAD |
| customer_id | string | no | Customer ID; omit to use your account |
| idempotency_key | string | no | Reuse the same key to retry safely; a new amount under an old key is refused |
Check a Lightning deposit: whether the invoice was paid and whether the wallet has been credited. Use after create_lightning_deposit rather than inferring from get_wallet_balance, which cannot tell an unpaid invoice from a paid one that has not settled. The deposit_id comes from create_lightning_deposit. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| deposit_id | string | yes | From create_lightning_deposit |
How long the balance lasts at the current burn rate, and which instances are consuming it. Returns balance, burn rate per hour, seconds until zero, and a per-instance breakdown. Use before starting long unattended work, when the user asks how long they can keep running, or when deciding whether to top up. Read-only and free. At zero the platform stops running instances automatically with reason '
| Parameter | Type | Required | Notes |
|---|---|---|---|
| customer_id | string | no | Customer ID; omit to use your account |
Estimate what a GPU job will cost in CAD: hourly rate and projected total for the duration, on-demand by default or spot when the workload can checkpoint. Use when the user asks what something would cost. Read-only and free — it estimates only. If you are about to launch, call should_i_run_this instead, which also checks the balance.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| gpu_model | string | no | — |
| duration_hours | number | no | — |
| spot | boolean | no | Price as interruptible spot capacity instead of on-demand. Materially cheaper, but the instance can be reclaimed — only use for workloads that checkpoint. |
List the account's billing invoices with their periods and amounts in CAD. Use when the user asks what they have been charged or wants a specific invoice. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| customer_id | string | no | — |
Set up or change automatic wallet top-ups: when the balance falls below the threshold, the saved card is charged for the amount, without anyone present. Use this when the user wants to stop running out mid-job, or asks to change, pause or stop existing auto top-ups. Call it with enabled=false to turn it off. CHANGES UNATTENDED SPENDING: raising the amount or the threshold means larger or more freq
| Parameter | Type | Required | Notes |
|---|---|---|---|
| enabled | boolean | yes | false turns auto top-up off entirely |
| amount_cad | number | yes | How much to charge each time the threshold is crossed |
| threshold_cad | number | yes | Charge when the balance falls below this |
| payment_method_id | string | no | Card to charge; omit to keep the one already configured |
| plan_id | string | no | An approved plan from a previous widening call; omit on the first call |
Charge a card already saved on the account and credit the wallet. Use this when the user asks to add funds — 'put $20 on my account', 'top me up' — or when a balance check shows they will run out mid-job. Say the amount in CAD; identify the card the way the user did — 'the Visa', 'the one ending 4242' — using card_brand and/or card_last4, or omit both to use their default card. Call list_payment_m
| Parameter | Type | Required | Notes |
|---|---|---|---|
| amount_cad | number | yes | Amount to charge in CAD. Confirm this with the user first — it moves money. |
| card_last4 | string | no | Last four digits, e.g. '4242'. Use what the user said. |
| card_brand | string | no | Card brand, e.g. 'visa' or 'mastercard'. Use what the user said. |
| payment_method_id | string | no | Exact Stripe id, if you already have one from list_payment_methods. |
| idempotency_key | string | no | Leave this out unless you are retrying a call that timed out, in which case pass the SAME key you sent the first time. Omitting it is safe: one is generated per call, so asking twice tops up twice and |
List the cards already saved on the account: brand, last four digits, expiry, and which one is the default. Use when the user asks what is on file, or before a top-up so you can name the card — 'the Visa ending 4242' — rather than guessing. Read-only and free. Cards are added by the user in the dashboard, never here; this reads what is already there and returns no card number and no secret.
Takes no parameters.
Show the current automatic top-up settings: whether it is on, the balance that triggers a charge, and how much is charged. Use when the user asks what their auto top-up is set to, before changing it so you can state what is changing, or when a wallet was topped up with nobody present and they want to know why. Read-only and free — configure_auto_topup is what changes them, and calling that to find
Takes no parameters.
List top-ups that stopped because the cardholder's bank wants them to confirm — the money has not moved and the wallet was not credited. Use when a user asks whether a top-up went through, when a balance is lower than they expect after topping up, or when top_up_wallet returned a verification link earlier in the conversation and you need to know whether it was ever followed. A balance check cannot
Takes no parameters.
List the authenticated account's GPU instances, optionally filtered by status, with cursor pagination. Use when the user asks what is running, what they are being billed for, or to find a job_id for another tool. Read-only and free; it does not affect running work.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| status | string | no | Filter: queued, assigned, starting, running, completed, failed, cancelled |
| cursor | string | no | — |
| limit | integer | no | — |
Get the full record for one instance by job_id: status, host, GPU, pricing mode, and timestamps. Use when the user asks about a specific job, or after a launch to confirm what was actually allocated. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | Instance job ID |
Get the most recent buffered log lines an instance has printed — its output, stdout and stderr. Use when the user asks what a job is printing, what it is doing right now, or why it failed; the instance id can come from earlier in the conversation rather than from a fresh listing. It returns a snapshot, so call it again for newer output rather than expecting a stream. Read-only and free. If the use
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
| limit | integer | no | — |
Prepare or execute a server-bound plan to rent a GPU instance. Use when the user has decided to launch; call should_i_run_this first if affordability is unsettled. Called without a plan_id it only *prepares* a plan and returns the canonical spec, a cost estimate, and an approval URL — nothing is allocated and nothing is billed. Execution requires that prepared plan_id plus approval; confirm:true e
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| vram_needed_gb | number | no | — |
| num_gpus | integer | no | — |
| gpu_model | string | no | — |
| host_id | string | no | — |
| image | string | no | — |
| git_repo | string | no | — |
| init_script | string | no | — |
| pricing_mode | string | no | — |
| tier | string | no | Paid service tier. Dedicated reserves the entire physical host and requires its full GPU count. |
| service_tier_price_id | string | no | — |
| exclusive_gpu | boolean | no | Optional paid GPU-only exclusivity for Standard or Premium. Included in Dedicated. |
| gpu_exclusive_price_id | string | no | — |
| queue_bid_units | integer | no | Optional bid unit quantity from list_tiers. Added to running GPU-hour price. Aging can promote one queue tier behind customers who purchased it. |
| queue_bid_price_id | string | no | — |
| interactive | boolean | no | — |
| confirm | boolean | no | — |
| plan_id | string | no | — |
| idempotency_key | string | no | — |
Cancel a queued or running instance and stop its hourly billing. Use when the user wants to stop paying for a job — this is the normal way to end work. Call it with confirm:false first: that returns a preview of what will stop and changes nothing, so you do not need get_instance beforehand — the preview comes from the tool that will do the work, which a status read does not. Then call again with c
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
| confirm | boolean | no | — |
Permanently terminate an instance and release its host allocation. Use only when the user explicitly wants the instance destroyed rather than stopped — prefer cancel_instance for ordinary shutdown. Call it with confirm:false first: that returns a preview of exactly what will be destroyed and changes nothing, so you do not need get_instance beforehand — the preview comes from the tool that will do
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
| confirm | boolean | no | — |
Register an SSH *public* key on the account — the contents of a .pub file, one line beginning with 'ssh-ed25519', 'ssh-rsa' or 'ecdsa-sha2-'. Use when the user wants a shell on an instance and their key is refused, or before launching work they intend to drive interactively. Never send a private key: if the user pastes one, tell them it is compromised and to generate a new pair, and do not call th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| public_key | string | yes | Your SSH *public* key — the contents of a .pub file, e.g. 'ssh-ed25519 AAAAC3... you@laptop'. Never send a private key. |
| name | string | no | A label for this key, e.g. 'laptop'. Defaults to 'default'. |
Show which SSH public keys can currently open a shell on this account's instances, with their fingerprints and when each was added. Use when the user asks what has access, before adding a key so you can say whether it is already there, or when they suspect a key they no longer recognise. Read-only and free. Registering a key is the step that grants shell access, so this is how you show what that h
Takes no parameters.
Remove an SSH public key, revoking its shell access — including on instances already running, which have the key withdrawn from them. Use when a key belongs to a laptop that is gone, a person who has left, or one the user does not recognise from list_ssh_keys. Call it with confirm:false first for a preview of which key would go. Recoverable only by the person holding the private half: re-registeri
| Parameter | Type | Required | Notes |
|---|---|---|---|
| key_id | string | yes | — |
| confirm | boolean | no | false returns a preview of the key that would be removed |
Get a way in to a running instance: either the SSH endpoint to connect to, or a single-use ticket for the browser/websocket terminal. Use when the user wants a shell on something already running, after watch_instance reports it reached running. method:'ssh' reads the endpoint and is free; method:'terminal' creates a short-lived ticket that the first connection consumes and cannot be replayed. Read
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
| method | string | no | 'ssh' returns the endpoint to connect to and spends nothing. 'terminal' mints a single-use browser/websocket ticket. 'auto' prefers ssh when the instance publishes a port. |
Decide whether a proposed GPU job is affordable: estimates cost, reads the wallet balance, checks an optional max_hourly_cad ceiling, and returns an approve/decline verdict with reasons. Use this instead of estimate_job_cost whenever you are about to launch — it answers whether the job *should* run, not merely what it costs. Read-only and free; it never launches anything.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| gpu_model | string | no | — |
| duration_hours | number | no | — |
| spot | boolean | no | — |
| max_hourly_cad | number | no | Reject if hourly rate exceeds this |
End-to-end training launch: prepares a launch plan from a git repo and init script, waits for the instance to reach running, and returns connection details plus a log tail. Use when the user wants a repo trained on a GPU in one step rather than orchestrating create + poll themselves. Spends money exactly as create_instance does — the same plan preparation and approval apply — and blocks for up to
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| gpu_model | string | no | — |
| vram_needed_gb | number | no | — |
| num_gpus | integer | no | — |
| image | string | no | — |
| git_repo | string | no | — |
| init_script | string | no | — |
| pricing_mode | string | no | — |
| host_id | string | no | — |
| confirm | boolean | no | Must be true to create the instance; false returns a preview only |
| wait_timeout_seconds | integer | no | — |
| log_tail | integer | no | — |
Find available capacity at or below a maximum CAD hourly rate and, optionally, launch it. Use when price is the binding constraint and the user has not picked a specific host. Searching is read-only and free; launching spends money through the same plan-and-approval path as create_instance, so nothing is allocated without it. Not idempotent: no idempotency key is sent, so a retry launches a second
| Parameter | Type | Required | Notes |
|---|---|---|---|
| max_hourly_cad | number | yes | — |
| gpu_model | string | no | — |
| vram_needed_gb | number | no | — |
| num_gpus | integer | no | — |
| pricing_mode | string | no | — |
| name | string | no | — |
| confirm | boolean | no | — |
Quotes a multi-stage job — train, then evaluate, then serve — as ONE approval covering every stage, with the total committed spend stated before anything runs. Use when the user describes work with steps that depend on each other, instead of launching each and asking three times. Each stage declares what happens if it fails (halt, continue, or retry) and that choice is fixed when the graph is appr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | no | What this pipeline is for |
| stages | array | yes | Stages in the order they must run. Each one's on_failure is fixed at approval. |
Withdraw a launch plan so it can no longer be approved or executed. Use when the user changes their mind about something you quoted, when a plan was prepared for the wrong spec, or when they say to cancel before anything has started — a plan left sitting is still approvable later by anyone who can approve. Costs nothing and refunds nothing, because nothing has run: it only removes the ability to s
| Parameter | Type | Required | Notes |
|---|---|---|---|
| plan_id | string | yes | From whatever tool quoted it |
| reason | string | no | — |
Reports which pipeline stage is running, which finished, and which were skipped and why. Use when a pipeline was started and the user asks how far along it is, or before claiming any stage completed — run_pipeline returns while the work is still ahead of it. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| plan_id | string | yes | — |
List the account's serverless inference endpoints and their state. Use when the user asks what models they can already call, or to find an endpoint_id before running a job. Read-only and free.
Takes no parameters.
Prepare or execute a server-bound plan to create a serverless inference endpoint for a model. Use when the user wants per-token inference with no idle cost, rather than renting a dedicated GPU — prefer this over create_instance for bursty or low-volume inference. confirm:false returns a preview and creates nothing; execution goes through the same plan approval as a GPU launch. Once created, the en
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| model_ref | string | yes | HuggingFace model id or image ref |
| gpu_tier | string | no | — |
| gpu_count | integer | no | — |
| region | string | no | — |
| min_workers | integer | no | — |
| max_workers | integer | no | — |
| confirm | boolean | no | — |
| plan_id | string | no | — |
| idempotency_key | string | no | — |
Decide whether serverless inference is affordable before committing to it: estimates token and GPU cost against the wallet balance and returns a verdict. Use before create_serverless_endpoint when deploying a model, and before run_serverless_job on anything large or repeated — deploying an endpoint commits to standing capacity, so the check belongs there too, not only at invocation. Checking the w
| Parameter | Type | Required | Notes |
|---|---|---|---|
| endpoint_id | string | no | — |
| model_ref | string | no | — |
| estimated_input_tokens | integer | no | — |
| estimated_output_tokens | integer | no | — |
| duration_hours | number | no | — |
| gpu_tier | string | no | — |
Enqueue an asynchronous inference job on an existing serverless endpoint and return a job handle. Use when the user wants inference from a model already deployed; create the endpoint first if there is none. Bills per million tokens processed. Not idempotent — calling it twice enqueues two jobs and bills for both, so do not retry a call whose outcome you did not see.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| endpoint_id | string | yes | — |
| input | object | no | — |
| webhook | string | no | — |
Get the status and, when finished, the result of a serverless inference job. Use to poll a handle returned by run_serverless_job. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| endpoint_id | string | yes | — |
| job_id | string | yes | — |
Get one serverless endpoint by id: its model, scaling settings, status and URL. Use when you already hold an endpoint_id and need its configuration — list_serverless_endpoints returns every endpoint on the account, which is the wrong tool once you know which one you mean. For whether it is actually serving traffic rather than how it is configured, use get_serverless_endpoint_health. Read-only and
| Parameter | Type | Required | Notes |
|---|---|---|---|
| endpoint_id | string | yes | — |
Check whether a serverless endpoint is actually serving: readiness, workers, and recent error state. Use when inference is failing or slow, or before sending a job to an endpoint created a moment ago — a configured endpoint is not a ready one, and this is the difference between them. Prefer it to reading the endpoint record, which reports what was asked for rather than what is running. Read-only a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| endpoint_id | string | yes | — |
List the jobs on one serverless endpoint, newest first. Use when the user asks what is running or what has run on an endpoint, or to find a job_id — get_serverless_job_status answers about a job you can already name, and this is where that name comes from. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| endpoint_id | string | yes | — |
| limit | integer | no | — |
Cancel an inference job that is still running on a serverless endpoint. Use when the user wants to stop work in progress — a job that is taking too long, was submitted by mistake, or is no longer needed. Call it with confirm:false first for a preview. Cancelling stops the job billing for further GPU seconds, and ends the run: whatever it had not yet returned is lost and the job cannot be resumed,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| endpoint_id | string | yes | — |
| job_id | string | yes | — |
| confirm | boolean | no | — |
Permanently delete a serverless endpoint. Use when the user is finished with a deployed model — prefer cancel_serverless_job if they only want to stop one run. Call it with confirm:false first for a preview. Deleting stops the endpoint's idle cost and cancels jobs still in flight on it, and is irreversible: the endpoint_id stops resolving and a replacement is a new deployment with a new id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| endpoint_id | string | yes | — |
| confirm | boolean | no | — |
Wait for an instance to reach a phase you name — finished, failed, running — polling its status, telemetry, and recent logs for up to 60 minutes and returning as soon as it gets there. Use when the user asks to be told when something finishes, to be notified when it is done, or to wait for a result, rather than calling get_instance_logs repeatedly and guessing. Read-only: it never cancels or modif
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
| duration_minutes | number | no | — |
| poll_interval_seconds | integer | no | — |
| log_tail | integer | no | — |
| cursor | string | no | — |
| return_on_phase | array | no | — |
Explain why the scheduler placed an instance on the host it chose, from persisted placement facts. Use when the user asks why a job landed where it did, or why it did not land somewhere they expected. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
Answer whether a proposed spec would actually schedule — run it through the real scheduler and get back where it would be placed, or why it would not be, without allocating anything. Use when the user asks whether something is possible, whether it would fit, or whether a combination of GPU model, count, and region can be satisfied at all. Browsing inventory does not answer this: list_available_gpu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spec | object | yes | — |
Check what a placement preference would actually get you, before committing to anything. Takes a spec plus constraints — minimum uptime, minimum reputation tier, verified hosts only — and an optional cap on how much more you will pay to satisfy them. Returns the host it would pick and the premium over the cheapest eligible host, or a clear refusal naming the constraint that failed and the best val
| Parameter | Type | Required | Notes |
|---|---|---|---|
| spec | object | yes | — |
| preference | object | yes | — |
Get the durable attempt timeline for an instance: every scheduling attempt, transition, and failure, in order. Use when a job is stuck or failed and the current status alone does not explain it. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
Get the recorded event history for one instance or host — what actually happened to it and when, from the platform's event log. Use when the user asks why something stopped, what changed overnight, or what a host has been doing; it also covers hosts, which no other tool reads. This is not get_instance_timeline: that explains how a job was *placed* (reserve, command, lease) and this is the record o
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity_type | string | yes | Which kind of thing to read events for |
| entity_id | string | yes | A job_id from list_instances, or a host_id |
| limit | integer | no | — |
List the provider accounts this credential can see — normally the caller's own. Use when helping someone who supplies GPUs, before anything else: it is the only source of the provider_id that get_provider_account and get_provider_earnings require, and ids are not guessable. For a caller who is not a provider the list comes back empty, which is itself the answer. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| status | string | no | — |
Show a GPU provider's account and exactly what is blocking their payouts. Returns a payouts block: charges_enabled, payouts_enabled, a disabled_reason, and currently_due and past_due — Stripe's list of what the provider still has to supply, such as external_account for a bank account or individual.id_number for identity. Use when someone renting out hardware asks why they have not been paid, wha
| Parameter | Type | Required | Notes |
|---|---|---|---|
| provider_id | string | yes | From list_providers, or the caller's own |
Claim every reputation milestone the caller has already earned but not yet collected: it creates a one-time grant per milestone and returns what was awarded with the refreshed score and tier. Use when get_reputation_journey shows milestones ready to claim — each grant adds points and, for the security milestones, a verification badge, which can move the provider into a higher tier and lower the co
Takes no parameters.
List the highest-scoring hosts or users on the platform, with their reputation scores. Use when a provider asks where they stand relative to others, or what a competitive score looks like — get_my_reputation gives their number and this gives it a scale. For choosing a host to rent, prefer search_marketplace, which ranks only hardware actually available and can sort and filter by reputation directl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity_type | string | no | — |
| limit | integer | no | — |
List the individual reputation events for an entity: what happened, when, and how many points each moved. Use when a provider disputes a score and the four totals from get_reputation_breakdown are not enough to explain it — this is the itemised log those totals are computed from, so it names the specific job or penalty behind a drop. The entity_id is the caller's own provider_id from list_provider
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity_id | string | yes | The caller's own provider_id from list_providers, or a host_id from get_host_capacity |
| limit | integer | no | — |
Settle one completed job and pay the provider their share, creating a Stripe transfer or a PayPal order. Use when a provider asks to be paid for finished work and get_provider_account shows payouts enabled — if it does not, name what is outstanding instead, because this will refuse. Calling it costs nothing: the amount, the platform cut and the tax are computed from the job in the database, not su
| Parameter | Type | Required | Notes |
|---|---|---|---|
| provider_id | string | yes | From list_providers, or the caller's own |
| job_id | string | yes | A completed instance from list_instances |
| payment_rail | string | no | — |
Enrol the caller as a GPU provider so they can be paid for hosting: creates their provider account and starts Stripe Connect onboarding. Use when someone wants to supply hardware and list_providers comes back empty, which means they are not enrolled yet. Free, and it moves no money. Safe to repeat — the provider identity is derived from the credential, so calling again returns the same account rat
| Parameter | Type | Required | Notes |
|---|---|---|---|
| provider_type | string | no | — |
| legal_name | string | no | — |
| province | string | no | ON, QC, BC … or a region code |
| country | string | no | ISO-3166 alpha-2 |
| corporation_name | string | no | Required for provider_type=company |
| business_number | string | no | — |
| gst_hst_number | string | no | — |
Get a provider's PayPal payout onboarding state: whether PayPal is enabled on the platform, how far the provider got, and when they finished. Use when a provider asks about PayPal specifically, or when get_provider_account shows payouts blocked and you need to know whether their PayPal side is the reason — Stripe and PayPal are separate destinations with separate onboarding. The merchant and payer
| Parameter | Type | Required | Notes |
|---|---|---|---|
| provider_id | string | yes | From list_providers, or the caller's own |
Get the caller's own reputation score and trust tier. Use when a provider asks how they are rated, why their tier changed, or what their standing is — tier drives the platform commission they pay, their ranking in search, and the pricing premium they can charge, so it is the lever behind earnings rather than a vanity number. Someone who hosts no hardware comes back as a new user with no score, whi
Takes no parameters.
List the caller's reputation milestones with live progress and how many are ready to claim. Use when a provider asks what to do next to earn more or reach the next tier: this returns concrete steps with real progress against each, so the answer is specific rather than general advice. Progress is computed from actual account and activity state, so a milestone shown as complete is genuinely earned.
Takes no parameters.
List every trust tier with its score threshold and what it unlocks — platform commission, search boost and pricing premium. Use when a provider asks what a higher tier is worth or what it takes to reach one, and pair it with get_my_reputation to say how far away they are. The numbers come from the live scoring engine rather than documentation, so quote what this returns instead of any figure you r
Takes no parameters.
Explain how a reputation score was arrived at: points from completed jobs, uptime bonus, penalties and decay, derived from the event history. Use when a provider disputes a score or asks why it fell — this separates a penalty from ordinary decay, which are different problems with different fixes. The entity_id is the caller's own provider_id from list_providers or a host_id from get_host_capacity;
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity_id | string | yes | The caller's own provider_id from list_providers, or a host_id from get_host_capacity |
Get a provider's aggregate earnings and payout history: what has been earned, what has already been paid out, and what is pending. Use when someone supplying GPUs asks how much they have made, when they were last paid, or why a figure differs from what they expected — earned is not the same as paid, and this separates them. Read-only and free, and it moves no money: requesting a payout is a separa
| Parameter | Type | Required | Notes |
|---|---|---|---|
| provider_id | string | yes | From list_providers, or the caller's own |
Get the current attempt and lease health for an instance — which host holds it and whether the lease is being renewed. Use when an instance appears running but unresponsive, to tell a live job from an abandoned lease. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
Get the current state of an action plan owned by the authenticated principal, including whether it has been approved. Use after a tool returns approval_required, to check whether the plan is now approved and can be executed. Read-only and free; checking a plan does not approve or execute it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| plan_id | string | yes | — |
Retry a failed instance, creating a fresh fenced attempt while preserving the job's identity and history. Use when an instance failed for a transient reason and the user wants it to run again. Requires the instance's expected_version and an idempotency key, so a repeated call cannot produce a second attempt. Starts hourly billing again once the new attempt runs.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
| expected_version | integer | yes | — |
| idempotency_key | string | yes | — |
Force reconciliation of one instance so its recorded state is re-derived from what the host actually reports. Use when an instance's status looks wrong or stale — for example, running in our records but gone on the host. Requires expected_version and an idempotency key. Corrects bookkeeping only: it does not start, stop, or move the workload, and it changes nothing about what the instance is billi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
| expected_version | integer | yes | — |
| idempotency_key | string | yes | — |
List the account's persistent volumes: id, name, size, region, status, and what each is attached to. Use when the user asks what storage they have, before creating another one, or to find a volume_id for attach. Read-only and free to call — though the volumes themselves bill per GB-month whether attached or not.
Takes no parameters.
Get one volume by id: size, encryption, region, status, and its current attachment. Use when the user asks about a specific volume, or before detaching, to see which instance would lose its filesystem. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| volume_id | string | yes | — |
Create a persistent volume that outlives any instance. Use when work must survive a relaunch — checkpoints, datasets, model weights — because an instance's own disk is destroyed with it. Creates storage that bills per GB-month from the moment it exists, attached or not, so size it for what is needed rather than rounding up. Not idempotent: calling it twice creates two volumes, both billed per GB-m
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| size_gb | integer | no | — |
| region | string | no | — |
| encrypted | boolean | no | — |
Attach a volume to a running instance at a mount path. Use after launching, so the job writes somewhere durable instead of into the container. Free in itself — the volume was already billing — and it changes what the instance can see: a job started before the attach may need restarting to notice the new path. Takes job_id, the instance id list_instances returns; instance_id is a deprecated alias t
| Parameter | Type | Required | Notes |
|---|---|---|---|
| volume_id | string | yes | — |
| job_id | string | no | The instance to attach to, as returned by list_instances |
| instance_id | string | no | Deprecated alias for job_id |
| mount_path | string | no | Where it appears inside the container. The API accepts only these shapes. |
| mode | string | no | — |
Detach a volume from the instance it is mounted on. Use when moving storage to another instance, or before deleting the instance it is attached to. Call it with confirm:false first: that returns a preview naming the instance that would lose its filesystem. Detaching pulls the mount out from under anything writing to it, so unwritten data is lost even though the volume itself is not destroyed — and
| Parameter | Type | Required | Notes |
|---|---|---|---|
| volume_id | string | yes | — |
| confirm | boolean | no | — |
Permanently delete a volume and everything stored on it. Use only when the user says the data is no longer needed — prefer detach_volume when they merely want it off an instance. Call it with confirm:false first for a preview. Stops the per-GB-month billing, and is irreversible: the contents cannot be recovered, so snapshot first if there is any doubt.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| volume_id | string | yes | — |
| confirm | boolean | no | — |
Creates a point-in-time snapshot of a volume, so its current contents can be restored later. Use before anything destructive — a delete, a risky job, a version bump — and when the user wants a checkpoint they can return to. The snapshot is new stored data and bills per GB-month like the volume it came from. Not idempotent: each call creates another snapshot and snapshots are billed for storage. Li
| Parameter | Type | Required | Notes |
|---|---|---|---|
| volume_id | string | yes | — |
| name | string | no | — |
List a volume's snapshots, with when each was taken. Use before restoring, to choose which capture to go back to, or when the user asks what backups exist — snapshot_volume creates them and this is the only tool that shows them. The snapshot_id for restore_volume_snapshot comes from here and cannot be guessed. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| volume_id | string | yes | — |
Roll a volume back to one of its snapshots. Use when the user wants to undo changes on a volume or recover work they have overwritten. Call it with confirm:false first: that returns a preview naming the snapshot and when it was taken, and changes nothing — the age matters, because putting back a week-old capture is a different decision from an hour-old one. Then call again with confirm:true. This
| Parameter | Type | Required | Notes |
|---|---|---|---|
| volume_id | string | yes | — |
| snapshot_id | string | yes | From list_volume_snapshots |
| confirm | boolean | no | — |
Show when a job's artifacts will be deleted: each file with its creation time and the date its retention window ends. Use when the user asks how long results are kept, and unprompted after a job finishes — the clock is otherwise invisible, which is how finished work quietly disappears. Read-only and free. Artifacts expire; a volume does not, so copy anything that matters onto one before the window
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
Copies a finished run's outputs — weights, checkpoints — from artifact storage onto a volume, which has no retention clock. This creates a durable copy — it does not move or delete the originals. Use when a run produced something worth keeping past its expiry, or when the user asks to save results somewhere permanent. The copied data bills per GB-month as volume storage for as long as it is kept,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | The finished run whose outputs to keep |
| volume_id | string | yes | The volume to copy them onto |
| idempotency_key | string | no | Leave this out. Omitting it is safe: the same job and the same files resolve to the same promotion, so a retry after a timeout joins the copy already running instead of starting a second one. |
Reports whether a promotion started by promote_artifact_to_volume has finished, and how much it has copied. Use when you started a promotion and need to know whether the files have actually landed — the promotion tool returns while the copy is still running, so this is what tells you it is safe to say the work is saved. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| volume_id | string | yes | — |
| promotion_id | string | yes | — |
Find out whether one image actually behaves the same on different machines, by running it on several at once and comparing what each container ended up with — package versions, environment, entrypoint. Use when something works on one host and not another, when a result will not reproduce, or when the user asks whether an environment is really identical across nodes; that question cannot be answere
| Parameter | Type | Required | Notes |
|---|---|---|---|
| image_id | string | yes | A ready image_id from list_user_images |
| count | integer | yes | How many instances to launch |
| name | string | no | — |
| vram_needed_gb | number | no | — |
| num_gpus | integer | no | — |
| gpu_model | string | no | — |
| command | string | no | — |
| interactive | boolean | no | — |
| confirm | boolean | no | — |
| plan_id | string | no | An approved sweep plan. Omit to quote one. |
Create a reusable image from a running instance's container, so the exact environment can be launched again later or run across several machines at once. Use when the user wants to keep a working setup, reproduce a result, or prepare an image to sweep — installing packages again on a fresh instance is what this avoids. The image is built on the host in the background and is not usable until it rep
| Parameter | Type | Required | Notes |
|---|---|---|---|
| job_id | string | yes | — |
| name | string | yes | Lowercase repository name |
| tag | string | no | — |
| description | string | no | — |
List the saved images this account can launch from, with their status, size, and the job each was captured from. Use to find an image_id — create_image_sweep and a snapshot-based launch both need one and it cannot be guessed — or to check whether a snapshot taken earlier has finished building. Read-only and free.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scope | string | no | — |
| q | string | no | Filter by name substring |
| limit | integer | no | — |
Permanently delete a saved image, stopping its storage cost. Use when the user says an image is no longer needed, or when a snapshot must be retaken under a name that is already taken, since create_instance_snapshot refuses to overwrite. Irreversible through the API: anything that referenced the image — a past sweep, a launch you might want to reproduce — can no longer be launched from it. Check l
| Parameter | Type | Required | Notes |
|---|---|---|---|
| image_id | string | yes | — |
| confirm | boolean | no | false returns a preview of what would be deleted |
Get one sweep: its members, which of them launched, the hosts they landed on, and whether their environments are byte-identical. Use after create_image_sweep to see whether the members agree, and to find which field differs when they do not — the verdict names the differing keys rather than only reporting a mismatch. A member that never reported a fingerprint is unknown, never counted as agreeing.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sweep_id | string | yes | — |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Xcelsior Compute or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | repo | publisher verification (public source) — no provenance, but the source is public and inspectable | −1 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (95 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| get_wallet_balance | no tags | |
| get_wallet_history | no tags | |
| list_funding_options | no tags | |
| create_crypto_deposit | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/billing/crypto/deposit") at dist/tools/billing.js:123 |
| get_crypto_deposit | no tags | |
| create_lightning_deposit | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/billing/lightning/deposit") at dist/tools/billing.js:165 |
| get_lightning_deposit | no tags | |
| get_spend_envelope | no tags | |
| estimate_job_cost | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/pricing/estimate") at dist/tools/billing.js:230 |
| list_invoices | no tags | |
| configure_auto_topup | external-sink | external-sink: handler sends an HTTP POST ( client.post(/api/v2/billing/auto-topup-plans/${encodeURIComponent(plan_id)}/execute) at dist/tools/billing.js:295, handler sends an HTTP POST ( client.post("/api/v2/billing/auto-topup") at dist/tools/billing.js:304, handler sends an HTTP POST ( client.post("/api/v2/billing/auto-topup-plans") at dist/tools/billing.js:315 |
| top_up_wallet | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/v2/billing/top-up") at dist/tools/billing.js:363 |
| list_payment_methods | no tags | |
| get_auto_topup | no tags | |
| list_pending_verifications | no tags | |
| list_instances | no tags | |
| get_instance | no tags | |
| get_instance_logs | no tags | |
| create_instance | code-execstate-writeexternal-sink | code-exec: parameter "script"; state-write: declares readOnlyHint: false; external-sink: handler sends an HTTP POST ( client.post("/api/v1/launch-plans") at dist/tools/compute.js:146, handler sends an HTTP POST ( client.post(/api/v1/launch-plans/${encodeURIComponent(plan_id)}/execute) at dist/tools/compute.js:165 |
| cancel_instance | external-sink | external-sink: handler sends an HTTP POST ( client.post(/instances/${encodeURIComponent(job_id)}/cancel) at dist/tools/compute.js:189 |
| terminate_instance | external-sink | external-sink: handler sends an HTTP POST ( client.post(/instances/${encodeURIComponent(job_id)}/terminate) at dist/tools/compute.js:213 |
| register_ssh_key | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/ssh/keys") at dist/tools/compute.js:249 |
| list_ssh_keys | no tags | |
| delete_ssh_key | external-sink | external-sink: handler sends an HTTP DELETE ( client.delete(/api/ssh/keys/${encodeURIComponent(key_id)}) at dist/tools/compute.js:334 |
| open_instance_access | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/terminal/ticket") at dist/tools/compute.js:432 |
| explain_instance_placement | no tags | |
| simulate_instance_placement | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/v1/placements/simulate") at dist/tools/diagnostics.js:52 |
| evaluate_placement_preference | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/v1/placements/evaluate") at dist/tools/diagnostics.js:61 |
| get_instance_timeline | no tags | |
| get_event_history | no tags | |
| list_providers | no tags | |
| get_provider_account | no tags | |
| get_reputation_leaderboard | no tags | |
| get_reputation_history | no tags | |
| get_paypal_status | no tags | |
| get_my_reputation | no tags | |
| get_reputation_journey | no tags | |
| get_trust_tiers | no tags | |
| get_reputation_breakdown | no tags | |
| get_provider_earnings | no tags | |
| get_active_lease | no tags | |
| get_scheduler_health | no tags | |
| get_host_capacity | no tags | |
| list_reconciliation_findings | no tags | |
| get_mcp_action_status | no tags | |
| claim_reputation_milestones | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/reputation/me/claim") at dist/tools/diagnostics.js:70 |
| request_provider_payout | external-sink | external-sink: handler sends an HTTP POST ( client.post(/api/providers/${encodeURIComponent(String(a.provider_id))}/payout + `?job_…) at dist/tools/diagnostics.js:77 |
| register_provider | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/providers/register") at dist/tools/diagnostics.js:89 |
| list_available_gpus | no tags | |
| get_spot_prices | no tags | |
| get_pricing_reference | no tags | |
| search_marketplace | no tags | |
| list_tiers | no tags | |
| should_i_run_this | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/pricing/estimate") at dist/tools/guardrails.js:34 |
| search | no tags | |
| fetch | untrusted-input | untrusted-input: keyword "fetch" |
| watch_instance | no tags | |
| retry_agent_command | state-writeexternal-sink | state-write: declares readOnlyHint: false; external-sink: handler sends an HTTP POST ( client.post(path) at dist/tools/operator.js:59 |
| evict_host_workloads | state-writeexternal-sink | state-write: declares readOnlyHint: false, destructiveHint: true; external-sink: handler sends an HTTP POST ( client.post(/api/v1/hosts/${encodeURIComponent(args.host_id)}/eviction-plans) at dist/tools/operator.js:35, handler sends an HTTP POST ( client.post(`/api/v1/hosts/${encodeURIComponent(args.host_id)}/eviction-plans/${encodeURI…) at dist/tools/operator.js:38 |
| retry_instance | state-writeexternal-sink | state-write: declares readOnlyHint: false; external-sink: handler sends an HTTP POST ( client.post(path) at dist/tools/operator.js:59 |
| reconcile_instance | state-writeexternal-sink | state-write: declares readOnlyHint: false; external-sink: handler sends an HTTP POST ( client.post(path) at dist/tools/operator.js:59 |
| drain_host | state-writeexternal-sink | state-write: declares readOnlyHint: false; external-sink: handler sends an HTTP POST ( client.post(path) at dist/tools/operator.js:59 |
| undrain_host | state-writeexternal-sink | state-write: declares readOnlyHint: false; external-sink: handler sends an HTTP POST ( client.post(path) at dist/tools/operator.js:59 |
| list_serverless_endpoints | no tags | |
| create_serverless_endpoint | state-writeexternal-sink | state-write: declares readOnlyHint: false; external-sink: handler sends an HTTP POST ( client.post("/api/v1/serverless/endpoint-plans") at dist/tools/serverless.js:53, handler sends an HTTP POST ( client.post(/api/v1/serverless/endpoint-plans/${encodeURIComponent(plan_id)}/execute) at dist/tools/serverless.js:64 |
| should_i_run_pel_job | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/v2/serverless/should-i-run-this") at dist/tools/serverless.js:85 |
| run_serverless_job | external-sink | external-sink: parameter "webhook", handler sends an HTTP POST ( client.post(/v1/serverless/${encodeURIComponent(endpoint_id)}/run) at dist/tools/serverless.js:106 |
| get_serverless_job_status | no tags | |
| get_serverless_endpoint | no tags | |
| get_serverless_endpoint_health | no tags | |
| list_serverless_endpoint_jobs | no tags | |
| cancel_serverless_job | external-sink | external-sink: handler sends an HTTP POST ( client.post(`/api/v2/serverless/endpoints/${encodeURIComponent(endpoint_id)}/jobs/${encod…) at dist/tools/serverless.js:216 |
| delete_serverless_endpoint | external-sink | external-sink: handler sends an HTTP DELETE ( client.delete(/api/v2/serverless/endpoints/${encodeURIComponent(endpoint_id)}) at dist/tools/serverless.js:241 |
| create_image_sweep | code-execexternal-sink | code-exec: parameter "command"; external-sink: handler sends an HTTP POST ( client.post("/api/v1/image-sweeps") at dist/tools/sweeps.js:65, handler sends an HTTP POST ( client.post(/api/v1/image-sweep-plans/${encodeURIComponent(plan_id)}/execute) at dist/tools/sweeps.js:77 |
| create_instance_snapshot | external-sink | external-sink: handler sends an HTTP POST ( client.post(/instances/${encodeURIComponent(String(job_id))}/snapshot) at dist/tools/sweeps.js:98 |
| list_user_images | no tags | |
| delete_user_image | external-sink | external-sink: handler sends an HTTP DELETE ( client.delete(/user-images/${encodeURIComponent(imageId)}) at dist/tools/sweeps.js:169 |
| get_image_sweep | no tags | |
| list_volumes | no tags | |
| get_volume | no tags | |
| create_volume | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/v2/volumes") at dist/tools/volumes.js:72 |
| attach_volume | external-sink | external-sink: handler sends an HTTP POST ( client.post(/api/v2/volumes/${encodeURIComponent(args.volume_id)}/attach) at dist/tools/volumes.js:115 |
| detach_volume | external-sink | external-sink: handler sends an HTTP POST ( client.post(/api/v2/volumes/${encodeURIComponent(volume_id)}/detach) at dist/tools/volumes.js:159 |
| delete_volume | external-sink | external-sink: handler sends an HTTP DELETE ( client.delete(/api/v2/volumes/${encodeURIComponent(volume_id)}) at dist/tools/volumes.js:184 |
| snapshot_volume | external-sink | external-sink: handler sends an HTTP POST ( client.post(/api/v2/volumes/${encodeURIComponent(volume_id)}/snapshots) at dist/tools/volumes.js:200 |
| list_volume_snapshots | no tags | |
| restore_volume_snapshot | external-sink | external-sink: handler sends an HTTP POST ( client.post(`/api/v2/volumes/${encodeURIComponent(volume_id)}/snapshots/${encodeURICompon…) at dist/tools/volumes.js:253 |
| get_artifact_expiry | no tags | |
| promote_artifact_to_volume | state-writeexternal-sink | state-write: declares readOnlyHint: false; external-sink: handler sends an HTTP POST ( client.post(/api/v2/volumes/${encodeURIComponent(volume_id)}/promotions) at dist/tools/volumes.js:293 |
| get_promotion_status | no tags | |
| run_training_job | code-execexternal-sink | code-exec: parameter "script"; external-sink: handler sends an HTTP POST ( client.post("/api/pricing/estimate") at dist/tools/workflows.js:54, handler sends an HTTP POST ( client.post("/instance") at dist/tools/workflows.js:71 |
| schedule_under_budget | external-sink | external-sink: handler sends an HTTP POST ( client.post("/instance") at dist/tools/workflows.js:161 |
| run_pipeline | external-sink | external-sink: handler sends an HTTP POST ( client.post("/api/v1/pipelines") at dist/tools/workflows.js:189 |
| revoke_launch_plan | external-sink | external-sink: handler sends an HTTP POST ( client.post(/api/v1/launch-plans/${encodeURIComponent(plan_id)}/revoke) at dist/tools/workflows.js:225 |
| get_pipeline_status | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 0.1.1. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Xcelsior Compute can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.