Skip to main content

CLI for luplo cloud — bundles `luplo` (lp) and adds `lps` for cloud auth, key management, and MCP wiring.

Project description

luplo-cloud

Single-install bundle for luplo on the hosted cloud. Pulls in luplo (the OSS engine) and adds lps, the cloud companion for log-in, API keys, workspace bootstrap, and editor wiring. After installing this package you have two binaries:

Binary Source Role
lp luplo The luplo CLI / stdio MCP server. Talks to local Postgres by default, or — when .luplo declares type = "remote" — through the hosted cloud HTTP API. 23 MCP tools.
lps luplo-cloud Cloud-only commands: login, logout, whoami, init, mcp-config, glossary suggest.

Install

uv tool install luplo-cloud
# or:  pipx install luplo-cloud
# or:  pip install luplo-cloud

luplo (which provides lp) is pulled in transitively — no separate install step.

Three deployment modes

luplo runs in one of three modes. You pick by how .luplo is configured (or by env var). The MCP tool surface is the same in all three; only the data path changes.

Mode Where data lives How it's reached Auth Set up by
Local Your Postgres lp → psycopg pool → PG (no HTTP) none lp init (creates .luplo with type="local")
Remote Hosted luplo cloud lp → HTTPS → api.luplo.io OAuth or API key lps login + lps init
Cloud /mcp direct Hosted luplo cloud Claude Desktop/Code → HTTPS → api.luplo.io/mcp (FastMCP, no lp process) OAuth or API key lps login + lps mcp-config

If you're a single dev with your own Postgres → Local. If you're a team on the hosted cloud and want lp to operate as if data were local → Remote. If you just want Claude to talk to your cloud project with no local process → Cloud /mcp direct.

Auth model (cloud paths only)

Token How obtained Where it lives Used by
OAuth (browser) lps login OS keyring Desktop / interactive
API key (lupk_…) Issued in the web app LUPLO_CLOUD_API_KEY env Servers / CI / IaC

API keys are scoped to a single organization (and optionally a subset of projects) at issuance — least privilege by default.

lp and lps agree on token resolution priority for cloud paths: LUPLO_CLOUD_API_KEY env wins, then the OS keyring entry written by lps login. So a single lps login is enough for lp mcp in remote mode to start working — no env-var copy/paste.

Quickstart — Desktop, hosted cloud (most common)

lps login                                # browser opens; OAuth tokens → keyring
cd /path/to/your/project
lps init                                 # picker: org + project → writes ./.luplo
lp mcp                                   # 23-tool stdio MCP server, remote mode

lps init writes a .luplo TOML in the current directory like:

[backend]
type = "remote"
server_url = "https://api.luplo.io"

[project]
id = "<project-id>"
name = "Your project"

The file is safe to commit — it has no secrets. Subsequent lp calls in this directory automatically read the binding.

lps init flag matrix:

lps init                                  # full picker
lps init --org <org-id>                   # org locked, project picker
lps init --org <org-id> --project <id>    # non-interactive, bind existing
lps init --org <org-id> --new-project foo # non-interactive, create new
lps init --force                          # overwrite an existing .luplo

Quickstart — Cloud /mcp direct (no local process)

If you want Claude Desktop / Code to hit the cloud directly without running an lp process:

lps login                                # if you don't already have a key
lps mcp-config | tee ~/.claude.json      # emits {"mcpServers": {"luplo": {url, transport, auth}}}

Default Claude config locations:

  • macOS Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux Claude Desktop: ~/.config/Claude/claude_desktop_config.json
  • Claude Code: ~/.claude.json (global), or claude mcp add … (project)

Quickstart — Server / CI (headless)

No browser, no keyring backend required.

# 1) Issue a key in the web app:
#    https://app.luplo.io/settings/api-keys → "+ New API key"
#    Pick org, scope (all projects or specific), expiry (≤ 365 days).
#    The raw lupk_... is shown ONCE — copy it now.

# 2) Inject the key (e.g. /etc/environment, systemd EnvironmentFile, or
#    your secret manager).
export LUPLO_CLOUD_API_KEY=lupk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# 3) Smoke test.
lps whoami                               # prints email + actor_id

# 4a) Emit a Claude config that uses the key as bearer.
lps mcp-config | tee ~/.claude.json

# 4b) Or wire MCP directly via Claude Code (no config file edit).
claude mcp add --scope user --transport http luplo \
  https://api.luplo.io/mcp \
  --header "Authorization: Bearer $LUPLO_CLOUD_API_KEY"

Configuration

Env var Default Purpose
LUPLO_CLOUD_API_KEY (unset) Headless bearer (lupk_...)
LUPLO_CLOUD_SERVER_URL https://api.luplo.io API base — override for staging
LUPLO_CLOUD_APP_URL https://app.luplo.io Web app base — override for staging
LUPLO_DB_URL postgresql://localhost/luplo Local-mode DB (used by lp when .luplo says type="local" or no .luplo is found)

Commands

lps (this package):

  • lps login — browser-based OAuth, tokens stored in OS keyring
  • lps logout — revoke the local refresh token + clear keyring
  • lps whoami — print the email + actor_id of the authenticated principal
  • lps init — write a .luplo workspace file binding cwd to a cloud project
  • lps mcp-config — emit a mcpServers JSON entry pointing at cloud /mcp

lp (from the bundled luplo package — see the luplo README for the full list):

  • lp mcp — start the stdio MCP server (local or remote, per .luplo)
  • lp init, lp items, lp work, lp brief, lp impact, lp check, … (23 MCP tools as CLI subcommands too)

License

MIT — see LICENSE. The bundled luplo package is AGPL-3.0-or-later; its terms apply to its code, not to this MIT package.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

luplo_cloud-0.7.0.tar.gz (120.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

luplo_cloud-0.7.0-py3-none-any.whl (47.4 kB view details)

Uploaded Python 3

File details

Details for the file luplo_cloud-0.7.0.tar.gz.

File metadata

  • Download URL: luplo_cloud-0.7.0.tar.gz
  • Upload date:
  • Size: 120.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for luplo_cloud-0.7.0.tar.gz
Algorithm Hash digest
SHA256 22c2a89ec7aab75fd73b3ebbbae1215b9f19b7197af0b8a5d19bb01b159b0d46
MD5 319cd866533cb458db9c371da235a255
BLAKE2b-256 b3c0c1d42255c97fe241b560a9bca3596f2a61cb7ac2910c609ef669d4ecb580

See more details on using hashes here.

Provenance

The following attestation bundles were made for luplo_cloud-0.7.0.tar.gz:

Publisher: release.yml on luplo-io/luplo-cloud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file luplo_cloud-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: luplo_cloud-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 47.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for luplo_cloud-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7c31393cd073003941fffd3c8a76d2484dc33834d9c38a81f2aa53f7a9ac5b51
MD5 4ee19c2328860a85120ac06e08ca693e
BLAKE2b-256 eb328e4ad8e32f0479ac06e2221d5109f2bbae201420624d32cb23b0bb47c366

See more details on using hashes here.

Provenance

The following attestation bundles were made for luplo_cloud-0.7.0-py3-none-any.whl:

Publisher: release.yml on luplo-io/luplo-cloud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page