Tesla MCP Server
by scald
# Tesla MCP Server
A Model Context Protocol (MCP) server that connects to the Tesla Fleet API, allowing you to control your Tesla vehicle using Claude and other AI assistants that support MCP.
<a href="https://glama.ai/mcp/servers/t0ako8h64j">
<img width="380" height="200" src="https://glama.ai/mcp/servers/t0ako8h64j/badge" alt="Tesla Server MCP server" />
</a>
## Features
- **Wake up vehicles**: Wake up your Tesla from sleep mode
- **Vehicle information**: Get detailed information about your Tesla vehicles
- **Real-time updates**: Refresh vehicle data on demand
- **Debugging tools**: Access detailed vehicle information to help with troubleshooting
## Requirements
- Node.js 18+
- pnpm (preferred) or npm
- Tesla account with at least one vehicle
- Tesla API credentials (Client ID and Client Secret)
- Ngrok (for development and registration)
## Security Best Practices
This project handles sensitive Tesla API credentials. Please follow these security practices:
- **Never commit credentials**: The `.gitignore` file excludes `.env` and `keys/` but always double-check
- **Use the security checker**: Run `./check-secrets.sh` before committing to detect potentially leaked credentials
- **Protect your private keys**: Keep the contents of the `keys/` directory secure
- **Review code before sharing**: Make sure no credentials are hardcoded in any source files
When forking or sharing this project:
1. Make sure the `.env` file is not included
2. Check that no private keys are committed
3. Verify the `.gitignore` file is properly set up
## Quick Start
1. **Clone the repository**
```bash
git clone https://github.com/yourusername/tesla-mcp.git
cd tesla-mcp
```
2. **Install dependencies**
```bash
pnpm install
```
3. **Set up environment variables**
Create a `.env` file in the root directory:
```
TESLA_CLIENT_ID=your_client_id
TESLA_CLIENT_SECRET=your_client_secret
TESLA_REFRESH_TOKEN=your_refresh_token
```
4. **Get a refresh token** (if you don't have one)
```bash
pnpm get-token
```
5. **Register your application** with Tesla's API
```bash
pnpm register
```
Follow the instructions provided by the script
6. **Build the server**
```bash
pnpm build
```
7. **Run the server**
```bash
pnpm start
```
## Authentication & Registration
This project uses the official Tesla Fleet API OAuth 2.0 authentication flow to securely connect to your Tesla account. The full process involves two steps:
1. **Authentication**: Obtaining a refresh token through the OAuth 2.0 flow
2. **Registration**: Registering your application with Tesla via the Partner Accounts API
### Authentication
Authentication requires:
- Client ID and Client Secret from the [Tesla Developer Portal](https://developer.tesla.com/)
- A refresh token obtained through the OAuth 2.0 authorization code flow
The included `pnpm get-token` utility simplifies this process by:
- Opening a browser for you to log in with your Tesla account credentials
- Performing the OAuth PKCE (Proof Key for Code Exchange) flow
- Exchanging the authorization code for refresh and access tokens
- Storing the refresh token in your `.env` file
### Registration
The Tesla Fleet API requires applications to be registered before they can access vehicle data. The registration server (`pnpm register`) automates this process:
- Generates the required EC key pair
- Uses ngrok to create a temporary public URL for development
- Hosts the public key at the required path
- Handles the registration API call with Tesla
#### Ngrok Setup (Required for Registration)
1. Install ngrok from [ngrok.com/download](https://ngrok.com/download)
2. Create a free account at [ngrok.com](https://ngrok.com/)
3. Get your auth token from the [ngrok dashboard](https://dashboard.ngrok.com/get-started/your-authtoken)
4. Authenticate ngrok:
```bash
ngrok authtoken YOUR_AUTH_TOKEN
```
## Available MCP Tools
The server provides the following tools that Claude can use:
- **`wake_up`**: Wakes up a Tesla vehicle from sleep mode
- Takes `vehicle_id` as a required parameter
- Returns the current state of the vehicle
- **`refresh_vehicles`**: Refreshes the list of Tesla vehicles
- No parameters required
- Updates the internal cache of vehicles
- **`debug_vehicles`**: Shows detailed information about available vehicles
- No parameters required
- Returns ID, vehicle_id, VIN, and state information
## Setting Up Claude to Use the MCP Server
1. Create the Claude configuration directory:
```bash
mkdir -p ~/Library/Application\ Support/Claude
```
2. Create or edit the configuration file:
```bash
nano ~/Library/Application\ Support/Claude/claude_desktop_config.json
```
3. Add the following configuration (adjust the path as needed):
```json
{
"mcpServers": {
"tesla-mcp-server": {
"command": "/absolute/path/to/tesla-mcp/run-mcp.js"
}
}
}
```
4. Make the run-mcp.js script executable:
```bash
chmod +x run-mcp.js
```
5. Restart Claude completely
## Using the MCP Server with Claude
Once the server is running and Claude is configured, you can ask Claude to:
- "What Tesla vehicles do I have?"
- "Can you wake up my Tesla?"
- "Show me debug information about my Tesla vehicles"
## Troubleshooting
If you encounter issues:
### Environment Variables
- Ensure your `.env` file contains valid credentials
- Run `pnpm get-token` to refresh your token if needed
### Server Connection
- Check that the server is running (`pnpm start`)
- Verify Claude's configuration points to the correct file path
### Vehicle Connectivity
- Vehicle might be offline or asleep
- Try waking up the vehicle first with the `wake_up` command
### Debug Mode
- Use the `debug_vehicles` command to get detailed information about your vehicles
- Check the server logs in the terminal where you're running the MCP server
## Command Line Tools
The server includes several helpful scripts:
- `pnpm build`: Compile the TypeScript code
- `pnpm start`: Run the server using the run-mcp.js script
- `pnpm register`: Register your app with Tesla's API
- `pnpm get-token`: Get a refresh token from Tesla
- `pnpm test-api`: Test your connection to the Tesla API
- `pnpm inspector`: Run the server with the MCP Inspector for debugging
## API Limitations
As of 2023-10-09, Tesla has deprecated many vehicle command endpoints in their REST API. Commands like honking the horn now require the [Tesla Vehicle Command Protocol](https://github.com/teslamotors/vehicle-command) instead of the REST API. This MCP server currently supports only REST API endpoints that remain functional.
## Future Enhancements
Possible future improvements include:
- Integration with Tesla's Vehicle Command Protocol for additional commands
- Support for more vehicle information endpoints
- User interface for configuration and monitoring
## License
[MIT License](LICENSE)