{"name":"io.github.lukabudik/alza-mcp","slug":"lukabudik-alza-mcp","title":null,"description":"Unofficial MCP server for Alza.cz: catalog search plus token-guarded account and checkout.","url":"https://mcp.market/server/lukabudik-alza-mcp","rating":null,"grade":"B","score":77,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":47,"stars":79,"forks":12,"downloads_week":481,"last_push_at":"2026-10-11T13:36:34.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/lukabudik/alza-mcp","website":null,"version":"0.5.0","remotes":[],"packages":[{"registryType":"npm","identifier":"alza-mcp","version":"0.5.0","transport":{"type":"stdio"}}],"tools":[{"name":"account_status","description":"Report whether a mobile API access token is loaded in this server process, and when it expires (`expiresAt`, `expired`) if that is known. An expired token is refreshed automatically before the next account call when a refresh token is loaded.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_to_cart","description":"Add one product to the mobile-API cart (`restservice.svc/v2/basket/add`) by its Alza product code (the `code` from `search_products`/`get_product`, e.g. `RI054b1` — not the numeric id).","write_action":false,"price_micros":0,"input_schema":null},{"name":"address_delete","description":"Delete a delivery address from the Alza account by executing the per-address delete action from the `profile` response.","write_action":true,"price_micros":0,"input_schema":null},{"name":"address_search","description":"Search Alza's zip/city database. Use to suggest a valid address before `address_upsert`, or to verify a zip/city combination.","write_action":false,"price_micros":0,"input_schema":null},{"name":"address_upsert","description":"Create or edit a delivery address on the Alza account by executing the server-provided address form action from `profile` (createAddressAction for create, the address's editAction for edit) with typed fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"after_order_payments","description":"List the after-order payment options for an unpaid order part (mobile API getafterorderpayments). An `err:1` answer (e.g. the order does not exist) is returned as an error carrying Alza's message.","write_action":true,"price_micros":0,"input_schema":null},{"name":"auth_discovery","description":"Read the live OpenID Connect discovery document that the Alza mobile app uses (issuer, authorization endpoint, token endpoint).","write_action":false,"price_micros":0,"input_schema":null},{"name":"auth_exchange","description":"Complete the OAuth 2.0 PKCE sign-in: exchange the authorization code for mobile API tokens and load them into this server.","write_action":false,"price_micros":0,"input_schema":null},{"name":"auth_start","description":"Start an OAuth 2.0 PKCE sign-in for the Alza mobile API: returns an authorization URL plus a state value.","write_action":false,"price_micros":0,"input_schema":null},{"name":"autocomplete","description":"Cheap search-box suggestions (plain HTTP, no page render): suggested query phrases plus matching categories, brands and products with ids/codes. Use it to refine a messy Czech query before a full `search_products` — pass a category `id` as `category_id`, or a product code to `get_product`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cancel_order","description":"Cancel an order part via Alza's HATEOAS cancel flow (OR11): reads the `cancelForm` (validating the order/part/hash are cancellable), then commits the cancellation with the given `reason`.","write_action":true,"price_micros":0,"input_schema":null},{"name":"cart","description":"Read the authenticated user's Alza shopping cart: item lines with quantities and prices, applied discounts, vouchers, and the basket/order identifiers later checkout steps need.","write_action":false,"price_micros":0,"input_schema":null},{"name":"change_password","description":"Change the Alza account password (row A14, `POST /v2/account/password`): submit the current password and the new password twice (new + confirm).","write_action":false,"price_micros":0,"input_schema":null},{"name":"chat_navigation","description":"Read the live chatbotapi.alza.cz navigation for the current visitor (row W18): chatbotInitializeChatAction / chatbotReinitializeChatAction / metadata / rating actions with their server-provided hrefs and parameters.","write_action":false,"price_micros":0,"input_schema":null},{"name":"chat_send","description":"Open or continue an Alza chatbot session via chatbotapi.alza.cz /v1/chat (row W18): returns the chat configuration (configId, teamName, welcomeText, messages, allowTextInput) and showChat.","write_action":true,"price_micros":0,"input_schema":null},{"name":"checkout_preview","description":"Run the read-side of the mobile checkout (sendOrder1 + delivery/payment-group reads) and return a one-time checkout token plus totals.","write_action":true,"price_micros":0,"input_schema":null},{"name":"claim_detail","description":"Read the detail of a single warranty claim/complaint (row K2) by following that claim's `detailAction`, copied verbatim from a `complaint_claims` list response.","write_action":false,"price_micros":0,"input_schema":null},{"name":"compare_products","description":"Fetch 2–6 products by their Alza codes (the `code` from `search_products`) and return one aligned comparison table: a column per product,","write_action":false,"price_micros":0,"input_schema":null},{"name":"complaint_claims","description":"List the account's warranty claims (row K1): `GET /api/users/{user_id}/v1/warrantyClaims/{scope}` — `scope` `active` (default) or `archive`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"contacts","description":"Read the authenticated user's Alza contact list (mobile API v4/contacts endpoint).","write_action":false,"price_micros":0,"input_schema":null},{"name":"delete_account","description":"Delete the Alza account and its personal data (row A18, `DELETE /v1/account` with `acknowledgeAndDelete`).","write_action":true,"price_micros":0,"input_schema":null},{"name":"delivery_options","description":"List the delivery and payment option groups for the current Alza account cart (AlzaShop pickup, AlzaBox lockers, courier, payment methods) from the mobile API.","write_action":false,"price_micros":0,"input_schema":null},{"name":"email_change","description":"Change the account's contact email (row A16 bonus, `PATCH /v1/account` → `/email`): the address that receives invoices and order/claim notifications.","write_action":true,"price_micros":0,"input_schema":null},{"name":"find_pickup_points","description":"Find AlzaBox parcel lockers and AlzaShop showrooms near a Czech/Slovak postal code: name, address, GPS, distance and opening hours, sorted nearest first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gdpr_info","description":"Read the account's GDPR section (row A17, APK `PersonalGdprDetails`): the `gdprInfoAction` (export request), the `deleteAccountAction`, and the export dialog (`AccountGdprDialog`: title, description, `emailInfo` with the login email the export is sent to, and the `sendGdprInfoForm`).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_deals","description":"Find currently discounted products on Alza.cz, with current price, original price, savings and a discount % COMPUTED from the observed prices (never from marketing badges).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_product","description":"Fetch details for a single product by its Alza code (the `code` from `search_products`, e.g. 'WEXOA002B0' — not the numeric id): name, price (with the original price when discounted), availability, rating, brand, category, primary image, URL, and the spec table when the product page carries one (up to 30 rows, merged from both the DOM spec table and the JSON-LD `additionalProperty` list some page ","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_product_reviews","description":"Fetch reviews for a single product by its Alza code: the aggregate rating and review count plus up to `limit` individual reviews (author as Alza displays it, date, rating, body, pros/cons) from Alza's reviews API, newest first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_categories","description":"Browse the Alza category tree one level at a time. Useful for narrowing a product search — find the right category id, then pass it to `search_products` as `category_id`. Without arguments, returns top-level categories.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_category_filters","description":"List the brands and attribute filters (facets) Alza defines for a category, with real ids and product counts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_toolsets","description":"List every toolset this server groups its tools into: id, title, description, member tool names, and whether it's currently enabled.","write_action":false,"price_micros":0,"input_schema":null},{"name":"mobile_read","description":"Read-only escape hatch for Alza mobile API operations that have no dedicated tool.","write_action":false,"price_micros":0,"input_schema":null},{"name":"mutate_list","description":"Execute one low-risk, APK-confirmed mutation using a one-time token from `prepare_mutation`.","write_action":true,"price_micros":0,"input_schema":null},{"name":"order","description":"Read an authenticated user's Alza order: lines, parts, milestones/tracking, and invoice document references; with `part_id`, the part detail as well.","write_action":true,"price_micros":0,"input_schema":null},{"name":"order_archive","description":"Read the authenticated user's archived orders (row OR7 — the `archiveOrders` section of the orders navigation): returns `{self, paging, value[]}` — the same order shape as `order_search` results (status, phase, price, created, invoice `documents[]` for `order_document`).","write_action":true,"price_micros":0,"input_schema":null},{"name":"order_document","description":"Download an order invoice or document (row OR10) by following the server-provided `self.href` of a `Document`/`Attachment` object copied verbatim from a prior MCP response (e.g. the `documents[]` entries of `order_search` results or an order detail).","write_action":true,"price_micros":0,"input_schema":null},{"name":"order_search","description":"Search the authenticated user's Alza orders by term (row OR6 — the `userOrdersSearch` form from the orders navigation): order number/fragment or product term; returns matching `orders[]` (status, phase, price, created, and `documents[]` invoice refs) plus `commodities[]`.","write_action":true,"price_micros":0,"input_schema":null},{"name":"pay_after_order","description":"Execute an after-order payment on an unpaid mobile-API order (AfterOrderRequestBody: order id, invoice number, payment id from `after_order_payments`, optional stored-card id and device fingerprint).","write_action":true,"price_micros":0,"input_schema":null},{"name":"payment_methods","description":"List the payment-method groups available for the current Alza account cart (mobile API getDeliveryPaymentGroups payment projection).","write_action":false,"price_micros":0,"input_schema":null},{"name":"pc_build_suggest","description":"Check whether a list of Alza PC parts works together. Fetches each part's spec table (one product-page load per part, roughly 5–20 s each when not cached; cached 15 min), detects its role (cpu, motherboard, ram, gpu, storage, case, cooler, psu) unless given, and runs every compatibility rule: CPU socket ↔ motherboard, RAM generation / DIMM type / slot count ↔ motherboard, RAM ↔ CPU memory controll","write_action":false,"price_micros":0,"input_schema":null},{"name":"phone_change","description":"Change the account's contact phone number (row A16, `PATCH /v1/account` → `/phone`): the number that receives pickup codes and 2FA SMS.","write_action":false,"price_micros":0,"input_schema":null},{"name":"place_order","description":"Submit an order through the mobile API's multi-step sequence using a checkout token from `checkout_preview` plus the three explicit payloads (`delivery_payment`, `user_info`, `complete_order`) copied from the preview/delivery responses.","write_action":true,"price_micros":0,"input_schema":null},{"name":"prepare_mutation","description":"Start a two-step mutation by returning a one-time confirmation token bound to exactly one action. This call itself sends nothing to Alza.","write_action":false,"price_micros":0,"input_schema":null},{"name":"product_by_ean","description":"Look up Alza catalog products by EAN/barcode (row AT3 — the app's camera barcode-scan API, APK `cz.alza.base.{api,lib,android}.vision`): `POST /services/restservice.svc/v1/getProductByEANlist` with `{eanList}`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"profile","description":"Read the authenticated user's Alza profile: personal data, the delivery-address book with per-address HATEOAS actions (create/edit/delete/search), and account sections.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recommend_alternatives","description":"Find alternatives to one product (\"something like this but cheaper / better / same brand\"). Candidate pool = Alza's own alternatives list for the product (mobile API, keyed by the numeric commodity id taken from the product URL); if that list is empty, or nothing in it survives the mode filter, falls back to a same-category `search_products` (`poolSource` says which was used).","write_action":false,"price_micros":0,"input_schema":null},{"name":"register","description":"Register a new Alza account (mobile API CreateUser): submit email, phone, and password plus an optional verification code.","write_action":false,"price_micros":0,"input_schema":null},{"name":"report_issue","description":"Draft a bug report or feature request for the alza-mcp project (github.com/…).","write_action":false,"price_micros":0,"input_schema":null},{"name":"review_submit","description":"Submit a product review (1–5 rating plus optional text) by executing the server-provided review form action from the product detail (writeReviewAction/onSubmitReview or the rating form).","write_action":true,"price_micros":0,"input_schema":null},{"name":"search_products","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"select_pickup_point","description":"Despite the name, this tool does not select an AlzaBox or pickup point. It POSTs a delivery selection to the mobile `getDeliveryAssociations` route and returns the payment methods that work with that delivery, each with the resulting delivery price (`data[]`: payment `id` such as 103/143/144/203, `price`, `paymentPrice`, `isLowCredit`, `isHidden`).","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_toolset","description":"Enable or disable every tool in one toolset (or `all` for every toolset) at once, so only the tools relevant to the current task are visible.","write_action":false,"price_micros":0,"input_schema":null},{"name":"subscription_activate","description":"Activate AlzaSubscription by executing the server-provided activateAction form.","write_action":false,"price_micros":0,"input_schema":null},{"name":"subscription_overview","description":"Read the account's subscription section — the resource Alza's authenticated navigation links as `userSubscription` (`GET https://webapi.alza.cz/api/users/{user_id}/v1/subscription?country=CZ`).","write_action":false,"price_micros":0,"input_schema":null},{"name":"subscription_update_installment","description":"Change the AlzaSubscription installment plan by executing the server-provided updateInstallmentAction form.","write_action":true,"price_micros":0,"input_schema":null},{"name":"two_factor_set","description":"Turn SMS two-factor on or off (row A15, `PATCH /v1/account` → `/2faEnabled`): `enabled=true` to activate, `false` to deactivate.","write_action":false,"price_micros":0,"input_schema":null},{"name":"upload_attachment","description":"Upload 1–5 image attachments (base64 data URLs, whitelisted image MIME types, max 10 MiB each) by executing the server-provided multipart action (uploadImageAction / complaint attachment actions) — typically for a warranty claim from `complaint_claims`.","write_action":true,"price_micros":0,"input_schema":null},{"name":"watchdog_delete","description":"Delete one Alza watchdog (row B9b). Pass `watchdog_id` (from `watchdog_list`), or pass `commodity_id` and the tool looks up the watchdog on that product through Alza's own delete action.","write_action":true,"price_micros":0,"input_schema":null},{"name":"watchdog_list","description":"List the price/stock watchdogs set on the user's Alza account. Alza calls the feature \"Hlídací pes\" (row B9a). Each entry has `watchdog_id`, `commodity_id`, name, current price, availability, `is_tracking_stock`, and `max_price` (the alert fires when the price drops below this; null means price is not watched).","write_action":false,"price_micros":0,"input_schema":null},{"name":"watchdog_set","description":"Create an Alza watchdog for one product (row B9). Alza emails the account's login address when the product is back in stock (`track_stock`) and/or when its price drops below `max_price` (CZK incl. VAT, must be below the current price). Alza stores and runs the watchdog, so nothing is kept on the MCP side.","write_action":true,"price_micros":0,"input_schema":null},{"name":"web_add_to_cart","description":"Add a product to the anonymous (visitor-keyed) Alza HATEOAS web cart via the live m.alza.cz basket/v1 API, using the numeric `commodity_id` (e.g. 7229946) from `search_products`/`get_product`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"web_cart","description":"Read the anonymous (visitor) Alza web checkout cart by `basket_id` (obtained from `web_add_to_cart`): the HATEOAS cart state (maxStep, itemsAction, emptyCartAction) plus item lines (productId, count, basketItemId, updateQuantityAction).","write_action":false,"price_micros":0,"input_schema":null},{"name":"web_pay_after_order","description":"Execute the after-order payment for an unpaid legacy-web order through the live-verified EShopService.svc CreateAfterPayment chain (the recorded real-payment path: e.g. MojePlatba 144 → KB SSO gateway).","write_action":true,"price_micros":0,"input_schema":null},{"name":"web_pickup_places","description":"List Alza pickup places from the live m.alza.cz personalPickup/v1 API: the type-availability form (AlzaBox/branches/24-7/showroom counts), a paginated place list, and — with `place_id` — a single place's detail (deliveryId, parcelShopId, isFree, typeText, opening hours).","write_action":false,"price_micros":0,"input_schema":null},{"name":"web_place_order","description":"Place an order through the live-verified legacy web WCF checkout pipeline (EShopService.svc: SaveOrder2 → SaveOrder3 → SaveAndConfirmOrder2 with the documented AlzaPlus 113-gate retry → CheckOrder4 → SendOrder4).","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":77,"grade":"B","scanned_at":"2026-10-13T23:17:15.919Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-13T23:17:15.929Z","components":{"code":{"score":15,"max":25,"notes":["107 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present"},{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present","evidence":"package.json: …on3 scripts/live-user-journeys.py\", \"postinstall\": \"node scripts/postinstall.cjs\", \"se…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"alza-mcp","version":"0.5.0","found":true,"license":"MIT","hasInstallScripts":true,"dependencyCount":5,"publishedAt":"2026-10-07T20:20:42.663Z","repositoryUrl":"git+https://github.com/lukabudik/alza-mcp.git","weeklyDownloads":481}],"repo":{"found":true,"owner":"lukabudik","repo":"alza-mcp","archived":false,"pushedAt":"2026-10-11T13:36:34Z","stars":79,"forks":12,"openIssues":5,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/74570723?v=4","ownerCreatedAt":"2020-11-16T22:04:14Z","license":"NOASSERTION"},"icon":{"url":"https://avatars.githubusercontent.com/u/74570723?v=4&s=128","source":"github"},"presence":{"stars":79,"forks":12,"downloadsWeek":481,"license":"NOASSERTION","lastPushAt":"2026-10-11T13:36:34.000Z","score":47}}}},"grade_history":[],"reviews":[]}