JOY Automart MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| JOY_AGENT_TOKEN | No | Optional buyer-issued agent token (joyagt_...) for authenticated tools such as quote_order, place_order, create_rfq, get_order_status, and list_my_orders. Public tools work without it. |
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": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_partsA | Find and browse spare parts in JOY Automart's public Bangladesh retail catalogue. Use this to discover part_id values; use get_part for a known part, or search_vehicles for whole cars. Combine a query in English, Bangla or Banglish with make, chassis, category, stock and BDT budget filters; for example {"make":"Toyota","max_price_bdt":5000,"in_stock_only":true}. Omit filters to browse; catalogue-only RFQ templates require include_rfq_catalogue=true. Returns items, total, page, page_size, currency=BDT and fitment_notice, plus query_interpreted_as when normalized. Items include part_id, price, stock, eligibility and product URL; matches are fitment candidates, not guarantees. An empty items array is a valid no-match result; uninterpretable Bangla is a tool error, not a translation guess. Errors return isError=true with structuredContent.error. Nothing is ordered or reserved; confirm fitment using VIN/chassis evidence before buying. |
| get_partA | Retrieve full public detail for one selected spare part. Use part_id from search_parts; do not substitute an OEM number, chassis code or product URL for that ID. Search first when the ID is unknown. Returns part_id, name, description, BDT retail price, availability, stock, minimum order quantity, verified_offer_count, optional bulk_pricing, product URL and fitment evidence or restrictions. Missing catalogue facts can be null; stock and asking prices do not reserve supply or guarantee fitment. Unknown parts and unavailable detail return isError=true with structuredContent.error. For a human purchase request use prepare_buyer_handoff; for payment/delivery terms use get_buying_guide. |
| search_vehiclesA | Find and browse cars for sale in JOY Auto Exchange's public Bangladesh listings. Use this to discover listing_id values; use get_vehicle for one listing's full detail, or compare_vehicles for a selected shortlist. Filters combine: query matches a make/model/trim phrase; make and fuel_type match prefixes, with inclusive year and BDT price bounds. For a Toyota below 30 lakh BDT, use {"make":"Toyota","max_price_bdt":3000000,"sort":"price_asc"}. No filters browses listings; defaults are latest ordering (verified first, then newest), page 1 and 10 items. Unpriced/POA listings are excluded unless include_unpriced=true; unknown prices must not be treated as zero. Returns items, total, page, page_size and currency=BDT; each item includes listing_id, stated specs, asking price, verification status, image and browse_url. Empty items means no matches. Errors return isError=true with structuredContent.error; no seller is contacted and nothing is reserved. |
| get_vehicleA | Retrieve full public detail for one JOY Auto Exchange listing. Use listing_id from search_vehicles or a slug from a public JOY vehicle-listing URL; pass only the ID/slug, not the full URL. Use search_vehicles to discover cars and compare_vehicles to compare two to four selected cars. Returns stated specs, BDT asking price, currency, description, up to eight images, listing URL, optional verified_inspection summary and auction_id. If auction_id is non-empty, pass it to get_auction_status; null means no public auction link was returned, so do not invent an auction ID. Missing facts may be null; seller contacts and reserves are withheld. Invalid IDs, not-found listings and upstream failures return isError=true with structuredContent.error. This lookup neither contacts a seller nor reserves a car. |
| get_auction_statusA | Read public status for one known JOY auction without bidding. Discover a linked auction by calling search_vehicles, then get_vehicle, then using its non-empty auction_id; a buyer-provided public auction ID is also valid. Do not guess an ID when get_vehicle returns no auction_id. Use get_vehicle for car specs or asking price. Returns auction_id, title, status, start_price, current_bid, bid_increment, bid_count, end_at, extension_count and currency=BDT; minimum_next_bid is included only for a live auction with numeric bid and increment. Bid values are observations and may change. Seller reserves and bidder identities are never exposed. Unknown auctions, closed access to live auctions and upstream failures return isError=true with structuredContent.error. Bidding requires a verified dealer account and a human decision; this tool cannot bid. |
| compare_vehiclesA | Compare a selected shortlist of two to four JOY vehicle listings side by side. Obtain listing_id values from search_vehicles or slugs from public listing URLs; use get_vehicle for a single car. Returns vehicles with stated specs, BDT asking prices and optional QC summaries, plus not_found, unavailable and price-coverage counts. Missing or temporarily unavailable listings are reported explicitly. Unknown/non-positive asking prices become null, not zero; at least two distinct listings with positive stated prices are required to return cheapest_listing_id. When price_comparison_complete=false, any cheapest result covers only the known-price subset, not every requested car or the wider market. Repeated IDs/aliases are not independent price evidence. Invalid arguments return isError=true with structuredContent.error. No valuation, seller contact or reservation is performed. |
| get_buying_guideA | Retrieve JOY Automart's Bangladesh purchasing and delivery guide before explaining payment, delivery or human handoff. Call with an empty object {}; this tool takes no currency, region, account or order arguments. Returns market, currency=BDT, languages, human_sales_contact (WhatsApp), how_to_buy and fitment_policy. When available, live catalogue terms add payment_methods, delivery_zones, minimum_order, free_delivery_threshold and vat_bps; these terms may change and are not a locked quote. If live terms cannot be fetched, the base guide is still returned with live_terms_unavailable=true; do not invent absent fees or payment options. Use search_parts/get_part for product prices and availability, then prepare_buyer_handoff for a selected part. This guide does not start a payment, send a message or place an order. |
| prepare_buyer_handoffA | Compose a product link and pre-filled WhatsApp message for a human buyer's selected part. Use part_id from search_parts/get_part; use get_buying_guide for general terms, not this tool. Quantity is a requested item count, not a purchase commitment; vehicle and note are inserted into the message alongside canonical part details, fitment limitations and pricing/eligibility notices. Returns product_url, whatsapp_order_url, quantity, part evidence, fitment_notice, pricing_notice and next_step. Creating the links does not open WhatsApp, send anything, create an RFQ, reserve stock, charge money or order; the human chooses whether to open and send the message. Links carry no reservation or price lock. Unsellable/fitment-restricted parts retain their restrictions; handoff never clears them. Unknown part IDs or unavailable detail return isError=true with structuredContent.error. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool targets a clearly distinct action and resource: vehicle search/detail/compare, parts search/detail, auction status, buying guide, and buyer handoff. The descriptions explicitly route between overlapping-looking areas, such as search_vehicles vs get_vehicle vs compare_vehicles, and get_buying_guide vs prepare_buyer_handoff.
All tools follow a consistent verb_noun pattern: get_vehicle, search_parts, get_part, search_vehicles, get_auction_status, compare_vehicles, get_buying_guide, prepare_buyer_handoff. Singular/plural noun choices reflect the operation naturally without breaking the convention.
Eight tools is well within a focused range and each tool earns its place in the public marketplace workflow. The set avoids redundant aliases and keeps vehicle and parts operations cleanly separated.
The surface covers discovery, detail, comparison, auction status, purchasing guidance, and human handoff for both vehicles and parts. Minor gaps remain, such as no direct auction search/discovery beyond vehicle detail and no explicit RFQ/order creation, though the handoff model appears intentionally read-only.