Skip to main content
Glama
ThatMojo

encarapi-mcp

by ThatMojo
README.md
# EnCarAPI MCP server: Korean and Chinese used car data for AI assistants

[Model Context Protocol](https://modelcontextprotocol.io) server for
[EnCarAPI](https://encarapi.com/?utm_source=readme&utm_medium=encarapi-mcp). Lets Claude, Cursor, ChatGPT and other MCP clients search
**live used car listings from South Korea** (Encar, KB Chachacha, K Car) and **China**
(Dongchedi, Che168), and pull full details, inspection reports and accident records.

> **An API key is required.** Get one (5-day trial) at [encarapi.com](https://encarapi.com/?utm_source=readme&utm_medium=encarapi-mcp).
> Chinese data works with a [ChinaCarAPI](https://chinacarapi.com/?utm_source=readme&utm_medium=encarapi-mcp) key or an EnCarAPI key
> with the China add-on. ChinaCarAPI customers: see [For ChinaCarAPI customers](#for-chinacarapi-customers).

## Tools

| Tool | What it does |
|---|---|
| `search_korean_cars` | Search Korean listings (brand, model, year, price in 10,000 KRW, mileage, fuel, accident-free, seller region and city, source: encar / kbc / kcar / all; `lang`: en, ru or de for English, Russian or German values) |
| `search_korean_excavators` | Search Korean used excavators (maker, model, operating hours, weight class, region; Business/Scale key) |
| `search_korean_trucks` | Search Korean trucks, buses and special vehicles (body type, payload in tons, use, region; Business/Scale key) |
| `find_korean_car_by_vin` | All Encar / K Car listings of one VIN, incl. removed ones (Business/Scale key) |
| `get_korean_truck` | Full record for one truck: detail, inspection report, cargo box, VIN and plate (Business/Scale key) |
| `get_korean_car` | Full detail for one listing (specs, options, photos, price history, seller; `lang`: en, ru or de) |
| `get_korean_inspection` | Official Korean inspection report |
| `get_korean_accident_record` | Insurance accident history and ownership changes |
| `find_korean_models` | Model name autocomplete across brands |
| `korean_filter_values` | Valid filter values |
| `search_chinese_cars` | Search Chinese listings (brand, model, model year, registration year, price in CNY, mileage, power, city, fuel, source, export-ready; `lang`: en, zh or ru) |
| `get_chinese_car` | Full record for one Chinese listing (`lang`: en, zh or ru) |
| `get_chinese_car_by_url` | Full record by Che168/Dongchedi listing link (desktop, mobile or app; `lang`: en, zh or ru) |
| `get_chinese_inspection` | Chinese inspection report (accident, flood, fire, EV battery) |
| `get_chinese_specs` | Autohome specification sheet of a Che168 trim (cc, kW, hp, torque, emission standard, weights, EV battery) |
| `chinese_filter_values` | Valid makes, fuels, cities and sources with listing counts |
| `chinese_models` | Models of a brand with listing counts |

Chinese `lang`: `zh` returns the original Chinese values, `ru` Russian values for the fixed fields (fuel,
transmission, drivetrain, colours, seller type, condition, vehicle class), city names and equipment names;
make, model and trim names stay Latin.

All tools are read-only.

## Option 1: hosted (no install)

Add this URL as a remote MCP server:

```
https://mcp.encarapi.com/mcp
```

In clients with OAuth support the URL is all you need. On first use a browser window opens,
you paste your EnCarAPI key once, and the client is connected:

- **Claude** (claude.ai, desktop, mobile): Settings - Connectors - Add custom connector, paste the URL
- **ChatGPT** (developer mode): Settings - Connectors - create a connector with the URL
- **Cursor**: `{"mcpServers": {"encarapi": {"url": "https://mcp.encarapi.com/mcp"}}}` in `.cursor/mcp.json`
- **VS Code**: "MCP: Add Server" - HTTP - paste the URL
- **Claude Code**:

```bash
claude mcp add --transport http encarapi https://mcp.encarapi.com/mcp
```

The key is checked once and is not stored on the server: it is encrypted into the token
your client receives. To disconnect, remove the server in your client; to cut off access
everywhere, rotate your key at [encarapi.com](https://encarapi.com/?utm_source=readme&utm_medium=encarapi-mcp).

### Alternative: send the key yourself

Clients without OAuth support, scripts and gateways can send the key directly:

```
https://mcp.encarapi.com/mcp
Authorization: Bearer YOUR_ENCARAPI_KEY
```

Claude Code:

```bash
claude mcp add --transport http encarapi https://mcp.encarapi.com/mcp \
  --header "Authorization: Bearer YOUR_ENCARAPI_KEY"
```

The `x-api-key: YOUR_ENCARAPI_KEY` header works as well. Clients that only accept a URL and
have no OAuth support can use `https://mcp.encarapi.com/mcp?key=YOUR_ENCARAPI_KEY` (a header
is preferred, since URLs can end up in logs). A separate ChinaCarAPI key goes into the
`x-china-key` header, or into the second field of the browser form.

## For ChinaCarAPI customers

ChinaCarAPI has its own address:

```
https://mcp.chinacarapi.com/mcp
```

Add it as a remote MCP server exactly as above. On first use a browser window opens and you
paste your ChinaCarAPI key once. The form detects which key it is, so an EnCarAPI key works
there as well; customers with both keys put the EnCarAPI key into the optional second field.

- **Claude** (claude.ai, desktop, mobile): Settings - Connectors - Add custom connector, paste the URL
- **Cursor**: `{"mcpServers": {"chinacarapi": {"url": "https://mcp.chinacarapi.com/mcp"}}}` in `.cursor/mcp.json`
- **Claude Code**:

```bash
claude mcp add --transport http chinacarapi https://mcp.chinacarapi.com/mcp
```

On this address the Chinese tools are listed first. Start with `chinese_filter_values` to
get valid makes, fuels and cities (the `city` filter needs the exact `value` from that list).

Without the browser login, send the key as a header. On mcp.chinacarapi.com a key in
`Authorization: Bearer` or `x-api-key` counts as a ChinaCarAPI key:

```bash
claude mcp add --transport http chinacarapi https://mcp.chinacarapi.com/mcp \
  --header "Authorization: Bearer YOUR_CHINACARAPI_KEY"
```

`x-china-key: YOUR_CHINACARAPI_KEY` works on both addresses; then `Authorization` can carry
an EnCarAPI key for the Korean tools.

Locally (npx), set `CHINACARAPI_KEY` instead of `ENCARAPI_KEY`:

```bash
claude mcp add chinacarapi -e CHINACARAPI_KEY=YOUR_CHINACARAPI_KEY -- npx -y encarapi-mcp
```

## Option 2: local (npx)

Claude Desktop (`claude_desktop_config.json`), Cursor (`.cursor/mcp.json`) and most other
clients:

```json
{
  "mcpServers": {
    "encarapi": {
      "command": "npx",
      "args": ["-y", "encarapi-mcp"],
      "env": {
        "ENCARAPI_KEY": "YOUR_ENCARAPI_KEY"
      }
    }
  }
}
```

Claude Code:

```bash
claude mcp add encarapi -e ENCARAPI_KEY=YOUR_ENCARAPI_KEY -- npx -y encarapi-mcp
```

Optional: `CHINACARAPI_KEY` for a separate ChinaCarAPI key.

## Example prompts

- "Find accident-free Genesis GV80 from 2022 or newer under 50 million KRW and compare the mileage."
- "Show the inspection report and accident record for Encar listing 41000001."
- "What are the cheapest export-ready BYD Seal listings in China right now?"

## Self-hosting the HTTP endpoint

```bash
docker build -t encarapi-mcp .
docker run -p 3000:3000 encarapi-mcp     # POST /mcp, GET /health
```

Stateless: every request carries its own key, nothing is stored.

To enable the OAuth flow ("connect by URL only"), set two environment variables:

| Variable | Meaning |
|---|---|
| `MCP_OAUTH_SECRET` | At least 32 random characters, e.g. `openssl rand -base64 48`. Enables OAuth; without it the server only accepts keys sent by the client. |
| `MCP_PUBLIC_URL` | Public origin of the server, e.g. `https://mcp.example.com` (default `https://mcp.encarapi.com`). Tokens are bound to `<MCP_PUBLIC_URL>/mcp`. |
| `MCP_PUBLIC_URLS` | Optional, several public origins separated by commas, e.g. `https://mcp.encarapi.com,https://mcp.chinacarapi.com`. Replaces `MCP_PUBLIC_URL`. The `Host` header picks the origin (unknown hosts get the first one); each origin has its own issuer and branding, and its tokens are not accepted on the others. Origins whose host contains `chinacarapi.` get the ChinaCarAPI branding. |

```bash
docker run -p 3000:3000 -e MCP_OAUTH_SECRET="$(openssl rand -base64 48)" \
  -e MCP_PUBLIC_URL=https://mcp.example.com encarapi-mcp
```

This adds `/.well-known/oauth-protected-resource`, `/.well-known/oauth-authorization-server`,
`/register`, `/authorize` and `/token` (OAuth 2.1 with PKCE, dynamic client registration).
There is still no database: client ids, authorization codes and tokens are encrypted,
self-contained values (AES-256-GCM) that carry the key. Consequences:

- Changing `MCP_OAUTH_SECRET` signs out all OAuth clients (they reconnect through the browser).
- Access tokens last 1 hour, refresh tokens 90 days and are replaced on every use.
- Single use of authorization codes and of replaced refresh tokens is tracked in memory, so
  it is best-effort: it does not survive a restart and is not shared between instances.
- A single token cannot be revoked on the server. Rotating the EnCarAPI key cuts off all access.

## Links

- EnCarAPI: [encarapi.com](https://encarapi.com/?utm_source=readme&utm_medium=encarapi-mcp)
- ChinaCarAPI: [chinacarapi.com](https://chinacarapi.com/?utm_source=readme&utm_medium=encarapi-mcp)
- SDKs: [Node.js](https://github.com/ThatMojo/encarapi-node), [Python](https://github.com/ThatMojo/encarapi-python)

EnCarAPI is an independent service and not affiliated with Encar, KB Chachacha, K Car,
Dongchedi or Che168.

## License

MIT

TDQS

A3.5/5.0

Scored across 11 tools

Disambiguation4/5

Korean and Chinese tools are cleanly separated by language prefix, and search/get/inspection purposes are distinct. Minor overlap between get_korean_inspection and get_korean_accident_record (both single-car history) and between the two *_filter_values tools could cause occasional misselection, but overall boundaries are clear.

Naming Consistency4/5

Strong verb_noun pattern throughout (search_*, get_*, find_korean_models, *_filter_values). The one deviation is chinese_models lacking a verb while its Korean counterpart is find_korean_models, and get_korean_accident_record is a longer compound, but the scheme is largely predictable.

Tool Count5/5

11 tools is well-scoped for a dual-market used-car search server, with each tool earning its place across two parallel Korean/Chinese surfaces. No bloat or redundancy.

Completeness4/5

Covers search, detail, inspection, accident/insurance, model autocomplete, and filter values for both markets. Chinese lacks a dedicated accident_record (folded into get_chinese_inspection), which is a minor gap but core workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues