@lola-market/skills-alpha
v0.0.22
Published
LOLA market skills, exposed two ways: a `lola` CLI for humans and a `lola-mcp` stdio MCP server for AI agents. One package, two binaries, one credentials file. Skills: onboard-item, manage-items, manage-messages, manage-groups, manage-rentals, browse-list
Readme
lola-skill-cli
LOLA market CLI. One binary (lola), one subcommand per skill.
lola login # device flow for ALL skills (one approval click)
lola login --skill manage-rentals # device flow for one skill
lola whoami [--skill manage-rentals]
lola logout [--skill … | --all]
lola rentals list
lola rentals show <id>
lola rentals events <id>
lola rentals advance <id> <event> [--lat … --lng … | --file-ids a,b,c]
lola rentals earnings
lola rentals reviewsInstall (dev)
cd cli
npm install
npm run build
npm link # exposes `lola` on $PATHOr run without linking:
node dist/bin.js loginUsing the MCP server (lola-mcp)
The same operations are exposed as MCP tools over stdio by the lola-mcp
binary (installed alongside lola by the same package). Point any MCP
host at it — Claude Desktop, Claude Code, Cursor, opencode, Continue,
etc.
{
"mcpServers": {
"lola": { "command": "lola-mcp" }
}
}First-time setup is still the CLI. lola-mcp reads the same
~/.config/lola/credentials.json the CLI writes — there is no
login flow inside the MCP server. Order of operations:
npm i -g @lola-market-team/skill-cli(puts bothlolaandlola-mcpon PATH)lola login(one-time, opens a browser for device-flow approval)- Add the JSON snippet above to your MCP host and restart it
- The agent can call
lola_statusfirst to confirm the user is paired — it's a no-network local read and won't throw before login
If a tool call fires before login, the error string tells the user exactly what to run.
Where credentials live
~/.config/lola/credentials.json — file mode 0600, one record per
skill keyed by client_id. Delete or lola logout to drop a session.
Base URL
Defaults to https://staging.lola.market. Override with the
LOLA_BASE_URL environment variable.
Backend wire contract
Each skill's HTTP contract is documented in
../docs/skills/<slug>/skill.yaml. The CLI is a thin wrapper.
Driving the CLI from an LLM / agent
Designed so a shell-spawning agent can use it without prior knowledge. Self-introspection paths:
lola --help→ top-level workflow, env vars, exampleslola <skill> --help→ what the skill does, deny-list, error codes, and copy-paste exampleslola <skill> <cmd> --help→ exact flags and their purpose- For state-machine skills: always
lola <skill> events <id>beforeadvance— the proxy applies the deny-list, so what comes back is safe to fire. Don't enumerate FSM events from memory.
Output today is JSON for everything except rentals list (small table).
Pipe through jq for parsing. A --json global flag for the list
commands is on the roadmap.
Errors land as a JSON body with errors[0].extensions.code. Stable
codes worth pattern-matching:
| Code | Action |
|--------------------------|--------------------------------------------------|
| NOT_FOUND | resource doesn't exist OR caller isn't on it |
| EVENT_BLOCKED_FOR_SKILL| money/insurance event; deny-list, not a bug |
| WRONG_SKILL | token is for another skill; re-login --skill X |
| UNAUTHORIZED | session expired; CLI auto-refreshes once |
| unknown_event | FSM rejected (wrong state/role) |
Repo plan
Lives under cli/ in lola-market-backend for now while contracts
are still moving. Will be extracted to its own repo (lola-cli) once
the surface is stable, with:
git filter-repo --path cli/ --to-subdirectory-filter .