Car Deals Search MCP Server
# 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).
[](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
Scored across 1 tool
With only one tool, there is no possibility of ambiguity or overlap between tools. The tool's purpose is clearly defined as searching for car deals, making it impossible for an agent to misselect among non-existent alternatives.
Since there is only one tool, naming consistency is inherently perfect. The tool name 'search_car_deals' follows a clear verb_noun pattern, and there are no other tools to create inconsistency or mixed conventions.
A single tool is too few for a server named 'Car Deals Search MCP Server', which implies a broader domain of car deal operations. While search is a core function, the lack of tools for filtering, sorting, or managing deals (e.g., save, compare) makes the set feel thin and incomplete for the apparent scope.
The tool set is severely incomplete for the domain of car deals search. It only provides a basic search function, with obvious gaps such as no tools for refining searches (e.g., by price, mileage), viewing deal details beyond listings, or interacting with deals (e.g., saving favorites). This will likely cause agent failures when more complex tasks are required.