MCP Server#

The Model Context Protocol (MCP) lets AI tools like Codex, ChatGPT, Claude, and Cursor query Old Cars Data directly. Ask questions in plain English and get completed sales, live auctions, bid history, pricing stats, and market trends back — no code required.

Endpoint#

https://api.oldcarsdata.com/mcp

Use OAuth when your client supports it. Add the endpoint, sign in to Old Cars Data in your browser, and approve access. There is no API key to copy, paste, or store. API keys are only a fallback for clients without remote MCP OAuth support.

What Connecting Looks Like#

  1. Your client discovers the Old Cars Data OAuth configuration from the MCP endpoint.
  2. A browser opens the branded Old Cars Data sign-in page. Continue with Google or your email and password.
  3. Review the client name and requested access, then select Allow.
  4. The browser returns you to the client. The client securely stores refreshable credentials for future sessions.
  5. Ask the client to list Old Cars Data tools or try: “Find recent Porsche 911 auction sales.”

You may be asked to sign in again if you revoke the connection, sign out, or the client discards its saved credentials.

Codex#

Codex CLI#

Add the remote server, then start the browser sign-in:

bash
codex mcp add oldcarsdata --url https://api.oldcarsdata.com/mcpcodex mcp login oldcarsdata

Run codex mcp get oldcarsdata to inspect the saved connection. In the Codex terminal UI, use /mcp to see its status and available tools.

Codex App and IDE Extension#

  1. Open Settings > MCP servers.
  2. Select Add server, then choose Streamable HTTP.
  3. Enter https://api.oldcarsdata.com/mcp and save.
  4. Restart Codex if prompted, then select Authenticate.
  5. Sign in to Old Cars Data in the browser and select Allow.

Codex apps, the IDE extension, and the CLI use the same local MCP configuration. ChatGPT web does not read that local configuration.

Claude#

Claude Code#

Add the server for your user account, then authenticate in the browser:

bash
claude mcp add --transport http --scope user oldcarsdata https://api.oldcarsdata.com/mcpclaude mcp login oldcarsdata

Run claude mcp get oldcarsdata or use /mcp inside Claude Code to check the connection. Use --scope project instead of --scope user when you want to share the server definition with a project; each teammate still signs in with their own Old Cars Data account.

Claude Web and Desktop#

For an individual account:

  1. Open Customize > Connectors.
  2. Select +, then Add custom connector.
  3. Enter https://api.oldcarsdata.com/mcp and select Add.
  4. Select Connect, sign in to Old Cars Data, and approve access.

Free accounts can add one custom connector. Pro and Max accounts can add more. On Team and Enterprise plans, an owner first adds the URL under Organization settings > Connectors > Add > Custom > Web. Members can then open Customize > Connectors, find Old Cars Data, and select Connect.

ChatGPT Web#

ChatGPT web uses workspace apps rather than the MCP configuration stored by Codex. In a workspace that allows custom MCP apps, add https://api.oldcarsdata.com/mcp as a remote app, then follow the browser sign-in and consent flow. Workspace plan and admin controls determine who can create, publish, and use the app.

Cursor, Windsurf, and Other Clients#

Add Old Cars Data as a remote or Streamable HTTP server in the client’s MCP settings. Start with only the URL—do not add an authorization header when the client offers Connect, Authenticate, or OAuth sign-in.

json
{  "mcpServers": {    "oldcarsdata": {      "url": "https://api.oldcarsdata.com/mcp"    }  }}

Exact configuration keys vary by client. After saving, select the client’s connect or authenticate action and complete the Old Cars Data browser sign-in.

Team Sharing#

Share only the server URL in project configuration. Each teammate completes OAuth with their own account, so there are no shared secrets to commit:

json
{  "mcpServers": {    "oldcarsdata": {      "type": "http",      "url": "https://api.oldcarsdata.com/mcp"    }  }}

API Key Fallback#

If a client supports Streamable HTTP but cannot complete remote MCP OAuth, generate an API key from your profile and pass it as a bearer token:

text
Authorization: Bearer YOUR_API_KEY

Keep API keys out of version control. Prefer an environment-variable reference supported by your client, and use OAuth whenever the client adds support.

Available Tools#

Use list_makeslist_modelssearch_auctions when you want make and model filters to match normalized names in our database (same as GET /makes and GET /models on the REST API). Guessing names from a listing title often returns no results.

