Toyota & Lexus MCP server — connect a MyToyota Europe account to Claude and other AI assistants: fuel, range, location, trips, health, climate, charging and remote commands.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
claude mcp add toyota-mcp -- uvx toyota-mcp{
"mcpServers": {
"toyota-mcp": {
"command": "uvx",
"args": ["toyota-mcp"]
}
}
}Resumen de MCP Servers
<!-- mcp-name: io.github.zepgram/toyota -->
<p align="center">
<img src="https://raw.githubusercontent.com/zepgram/toyota-mcp/main/docs/toyota-emblem.svg"
alt="Toyota" width="76">
</p>
<h1 align="center">toyota-mcp — Toyota & Lexus MCP server for Claude and other AI assistants</h1>
<p align="center">
<a href="https://pypi.org/project/toyota-mcp/"><img src="https://img.shields.io/pypi/v/toyota-mcp" alt="PyPI"></a>
<a href="https://github.com/zepgram/toyota-mcp/actions/workflows/ci.yml"><img src="https://github.com/zepgram/toyota-mcp/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
<a href="https://pypi.org/project/toyota-mcp/"><img src="https://img.shields.io/pypi/pyversions/toyota-mcp" alt="Python"></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
</p>
**Ask your Toyota anything.** `toyota-mcp` is a [Model Context Protocol](https://modelcontextprotocol.io)
(MCP) server that connects a **MyToyota** or **MyLexus** Europe account to Claude,
Claude Code, Cursor, VS Code or any MCP client — read your car's fuel level,
range, location, trips and health, and send remote commands (lock, climate,
charging) in plain language.
> *"How much range is left?"* · *"Where is the car?"* · *"Is it locked?"* ·
> *"What did the last trip consume?"* · *"What's my EV share this month?"* ·
> *"Pre-heat the car for 8 am."* · *"Cheapest petrol near the car?"*
| | |
|---|---|
| **Vehicles** | Toyota and Lexus, **Europe only** (Toyota Connected Services / `ctpa-oneapi`) |
| **Powertrains** | petrol, diesel, full hybrid, plug-in hybrid, electric |
| **Tools** | 13 read + 11 remote commands + 1 prompt ([full list](#available-tools)) |
| **Install** | `uvx toyota-mcp` — no clone, no build |
| **Requires** | a MyToyota/MyLexus account **without MFA**, Python 3.11+ |
| **Built on** | [pytoyoda](https://github.com/pytoyoda/pytoyoda), the community client for Toyota Europe |
## Requirements
- A **MyToyota Europe** account (the API covers Europe only — North America and
Japan use entirely different systems).
- Sign in with `toyota-mcp login`, or with account credentials in the
environment (that path cannot handle MFA/2FA).
- The vehicle must appear in the MyToyota mobile app.
- Python 3.11+ and [`uv`](https://docs.astral.sh/uv/) for the zero-install `uvx` launcher
(`uvx` fetches a suitable Python by itself).
> **Unofficial API.** Toyota can change or break this API at any time without
> notice. All API access is isolated behind pytoyoda, which historically absorbs
> such breakage within days.
## Quickstart
### Sign in once
```bash
uvx toyota-mcp login
```
Your browser opens Toyota's own sign-in page. Toyota then redirects to an
address the browser cannot follow (`com.toyota.oneapp:/…`) and shows an error —
that is expected: copy that address from the address bar and paste it back. The
session is saved in your operating system's credential store and refreshed
automatically. **Your password is never seen by this program and never written
to a configuration file.** `uvx toyota-mcp logout` forgets it.
### Claude Desktop
Add to `claude_desktop_config.json` (macOS:
`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"toyota": {
"command": "uvx",
"args": ["toyota-mcp"]
}
}
}
```
Add options after `toyota-mcp` in `args` — for example
`["toyota-mcp", "--addresses", "osm"]` for postal addresses, or
`["toyota-mcp", "--read-only"]` to leave every remote command out.
### Claude Code
```bash
claude mcp add --transport stdio toyota -- uvx toyota-mcp
```
### Cursor, VS Code and other MCP clients
Any client that speaks stdio works with the same shape — command `uvx`,
arguments `["toyota-mcp"]`. In VS Code, add it to `.vscode/mcp.json`; in Cursor,
to `~/.cursor/mcp.json`.
### First contact: the doctor
Before wiring anything into an MCP host, check your setup from a terminal:
```bash
uvx toyota-mcp doctor
```
It validates credentials, lists your vehicles, and prints which tools your
specific car supports. Exit codes: `0` ok · `2` config · `3` auth ·
`4` no vehicle · `5` API error · `6` command rejected (`probe`).
## Remote access — the "Connect" button
By default the server runs on stdio, next to the MCP client. Point it at a URL
instead and it becomes a remote MCP server with its own OAuth 2.1 authorization
server, so a client connects the way it connects to Gmail or GitHub: paste the
URL, press **Connect**, approve in the browser.
```bash
toyota-mcp --http https://toyota.example.com
```
Nothing else to configure — **connecting is signing in to Toyota**:
1. Paste `https://toyota.example.com/mcp` into your client and press Connect.
2. The client registers itself and sends you to this server's sign-in page.
3. Enter the MyToyota email and password, then pick which vehicle to use when
the account has several.
4. The client gets its token; the server keeps only Toyota's refresh token.
Signing in to the Toyota account *is* the proof that you own the deployment —
there is no shared code and no user database. A server already connected to one
account refuses a sign-in with a different one.
Toyota's own web login ends on a mobile deep link (`com.toyota.oneapp:/…`) that
a browser cannot follow — on a phone it opens the MyToyota app instead — so the
credentials are posted to Toyota by the server you run. They are never written
down: only the refresh token Toyota returns is kept. Accounts with two-factor
authentication cannot be used, as Toyota's vehicle API does not support them.
Run it on a machine of yours (a home server, a Raspberry Pi), behind a
TLS-terminating proxy: the server refuses a non-`https://` public URL other
than localhost, because bearer tokens must not travel in clear. Registered
clients and issued tokens are kept in `~/.local/state/toyota-mcp/oauth.json`
(mode 600) so a restart does not disconnect anyone; access tokens last an hour
and refresh silently.
### With Docker
```bash
docker build -t toyota-mcp --build-arg VERSION=0.3.0 .
docker run -d --name toyota-mcp -v toyota-mcp:/data -p 127.0.0.1:8787:8787 \
toyota-mcp --http https://toyota.example.com --host 0.0.0.0
```
A container has no credential store, so the session and the grants live in
`/data` — keep it as a volume or signing in again is the price of a restart.
`TOYOTA_SESSION_FILE` moves the session file elsewhere.
## Authentication
Nothing has to be configured before the first use. A server with no account
connected still starts and says what to do: over HTTP the Connect flow signs you
in, otherwise `toyota-mcp login` does. `toyota_list_vehicles` and
`toyota_select_vehicle` then choose the car from the conversation.
Toyota has no third-party API programme: there is no developer portal, no
per-application token, and the mobile app signs in with your account password.
This server therefore offers two ways in, and prefers the one where it never
holds that password.
**`toyota-mcp login`.** Asks for the MyToyota email and password, signs in to
Toyota, and keeps only the **refresh token** — in your operating system's
credential store (Keychain, Windows Credential Locker, Secret Service), or in a
file when there is none. The password is never written down, and never lands in
an MCP host's configuration file.
**Password in the environment.** `TOYOTA_USERNAME` and `TOYOTA_PASSWORD` still
work for unattended setups, but most MCP hosts store their `env` block as plain
text on disk, so prefer `toyota-mcp login`.
## Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
| `TOYOTA_USERNAME` | no | — | MyToyota account email — only for the password sign-in |
| `TOYOTA_PASSWORD` | no | — | MyToyota account password — only for the password sign-in |
| `TOYOTA_VIN` | no | — | Pins one vehicle, overriding the choice made at sign-in |
| `TOYOTA_BRAND` | no | `T` | `T` Toyota, `L` Lexus |
| `TOYOTA_USE_METRIC` | no | `true` | `false` switches to miles/gallons |
Features are command-line options, visible in `toyota-mcp --help` and in your
host's `args`:
| Option | Default | Description |
|---|---|---|
| `--read-only` | off | register only the read tools — no lock, trunk, lights, climate or charging commands |
| `--addresses osm\|fr` | off | turn coordinates into addresses: `osm` worldwide (OpenStreetMap), `fr` France (also enables fuel prices). Off by default because it sends the car's position to that service |
| `--places SPEC` | — | named places, `"home=43.6045,1.4440;work=43.6290,1.3630"`: positions within 200 m are labelled |
```json
"toyota": {
"command": "uvx",
"args": ["toyota-mcp", "--addresses", "osm", "--places", "home=43.6045,1.4440"]
}
```
A local `.env` file works too (see `.env.example`). Credentials never touch disk
otherwise; tokens live in memory only.
<a id="available-tools"></a>
## Available tools
Read tools are `readOnlyHint: true`. The remote commands below are registered
unless the server runs with `--read-only`.
| Tool | Example question | Key fields |
|---|---|---|
| `toyota_list_vehicles` / `toyota_select_vehicle` | *Which cars? Use the Yaris.* | every vehicle on the account, and which one the tools act on |
| `toyota_get_vehicle_info` | *What car is this? Is the subscription active?* | model, year, plate, colour, first use, subscriptions, declared remote capabilities |
| `toyota_get_energy` | *How much range is left?* | fuel %, range (km/mi), battery or an explicit "not applicable" note |
| `toyota_get_charging` | *Is it charging? When is the next scheduled charge?* | plug-in battery %, charging status, EV range, time to full, schedules (PHEV / EV only) |
| `toyota_get_status` | *Is the car locked? Did I leave the lights on?* | doors/windows/trunk/hood, lock state, lights, rear-seat reminder, overall status |
| `toyota_get_location` | *Where is the car?* | lat/lon, address (with open data), Google Maps link |
| `toyota_get_odometer` | *How many km on the Lo que la gente pregunta sobre toyota-mcp
¿Qué es zepgram/toyota-mcp?
+
zepgram/toyota-mcp es mcp servers para el ecosistema de Claude AI. Toyota & Lexus MCP server — connect a MyToyota Europe account to Claude and other AI assistants: fuel, range, location, trips, health, climate, charging and remote commands. Tiene 1 estrellas en GitHub y su última actualización registrada es del 2026-09-17.
¿Cómo se instala toyota-mcp?
+
Puedes instalar toyota-mcp clonando el repositorio (https://github.com/zepgram/toyota-mcp) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar zepgram/toyota-mcp?
+
Nuestro agente de seguridad ha analizado zepgram/toyota-mcp y le ha asignado un Trust Score de 95/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene zepgram/toyota-mcp?
+
zepgram/toyota-mcp es mantenido por zepgram. La última actividad registrada en GitHub es del 2026-09-17, con 1 issues abiertos.
¿Hay alternativas a toyota-mcp?
+
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.
Despliega toyota-mcp en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/zepgram-toyota-mcp)<a href="https://claudewave.com/repo/zepgram-toyota-mcp"><img src="https://claudewave.com/api/badge/zepgram-toyota-mcp" alt="Featured on ClaudeWave: zepgram/toyota-mcp" width="320" height="64" /></a>Más MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ
The fastest path to AI-powered full stack observability, even for lean teams.