Agent skill
What the Haszno agent skill is, how to install it, and how to use it with workflow recipes and safety rules.
Overview
The Haszno agent skill is a set of guidance files that teach an AI agent (Claude Code, Claude Desktop) how to use the Haszno MCP server and CLI safely. It is not a binary — it has no server or daemon. Claude Code loads it into the agent's context when the conversation matches the skill's description.
The skill covers:
- which tool surface to use (MCP vs CLI) in a given context,
- the full safety rules that govern write operations,
- step-by-step workflow recipes for common dropshipping tasks,
- domain-to-endpoint and domain-to-command mapping tables.
What the skill contains
After installation the skill lives at ~/.claude/skills/haszno/.
| File | Purpose |
|---|---|
SKILL.md |
Main definition: frontmatter (description and trigger keywords), quick-start, MCP vs CLI decision table, safety rules, workflow recipes, domain → endpoint map. |
AGENTS.md |
Headless-agent guide: environment setup, CLI usage patterns, TypeScript integration, Codex/Cursor AGENTS.md snippet, MCP server config. |
references/tools.md |
MCP tool catalogue with parameter schemas and return types. |
references/commands.md |
CLI command reference with flags, examples, and jq one-liners. |
references/recipes.md |
9 step-by-step workflow recipes (numbered 1–8, with two recipes labelled 6) and a jq cheatsheet. |
Some details in the skill files (version 0.1.0) do not match the CLI and MCP server source: they describe the API key as a Bearer token (both tools send it as x-api-key), say that haszno login configures both tools (only the MCP server reads the file it writes), and use CLI commands that do not exist in CLI 0.1.0, such as haszno catalog … and haszno products list-cmd. The CLI reference and the recipes on this page follow the source code.
Installation
Recommended: unified installer
The installer in the skill repo installs the skill, the MCP server, and the CLI together:
curl -fsSL https://raw.githubusercontent.com/haszno-labs/haszno-skill/main/install.sh | bash
What the script does:
- Clones
haszno-cli,haszno-mcp, andhaszno-skillinto~/.haszno/(withgh repo clonewhen the GitHub CLI is logged in, otherwisegit cloneover HTTPS). - Builds the CLI and MCP server (
npm install && npm run build). - Links the
hasznobinary globally withnpm link(falls back to a~/.local/bin/hasznosymlink). - Registers the MCP server with Claude Code:
claude mcp add haszno --scope user -- node ~/.haszno/haszno-mcp/dist/index.js. - Copies
skills/haszno/to~/.claude/skills/haszno/.
Step 4 is skipped if the claude command is not found (the installer prints the command to run by hand) or if haszno is already registered. Step 5 always runs.
Manual: skill only
If you already have the MCP server or CLI installed and only want the skill files:
git clone https://github.com/haszno-labs/haszno-skill /tmp/haszno-skill-install
cp -a /tmp/haszno-skill-install/skills/haszno ~/.claude/skills/haszno
Claude Code can then load the skill in its sessions (see Trigger keywords).
Local development override
If you have the repos checked out locally:
HASZNO_SRC_DIR=~/Documents/haszno-labs bash ~/.haszno/haszno-skill/install.sh
Where files land
| Path | Contents |
|---|---|
~/.claude/skills/haszno/SKILL.md |
Main skill definition. |
~/.claude/skills/haszno/AGENTS.md |
Headless-agent guide. |
~/.claude/skills/haszno/references/tools.md |
MCP tool catalogue. |
~/.claude/skills/haszno/references/commands.md |
CLI command reference. |
~/.claude/skills/haszno/references/recipes.md |
Workflow recipes. |
~/.haszno/haszno-mcp/ |
MCP server source and build. |
~/.haszno/haszno-cli/ |
CLI source and build. |
~/.config/haszno/config.json |
API credentials for the MCP server, written by haszno login (not by the installer). The CLI does not read it; it uses HASZNO_API_KEY / HASZNO_API_URL. |
Trigger keywords
Claude Code decides when to load a skill from the skill's description. The Haszno skill's description covers Haszno, dropshipping pricing, price proposals, automation rules, catalogues, webshop connections, the import list, partner invites and the market blog, and its frontmatter also lists these trigger keywords:
haszno, haszno.com, dropshipping, price proposal, árajánlat, automatika, partnerkatekógus, veszteséges termékek, margin check, árukereső feed, termékötlet, dropshipping check, pricing rules, árazás, bolt-bekötés, import lista, termékek kiküldése, meghívó, partner kapcsolat, heti összefoglaló, havi összefoglaló.
You can also invoke it explicitly:
/haszno
How an agent uses the skill
When the skill loads, the agent follows this sequence for any Haszno-related task:
- Check the MCP vs CLI table in
SKILL.mdto decide which tool surface to use. - Look up the domain in the domain → endpoint map to find the right tool or command.
- For parameter details, open
references/tools.md(MCP) orreferences/commands.md(CLI). - For multi-step workflows, open
references/recipes.md. - Apply the safety rules before every write call.
MCP vs CLI decision table
| Situation | Prefer |
|---|---|
| Interactive Claude Code or Claude Desktop conversation with MCP connected | MCP (haszno_* tools) |
| Shell script, cron job, Codex agent, Cursor terminal | CLI (haszno <domain> <cmd>) |
| Programmatic TypeScript / Node integration | Direct HTTP client |
| Batch write (approve many proposals at once) | Either — the MCP tool needs confirm: true, the CLI command needs --yes |
Safety rules
The skill enforces seven non-negotiable rules. The agent must apply them on every Haszno task.
Rule 1 — Read-only by default. Use read tools and list commands freely, without asking for user confirmation.
Rule 2 — Every write requires explicit user confirmation. The following operations are writes. Ask the user first, then pass confirm: true in the MCP tool call or --yes to the CLI command: approve proposals, reject proposals, rollback a batch, run a rule, list or unlist a product, apply prices, import a feed, update settings, ship an order, push an import list, create a peer invite, accept a peer invite.
Rule 3 — Check the automation kill switch before any bulk write. Call haszno_automation_get (MCP) or haszno rules automation --json (CLI). If paused: true, do not approve proposals or run rules — report the status to the user and wait for their instruction.
Rule 4 — Rollback before escalating. If an approved proposal batch looks wrong, call haszno_proposals_rollback with the batchId before doing anything else.
Rule 5 — Never pass negative prices. All prices are positive whole forints (gross HUF). There is no concept of a negative price.
Rule 6 — Partner catalogue is aggregated. haszno_catalog_supplier_view (MCP) returns aggregated reseller statistics only. The agent must not expose individual shop margins from this data.
Rule 7 — Demo environment is read-mostly. Read-only GETs against https://haszno.com are fine for smoke tests. Never POST writes to the demo unless the user explicitly confirms the intent.
Recipes
These recipes follow references/recipes.md, with commands and tool calls corrected to the ones that exist in CLI 0.1.0 and the MCP server.
Recipe 1 — Daily dropshipping health check
Goal: surface the most important issues in one pass, without changing anything.
User prompt: "Give me a quick overview of my Haszno account."
Steps:
Call
haszno_account_get_stats— noteproducts,losing,overMarket,toFix,orders.# CLI equivalent: haszno account stats --jsonCall
haszno_automation_get— confirm automation is not paused.haszno rules automation --jsonCall
haszno_proposals_listwithstatus: "pending"— count pending proposals.haszno proposals list --status pending --json | jq 'length'Call
haszno_orders_list— flag any orders withstatus: "error".haszno orders list --status error --jsonCall
haszno_account_get_impactwithdays: 7— show the week's profit impact.haszno account impact --days 7 --json
Report a brief summary: overall health, pending proposal count, any stuck orders, 7-day profit impact. Ask the user which item to drill into. Do not write anything.
Recipe 2 — Find and fix loss-making products
Goal: identify products below the minimum margin and apply the recommended prices after user confirmation.
User prompt: "Which products are losing money? Fix them."
Steps:
Call
haszno_account_get_settings— readminMarginPct.haszno account settings --jsonUse
haszno_account_get_stats— thelosingfield gives the count without full detail.For the full list, use the CLI (the MCP server has no products tools yet — Planned):
haszno products list --all --json \ | jq '[.[] | select(.current.marginPct < 10) | {id, name, sku, margin: .current.marginPct, recommended: .recommended.priceGross}]'Present the list to the user:
id,name,sku,current.marginPct,recommended.priceGross. Never auto-fix.Wait for explicit user confirmation of which products to fix.
Apply recommended prices (CLI only until the MCP products tools are available):
haszno products apply-prices --ids 12,15,22 --yes
Recipe 3 — Review and batch-approve price proposals
Goal: review pending price proposals, confirm with the user, then approve or reject.
User prompt: "Approve the pending price proposals."
Steps:
Check the kill switch —
haszno_automation_get. Stop ifpaused: true.haszno rules automation --jsonList proposals:
# MCP: haszno_proposals_list(status="pending") # CLI: haszno proposals list --status pending --jsonShow the user a summary: count, average price change, largest increase and largest decrease, and any proposal that would push the margin below
minMarginPct.Wait for explicit user confirmation before proceeding.
Approve:
# MCP (save the returned batchId): haszno_proposals_approve(ids=[...], confirm=true) # CLI: haszno proposals approve --ids 42,43,44 --yesSave the
batchIdfrom the approve response. If the user spots a problem, roll back:# MCP: haszno_proposals_rollback(batchId="<batchId>", confirm=true) # CLI: haszno proposals rollback --batch <batchId> --yes
Recipe 4 — Discover new products from a supplier
Goal: browse a supplier's catalogue, find products worth listing, and add them to the import list after user confirmation.
User prompt: "Find me good products to list from supplier 3."
Steps:
Get the supplier's catalogue:
# MCP: haszno_catalog_supplier_products(supplier_id=3) # CLI: haszno catalogue search --partner 3 --in-stock --sort margin_desc --jsonFilter: in stock, margin at least
minMarginPct(MCP:potentialMargin.marginPct; CLI:marginPct). In the CLI output, skip items withinShoporinImportListset totrue.haszno catalogue search --partner 3 --in-stock --min-margin 10 --json \ | jq '[.items[] | select(.inShop == false and .inImportList == false) | {id, name, marginPct, stock}]'Present the shortlist to the user. Do not add anything automatically.
After user confirmation, add the selected catalogue products to the import list:
# MCP: haszno_import_list_add(networkProductIds=[101, 102, 103]) # CLI: haszno import add 101 102 103Optionally push them to a connected webshop. Take the import list item IDs from
haszno import list --status varakozik --jsonand the connection ID fromhaszno connections list --status kapcsolva --json:# MCP: haszno_import_list_push(ids=[5, 6, 7], targetConnectionId=1, confirm=true) # CLI: haszno import push --ids 5,6,7 --target 1 --yes
Recipe 5 — Create a margin-guard automation rule
Goal: set up a rule that creates a price proposal whenever a product's margin drops below 8%.
User prompt: "Create a rule to flag products when their margin drops below 8%."
Steps:
Browse templates:
# MCP: haszno_rules_list_templates() # CLI: haszno rules templates --jsonCreate the rule. A custom condition needs the MCP tool; the CLI can only create rules from the built-in templates (
keszlet_or,arjavaslat,felar_savok,veszteseg_riasztas), none of which uses an 8% threshold:# MCP: haszno_rules_create( name="Margin guard", trigger="market_price", conditions=[{ "field": "marginPct", "op": "lt", "value": 8 }], actions=[{ "type": "propose_price" }], confirm=true ) # CLI (template only, e.g. the proposal template): haszno rules create --template arjavaslat --name "Margin guard" --yesVerify the rule was created:
haszno rules list --jsonOptionally run it once. This is a real run, not a dry run: it can create proposals, so ask the user first, then check
haszno proposals list --status pending --json.haszno rules run <id> --yes
Recipe 6 — Weekly product idea review
Goal: find products worth listing in your shop based on trend data.
User prompt: "What new products should I list this week?"
Steps:
Get the product ideas (they come from your own products):
# MCP: haszno_ideas_list() # CLI: haszno ideas list --limit 10 --jsonIf many ideas have no trend keywords, fill them (AI batch, ask the user first):
# MCP: haszno_ideas_fill_keywords(confirm=true) # CLI: haszno ideas fill-keywords --yesFor top candidates, check market saturation with the MCP tool
haszno_catalog_supplier_view(supplier_id=<id>)(no CLI equivalent).Present a ranked shortlist to the user (trend score, margin, saturation). Do not list anything automatically.
After user confirmation, list the chosen products (CLI only until the MCP products tools are available):
haszno products listing <id> --on --yes
Uninstall
bash ~/.haszno/haszno-skill/install.sh --uninstall
This removes:
~/.haszno/(MCP server, CLI, and skill source).~/.local/bin/hasznosymlink.~/.claude/skills/haszno/.- MCP registration:
claude mcp remove haszno --scope user. - npm global link (best-effort).
It does not remove ~/.config/haszno/config.json. Delete that file manually if you want to remove stored credentials.
Troubleshooting
The skill does not load automatically
If the skill is not loading:
- Check that
~/.claude/skills/haszno/SKILL.mdexists. - Mention Haszno or one of the trigger keywords in your message.
- Run
/hasznoto invoke it explicitly.
The MCP server is not found after install
# Verify the registration:
claude mcp list
# If haszno is missing, re-register:
claude mcp add haszno --scope user -- node ~/.haszno/haszno-mcp/dist/index.js
haszno command not found
# Check the symlink:
ls -la ~/.local/bin/haszno
# If missing, re-link:
cd ~/.haszno/haszno-cli && npm link
# or symlink ~/.haszno/haszno-cli/dist/index.js into a directory on your PATH
haszno_products_list tool not found
This tool is Planned and not yet implemented in the MCP server. Use the CLI instead:
haszno products list --all --json
See the Planned tools section of the MCP reference for the full list of tools that are not yet available.
Write operations return 401
The demo at https://haszno.com does not accept write operations without credentials. See Authentication to learn what credentials are available today. If you have credentials and only the CLI gets 401, export HASZNO_API_KEY (or HASZNO_BASIC): the CLI does not read ~/.config/haszno/config.json.
See also
- MCP server reference — full tool catalogue with input schemas.
- CLI reference — all CLI commands with flags and examples.
- Authentication — API key and demo credential details.
- Agents overview — when to use MCP, CLI, or the skill.
.com