Skip to main content
  • The CLI — for terminal agents (Claude Code, shell loops, CI): push folders, pull them back, mint share links. Full reference: cli.md.
  • The MCP endpoint — for MCP hosts (claude.ai connectors, Claude Desktop, Claude Code, any MCP client): 22 slideless_ tools over streamable HTTP at /mcp. Full reference: mcp-connector.md.
Both authenticate against your instance only. There is no central Slideless service in either path — the key self-host property is that every instance is its own OAuth 2.1 authorization server and its own API-key issuer, so nothing works or breaks because of anyone else’s infrastructure.

The CLI

Get the binary (npm i -g @antasphere/slideless, or a workspace build):
The CLI has no default URL — every command resolves its target as --api-url flag → SLIDELESS_URL env → the saved profile’s baseUrl, and errors if none is set. That is deliberate: a self-hosted CLI must name its instance instead of silently talking to the wrong host. Sign in, option A — browserless OTP (requires the instance to have an email driver). Signs in existing accounts only — sign-up stays closed:
login-complete mints an slk_ API key server-side (scopes presentations:read + presentations:write) and stores it as the active profile in ~/.config/antasphere/tools/slideless.json (mode 600; the shared Antasphere CLI config home, see cli.md). Sign in, option B — paste a dashboard key (works with EMAIL_DRIVER=none, and required for accounts with 2FA). Mint the key in the dashboard: API keys, then Create key. Tick presentations:write there (the dialog pre-selects presentations:read only) so the key can push and share; the secret is shown once, right after creation. Then:
The agent loop — push, share, pull:
A push answers with the deck’s own page on the instance (the owner’s view, where links are made); a share link is minted only when a recipient needs one. The model is in the Concepts pages, starting with The deck is the artifact. push is content-addressed (only missing blobs upload; a re-push of the same folder is a new immutable version), the first push writes .slideless.json into the folder so later pushes target the same deck, and --json on any command emits the wire shape for machine parsing. See cli.md for sharing flags (expiry, password, pin-to-version), collaborator grants, annotations export, and slideless dev (a local preview server with the exact viewer sandbox headers).

The MCP endpoint

Every instance serves MCP at:
Two ways in: OAuth (claude.ai / Claude Desktop connectors). Add the URL as a custom connector — that is the whole configuration. The client discovers everything from your instance itself: the 401 challenge points at the RFC 9728 resource metadata, which names this instance as the authorization server; the client self-registers (RFC 7591), the member signs in on your dashboard and approves consent, and tokens are minted, verified, and refreshed entirely by your box. Deactivating the member kills the connector instantly. API key (Claude Code, headless hosts). /mcp accepts the instance’s slk_ keys directly, no OAuth dance:
Tools act as the connected user — identity always comes from the verified credential, never from a tool parameter, and the API’s fail-closed scope allowlist plus per-deck read privacy apply unchanged. The tool set (whoami, list/get/upload/download presentations, share tokens, collaborators, annotations) is tabled in mcp-connector.md; note the 1 MiB /mcp body cap — tools answer a clean “use the CLI” error for bigger decks. Verify an instance end to end:

Scopes and revocation

Machine credentials reach only the endpoints consciously allowlisted for their scopes (fail-closed — see security.md); member deactivation is re-checked on every request, so cutting a person off cuts their agents off in the same moment.