Skip to main content
Glama
www-joyautomart-com

JOY Automart MCP Server

Official

JOY Automart MCP Server

Official Model Context Protocol server for JOY Automart, Bangladesh's automotive parts and vehicle marketplace. It lets AI assistants (Claude, ChatGPT, Cursor and other MCP clients) search JOY's car-parts catalogue and JOY Auto Exchange vehicle listings, compare cars, look up a part, and prepare a purchase handoff for a human buyer. Prices are in BDT.

Remote endpoint

https://www.joyautomart.com/mcp

Transport

Streamable HTTP (MCP protocol 2025-06-18 and later)

Auth

None for the public tools. Optional buyer token: Authorization: Bearer joyagt_...

Docs

https://www.joyautomart.com/developers

Server card

https://www.joyautomart.com/.well-known/mcp/server-card.json

The server is hosted by JOY Automart; you do not need to run anything to use it. This repository contains the public metadata (registry server.json, Smithery config, tool snapshot) and a small stdio proxy for clients that only support local servers.

Tools

Public, read-only tools (no account needed). Snapshot from a live tools/list call (see tools.json); * marks a required argument.

Tool

What it does

Arguments

search_parts

Search JOY Automart's automotive parts catalogue in Bangladesh.

query, make, chassis, category, in_stock_only, include_rfq_catalogue, max_price_bdt, page, page_size

get_part

Full public detail for one catalogue part: BDT price, stock, minimum order, verified offers and bulk price breaks.

part_id*

search_vehicles

Search JOY Auto Exchange vehicle listings in Bangladesh by make, model, year, fuel and BDT price.

query, make, fuel_type, verified_only, include_unpriced, min_year, max_year, min_price_bdt, max_price_bdt, sort, page, page_size

get_vehicle

Full public detail for one JOY Auto Exchange listing (by listing id or slug): BDT price, specs, photos and, when the car passed JOY's human QC, a summary of the inspection.

vehicle_id*

get_auction_status

Public status of one live or recent JOY auction: current bid in BDT, bid count, end time and anti-snipe extensions.

auction_id*

compare_vehicles

Side-by-side comparison of 2 to 4 listings (ids or slugs from search_vehicles): price, year, mileage, fuel, verification and inspection grade.

vehicle_ids*

get_buying_guide

How to buy from JOY Automart: currency (BDT), payment methods (card, bKash/Nagad/Rocket, cash on delivery), Dhaka and nationwide delivery zones and fees, human contact, and how an authenticated agent can place orders.

—

prepare_buyer_handoff

Compose the links a human buyer uses to complete a purchase: the product page and a pre-filled WhatsApp message with canonical part details and fitment limitations.

part_id*, quantity, vehicle, note

All public tools are annotated readOnlyHint: true. Fitment is guidance only: the server never claims a part fits a vehicle without VIN/chassis evidence; confirm with JOY's sales team before buying.

