Build1 publisher2 min readPublished
rocminfo reports one MI300X framebuffer three times, once per global memory pool
A single AMD Developer Cloud droplet at $1.99 an hour was inventoried entirely over twelve tag-scoped MCP tools, and two of the readings came back wrong until the output was parsed instead of a status code.
The Engineer · Build desk

What happened
- One AMD Instinct MI300X droplet, billed at $1.99 an hour, was inventoried entirely through twelve MCP tools covering inventory, power, reboot, hardware scan, GPU state and remote execution.
- The host, GPU and memory tables were read off the machine on 2026-09-16 by hardware_scan, rocminfo and lspci, every one of them invoked through the MCP server.
- rocminfo reported three GLOBAL memory pools, coarse grained, fine grained and extended fine grained, each at 200,998,912 KB, which the article says is one framebuffer described three ways.
- The card is a virtualized MI300X, and firmware queries like ASD, PFP, MES and SOS answer "Not supported on the given system" while amd-smi cannot see partitioning.
- The article's author reports that the closing numeric-format table disagrees with AMD's published peak figures in two places, and treats that disagreement as the result.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- cost Stopping the droplet does not stop the meter, so the cheapest mistake available in this setup runs $47.76 for every idle day the card is left powered off.
- constraint With an account-wide token in play, the tag string is the whole authorisation boundary, and any droplet someone else tags gemma is reachable by these reboot and power-off calls.
- decision Anyone scripting capacity checks on ROCm now has to choose between quoting the tool and computing the value, because one utility truncates a percentage and the other invites a triple count.
- contradiction Because the formats involved are not named, the mismatch rests on the author's own table and a reader cannot line it up against AMD's datasheet.
Every lookup in that server resolves through one HTTP call: `GET /v2/droplets?tag_name=gemma` [7]. The token behind it is an account token with full reach, so the tag string is what keeps a reboot from landing on someone else's box [7]. An untagged droplet is invisible to the tools, and a tagged droplet belonging to someone else is not [6]. Underneath, devcloud.amd.com is DigitalOcean, with the same v2 API and the same droplet ids, and the token has to come from the My AMD Team account [5].
Two tools are absent on purpose, and `get_help` says why in the server's own text: "No create or destroy tools, by design: both are dollar-per-hour decisions, so they stay a deliberate step in the DigitalOcean console" [12]. The line after it: "Powering a droplet off does not stop DigitalOcean billing it" [13]. At $1.99 an hour, that is $47.76 for each day a stopped droplet sits there [2][22].
Divide 200,998,912 KB by 1024 twice and each pool is 191.69 GiB [20]. All three describe the same memory [15], so a script that sums whatever GLOBAL pools `rocminfo` prints reports 575.08 GiB [21]. `rocm-smi` has the opposite failure: it prints 87 where the division gives 87.8, because the tool truncates, and the article quotes the tool [14].
On a virtual function the list that answers is shorter: MEC reports 32948, RLC 65, SDMA 24, and SMC and the RAS/XGMI trusted applications report as well [18]. VIS_VRAM equals VRAM here, a large-BAR configuration, so the whole 191.69 GiB is CPU-mappable and none of the framebuffer sits behind the old 256 MB window [16].
The numeric-format table is the hardest part of the piece to check. Its author writes that "the disagreement is the result rather than a footnote to it" [4]. The setup states both the two format mismatches and the two corrected readings without saying which formats or which readings are involved [23]. The table describes one virtualized card on a host that already refuses ASD, PFP, MES and SOS queries [17], while AMD's published peaks describe the part. For a mismatch to say anything about the silicon, the same read would have to come back the same way from a bare card whose firmware queries answer.
Adoption cost is small and specific. The token is read from `DIGITALOCEAN_ACCESS_TOKEN`, then a mode 0600 `.env`, then `~/ocean.txt`, and `ssh-droplet.sh` uses that same order [8]. SSH runs as root with `BatchMode=yes` throughout, so a wrong key fails instead of waiting on a password prompt [9]. `httpx` and `python-dotenv` go into the system interpreter, because `.mcp.json` launches the server with a bare `python3` [10].
What to watch
- Whether the published format table names the two formats where it diverges from AMD's peaks, and by how much.
- A second read of the same three tables on a bare-metal MI300X, where the ASD, PFP, MES and SOS queries answer.