特斯拉车辆控制服务器

一个基于Model Context Protocol (MCP)的服务器,用于通过Tesla Fleet API控制和获取车辆数据(如位置、唤醒、车辆列表等),支持通过任何MCP兼容的AI助手或代理进行操作。

  • by Sara3
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 Sara3/Tesla-MCP

使用说明

特斯拉MCP服务器

A. 模型上下文协议 (MCP)服务器,用于特斯拉车队API。控制你的特斯拉,从任何支持MCP的人工智能助手或代理那里获取车辆数据(位置、唤醒、列出汽车)。

特性

  • list_cars --列出您的车辆并获取ID,以便与其他工具一起使用
  • get_vehicle_location --当前GPS位置和谷歌地图链接(停车监控风格)
  • 唤醒 --将车辆从睡眠中唤醒
  • 冷藏车 / debug_vehicles --刷新列表和调试信息
  • HTTP/SSE模式 --主机即web服务;每个用户都带来自己的Tesla Developer凭据(不需要服务器端机密)
  • 接收和回复文本(可选) --配置Twilio后,通过webhook接收入站短信并使用 get_recent_texts / send_text 因此,代理可以读取和回复消息

安全

  • 我们永远不会看到或存储您的特斯拉密码。 登录是通过浏览器中的特斯拉OAuth进行的。
  • HTTP模式: 凭证和令牌仅存储在每个会话的内存中;未写入磁盘。
  • 日志中没有敏感数据 -我们不记录令牌、完整会话ID或API响应主体。
  • 在您做出承诺之前: 跑 ./check-secrets.sh 捕捉意外的硬编码秘密。

看 安全.md 了解详细信息以及如何报告问题。


快速入门(托管——推荐)

无需在本地运行任何东西即可使用服务器。每个用户都使用自己的特斯拉帐户进行连接。

1.在MCP客户端中添加服务器

  • 服务器URL: https://tesla-mcp.onrender.com/sse
    (或使用您自己部署的URL;请参阅 部署 在......下面)

