This assumes you already have an Engine to talk to — hosted, or one you started yourself. If not, get one running first; every command below needs it.
Install
ASSUME_YES=1 to skip the confirmation prompt.
Sign in
On a headless machine,
fused-cli login --no-browser prints the URL instead of trying to open one.Choose your service’s authentication
For a supported OAuth integration, use a Managed service to connect users without registering your own provider app. Alternatively, store your own credentials. Managed auth is an explicit app configuration choice; init does not automatically choose it when local credentials are missing. Use--no-apply while preparing the managed reference, then plan and apply the completed config.
Build and configure an SDK
fused-cli init searches your workspace and then the Registry, pins a concrete service version, and asks what the SDK should expose. All operations is highlighted by default, so press Enter to take the complete service. Open Choose operations… to search by operation ID, method, path, summary, or tag and build a narrower SDK. You do not need to know operation IDs before you start.
If activation is needed, the CLI shows one combined confirmation. It keeps governance intact by writing separate workspace and SDK receipts. Missing provider credentials do not block creation: in a terminal the CLI offers to store them securely and retry planning once, while skipping that optional step still publishes the app.
When the command succeeds, the SDK is applied and its package is downloaded with generated first-call guidance. It creates only the desired state you chose: the SDK config, plus a workspace config when service activation was needed.
If no suitable Registry service exists, import the API yourself from a spec, a GraphQL endpoint, or the provider’s documentation.
Automating this? Run
fused-cli init support-sdk --sdk --service linear --select-all linear --no-input; missing credentials are reported as readiness metadata without blocking publication. You may pre-provision them with secret set --no-input --value-stdin, or let the first affected call return the exact safe setup command. Use an explicit --operation instead when the app needs a narrower surface. The command fails rather than guessing its mode, an ambiguous service, or a capability boundary. For structured plan and apply output with independent retry boundaries, use the advanced controlled workflow.Call it
Three ways in. Same Engine execution behind all of them, and the same execution token.{ ok, status, data, error } rather than the payload itself, and services sit on the client in PascalCase with operations following the provider’s own grouping — so issueUpdate may be sdk.Linear.issues.update. Using it in your app covers the whole shape; your package’s generated README.md lists the exact paths for the operations you selected.
Whichever one you used, the receipt is the same:
What you just did
Where to go next
Build an SDK properly
Multiple services, operation selection, and choosing an auth scheme.
Deploy an MCP server
The same approved operations, shaped for an agent.
Connect user accounts
OAuth per end user, with refresh handled by the Engine.
Share access
Give a team what it needs without giving it everything.