hktvmall-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_LEVEL | No | Log level. | INFO |
| MCP_BEARER_TOKEN | No | One or more tokens (comma-separated, at least 16 characters each), all for the default account. Required for serve. | |
| HKTVMALL_LOGIN_URL | No | The login browser service (http://host:port on a private network). | |
| HKTVMALL_STATE_DIR | No | Sessions, budgets, pause, order cache. | per-user folder (see Privacy); /state in the image |
| HKTVMALL_PUBLIC_URL | No | The server's public HTTPS address, for connected accounts' OAuth sign-in. | |
| HKTVMALL_LOGIN_TOKEN | No | Bearer token for the login browser service. | |
| HKTVMALL_SESSION_KEY | No | 32 random bytes, base64: enables connected accounts and encrypts their sessions. | |
| HKTVMALL_DAILY_BUDGET | No | The default account's HKTVmall requests per day (resets 00:00 Hong Kong time). | 2000 |
| HKTVMALL_EXPECTED_EMAIL | No | The account the session snapshot must belong to. | |
| HKTVMALL_SESSION_SNAPSHOT | No | Read the default account's session from a published file. | |
| HKTVMALL_KEEPALIVE_SECONDS | No | How often an idle session is refreshed (re-mints its token and reads the basket). | 21600 |
| HKTVMALL_TOTAL_DAILY_BUDGET | No | All accounts together per day. | 4000 |
| HKTVMALL_ACCOUNT_DAILY_BUDGET | No | Each connected account's requests per day. | 500 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| hktv_searchA | Search HKTVmall for one or many items in one call: pass the whole shopping list (up to 25 items, English or Chinese). Returns a few lean candidates per item (id, title, pack, price, stock, seller, delivery) for you to choose between; it never picks. Supermarket zone by default, widening to the whole marketplace when the supermarket has nothing; total says how many matched (max_price_cents is applied by HKTVmall, so within that price). Each product's url is its HKTVmall page: link with it. HKTVmall's English search is weaker than its Chinese one: if candidates look off ("firm tofu" finds tofu cat litter), search the Chinese name too (硬豆腐). |
| hktv_get_productsA | Current price, stock, seller, delivery, a short summary, origin, photo (image) and page (url) for up to 20 product ids. Ids in not_found are not sold right now (HKTVmall hides products for a while and brings them back). |
| hktv_show_productsA | Show the person products you picked, as cards with photo, price, unit price, rating, delivery, your note and a link to HKTVmall (claude.ai and ChatGPT draw them in the chat; other clients get the same data: then list them with each url). Use it after hktv_search to present picks or alternatives instead of a long text list. Call it whenever you recommend products, without being asked. |
| hktv_get_cartA | The account's HKTVmall basket as HKTVmall shows it now: lines with quantity, unit price and stock left, delivery groups with fees and the amount still needed for free delivery, totals, and checkout_url where the person pays. In people mode, connection identifies whose basket this is and account_context identifies the current caller, selection, grant and reconnect epoch. It lasts until one of those changes, including switching away and back. Needs the account's sign-in. |
| hktv_update_cartA | Set exact quantities for basket lines (quantity 0 removes; never adds on top). Up to 25 changes in one call. Each change's outcome (applied, adjusted, rejected with a reason) is read back from HKTVmall: report those, not what you asked for. Lines you do not name are left alone. Over 15 of one item or HK$1,500 added in one call it changes nothing and returns requires_buyer_review. Cannot place or pay for an order. In people mode, account_context must match the current caller, selected account, sharing grant and reconnect epoch; a stale or missing context applies no changes. Needs the account's sign-in. |
| hktv_delivery_slotsA | HKTVmall's next delivery slots for the account's address, the fee, free_from, and the slot already selected, if any. Merchant and farm-direct items come separately. The person picks the slot at checkout; this cannot set one. |
| hktv_reviewsA | A product's rating breakdown and recent customer reviews (rating, date, comment, tags, merchant_replied). Comments are often Chinese and about delivery; rating=1 shows complaints. |
| hktv_recent_ordersA | The account's HKTVmall order history, newest first, for re-ordering: each order's number, date, status, total, deliveries (date and delivered/scheduled/cancelled per batch) and items (id, title, quantity, line_total; free_gift for promotion gifts). total_orders counts the whole history; page back through it with offset = next_offset (null at the end), one call after another: calls for one account run in turn, so parallel ones only wait. Items need each order's page the first time (about 2 s each; a call reads at most 10 new ones and says more_to_read), after that they come back at once. items=false lists up to 50 orders quickly without items. Read-only; never shows the address or payment. To buy items again, use hktv_update_cart with exact quantities. Needs the account's sign-in. |
| hktv_statusA | Sign-in state (signed_in, generation, last keep-alive, token expiry), today's request budget, any pause after HKTVmall pushed back, and last_error: the newest failure no later success has cleared (with its tool), else null. connection names whose HKTVmall account calls use (owner, shared); connection_health, when present, is the snapshot custodian's sign_in_needed or check_needed. check=true adds the cached canary, including an order-history probe; shared connections need history permission. |
| hktv_connectA | The person's My connections link, where they connect their own HKTVmall account, reconnect it, share it with their household or stop using one shared with them. Give the person the url and nothing else; asking for it starts, replaces and cancels nothing. Use it when a tool says not_signed_in, session_expired or connection_disconnected, or when the person asks to connect HKTVmall. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| hktvmall-products | Product cards (photo, price, rating, delivery, link) for hktv_show_products. |
TDQS
Scored across 10 tools
Each tool targets a distinct part of the shopping workflow: cart read/write, account status/connect, delivery slots, product search/details/presentation, reviews, and order history. The product-facing tools could look similar at first glance, but their descriptions clearly separate search-by-query, lookup-by-id, and display-of-picks.
All tools share a consistent hktv_ prefix and snake_case formatting, which makes the set easy to scan. Most names use a verb_noun pattern, though several are noun-only or adjective_noun forms such as hktv_status, hktv_delivery_slots, and hktv_recent_orders.
Ten tools is well scoped for an HKTVmall shopping assistant, with each tool covering a meaningful operation. There is no obvious padding or missing high-level capability that would require many more tools.
The surface covers discovery, product details, reviews, cart management, delivery slots, connection/sign-in, and order history, with checkout handled via checkout_url. Minor gaps remain around explicit checkout/order-management operations, but the core shopping lifecycle is well represented.