2.第一次:连接你的特斯拉

  1. 使用工具(例如。 get_setup_url)--代理将返回一个链接。
  2. 打开链接并输入您的 特斯拉开发者 客户端ID和客户端密码。
  3. 重定向时使用您的特斯拉帐户登录。
  4. 在 成功页面,复制 连接URL (例如。 https://.../sse?token=...). 将该URL用作MCP服务器URL 在您的客户端中,因此重新连接会让您保持登录状态。保持私密。
  5. 如果您不添加该URL,您的客户端可能会在每次重新连接时获得一个新会话,并要求您重新设置。

获取特斯拉开发者证书: 在以下位置创建应用程序 developer.tesla.com。将重定向URI设置为 https://YOUR_SERVER_URL/auth/callback (例如。 https://tesla-mcp.onrender.com/auth/callback).

提供: 集 实例计数为1 (仪表板→ 您的服务→ 设置),这样所有请求都会到达同一台服务器,您的会话不会丢失。


快速入门(本地)

选项A:HTTP服务器(多用户、浏览器身份验证)

git clone https://github.com/Sara3/Tesla-MCP.git
cd Tesla-MCP
npm install
npm run build
npm run start:http
  • 打开 http://localhost:3000 并按照设置链接添加您的特斯拉开发者凭据并登录。
  • 在MCP客户端中,使用服务器URL: http://localhost:3000/sse (对于生产环境,请使用HTTPS并设置 BASE_URL).

选项B:Stdio(仅限单用户.env)

对于具有凭据的单个用户 .env:

# .env
TESLA_CLIENT_ID=...
TESLA_CLIENT_SECRET=...
TESLA_REFRESH_TOKEN=...
npm run build
npm start

配置MCP客户端以运行服务器命令(例如。 node run-mcp.js).获取刷新令牌 npm run get-token.


环境变量

变量 必填 描述
HTTP模式
BASE_URL 是(生产) 服务器的公共HTTPS URL(例如。 https://tesla-mcp.onrender.com)
TESLA_CLIENT_ID 可选 如果设置为 TESLA_CLIENT_SECRET,用户去 直接进入特斯拉登录页面 (无设置页面)
TESLA_CLIENT_SECRET 可选 服务器Tesla应用程序机密;与...一起使用 TESLA_CLIENT_ID
PORT 否 端口(默认 3000)
HOST 否 绑定地址(默认 0.0.0.0)
标准模式
TESLA_CLIENT_ID 是 来自 developer.tesla.com
TESLA_CLIENT_SECRET 是 来自开发者门户
TESLA_REFRESH_TOKEN 是 来自 npm run get-token
短信(Twilio,仅限HTTP模式)
TWILIO_ACCOUNT_SID 可选 Twilio帐户SID(启用get_cent_texts/send_text)
TWILIO_AUTH_TOKEN 可选 Twilio身份验证令牌
TWILIO_PHONE_NUMBER 可选 您的Twilio电话号码(E.164,例如+15551234567)

短信设置: 在Twilio控制台中,将您的电话号码的“A message comes In”webhook设置为 https://YOUR_BASE_URL/webhooks/twilio/sms (例如。 https://tesla-mcp.onrender.com/webhooks/twilio/sms).入站消息存储在内存中,并由返回 get_recent_texts;使用 send_text 回答。

永不承诺 .env 或 keys/.快跑 ./check-secrets.sh 在推之前。


工具(MCP)

工具 说明
get_setup_url 获取设置Tesla Developer凭据的URL
get_auth_url 获取连接您的特斯拉帐户的URL(设置后)
列表_车辆 列出车辆及其ID(与其他工具一起使用)
get_vehicle_location 当前位置(纬度/经度+谷歌地图链接);拿 vehicle_id
唤醒 唤醒车辆;拿 vehicle_id
冷藏车 从API刷新车辆列表
debug_vehicles 调试信息(ID、VIN、状态)
get_recent_texts 列出最近的入站短信(可选;需要Twilio env变量)
send_text 向号码发送短信(可选;需要Twilio;args: to, body)

对于 车辆id 您可以使用 id, vehicle_id,或 vin 从 list_cars.为 send_text,使用E.164电话号码(例如。 +15551234567).


部署

渲染

  1. 将您的GitHub仓库连接到 render.com → New → Web服务。
  2. 构建命令: npm install && npm run build
    启动命令: npm run start:http
  3. 添加环境变量: BASE_URL = https://YOUR-SERVICE.onrender.com
  4. 用户将特斯拉应用程序重定向URI设置为 https://YOUR-SERVICE.onrender.com/auth/callback.

码头工人

docker build -t tesla-mcp .
docker run -p 3000:3000 -e BASE_URL=https://your-domain.com tesla-mcp

生产: 使用HTTPS并设置 BASE_URL 到您的公共URL。在渲染时,设置 实例计数为1 因此,会议得以持续。看 安全.md.


故障排除

会话不断重置/设置不断询问

  1. 确认凭据已保存 --提交设置表单后,您应该看到一个绿色的 “凭据已成功保存” 消息。如果您看到这一点,则表示您的客户端ID和密码已为该会话保存。
  2. 如果安装程序一直出现,仔细检查你的 特斯拉开发者应用:
    • 客户端ID 和 客户端密钥 正确(从应用程序页面复制)。
    • 重定向URI 已设置 确切地 指向服务器的回调URL,例如:
      • 提供: https://tesla-mcp.onrender.com/auth/callback
      • 当地: http://localhost:3000/auth/callback 任何拼写错误或额外的斜线都会导致特斯拉拒绝身份验证,会话将不会持续。

“验证您的帐户”旋转器从不停止

特斯拉应该把你重定向回这个应用程序;如果微调器从未完成,则重定向可能失败。检查你的特斯拉应用程序 重定向URI 正是 https://tesla-mcp.onrender.com/auth/callback (或你的 BASE_URL + /auth/callback).试试a 正常浏览器窗口 禁用扩展,因此没有任何东西阻止重定向。

会话“未保存”为匿名/必须重新登录

会话存储在 服务器,不在浏览器中。Incognito不会保留Cookie,但我们不会在您的会话中使用Cookie——我们使用 连接URL 与令牌。登录后,您必须 复制连接URL (例如。 https://.../sse?token=...)从 成功页面 并将该URL用作MCP服务器URL /sse 没有令牌的URL,每个新连接都会获得一个新会话,系统会要求您重新设置或登录。

特斯拉登录页面显示错误或无法加载(CSP、“内联脚本”、指纹等)

这些错误来自 特斯拉的 登录网站(auth.tesla.com),而不是来自此服务器。浏览器或扩展程序(例如广告拦截器、光标或其他注入器)可以阻止特斯拉页面上的脚本并中断登录。

  • 在私人/匿名窗口尝试 禁用扩展。
  • 尝试其他浏览器 或者没有扩展的干净轮廓。
  • 暂时允许 auth.tesla.com 在你的广告/跟踪拦截器中,这样特斯拉的脚本(和reCAPTCHA)就可以加载了。

脚本

命令 描述
npm run build 构建TypeScript
npm run start 运行stdio MCP服务器
npm run start:http 运行HTTP/SSE服务器
npm run dev:http 运行HTTP服务器(dev,带ts节点)
npm run get-token 获取特斯拉刷新令牌(本地浏览器流)
npm run test-api 测试特斯拉API连接
npm run register 在特斯拉注册应用程序(使用ngrok)
./check-secrets.sh 检查代码中的意外秘密

许可证

麻省理工学院