
Programmatic access to your CMDOP fleet from Python and Node — manage machines, fleets, tunnels, and schedules, stream a machine's AI agent live, and drive the skills marketplace, all behind one typed client.
| Install | Import | |
|---|---|---|
| Python | pip install cmdop |
cmdop |
| Node | npm i @cmdop/sdk |
@cmdop/sdk |
Both clients ship in lockstep at the same version and expose the same surface — snake_case in Python, camelCase in Node.
📚 Full documentation: docs.cmdop.com — guides, the complete API reference, and streaming details. Product pages: SDK · Bots · Connect.

Your app uses the SDK to reach your machines — any hardware, anywhere — through a CMDOP server you choose (the public cloud, or one you self-host in your own network). The server links your fleet over gRPC and hosts Jarvis, a built-in AI that can drive those machines on its own.
pip install cmdop / npm i @cmdop/sdk is
everything — no native build step, no extra runtime, nothing fetched on first
run.# pip install cmdop
from cmdop import Client
async with Client(token="...") as c: # or Client.from_env()
page = await c.machines.list(presence="online")
text = await c.machines.ask(machine_id, "uptime").collect()
// npm i @cmdop/sdk
import { Client } from "@cmdop/sdk";
const c = new Client({ token: "..." }); // or Client.fromEnv()
const page = await c.machines.list({ presence: "online" });
const text = await c.machines.ask(machineId, "uptime").collect();
await c.close();
| Namespace | What |
|---|---|
machines |
list / inspect machines, stream their AI agent (ask), read & manage conversations |
fleets |
create and manage fleets, members, and machine membership |
tunnels |
open / close / inspect tunnels |
schedules |
create, trigger, and review scheduled jobs |
keys |
issue and revoke access keys |
skills |
browse, install, publish, and review skills from the marketplace |
The headline feature is machines.ask() — stream a machine's AI agent as a
clean async iterator of typed events. A connection PIN can be passed upfront
(ask(…, pin="…"), the headless default) or answered reactively mid-stream, and
dangerous plans surface as inline confirmation prompts.
Two planes, one client.
machines / fleets / tunnels / schedules / keysuse your relay token (CMDOP_TOKEN); theskillsmarketplace uses your platform API key (CMDOP_API_KEY). Set whichever you need — the client routes each call to the right plane.
Full method reference, streaming details, environment variables, and error handling live in each package's README:
python/README.mdnode/README.mdcmdop on PyPI ·
@cmdop/sdk on npmMIT — see LICENSE.
$ claude mcp add cmdop-sdk \
-- python -m otcore.mcp_server <graph>