Skip to main content
Glama
JavidGlyv

Turbo.az MCP Server

by JavidGlyv

get_makes_models

Retrieve vehicle makes and models from Turbo.az to filter automotive listings and refine search queries.

Instructions

Fetches list of available makes and models on Turbo.az.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
makeNoMake name (to see its models). Leave empty for all makes.

Implementation Reference

  • Implementation of get_makes_models in scraper.py which performs the web scraping logic.
    async def get_makes_models(self, make: Optional[str] = None) -> dict:
        """Gets available makes and models."""
        
        url = f"{BASE_URL}/autos"
        
        def _scrape():
            driver = self._get_driver()
            
            try:
                driver.get(url)
                WebDriverWait(driver, 20).until(
                    EC.presence_of_element_located((By.CSS_SELECTOR, '.tz-dropdown[data-id="q_make"]'))
                )
                time.sleep(0.5)
                try:
                    driver.find_element(By.CSS_SELECTOR, '.tz-dropdown[data-id="q_make"] .tz-dropdown__selected').click()
                    time.sleep(0.4)
                except Exception:
                    pass
                if make:
                    make_opts = self._parse_tz_dropdown_options(driver, "q_make")
                    make_lower = make.strip().lower()
                    make_id = None
                    for val, label in make_opts:
                        if label.lower() == make_lower or make_lower in label.lower():
                            make_id = val
                            break
                    if not make_id:
                        return {"success": False, "error": f"Make not found: {make}"}
                    try:
                        make_cont = driver.find_element(By.CSS_SELECTOR, '.tz-dropdown[data-id="q_make"]')
                        make_cont.find_element(By.CSS_SELECTOR, ".tz-dropdown__selected").click()
                        time.sleep(0.3)
                        for el in make_cont.find_elements(By.CSS_SELECTOR, ".tz-dropdown__list .tz-dropdown__option"):
                            if (el.get_attribute("data-val") or "").strip() == make_id:
                                el.click()
                                break
                        time.sleep(0.5)
                    except Exception:
                        pass
                    model_opts = self._parse_tz_dropdown_options(driver, "q_model")
                    models = [label for _, label in model_opts]
                    return {"success": True, "make": make, "models": models}
                
                make_opts = self._parse_tz_dropdown_options(driver, "q_make")
                makes = [label for _, label in make_opts]
                return {"success": True, "makes": makes}
                
            except TimeoutException:
                return {"success": False, "error": "Page failed to load"}
            except Exception as e:
                return {"success": False, "error": str(e)}
        
        loop = asyncio.get_event_loop()
        return await loop.run_in_executor(None, _scrape)
    
    async def get_trending(self, category: str = "new", limit: int = 20) -> dict:
        """Gets newest/popular listings."""
        
        if category == "vip":
            url = f"{BASE_URL}/autos?q[extras][]=vip"
        elif category == "popular":
            url = f"{BASE_URL}/autos?order=view_count"
        else:  # new
            url = f"{BASE_URL}/autos"
    
        # Use search_cars function
        return await self.search_cars(limit=limit)
    
    def __del__(self):
        """Destructor - closes driver."""
        self._close_driver()
  • src/server.py:147-159 (registration)
    Tool definition/registration in server.py.
    Tool(
        name="get_makes_models",
        description="Fetches list of available makes and models on Turbo.az.",
        inputSchema={
            "type": "object",
            "properties": {
                "make": {
                    "type": "string",
                    "description": "Make name (to see its models). Leave empty for all makes."
                }
            }
        }
    ),
  • The handler logic in call_tool that routes to the scraper method.
    elif name == "get_makes_models":
        make = arguments.get("make")
        results = await scraper.get_makes_models(make)
        return [TextContent(type="text", text=json.dumps(results, ensure_ascii=False, indent=2))]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JavidGlyv/Turboaz-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server