carsearch-mcp
carsearch — 캐나다 중고차 검색, 모니터링 및 시장 분석 플랫폼
carsearch는 캐나다 마켓플레이스 매물을 영구적이고 검색 가능한 기록 데이터베이스로 전환하고, 이를 MCP를 통해 Claude Code(또는 모든 에이전트)에 노출하며, 완전한 CLI도 제공합니다. AutoTrader.ca에서 실제 매물을 수집하고(추가 공급자 플러그인 가능), 모든 가격/상태 변경을 기록으로 유지하며, 여러 매물에 걸쳐 동일한 물리적 차량을 중복 제거하고, 지오코딩을 정확히 수행하며(실제 거리), 설명에서 위험 신호를 추출하고, 비교 가능한 가격 통계를 계산하고, 구성 가능한 프로필에 따라 프로젝트 카를 점수화하고, 딜을 감지하고, 저장된 검색을 일정에 따라 재실행하고 알림을 발생시킵니다.
Claude에게 이렇게 물어보세요:
토론토에서 800km 이내, $8,000 미만의 모든 수동변속기 BMW E90 328i를 찾아줘. 개인 판매자를 선호하고, 녹슨 차는 제외하고, 프로젝트 카 가치로 순위를 매겨줘.
지난 48시간 동안 온타리오에 나타난 $7k 미만의 흥미로운 프로젝트 카는 무엇인가?
우리가 관찰한 유사 매물과 비교해 이 $6,200 Audi TT가 실제로 저렴한가?
이번 주에 10% 이상 가격이 하락한 모든 매물을 보여줘. / 판매자가 이미 가격을 두 번 내렸는데 30일 이상 방치된 차들.
단계별 상태, 테스트된 명령 및 알려진 문제: PROJECT_STATUS.md.
아키텍처 (요약)
providers/ (autotrader ✓, cargurus/kijiji/facebook interface+probe) → VehicleListing (canonical)
→ collectors/ (checkpointed ProviderRun, ingest w/ snapshots+events, raw payloads)
→ dedupe/ (VIN → weighted soft signals → vehicles + candidates) → geo/ (geocode, haversine)
→ SQLite/PostgreSQL (SQLAlchemy) → search/ analysis/ (description, comps, deals, market)
→ scoring/ (profiles + model knowledge JSON) → monitoring/ (saved searches, scheduler) → notifications/
→ cli/ (carsearch …) and mcp/ (23 tools)자세히: docs/architecture.md, docs/providers.md, docs/schema.md.
설치
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]" # add ".[postgres]" for PostgreSQL
cp .env.example .env # optional; SQLite in ./data works out of the box
carsearch db-init # creates/upgrades data/carsearch.dbPython ≥ 3.11 (3.14에서 개발). AutoTrader에는 브라우저나 API 키가 필요 없습니다.
데이터베이스 설정
기본값:
sqlite:///./data/carsearch.db(WAL). 할 일이 없습니다.PostgreSQL:
CARSEARCH_DATABASE_URL=postgresql+psycopg://user:pass@host/carsearch를.env에,pip install -e ".[postgres]",carsearch db-init. 스키마/마이그레이션은src/carsearch/database/에 있습니다 (버전 관리되며schema_migrations에 기록됨).
크롤링 (실제 데이터 수집)
# targeted, with detail pages for new listings (VIN, exact coordinates, drivetrain, created date)
carsearch crawl autotrader --make BMW --model "3 Series" --transmission manual --max-price 8000 --min-year 2006 --max-year 2013 --details new
# regional bulk (20 listings/page, ~1.5 s/page, no detail pages)
carsearch crawl autotrader --max-price 7000 --location Toronto --radius-km 500 --max-pages 200 --details none
# province scope (centroid + covering radius server-side, exact province locally)
carsearch crawl autotrader --province ON --transmission manual --max-price 6000 --seller-type private
# incremental refresh: stop after 3 consecutive pages with nothing new/changed
carsearch crawl autotrader --transmission manual --max-price 8000 --stop-when-seen 3
# resume an interrupted run
carsearch crawl autotrader --resume 12
# re-check listings not seen for 3 days (marks removed on 404); fetch missing detail pages; geocode backfill
carsearch refresh autotrader --older-than-days 3 --limit 200
carsearch details autotrader --limit 200
carsearch geocode --limit 60
scripts/bootstrap_crawl.sh # example multi-band bootstrap used to seed the DBAutoTrader는 쿼리당 200페이지(4000개 매물)로 제한합니다 → 전체 커버리지를 위해 가격대/지역별로 분할하세요 (실행 요약의 truncated=True가 해당 시점을 알려줍니다).
검색
carsearch search --make BMW --model 328i --max-price 7000 --transmission manual --location Toronto --radius-km 800 --seller-type private
carsearch search --generation E90 --keywords '"one owner" -salvage' --province ON,QC --sort price_asc
carsearch new --since 48h --province ON --max-price 7000
carsearch price-drops --min 10 --since 7d
carsearch deals --province ON --max-price 7000 --profile project_car_enthusiast
carsearch deals --location Toronto --radius-km 500 --transmission manual --max-price 7000 --since 7d \
--profile project_car_enthusiast --sort-by project --exclude-flags salvage_title,frame_rust,doesnt_run # "best project cars" ranking
carsearch listing 42 # full record + price history + description flags
carsearch history 42 # snapshots + change events
carsearch comps 42 # comparable-price analysis with methodology
carsearch score 42 --profile project_car_enthusiast
carsearch analyze 42 # everything above + deal signals in one JSON
carsearch market --metric manual_premium --make Subaru --model WRX
carsearch market --metric price_by_mileage --generation E90 --province ON
carsearch market --metric cheapening --days 90
carsearch status [--check-providers] · carsearch runs · carsearch alerts모든 명령은 기계가 읽을 수 있는 출력을 위해 --json을 지원합니다.
모니터링 / 저장된 검색 / 알림
carsearch saved seed # the four example searches from the brief
carsearch saved create "manual E90 328i under $8k" '{"make":"BMW","model":"3 Series","min_year":2006,"max_year":2011,"max_price":8000,"transmission":"manual"}' \
--interval-minutes 240 --alert-rules '{"price_drop_pct":10,"target_price":6500,"min_deal_score":65}' --profile project_car_enthusiast
carsearch saved run "manual E90 328i under $8k" # incremental crawl → new listings + alerts
carsearch schedule # long-running loop: runs due searches, maintenance
carsearch schedule --once # one pass (cron-friendly)알림은 콘솔, data/alerts.jsonl, 선택적 웹훅(CARSEARCH_WEBHOOK_URL)으로 전송됩니다. 새 싱크는 notifications.alerts.AlertSink를 서브클래싱합니다. 모든 알림에는 reasons[](및 위험)가 포함됩니다.
MCP 서버
carsearch serve-mcp # stdio (default) | --transport streamable-http --port 8765도구: search_cars, search_live_marketplace, get_listing, get_vehicle,
get_new_listings, get_price_history, get_listing_changes, get_comparables,
compare_cars, find_deals, find_price_drops, find_long_sitting_listings,
analyze_listing, score_listing, analyze_market, list_saved_searches,
create_saved_search, run_saved_search, delete_saved_search, get_alerts,
get_status, get_generation_codes, analyze_listing_images. 모든 도구는
구조화된 JSON을 반환하며 페이지네이션(limit/offset/next_offset)을 포함합니다. 무거운 필드
(description, photos, raw)는 옵트인입니다.
Claude Code 연결
claude mcp add carsearch -- /ABSOLUTE/PATH/autotrader/.venv/bin/carsearch serve-mcp
# or in .mcp.json:
{ "mcpServers": { "carsearch": { "command": "/ABSOLUTE/PATH/autotrader/.venv/bin/carsearch", "args": ["serve-mcp"] } } }그런 다음: "지난주에 나타난 토론토 500km 이내 $7,000 CAD 미만의 최고의 수동변속기 프로젝트 카를 찾아줘.
역사적 가격과 비교하고, 매물의 주요 기계적/녹 위험을 표시한 다음,
상위 10개를 순위로 매겨줘." —
Claude는 일반적으로 search_cars/get_new_listings(또는 최신 데이터가 필요하면
search_live_marketplace)을 호출한 다음 analyze_listing/compare_cars를 호출합니다.
체크포인트 작동 방식
각 크롤링은 provider_runs 행입니다. 모든 페이지 후에 매물이
커밋되고 last_checkpoint.next_page가 전진합니다. 매물별 실패는
errors에 기록되고 건너뜁니다. 상세 보강은 매물별로 커밋됩니다
(detail_fetched_at). 중단된 실행은 failed/interrupted로 표시되며
carsearch crawl --resume <id>는 next_page에서 계속됩니다 (이미 가져온
페이지는 로컬 http_cache에서 가져옵니다). 저장된 검색 상태는 DB에 있습니다.
docs/architecture.md를 참조하세요.
공급자 추가 방법
src/carsearch/providers/<name>/에서 BaseProvider를 구현하고,
parser.py에서 VehicleListing으로 매핑하고(raw 유지), 등록한 다음 픽스처 +
테스트를 추가하고 docs/providers.md에 문서화하세요. 다른 것은 변경되지 않습니다.
테스트
pytest -q # 42 tests: normalization, parser fixtures, ingest/price history, dedupe,
# geo/search, analysis (flags/comps/scoring/deals/market), crawler checkpoints, MCP tools어떤 테스트도 네트워크에 접속하지 않습니다 (실제 페이로드 픽스처 + 가짜 공급자).
알려진 제한 사항
공급자: AutoTrader.ca만 수집합니다. CarGurus(DataDome), Kijiji(edge 403 / kijijiautos.ca 사라짐), Facebook(로그인)은 라이브 상태 점검이 있는 인터페이스입니다. 안티봇 또는 로그인 우회는 시도하지 않습니다 (
docs/providers.md참조).요청 가격이지 판매 가격이 아닙니다. 매물 소멸 ≠ 판매;
not_observed/removed로 기록합니다.커버리지는 크롤링하는 내용에 따라 달라집니다 (쿼리당 200페이지 제한, 구간별 분할). "지난 N일 내에 나타난"은 마켓플레이스 생성 날짜를 알 수 있으면(상세 페이지) 그 날짜를 사용하고, 그렇지 않으면 첫 관측 시각을 사용합니다.
좌표: 상세 페이지가 있는 매물은 정확하고, 그 외에는 도시 수준입니다 (시드 테이블 / 학습된 중심점 / 마켓플레이스 해석기). 거리 필터는 좌표가 없는 매물을 건너뜁니다.
점수, 플래그 및 딜 점수는 휴리스틱이며 명시된 근거와 구성 가능한 규칙(
src/carsearch/config/*.json)을 사용합니다. 이는 추론의 입력이지 최종 판정이 아닙니다. 정규식 플래그는 비정상적인 표현에서 오작동할 수 있습니다 (근거는 항상 반환됩니다).비교 매물은 점진적 완화를 사용합니다. 표본이 작으면 플래그가 지정됩니다(
warnings,confidence).이미지 분석은 해싱/캐싱과 플러그 가능한 비전 훅을 제공합니다 (Anthropic 백엔드 포함, 기본적으로 꺼짐). 구성하지 않으면 어떤 비전 모델도 실행되지 않습니다.
SQLite는 수십만 개의 매물에 충분합니다. 동시 쓰기가 필요하면 PostgreSQL로 전환하세요.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for CarsXE vehicle data: VIN, specs, history, images, recalls, and OBD codes.
MCP server for AI job search — find jobs, track applications, get alerts. Claude, ChatGPT, Cursor.
An MCP server for deep research or task groups
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Lironktf/carsearch'
If you have feedback or need assistance with the MCP directory API, please join our Discord server