Tessie MCP Server
# Tessie MCP Server
> Control and monitor your Tesla from any MCP-compatible AI assistant β including Claude, Cursor, and more.
[](LICENSE)
[](https://nodejs.org)
[](https://modelcontextprotocol.io)
An **MCP (Model Context Protocol) server** that bridges AI assistants to the [Tessie API](https://developer.tessie.com), giving you natural-language control of your Tesla vehicle. Ask Claude to check your battery, preheat the cabin, lock the car, or pull charging history β all in plain English.
---
## β¨ Features
- π **Battery & Range** β level, estimated range, voltage, temperature, health/degradation
- π **Location** β GPS coordinates and street address
- π‘οΈ **Climate Control** β start/stop, set temperature, seat heat/cool, defrost, Keep/Dog/Camp mode, Bioweapon Defense
- π **Security** β lock/unlock, Sentry Mode, Valet Mode, Guest Mode, Speed Limit Mode
- β‘ **Charging** β start/stop, set charge limit %, set amps, charge port control
- π **Drive Data** β history with distance, energy & speed; GPS path per trip; drive tags
- π **Charge History** β sessions with cost tracking
- π» **Trunks & Covers** β frunk, rear trunk, Cybertruck tonneau
- πͺ **Windows & Sunroof** β vent or close
- π‘ **Lights & Horn** β flash lights, honk
- π **HomeLink** β trigger garage door opener
- π **Remote Start** β keyless driving (2-minute window)
- π± **Software Updates** β schedule or cancel
- π΄ **Auto-Wake** β commands automatically wake a sleeping vehicle before executing
- π¨ **Fun** β Boombox fart sounds π
---
## β‘ Quick Start
### 1. Get a Tessie Account & API Token
Tessie is the service that provides secure API access to your Tesla.
π **Sign up for Tessie:** [share.tessie.com/v4Gklbe1U0b](https://share.tessie.com/v4Gklbe1U0b)
Once signed in, get your API token at: [dash.tessie.com/settings/api](https://dash.tessie.com/settings/api)
### 2. Install & Build
```bash
git clone https://github.com/akrowczyk/tessie-mcp-server.git
cd tessie-mcp-server
npm install
npm run build
```
---
## π§ Configuration
### Environment Variables
Authentication and preferences are configured entirely via environment variables β no secrets ever touch source code.
| Variable | Required | Description |
|---|---|---|
| `TESSIE_API_TOKEN` | β
Yes | Your Tessie API token |
| `TESSIE_DEFAULT_VIN` | Optional | Default VIN when not specified per-call |
| `TESSIE_DISTANCE_FORMAT` | Optional | `mi` or `km` β applies to all distance tools |
| `TESSIE_TEMP_FORMAT` | Optional | `f` or `c` β applies to all temperature tools |
| `TESSIE_PRESSURE_FORMAT` | Optional | `psi`, `bar`, or `kpa` β applies to tire pressure |
Per-call parameters always override the env var defaults.
---
### Claude Desktop
Add this block to your Claude Desktop config file:
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
- **Linux:** `~/.config/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"tessie": {
"command": "node",
"args": ["/absolute/path/to/tessie-mcp-server/dist/index.js"],
"env": {
"TESSIE_API_TOKEN": "your-tessie-api-token",
"TESSIE_DEFAULT_VIN": "your-17-digit-vin",
"TESSIE_DISTANCE_FORMAT": "mi",
"TESSIE_TEMP_FORMAT": "f",
"TESSIE_PRESSURE_FORMAT": "psi"
}
}
}
}
```
> **Note:** Replace `/absolute/path/to/tessie-mcp-server` with the actual path where you cloned this repo.
After saving, **restart Claude Desktop**.
---
### Claude Code (CLI)
```bash
claude mcp add tessie -- node /absolute/path/to/tessie-mcp-server/dist/index.js
export TESSIE_API_TOKEN="your-tessie-api-token"
export TESSIE_DEFAULT_VIN="your-17-digit-vin"
export TESSIE_DISTANCE_FORMAT="mi"
export TESSIE_TEMP_FORMAT="f"
export TESSIE_PRESSURE_FORMAT="psi"
```
---
### Cursor
Add to `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global):
```json
{
"mcpServers": {
"tessie": {
"command": "node",
"args": ["/absolute/path/to/tessie-mcp-server/dist/index.js"],
"env": {
"TESSIE_API_TOKEN": "your-tessie-api-token",
"TESSIE_DEFAULT_VIN": "your-17-digit-vin",
"TESSIE_DISTANCE_FORMAT": "mi",
"TESSIE_TEMP_FORMAT": "f",
"TESSIE_PRESSURE_FORMAT": "psi"
}
}
}
}
```
---
### Windsurf
Open **Settings β MCP Servers β Add**:
```json
{
"tessie": {
"command": "node",
"args": ["/absolute/path/to/tessie-mcp-server/dist/index.js"],
"env": {
"TESSIE_API_TOKEN": "your-tessie-api-token",
"TESSIE_DEFAULT_VIN": "your-17-digit-vin",
"TESSIE_DISTANCE_FORMAT": "mi",
"TESSIE_TEMP_FORMAT": "f",
"TESSIE_PRESSURE_FORMAT": "psi"
}
}
}
```
---
### Continue.dev
In `~/.continue/config.json`:
```json
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/tessie-mcp-server/dist/index.js"],
"env": {
"TESSIE_API_TOKEN": "your-tessie-api-token",
"TESSIE_DEFAULT_VIN": "your-17-digit-vin",
"TESSIE_DISTANCE_FORMAT": "mi",
"TESSIE_TEMP_FORMAT": "f",
"TESSIE_PRESSURE_FORMAT": "psi"
}
}
}
]
}
}
```
---
## π΄ Auto-Wake
All vehicle commands automatically wake a sleeping vehicle before executing β no need to call `wake_vehicle` manually first.
- If the vehicle is **already awake**, commands execute instantly with zero added latency
- If the vehicle is **asleep**, the server sends a wake command and polls every 3 seconds until the vehicle is awake (up to 90 seconds), then sends your command
- Read-only data tools (`get_battery`, `get_location`, etc.) use cached data by default and do **not** wake the vehicle
---
## π‘ MCP Resources
In addition to tools, this server exposes vehicle data as **MCP Resources** β structured data that AI clients can read as contextual documents:
| URI | Description |
|---|---|
| `tessie://vehicles` | Fleet overview β all vehicles on the account |
| `tessie://{vin}/state` | Full live vehicle state (charge, climate, drive, config) |
| `tessie://{vin}/status` | Current awake/asleep status |
Resources are accessible in Claude Desktop and other MCP clients that support the resources protocol.
---
## π οΈ Available Tools
### Vehicle Data
| Tool | Description |
|------|-------------|
| `get_vehicles` | List all vehicles on the account |
| `get_vehicle_state` | Full state β drive, charge, climate, config |
| `get_vehicle_status` | Check if vehicle is awake/asleep |
| `get_full_status` | **Combined** battery + location + state in one call |
| `get_battery` | Battery level, range, voltage, temperature |
| `get_battery_health` | Battery degradation over time |
| `get_location` | GPS coordinates and street address |
| `get_weather` | Weather at the vehicle's current location |
| `get_tire_pressure` | All four tire pressures |
| `get_consumption_since_charge` | Energy usage since last charge |
| `get_firmware_alerts` | Vehicle firmware alerts |
### Drives & Charges
| Tool | Description |
|------|-------------|
| `get_drives` | Drive history with distance, energy, speed |
| `get_drive_path` | GPS path for drives |
| `set_drive_tag` | Tag drives as business/personal |
| `get_charges` | Charging session history |
| `set_charge_cost` | Set cost for a charge session |
| `get_idles` | Idle periods (parked, not charging) |
### Commands *(all auto-wake)*
| Tool | Description |
|------|-------------|
| `wake_vehicle` | Explicitly wake from sleep |
| `lock` / `unlock` | Door locks |
| `open_front_trunk` / `open_rear_trunk` | Trunk controls |
| `vent_windows` / `close_windows` | Window controls |
| `vent_sunroof` / `close_sunroof` | Sunroof controls |
| `open_tonneau` / `close_tonneau` | Cybertruck tonneau cover |
| `flash_lights` / `honk` | Lights and horn |
| `trigger_homelink` | Garage door opener |
| `remote_start` | Keyless driving (2-min window) |
| `boombox` | External speaker fart sound π |
### Climate *(all auto-wake)*
| Tool | Description |
|------|-------------|
| `start_climate` / `stop_climate` | Climate system |
| `set_temperatures` | Set cabin temp (15β28Β°C) |
| `set_seat_heat` / `set_seat_cool` | Seat heating/cooling (0β3) |
| `start_defrost` / `stop_defrost` | Max defrost mode |
| `start_steering_wheel_heater` / `stop_steering_wheel_heater` | Steering wheel heater |
| `set_cabin_overheat_protection` | Cabin Overheat Protection |
| `set_climate_keeper_mode` | Keep / Dog / Camp mode |
| `set_bioweapon_mode` | Bioweapon Defense Mode |
### Charging *(all auto-wake)*
| Tool | Description |
|------|-------------|
| `start_charging` / `stop_charging` | Start/stop charging |
| `set_charge_limit` | Set charge limit (50β100%) |
| `set_charging_amps` | Set charging amperage |
| `open_charge_port` / `close_charge_port` | Charge port door |
### Modes *(all auto-wake)*
| Tool | Description |
|------|-------------|
| `enable_sentry_mode` / `disable_sentry_mode` | Sentry Mode |
| `enable_valet_mode` / `disable_valet_mode` | Valet Mode |
| `enable_guest_mode` / `disable_guest_mode` | Guest Mode |
| `enable_speed_limit` / `disable_speed_limit` | Speed Limit Mode |
### Software *(all auto-wake)*
| Tool | Description |
|------|-------------|
| `schedule_software_update` | Schedule a software update |
| `cancel_software_update` | Cancel a scheduled update |
---
## π¬ Example Prompts
Once configured, try asking your AI assistant:
- *"How is my Tesla doing right now?"* β uses `get_full_status`
- *"What's my battery level and estimated range?"*
- *"Where is my car parked right now?"*
- *"Start the climate and set it to 72Β°F"* (auto-wakes if needed)
- *"Lock the car and turn on Sentry Mode"* (auto-wakes if needed)
- *"Show me my drives from this week"*
- *"Open the frunk"*
- *"What's the tire pressure on all four tires?"*
- *"Set my charge limit to 80%"*
- *"Tag all my drives this month as business"*
---
## π Security Notes
- Your **Tessie API token** is passed as an environment variable β **never** stored in code or config files
- The `.gitignore` in this repo explicitly excludes `.env` files
- If your token has been exposed, rotate it immediately at [dash.tessie.com/settings/api](https://dash.tessie.com/settings/api)
- All vehicle commands are authenticated with your personal token β only you can control your vehicle
---
## π οΈ Development
```bash
npm install # Install dependencies
npm run build # Compile TypeScript
npm run dev # Watch mode (auto-rebuild on changes)
npm start # Run the compiled server
```
**Requirements:** Node.js 18+
---
## π Referrals & Links
If this project is useful to you, consider using these referral links:
- **Tessie** β The vehicle API that powers this server. Sign up here: [share.tessie.com/v4Gklbe1U0b](https://share.tessie.com/v4Gklbe1U0b)
- **Buying a Tesla?** Use my referral code for exclusive deals and rewards: [ts.la/andrew80231](https://ts.la/andrew80231)
---
## π License
[MIT](LICENSE) Β© 2026 Andrew Krowczyk
TDQS
Scored across 61 tools
Most tools have clear, distinct purposes, but get_vehicle_state, get_vehicle_status, and get_full_status overlap in scope, which could confuse an agent. The many enable/disable pairs are otherwise unambiguous.
Tool names follow a consistent verb_noun snake_case pattern (get_*, set_*, start_*, stop_*, enable_*, disable_*). Exceptions like 'boombox' and 'remote_start' are minor and do not disrupt the overall pattern.
At 61 tools, the set is excessively large. Many enable/disable pairs (e.g., enable_sentry_mode/disable_sentry_mode) could be consolidated into single set_* commands with boolean parameters, reducing bloat without losing functionality.
The tool surface is remarkably complete for a Tesla management server, covering state retrieval, climate, charging, security, historical drive/charge data, software updates, and comfort features. No major operational gaps are apparent.