Overview

Handlify deploys the apps Claude builds for you — straight to Qiscus infrastructure. Ask in a Claude chat, or use this dashboard. No server to manage, no Git required, no ops queue.

Every app gets a live https://<id>.handlify.qiscus.io URL. You can gate who may open it (private / your team / anyone), attach a custom domain, set env secrets, and redeploy — all from chat or the dashboard.

Quickstart

  1. Open a Claude chat connected to the Qiscus Builder connector.
  2. Describe what you want built. Claude generates the files and deploys them.
  3. You get a live URL in ~20–40 seconds.
You: build a countdown landing page for our Q3 hackathon with a signup form,
     and deploy it.

Claude uses deploy_project under the hood and replies with the URL. Iterate by asking for changes — it redeploys at the same URL.

Deploying apps

Code Claude generates

The most common path. Claude writes the files and deploys them directly — no git repo needed. Static sites (HTML/CSS/JS) or Node apps. If the app needs a database, a managed PostgreSQL is provisioned and its DATABASE_URL injected automatically (credentials never shown).

From a public Git repo

Use the Project → Import a Git repository form, or ask Claude to import a repo URL.

From a private Git repo

Add an SSH deploy key (Settings → Deploy keys), put its public half as a read-only deploy key on the repo, then deploy the SSH URL. Multi-service repos deploy via docker-compose.

Managing apps

Open an app from Apps to manage it. From the dashboard you can:

  • Environment secrets — add/remove env vars (values are write-only, never shown again), then Apply & redeploy.
  • Custom domain — serve the app from your own domain.
  • Access — choose who can open the URL (below).
  • Deployments & logs — build history + container logs.
  • Danger zone — permanently delete the app.

Or from chat: get_app, get_logs, restart_app, deploy_app, update_project, delete_project.

URL access

Control who can open an app's URL. Change it from the app's Access card, or from chat with set_access / get_access. Changes take effect immediately — no redeploy.

  • private — only you (the owner).
  • team — an allow-list of specific emails or whole domains (e.g. qiscus.com).
  • company — anyone with a @qiscus.com account.
  • public — anyone with the link.
  • password — public, gated by a shared password.
You: make gate-demo-b1c229 accessible only to andi@qiscus.com and me
Passwords & secrets: a URL password can be set in the dashboard (recommended) or passed inline via chat — if you pass it in chat it will appear in the transcript. It's always stored salted-hashed, never in plain text. Env secret values, API keys, and private deploy keys are dashboard-only and never travel through chat.

Custom domains

On the app's Custom domain card: add a domain you own, point its DNS (a CNAME or A record) at handlify.qiscus.io, click Check DNS, then Apply to this app. The app then serves on your domain alongside the auto-generated one.

Connect a client

Beyond the Claude.ai connector (which uses Google sign-in), you can call this MCP from a CLI or script with a personal API key. Generate one in Settings → API keys, then point a client at the endpoint with a Bearer header:

Claude Code

claude mcp add --transport http qiscus-builder \
  https://handlify.qiscus.io/mcp \
  --header "Authorization: Bearer <your-key>"

Codex / other CLIs (via the mcp-remote bridge)

[mcp_servers.qiscus-builder]
command = "npx"
args = ["-y", "mcp-remote", "https://handlify.qiscus.io/mcp", "--header", "Authorization: Bearer <your-key>"]

Cursor / generic JSON MCP config

{
  "mcpServers": {
    "qiscus-builder": { "url": "https://handlify.qiscus.io/mcp", "headers": { "Authorization": "Bearer <your-key>" } }
  }
}

Keys are scoped like the dashboard (only your own apps) and revocable anytime.

MCP tools

list_apps / get_appList your apps / one app's details.
get_logs / list_deployments_for_appContainer logs / deploy history.
deploy_projectDeploy code Claude generated (static/node, optional DB).
create_app_from_repo / deploy_private_repoDeploy from a public / private git repo.
update_project / deploy_app / restart_appRedeploy / trigger / restart.
get_access / set_accessRead / set who can open a URL.
manage_secretsGet the dashboard link to set env secrets out-of-band.
delete_projectDelete an app (owner/admin).

Roles

  • viewer — read-only (list/get/logs) + read access levels.
  • developer — viewer + deploy, restart, update, delete, manage secrets, set access.
  • admin — everything.

You only ever see and act on your own apps (admins see all). Roles are per-email.