Tool#Description
list_makes#List all vehicle makes in the database (unmetered when the only tool call in the MCP request)
list_models#List all models for a given make (unmetered when the only tool call in the request; batched with metered tools, the request counts)
search_auctions#Search auction results; optional make / model filters should come from the list tools above
search_live_auctions#Search active supported auction listings with ending windows, source filters, current prices, bid counts, featured image URLs, and polling filters
get_auction_bids#Retrieve paginated bid history for supported live or completed Bring a Trailer, Cars & Bids, Hemmings, Hagerty, PCAR Market, All Collector Cars, and Sotheby's Motorsport auctions where bid data is available
get_price_stats#Get pricing statistics and 12-month market trends; make is required and model is optional

Deprecated aliases remain available for compatibility: list_live_auctions maps to search_live_auctions, and list_auction_bids maps to get_auction_bids. New integrations should use the canonical names above.

Tool Reference#

list_makes#

List all vehicle makes available in the database. No parameters required. Does not count toward your plan query limit when this is the only tool invocation in that HTTP request. Use these strings for search_auctions and get_price_stats.

list_models#

List all models for a given vehicle make. Pass a make value exactly as returned by list_makes.

Parameter#TypeRequiredDescription
make#stringYesExact make from list_makes

search_auctions#

Search auction results for vehicles. Counts toward your plan query limit. Returns listings with prices, status, specs, and details. Use cursor pagination when an agent needs to traverse multiple result pages without exact-count or deep-offset work.

Parameter#TypeRequiredDescription
make#stringNoExact make from list_makes
model#stringNoExact model from list_models
vin#stringNoExact VIN match
seller_username#stringNoExact seller username
year_min#integerNoMinimum model year
year_max#integerNoMaximum model year
price_min#integerNoMinimum sale price in USD
price_max#integerNoMaximum sale price in USD
status#enumNoAuction outcome: "sold", "result unavailable", "reserve not met", "canceled"
source#stringNoAuction source/platform
keyword#stringNoSearch in title and description
sort#enumNoSort field: "date" (default, ordered by auction_end_at), "price", "year", "bids"
direction#enumNoSort direction: "asc", "desc" (default)
pagination#enumNoDeprecated page (default) or recommended cursor; cursor mode supports sort=date
cursor#stringNoOpaque next_cursor returned by the previous cursor result; repeat the same filters
page#integerNoDeprecated. Page number in page mode (default: 1); cursor mode accepts only 1
limit#integerNoResults per page, max 50 (default: 20)

Cursor results return pagination, limit, has_more, and next_cursor in meta instead of total, page, and total_pages. A traversal expires 24 hours after its first cursor is issued. Cursor traversal reads the live completed-auction dataset rather than a materialized snapshot, so changed records can repeat or be omitted. Consumers should de-duplicate by auction id and must not treat a live traversal as a complete point-in-time export.

Auction results include auction_end_at and auction_end_precision. exact precision means the ending time is known; date means only the date is known and the 00:00:00 time is a normalization placeholder. Null means no ending value is known. The legacy auction_end_date field is deprecated.

get_price_stats#

Get pricing statistics and market trends for a vehicle make or make/model. Includes average, median, low/high prices, sell-through rate, and 12-month price trends.

Parameter#TypeRequiredDescription
make#stringYesExact make from list_makes
model#stringNoExact model from list_models
year_min#integerNoMinimum model year
year_max#integerNoMaximum model year

Paid Plan Required: get_price_stats is not available on the Starter plan. Upgrade to access pricing statistics.

Plan Limits#

The same plan limits that apply to the REST API apply to MCP tools:

Plan#Auction ResultsStats Access
Starter#Limited to 20 resultsNot available
1k#Full accessFull access
10k#Full accessFull access

Metered usage is shared across REST and MCP. list_makes and list_models do not count toward your query limit when they are the only tool calls in that MCP HTTP request (if a single request batches a metered tool such as search_auctions, that request counts). See API overview — Rate Limits.

Example Queries#

Once connected, ask questions in natural language. Here are some examples:

"What Porsche 911s have sold recently?" Calls search_auctions with make: "Porsche", model: "911", status: "sold" and returns recent sold listings with prices.

"What's the average price of a Toyota Land Cruiser?" Calls get_price_stats with make: "Toyota", model: "Land Cruiser" and returns average, median, and price range.

"Show me BMW M3s under $50,000 from the last few years" Calls search_auctions with make: "BMW", model: "M3", price_max: 50000, year_min: 2020 and returns matching listings.

"What car brands do you have data for?" Calls list_makes and returns the full list of available makes.

Summarize this page with: