Skip to main content
Glama
black-table

Car Deals Search MCP

by black-table
README.md
# Car Deals Search MCP

> **Search used car listings from Cars.com, Autotrader, and KBB with AI assistants**

An MCP (Model Context Protocol) server that aggregates and searches car listings from multiple sources. Scrapes listings in parallel, extracts price, mileage, dealer info, and applies optional CARFAX-style filters (1-owner, no accidents, personal use).

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

---

## ๐Ÿš€ Quick Start

### Prerequisites

- **Node.js** (v16 or higher)
- **Chrome/Chromium** browser installed (required by Puppeteer)
  - If Chrome is not in the default location, set `PUPPETEER_EXECUTABLE_PATH` environment variable to point to your Chrome/Chromium binary

### Installation

```bash
# Clone the repository
git clone https://github.com/SiddarthaKoppaka/car_deals_search_mcp.git
cd car_deals_search_mcp

# Install dependencies (includes Puppeteer)
npm install
```

### Using with MCP Clients

Configure your MCP client (Claude Desktop, VS Code, GitHub Copilot, etc.) to use this server:

**For Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):

```json
{
  "mcpServers": {
    "car-deals": {
      "command": "node",
      "args": ["/absolute/path/to/car_deals_search_mcp/src/server.js"]
    }
  }
}
```

**For other MCP clients**, refer to their documentation and use:
- **Command**: `node`
- **Args**: `["<absolute-path-to-repo>/src/server.js"]`

### Testing Standalone

```bash
# Run the test command
npm test

# Or test manually with a specific search
node -e "
const { scrapeCarscom } = require('./src/scraper.js');
scrapeCarscom({
  make: 'Toyota',
  model: 'Camry',
  oneOwner: true,
  noAccidents: true,
  personalUse: true
}, 5).then(listings => listings.forEach(l => console.log(l.format())));
"
```

---

## โœจ Features

- **Multi-source aggregation**: Search Cars.com, Autotrader, and KBB simultaneously
- **Smart filtering**: CARFAX-style filters (1-Owner, No Accidents, Personal Use)
- **Deal ratings**: Heuristic-based deal quality assessment
- **Parallel scraping**: Fast concurrent queries across sources
- **Stealth mode**: Puppeteer with anti-bot detection techniques

---

## ๐Ÿ“Š Supported Sources

| Source     | Price | Mileage | Deal Rating | Dealer Info | CARFAX Filters |
|------------|:-----:|:-------:|:-----------:|:-----------:|:--------------:|
| Cars.com   | โœ…    | โœ…      | โœ…          | โœ…          | โœ…             |
| Autotrader | โœ…    | โœ…      | โš ๏ธ Limited   | โœ…          | โš ๏ธ Limited     |
| KBB        | โœ…    | โœ…      | โœ…          | โš ๏ธ Limited   | โš ๏ธ Limited     |

---

## ๐Ÿ”ง MCP Tool: `search_car_deals`

### Parameters

| Parameter    | Type     | Required | Description |
|--------------|----------|----------|-------------|
| `make`       | string   | โœ…       | Car manufacturer (e.g., "Toyota", "Honda") |
| `model`      | string   | โœ…       | Car model (e.g., "Camry", "Accord") |
| `zip`        | string   | โŒ       | ZIP code for local search (default: "90210") |
| `yearMin`    | integer  | โŒ       | Minimum model year |
| `yearMax`    | integer  | โŒ       | Maximum model year |
| `priceMax`   | integer  | โŒ       | Maximum price in USD |
| `mileageMax` | integer  | โŒ       | Maximum mileage |
| `maxResults` | integer  | โŒ       | Max results per source (default: 10) |
| `sources`    | array    | โŒ       | Sources to query: `["cars.com","autotrader","kbb"]` (default: all) |
| `oneOwner`   | boolean  | โŒ       | Filter for CARFAX 1-owner vehicles only |
| `noAccidents`| boolean  | โŒ       | Filter for no accidents reported |
| `personalUse`| boolean  | โŒ       | Filter for personal use only (not rental/fleet) |

### Example Response

```
๐Ÿš— 2021 Toyota Camry XSE
   ๐Ÿ’ฐ Price: $23,491
   ๐Ÿ“ Mileage: 52,649 mi
   โญ Deal Rating: Good Deal
   ๐Ÿ† CARFAX: 1-Owner | No Accidents | Personal Use
   ๐Ÿช Dealer: Valencia BMW
   ๐ŸŒ Source: Cars.com
   ๐Ÿ”— https://www.cars.com/vehicledetail/...
```

---

## ๐Ÿ› ๏ธ Technical Details

- **Scraping**: Puppeteer (headless Chromium) with stealth plugin to bypass bot detection
- **Concurrency**: Parallel scraper workers for simultaneous multi-source queries
- **Protocol**: Implements MCP (Model Context Protocol) for AI assistant integration
- **Data extraction**: Source-specific parsers normalize listings into a common schema

### Chrome/Chromium Requirement

This project uses Puppeteer, which requires Chrome or Chromium to be installed:

- **macOS**: Chrome is typically at `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`
- **Linux**: Usually auto-detected by Puppeteer or at `/usr/bin/chromium-browser`
- **Windows**: Typically at `C:\Program Files\Google\Chrome\Application\chrome.exe`

If Puppeteer cannot find your browser, set the environment variable:

```bash
export PUPPETEER_EXECUTABLE_PATH="/path/to/chrome"
```

---

## ๐Ÿงช Development & Testing

```bash
# Run tests
npm test

# Test individual scrapers
node src/scraper.js

# View code structure
ls -la src/
```

---

## ๐Ÿค Contributing

Contributions are welcome! Please follow this workflow:

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Add tests for new functionality
4. Commit your changes (`git commit -m 'Add amazing feature'`)
5. Push to the branch (`git push origin feature/amazing-feature`)
6. Open a Pull Request

Please include test coverage for scraping/parsing changes to avoid regressions when source sites update.

---

## ๐Ÿ“„ License

MIT License - see [LICENSE](LICENSE) file for details

---

## ๐Ÿ”— Links

- **Repository**: https://github.com/SiddarthaKoppaka/car_deals_search_mcp
- **Issues**: https://github.com/SiddarthaKoppaka/car_deals_search_mcp/issues
- **MCP Protocol**: https://modelcontextprotocol.io

TDQS

A4.1/5.0

Scored across 1 tool

Disambiguation5/5

With only a single tool, there is no potential for confusion or misselection. The tool's purpose is clear and unambiguous within the server.

Naming Consistency5/5

The single tool name 'search_car_deals' follows a consistent verb_noun convention, making it predictable and readable. No other tools exist to create inconsistency.

Tool Count3/5

The server has only one tool, which is borderline thin. While the narrow scope of 'car deals search' might justify this, users might expect additional related tools (e.g., filtering, saving deals) to make the server feel more complete.

Completeness4/5

The tool covers the primary search functionality across multiple sources, returning comprehensive listing data. Minor gaps exist such as lack of detailed deal views or comparison tools, but the core use case is well-served.

Maintenance

ActivityInactive
ResponsivenessNo issues