Use it
Use it
Two ways to do the same actions — the dashboard for point-and-click, the
mmk-admin CLI for scripted automation. Everything the dashboard does,
the CLI can do, and vice versa.
The dashboard (manual, point-and-click)
A small web UI at /admin on your server. No terminal, no API keys — log in
with the password you set as MMK_ADMIN_PASSWORD when deploying.
Two levels:
- Products (
/admin) — everything you sell, at a glance: license types, licenses issued, active licenses, bound devices. - Product page — one product in detail, in three tabs:
- Licenses — the list, 50 at a time. Above it: the issue license form (license type + optional customer email + button). Per license: reset seats (the "customer reinstalled Windows" button — frees every binding, key stays active) and revoke (kills the key; existing offline tokens keep working until the client next checks in).
- License types — kinds, seats, durations; create form at the top.
- Integrations — webhooks (endpoint URL, generated secret, delivery log, "send test event" button) and Payments — Stripe (webhook signing secret, the license type issued on checkout, price → license type mappings, plus test payment and test email buttons to verify the whole loop before a single real purchase).
Your first license in three steps: create a product → create a license type → issue a license key. The key appears on the page; give it to your customer.
The CLI (scripted)
mmk-admin wraps the admin API with Python's standard library. Set two env
vars (server-side — never in client apps), then every dashboard action has a
command:
alias mmk-admin="python scripts/mmk-admin.py"
export MMK_URL=http://localhost:8080
export MMK_ADMIN_TOKEN=<your MMK_ADMIN_TOKEN>
mmk-admin products create "PixelForge Pro" pixelforge-pro
mmk-admin license-types create 1 pro-monthly subscription --max-seats 1 --days 30
mmk-admin licenses issue 1 1 --email [email protected]
# 9TMC-5TS9-0MKQ-VS8A-87Q0
mmk-admin licenses list 1
# #1 9TMC-5TS9-0MKQ-VS8A-87Q0 active seats=0/1 [email protected]
mmk-admin licenses revoke 1
mmk-admin webhook set 1 https://your-server.dev/hook
mmk-admin mail test --to [email protected] # verify key email without a purchase
Recipes — the reason to script:
- Issue a license when a payment arrives (in your Stripe webhook handler):
mmk-admin licenses issue 1 1 --email <customer_email> - Revoke on a refund:
mmk-admin licenses revoke <id> - Audit before shipping a release:
mmk-admin licenses list 1 | grep -c revoked
The CLI is a thin wrapper — the server is the source of truth. Anything it doesn't cover, the raw API reference does.