With a buyer-issued agent token (create one at https://www.joyautomart.com/cars/account?section=ai-agents&portal=retail) an agent can also use quote_order, place_order (cash on delivery or approved trade credit, within the buyer's spending limits), create_rfq, get_order_status and list_my_orders.

Related MCP server: StockSpark MCP Server

Connect

Claude (claude.ai / Claude Desktop)

Settings → Connectors → Add custom connector → URL https://www.joyautomart.com/mcp.

ChatGPT

Settings → Connectors (developer mode) → Create → MCP server URL https://www.joyautomart.com/mcp, authentication: none.

Cursor

~/.cursor/mcp.json:

{
  "mcpServers": {
    "joy-automart": { "url": "https://www.joyautomart.com/mcp" }
  }
}

VS Code / any client with remote HTTP support

{
  "servers": {
    "joy-automart": { "type": "http", "url": "https://www.joyautomart.com/mcp" }
  }
}

Claude Code

claude mcp add --transport http joy-automart https://www.joyautomart.com/mcp

Quick test with curl

curl -s https://www.joyautomart.com/mcp \
  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Local stdio proxy (npx) — coming soon

The npm package @joyautomart/mcp-server is not published yet. Once it is, stdio-only clients can use:

{
  "mcpServers": {
    "joy-automart": {
      "command": "npx",
      "args": ["-y", "@joyautomart/mcp-server"],
      "env": { "JOY_AGENT_TOKEN": "joyagt_your_token_here" }
    }
  }
}

Until then you can run the proxy from this repo (Node 18+):

git clone https://github.com/www-joyautomart-com/mcp-server && cd mcp-server
npm ci
node bin/joyautomart-mcp.js            # or: --url https://www.joyautomart.com/mcp

JOY_AGENT_TOKEN is optional; public tools work without it.

Listings

  • Official MCP Registry name: com.joyautomart/mcp (server.json; listing pending domain verification)

  • Smithery config: smithery.yaml

Support

Questions about parts, orders or fitment: https://www.joyautomart.com. Issues with this repository: GitHub issues.

License

MIT © 2026 JOY Automart / Ahmed Joyadh

Available Tools

8 tools
compare_vehiclesCompare carsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
vehicle_idsYesTwo to four listing_id values from search_vehicles or public listing slugs, not VINs or URLs. Choose distinct listings; repeated IDs or an ID and its slug do not provide separate price evidence.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, closed-world, but the description adds substantial context they cannot: what the response contains (specs, BDT prices, optional QC summaries, not_found/unavailable/price-coverage counts), how unknown prices become null rather than zero, and that invalid arguments produce isError=true with structuredContent.error. It also scopes out valuation, seller contact and reservation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and input sourcing, then degrades into a fairly dense chain of edge-case clauses. All content is substantive, but the price-coverage sentences are packed tightly enough to slow scanning; slight trimming would help.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does it well: field-level contents, count fields, null handling, error shape, and the market-scope caveat on cheapest_listing_id. Nothing an agent needs to interpret results is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already states the 2-4 range, the 'not VINs or URLs' constraint, and the distinct-listings/alias caveat. The description largely restates this ('Repeated IDs/aliases are not independent price evidence' mirrors the schema text), so it adds little beyond what structured data already provides. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (compare) plus resource and cardinality (two to four JOY vehicle listings side by side), and explicitly distinguishes itself from get_vehicle for single-car lookups and from search_vehicles as the ID source. An agent can route between the three siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the upstream tools that supply inputs, the alternative tool for the single-vehicle case, and the conditions under which a cheapest result is meaningful (at least two distinct listings with positive stated prices; price_comparison_complete flag). Both when-to-use and when-not-to-trust-the-output are spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_auction_statusAuction statusA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
auction_idYesNon-empty auction_id returned by get_vehicle for an auction-linked listing, or a known public auction ID provided by the buyer. At most 64 letters/digits/underscores/hyphens; not a vehicle listing_id or URL. Do not fabricate an ID when none is returned.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: the full return field set, the conditional presence of minimum_next_bid, the warning that bids are observations that may change, that seller reserves and bidder identities are never exposed, and that bidding requires a verified dealer account and a human decision. Error behavior is spelled out ('isError=true with structuredContent.error') including the closed-live-auction case.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and scope lead, then the acquisition workflow, then return shape, then error semantics and prerequisites. Every sentence carries load, and the long field enumeration is justified because there is no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema, the description supplies the return field list, conditional field logic, error contract, data-freshness caveat, privacy guarantees, and the account-level prerequisite for the related write action. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter's schema entry already specifies provenance, the 64-char format, the listing_id/URL exclusion and the no-fabrication rule, so the description mostly restates it. It adds the surrounding discovery workflow but no new constraint on the parameter itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read public status for one known JOY auction') plus an explicit scope exclusion ('without bidding'). It also routes the agent away from siblings by naming get_vehicle for specs and search_vehicles for discovery, so it is distinguishable without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete acquisition path ('search_vehicles, then get_vehicle, then its non-empty auction_id'), accepts an alternative valid source (buyer-provided public ID), and states an explicit prohibition ('Do not guess an ID when get_vehicle returns no auction_id'). It also names the alternative tool for car specs and asking price.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_buying_guideBangladesh buying termsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial behavior beyond them: the exact payload returned, that live catalogue terms may add fields like payment_methods and vat_bps, that those terms are not a locked quote, and the degraded path where live_terms_unavailable=true still returns the base guide with an instruction not to invent fees.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its trigger, then the return shape, then failure mode, then routing. It is dense and long-ish for a no-arg getter, but nearly every clause carries decision-relevant information; only minor trimming would be possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by enumerating the returned fields, the conditional live-terms block, and the degraded fallback. An agent has everything needed to call it and interpret both success and partial-success responses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters makes the baseline 4, and the description reinforces it by telling the agent to call with an empty object {} and explicitly warning that no currency, region, account or order arguments are accepted – useful guardrails against hallucinated inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retrieve JOY Automart's Bangladesh purchasing and delivery guide') and scopes it to a market. It is clearly distinguishable from siblings like search_parts or prepare_buyer_handoff because it explicitly names them as the tools for prices and handoff instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('before explaining payment, delivery or human handoff') and routes the agent onward: search_parts/get_part for prices/availability, then prepare_buyer_handoff for a selected part. It also states what this tool does NOT do (no payment, no message, no order), which removes ambiguity about alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_partGet part detailsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
part_idYesExact catalogue part_id copied from search_parts, e.g. BRK-AXIO-01. This is JOY's catalogue identifier, not an OEM part number or a product URL.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnly/idempotent annotations, it discloses null semantics for missing catalogue facts, that stock and asking prices neither reserve supply nor guarantee fitment, and the exact failure shape (isError=true with structuredContent.error). These are non-obvious behavioral traits an agent could not infer from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the ID constraint, then the return surface, then error semantics, then sibling routing. The enumerated return list is long but earns its place because no output schema exists; a couple of clauses could be tightened without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with no output schema, the description covers inputs, return fields, null handling, error behavior, and trust caveats about stock and fitment. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and already says the ID is not an OEM number or URL, so most parameter meaning is structured. The description reinforces the constraint and adds the workflow origin ('from search_parts'), which is modest but real value on top of the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retrieve full public detail for one selected spare part') and implicitly contrasts with search_parts by requiring an already-known ID. An agent can tell this apart from search_parts, get_vehicle, and the handoff/guide tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the source of the ID ('Use part_id from search_parts'), states exclusions ('do not substitute an OEM number, chassis code or product URL'), and gives a fallback ('Search first when the ID is unknown'). It also routes to prepare_buyer_handoff and get_buying_guide for the adjacent intents.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_vehicleGet car detailsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
vehicle_idYeslisting_id returned by search_vehicles, or slug from a public JOY listing URL. Use only the ID/slug (letters/digits, dots, underscores, hyphens; starts with a letter/digit), not the URL, VIN or registration number.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/no-destroy, and the description goes well beyond them: it discloses what is deliberately withheld (seller contacts, reserves), that missing facts may be null, the isError=true + structuredContent.error failure contract, and that the call has no side effects on a seller or reservation. That is rich behavioral context an agent cannot get from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose first, then input sourcing, then alternatives, then return shape, then null/error semantics, closing with a side-effect disclaimer. Each sentence carries distinct information despite the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a single parameter, no output schema, and no nested objects, the description supplies everything needed: return payload contents (specs, BDT price, currency, description, up to eight images, listing URL, optional inspection summary and auction_id), the auction_id handoff to get_auction_status, and null/error handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema property already spells out the ID/slug format and the "not the URL, VIN or registration number" rule. The description restates essentially the same constraint plus its provenance (search_vehicles / public URL), adding minimal value beyond structured data; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: "Retrieve full public detail for one JOY Auto Exchange listing." It explicitly positions itself against search_vehicles and compare_vehicles, so an agent can route without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States exactly what input to supply (listing_id from search_vehicles or a slug from a listing URL), warns to pass only the ID/slug rather than the full URL, and names both alternatives with the conditions that select them (search_vehicles for discovery, compare_vehicles for 2-4 cars). Effectively no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_buyer_handoffPrepare purchase handoffA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
noteNoOptional buyer request included verbatim as a note in the pre-filled WhatsApp message, up to 300 characters. It is not sent until the human chooses to send the message.
part_idYesExact part_id from search_parts/get_part for the selected item; not an OEM reference or product URL. The tool fetches fresh public part detail before composing the links.
vehicleNoOptional make/model/year, chassis or VIN text included in the human message for fitment review; not automatically decoded or proof of compatibility.
quantityNoRequested item count inserted into the WhatsApp message, 1 through 10,000; defaults to 1. Does not reserve quantity, satisfy minimum order rules or multiply/lock a payable quote.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint/idempotentHint, and the description reinforces this with concrete, non-obvious detail: no WhatsApp opening, no send, no RFQ, no stock reservation, no charge, no price lock, and restrictions preserved on unsellable parts. It also documents the failure mode (isError=true with structuredContent.error for unknown IDs), which annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and sibling routing, then side-effect disclaimers, so the most decision-relevant content comes first. It is dense and runs long as one block, but nearly every sentence carries distinct information about side effects or semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although no output schema exists, the description enumerates the return fields (product_url, whatsapp_order_url, quantity, part evidence, fitment_notice, pricing_notice, next_step) and the error shape. Combined with the read-only annotations and full schema coverage, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds real interpretation by clarifying that quantity is a requested count rather than a purchase commitment or reservation, and that vehicle/note are inserted into the message. The remaining gap is minor — no added syntax detail beyond the schema's verbatim-insertion notes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: composing a product link and pre-filled WhatsApp message for a human buyer's selected part. It explicitly distinguishes itself from the adjacent tool get_buying_guide, so an agent can route correctly without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states precisely when to use this tool ('Use part_id from search_parts/get_part') and when not to ('use get_buying_guide for general terms, not this tool'), naming the exact alternative and the condition selecting it. It also defines the terminal handoff point where the human decides to send.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_partsSearch car partsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
makeNoVehicle manufacturer, e.g. Toyota; narrows part candidates alongside the query. Omit if unknown.
pageNoOne-based results page, 1 through 500; defaults to 1. Increment to retrieve the next page with the same filters.
queryNoPart name, OEM reference or vehicle words in English, Bangla or Banglish; e.g. 'Axio brake pads' or 'টয়োটা এক্সিও ব্রেক প্যাড'. Omit for filtered browsing; not a part_id lookup.
chassisNoVehicle chassis/model code, e.g. NZE141 or G05; not a full VIN. Narrows candidates and does not certify fitment.
categoryNoPublic category label from a catalogue result, e.g. Brakes. Omit if the category is unknown.
page_sizeNoMaximum results requested per page, 1 through 20; defaults to 10. total describes all matches, not this page's item count.
in_stock_onlyNoTrue requests currently in-stock candidates; false (default) permits other public availability states. This does not reserve stock.
max_price_bdtNoInclusive maximum retail asking price in Bangladesh taka (BDT), e.g. 5000 means ৳5,000; omit for no budget ceiling. Not lakh units and not a currency conversion.
include_rfq_catalogueNoTrue also includes catalogue-only templates requiring a human parts request; false (default) omits them. Inclusion does not make an item directly purchasable.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, yet the description still adds real value: no ordering or reservation, matches are fitment candidates not guarantees, empty items is a valid no-match, uninterpretable Bangla is an error rather than a guessed translation, and errors surface as isError with structuredContent.error. Strong disclosure beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph that front-loads purpose, then usage, then return shape, then caveats – logically ordered with no filler. It is tightly packed but every clause carries information, so the slight length is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema for a 9-parameter search tool, the description fully specifies the return shape (items, total, page, page_size, currency, fitment_notice, query_interpreted_as, per-item fields) and the error contract, leaving nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description earns above baseline by explaining filter interplay (query combined with make/chassis/category/stock/budget), giving a JSON example, clarifying that query is not a part_id lookup, and that currency is BDT.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Find and browse spare parts in JOY Automart's public Bangladesh retail catalogue') and explicitly distinguishes itself from get_part (known part) and search_vehicles (whole cars), so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names both alternatives and their selecting conditions, explains browsing by omitting filters, gives a concrete filter example, and states the condition for include_rfq_catalogue=true. When-to-use and how-to-use are both explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_vehiclesSearch cars for saleA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
makeNoCase-insensitive manufacturer prefix, e.g. Toyota. Combine with query='Premio' for that model; omit to include all makes.
pageNoOne-based results page, 1 through 500; defaults to 1. Keep filters and sort unchanged when paging.
sortNoResult order: latest (default: verified first, then newest), price_asc (lowest stated price first), price_desc (highest first), or year_desc (newest model year first). Stable tie-breaks support paging; no valuation is performed.latest
queryNoCase-insensitive phrase within make, model or trim; use query='Premio' with make='Toyota', not one combined 'Toyota Premio' phrase. Known Bangla/Banglish vocabulary is normalized; unsupported words may be dropped. Use known English model words for precision; omit to browse.
max_yearNoInclusive latest model year, 1950 through 2100. Omit for no upper-year filter; supply a value no less than min_year.
min_yearNoInclusive earliest model year, 1950 through 2100. Omit for no lower-year filter; supply a value no greater than max_year.
fuel_typeNoCase-insensitive prefix of a public listing's fuel label, e.g. hybrid. Copy a known label where possible; omit to include all fuel types.
page_sizeNoMaximum results requested per page, 1 through 20; defaults to 10. total is the matching population, which may exceed this page's item count.
max_price_bdtNoInclusive maximum stated asking price in Bangladesh taka, e.g. 3000000 means ৳30 lakh. Omit for no maximum; no less than min_price_bdt.
min_price_bdtNoInclusive minimum stated asking price in Bangladesh taka, e.g. 2000000 means ৳20 lakh. Omit for no minimum; no greater than max_price_bdt.
verified_onlyNoTrue requires the storefront's verified flag, approved inspection status and a non-empty inspection ID; false (default) also permits other public listings. Verification is not a vehicle warranty.
include_unpricedNoTrue includes price-on-application or otherwise unpriced listings; false (default) excludes them. A missing asking price is unknown, never zero.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive, closed-world, so the description correctly focuses on what annotations cannot say: unpriced/POA listings are excluded unless include_unpriced=true, unknown prices must not be read as zero, empty items means no matches, and errors surface as isError with structuredContent.error. It also reassures that no seller is contacted and nothing is reserved. Minor gap: no note on total-vs-page truncation behavior beyond what page_size already implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then routing, then filter semantics, then return shape — a sensible ordering with no filler sentences. It is dense and slightly long, and a few items (page 1, 10 items, latest default) restate schema defaults, but the returns summary is justified since no output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 12 parameters and no output schema, the description carries the right load: it documents the return envelope (items, total, page, page_size, currency=BDT), per-item fields including listing_id and browse_url, the empty-result meaning, and the error contract. Nothing an agent needs to call or interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description earns above baseline by explaining how filters combine (query is a make/model/trim phrase while make and fuel_type are prefixes, year and price bounds inclusive) and by giving a concrete worked call for a Toyota under 30 lakh BDT — cross-parameter semantics that per-field schema text alone doesn't assemble.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find and browse cars for sale in JOY Auto Exchange's public Bangladesh listings') with explicit scope (public, Bangladesh, for-sale). It immediately distinguishes itself from siblings by naming get_vehicle and compare_vehicles and the role each plays.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says this tool's job is to discover listing_id values, then routes to get_vehicle for single-listing detail and compare_vehicles for a shortlist. It also covers the no-filter case ('No filters browses listings') and states the defaults that apply when nothing is supplied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv1.0.1
    • Changedcompare_vehicles1 field changed
      • addedInput schema / properties / vehicle_ids / description
        Added value: +"Two to four listing_id values from search_vehicles or public listing slugs, not VINs or URLs. Choose distinct listings; repeated IDs or an ID and its slug do not provide separate price evidence."
    • Changedget_auction_status1 field changed
      • addedInput schema / properties / auction_id / description
        Added value: +"Non-empty auction_id returned by get_vehicle for an auction-linked listing, or a known public auction ID provided by the buyer. At most 64 letters/digits/underscores/hyphens; not a vehicle listing_id or URL. Do not fabricate an ID when none is returned."
    • Changedget_part1 field changed
      • addedInput schema / properties / part_id / description
        Added value: +"Exact catalogue part_id copied from search_parts, e.g. BRK-AXIO-01. This is JOY's catalogue identifier, not an OEM part number or a product URL."
    • Changedget_vehicle1 field changed
      • changedInput schema / properties / vehicle_id / description
        Previous value: -"listing_id or slug from search_vehicles."New value: +"listing_id returned by search_vehicles, or slug from a public JOY listing URL. Use only the ID/slug (letters/digits, dots, underscores, hyphens; starts with a letter/digit), not the URL, VIN or registration number."
    • Changedprepare_buyer_handoff4 fields changed
      • addedInput schema / properties / note / description
        Added value: +"Optional buyer request included verbatim as a note in the pre-filled WhatsApp message, up to 300 characters. It is not sent until the human chooses to send the message."
      • addedInput schema / properties / part_id / description
        Added value: +"Exact part_id from search_parts/get_part for the selected item; not an OEM reference or product URL. The tool fetches fresh public part detail before composing the links."
      • addedInput schema / properties / quantity / description
        Added value: +"Requested item count inserted into the WhatsApp message, 1 through 10,000; defaults to 1. Does not reserve quantity, satisfy minimum order rules or multiply/lock a payable quote."
      • changedInput schema / properties / vehicle / description
        Previous value: -"Make, model, year or VIN, to speed up fitment checks."New value: +"Optional make/model/year, chassis or VIN text included in the human message for fitment review; not automatically decoded or proof of compatibility."
    • Changedsearch_parts10 fields changed
      • addedInput schema / properties / category / description
        Added value: +"Public category label from a catalogue result, e.g. Brakes. Omit if the category is unknown."
      • changedInput schema / properties / chassis / description
        Previous value: -"Chassis code, e.g. NZE141 or G05."New value: +"Vehicle chassis/model code, e.g. NZE141 or G05; not a full VIN. Narrows candidates and does not certify fitment."
      • addedInput schema / properties / in_stock_only / description
        Added value: +"True requests currently in-stock candidates; false (default) permits other public availability states. This does not reserve stock."
      • changedInput schema / properties / include_rfq_catalogue / description
        Previous value: -"Include catalogue-only templates available through a parts request (RFQ)."New value: +"True also includes catalogue-only templates requiring a human parts request; false (default) omits them. Inclusion does not make an item directly purchasable."
      • changedInput schema / properties / make / description
        Previous value: -"Vehicle make, e.g. Toyota."New value: +"Vehicle manufacturer, e.g. Toyota; narrows part candidates alongside the query. Omit if unknown."
      • addedInput schema / properties / max_price_bdt / description
        Added value: +"Inclusive maximum retail asking price in Bangladesh taka (BDT), e.g. 5000 means ৳5,000; omit for no budget ceiling. Not lakh units and not a currency conversion."
      • addedInput schema / properties / page / description
        Added value: +"One-based results page, 1 through 500; defaults to 1. Increment to retrieve the next page with the same filters."
      • addedInput schema / properties / page / maximum
        Added value: +500
      • addedInput schema / properties / page_size / description
        Added value: +"Maximum results requested per page, 1 through 20; defaults to 10. total describes all matches, not this page's item count."
      • changedInput schema / properties / query / description
        Previous value: -"Part name, OEM number or vehicle, in English or Bangla."New value: +"Part name, OEM reference or vehicle words in English, Bangla or Banglish; e.g. 'Axio brake pads' or 'টয়োটা এক্সিও ব্রেক প্যাড'. Omit for filtered browsing; not a part_id lookup."
    • Changedsearch_vehicles17 fields changed
      • addedInput schema / properties / fuel_type / description
        Added value: +"Case-insensitive prefix of a public listing's fuel label, e.g. hybrid. Copy a known label where possible; omit to include all fuel types."
      • changedInput schema / properties / include_unpriced / description
        Previous value: -"Include vehicles with a pending or undisclosed asking price (POA)."New value: +"True includes price-on-application or otherwise unpriced listings; false (default) excludes them. A missing asking price is unknown, never zero."
      • addedInput schema / properties / make / description
        Added value: +"Case-insensitive manufacturer prefix, e.g. Toyota. Combine with query='Premio' for that model; omit to include all makes."
      • addedInput schema / properties / max_price_bdt / description
        Added value: +"Inclusive maximum stated asking price in Bangladesh taka, e.g. 3000000 means ৳30 lakh. Omit for no maximum; no less than min_price_bdt."
      • addedInput schema / properties / max_year / description
        Added value: +"Inclusive latest model year, 1950 through 2100. Omit for no upper-year filter; supply a value no less than min_year."
      • addedInput schema / properties / max_year / maximum
        Added value: +2100
      • addedInput schema / properties / max_year / minimum
        Added value: +1950
      • addedInput schema / properties / min_price_bdt / description
        Added value: +"Inclusive minimum stated asking price in Bangladesh taka, e.g. 2000000 means ৳20 lakh. Omit for no minimum; no greater than max_price_bdt."
      • addedInput schema / properties / min_year / description
        Added value: +"Inclusive earliest model year, 1950 through 2100. Omit for no lower-year filter; supply a value no greater than max_year."
      • addedInput schema / properties / min_year / maximum
        Added value: +2100
      • addedInput schema / properties / min_year / minimum
        Added value: +1950
      • addedInput schema / properties / page / description
        Added value: +"One-based results page, 1 through 500; defaults to 1. Keep filters and sort unchanged when paging."
      • addedInput schema / properties / page / maximum
        Added value: +500
      • addedInput schema / properties / page_size / description
        Added value: +"Maximum results requested per page, 1 through 20; defaults to 10. total is the matching population, which may exceed this page's item count."
      • addedInput schema / properties / query / description
        Added value: +"Case-insensitive phrase within make, model or trim; use query='Premio' with make='Toyota', not one combined 'Toyota Premio' phrase. Known Bangla/Banglish vocabulary is normalized; unsupported words may be dropped. Use known English model words for precision; omit to browse."
      • addedInput schema / properties / sort / description
        Added value: +"Result order: latest (default: verified first, then newest), price_asc (lowest stated price first), price_desc (highest first), or year_desc (newest model year first). Stable tie-breaks support paging; no valuation is performed."
      • addedInput schema / properties / verified_only / description
        Added value: +"True requires the storefront's verified flag, approved inspection status and a non-empty inspection ID; false (default) also permits other public listings. Verification is not a vehicle warranty."
  2. 8 tool updatesv1.0.0
    • First observedcompare_vehicles
    • First observedget_auction_status
    • First observedget_buying_guide
    • First observedget_part
    • First observedget_vehicle
    • First observedprepare_buyer_handoff
    • First observedsearch_parts
    • First observedsearch_vehicles

TDQS

A4.7/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with New Zealand's largest online marketplace through the Trade Me API. Supports searching listings, managing watchlists, placing bids, making purchases, and accessing marketplace data across all Trade Me categories.
    6
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with 36 specialized tools for complete vehicle dealership management through the StockSpark/Carspark API, including inventory management, vehicle listings, image handling, pricing optimization, and multi-portal publishing.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides 25 interactive automotive intelligence tools for real-time market data, including VIN decoding, price predictions, and inventory analytics. It enables AI assistants to perform car searches, trade-in estimations, and market trend analysis using the Model Context Protocol.
    2
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to search and retrieve used and new car listings from carsales.com.au, with support for various filters and detailed listing information including images. It uses a real browser to bypass bot protection and integrates with MCP-compatible clients like Claude Desktop and Claude Code.
    19
    2
    MIT