Turbo.az MCP Server
# Turbo.az MCP Server
MCP (Model Context Protocol) server for Turbo.az automotive marketplace. This server enables Claude Desktop to search for cars and retrieve listing information from turbo.az.
## ⚠️ Important Note
Turbo.az blocks access from outside Azerbaijan. This server **must run from an Azerbaijani IP**:
- Local computer (in Azerbaijan)
- Via VPN with Azerbaijan IP
- From a VPS located in Azerbaijan
## 🚀 Installation
### 1. Requirements
- Python 3.10+
- Google Chrome browser
- pip
### 2. Server Setup
```bash
# Clone the repo or copy files
cd turbo-az-mcp
# Create virtual environment
python -m venv venv
# Activate
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# Install packages
pip install -e .
```
### 3. Test
```bash
# Run server manually
python -m src.server
```
### 4. Test MCP without LLM
Spawns the server and calls tools (requires Chrome):
```bash
uv run python scripts/test_mcp.py
```
## 🔧 Claude Desktop (local MCP, stdio)
**Local-only:** Claude Desktop runs the server as a subprocess. Do **not** use "Add custom connector" / Remote MCP URL.
1. Find and open the config file:
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Linux**: `~/.config/Claude/claude_desktop_config.json`
2. Add to `mcpServers` section (or copy `claude_desktop_config.example.json` from the project and change `cwd` to your path):
**With uv (recommended):**
```json
{
"mcpServers": {
"turbo-az": {
"command": "uv",
"args": ["run", "python", "-m", "src.server"],
"cwd": "/home/javid/dev/turbo-mcp"
}
}
}
```
**With Python / venv:**
```json
{
"mcpServers": {
"turbo-az": {
"command": "python",
"args": ["-m", "src.server"],
"cwd": "/home/javid/dev/turbo-mcp"
}
}
}
```
**Note:** `cwd` is the full path to the project folder. Restart Claude Desktop.
### Claude on Windows, Server in WSL
If Claude Desktop is on Windows but the project is in WSL, use `wsl` in config. WSL non-interactive shell may not have `uv` in PATH, so use venv python:
```json
{
"mcpServers": {
"turbo-az": {
"command": "wsl",
"args": ["bash", "-c", "cd /home/javid/dev/turbo-mcp && .venv/bin/python -m src.server"]
}
}
}
```
Replace `/home/javid/dev/turbo-mcp` with your WSL project path. If venv is not `.venv` (e.g. `venv`), use `venv/bin/python` instead of `.venv/bin/python`.
**Chrome in WSL:** When server runs in WSL, Chrome/Chromium must be installed in WSL for Selenium (Windows Chrome won't work). In WSL terminal:
```bash
sudo apt update && sudo apt install -y chromium-browser
```
If `chromium-browser` requires snap, install Google Chrome for Linux or set `CHROME_BINARY=/usr/bin/chromium` (or installed path).
## 📋 Available Tools
### 1. `search_cars`
Search for cars.
**Parameters:**
- `make` - Brand (BMW, Mercedes, Toyota, etc.)
- `model` - Model (X5, E-Class, etc.)
- `price_min` / `price_max` - Price range (AZN)
- `year_min` / `year_max` - Year range
- `fuel_type` - Fuel: benzin, dizel, qaz, elektrik, hibrid
- `transmission` - avtomat, mexaniki
- `limit` - Number of results (default: 10)
**Example query:** "Search for BMW X5 from 2020, price up to 50000 AZN on Turbo.az"
### 2. `get_car_details`
Detailed listing information.
**Parameters:**
- `listing_id` - Listing ID or full URL
**Example query:** "Show details of this listing on Turbo.az: 12345678"
### 3. `get_makes_models`
List of makes and models.
**Parameters:**
- `make` - Brand (to see its models, empty = all makes)
**Example query:** "What BMW models are available on turbo.az?"
### 4. `get_trending`
New/popular listings.
**Parameters:**
- `category` - new, popular, vip
- `limit` - Number of results
## 🐛 Troubleshooting
### "403 Forbidden" error
- Make sure you're running from Azerbaijan IP
- Use VPN (Azerbaijan IP)
### ChromeDriver error
- Make sure Chrome browser is installed
- `webdriver-manager` automatically downloads ChromeDriver
### "DevToolsActivePort file doesn't exist" (WSL)
- `chromium-browser` (snap) often doesn't work in WSL. Install Google Chrome:
```bash
wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt install -f
```
- Or with virtual display: `sudo apt install xvfb` then `xvfb-run -a uv run python scripts/test_mcp.py`
### Timeout error
- Check internet connection
- Check if turbo.az is working
## 📄 License
MIT
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose with no ambiguity: get_car_details retrieves specific listing details, get_makes_models provides metadata, get_trending shows popular listings, and search_cars enables filtered searches. The descriptions clearly differentiate their functions, making misselection unlikely.
All tools follow a consistent verb_noun pattern with snake_case naming (get_car_details, get_makes_models, get_trending, search_cars). The verbs 'get' and 'search' are appropriately used and maintain a predictable structure throughout the set.
With 4 tools, the server is well-scoped for a car listing domain, covering key operations like searching, viewing details, browsing trends, and accessing metadata. It feels slightly thin but reasonable, as each tool earns its place without redundancy.
The toolset covers core read-only operations for a car listing service: search, detail viewing, trend access, and metadata retrieval. Minor gaps exist, such as no tools for user interactions (e.g., saving favorites or contacting sellers), but agents can perform essential browsing tasks effectively.