关于 Toyota & Lexus
面向 MyToyota 和 MyLexus 欧洲账户的 MCP 服务,可向 AI 客户端提供车辆数据和远程控制。支持行程、车况、能源与空调信息,并可选择只读模式或通过 stdio、HTTP 运行。
主要功能
- 01车辆能源、状态与位置
- 02行程记录和能耗汇总
- 03车况与空调信息
- 04远程锁车、空调和充电
- 05只读模式与 HTTP 接入
适用场景
- 01查看剩余燃油、电量或续航
- 02回顾近期行程和纯电占比
- 03查找车辆或检查车辆状态
- 04预热车辆或开始充电
MCP 相关
向 MCP 客户端提供车辆数据工具、远程命令和提示词。支持 stdio,也可作为带 OAuth 2.1 的远程 HTTP 服务运行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx toyota-mcpTOYOTA_USERNAMEMyToyota account email — only for the headless password sign-in; prefer `toyota-mcp login`TOYOTA_PASSWORD密钥MyToyota account password — only for the headless password sign-in; prefer `toyota-mcp login`TOYOTA_VINVIN selector when several vehicles share the accountTOYOTA_BRANDT for Toyota (default), L for LexusTOYOTA_USE_METRICtrue (default) for km/L, false for miles/gallons本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
26收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
toyota-mcp — 面向 Claude 和其他 AI 助手的 Toyota 和 Lexus MCP 服务
随时询问你的 Toyota。 toyota-mcp 是一个 Model Context Protocol
(MCP)服务,可将 MyToyota 或 MyLexus 欧洲账户连接到 Claude、
Claude Code、Cursor、VS Code 或任何 MCP 客户端,让你用通俗语言查看汽车的燃油量、
续航里程、位置、行程和车况,并发送远程指令(锁车、空调、充电)。
“还剩多少续航里程?” · “车在哪里?” · “车锁好了吗?” · “上次行程消耗了多少?” · “我这个月的电动车占比是多少?” · “早上 8 点预热汽车。” · “车附近哪里有最便宜的汽油?”
| 车辆 | Toyota 和 Lexus,仅限欧洲(Toyota Connected Services / ctpa-oneapi) |
| 动力系统 | 汽油、柴油、全混合动力、插电式混合动力、纯电动 |
| 工具 | 13 项读取工具 + 11 项远程指令 + 1 个提示词(完整列表) |
| 安装 | uvx toyota-mcp — 无需克隆,无需构建 |
| 要求 | MyToyota/MyLexus 账户不得启用 MFA,Python 3.11+ |
| 构建基础 | pytoyoda,面向 Toyota 欧洲的社区客户端 |
要求
- MyToyota Europe 账户(API 仅覆盖欧洲——北美和日本使用完全不同的系统)。
- 使用
toyota-mcp login登录,或在环境中提供账户凭据(这种方式无法处理 MFA/2FA)。 - 车辆必须显示在 MyToyota 移动应用中。
- Python 3.11+ 和
uv,用于零安装的uvx启动器 (uvx会自行获取合适的 Python)。
非官方 API。 Toyota 随时可能更改或中断此 API,恕不另行通知。所有 API 访问 都通过 pytoyoda 隔离;过去遇到此类中断时,它通常能在几天内完成适配。
快速入门
登录一次
uvx toyota-mcp login
浏览器会打开 Toyota 官方登录页面。随后 Toyota 会将浏览器重定向到一个浏览器无法打开的
地址(com.toyota.oneapp:/…),并显示错误——这是预期情况:请从地址栏复制该地址,
然后粘贴回去。会话将保存在操作系统的凭据存储中,并自动刷新。此程序不会接触你的
密码,也不会将其写入配置文件。 uvx toyota-mcp logout 可清除保存的凭据。
Claude Desktop
添加到 claude_desktop_config.json(macOS:
~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"toyota": {
"command": "uvx",
"args": ["toyota-mcp"]
}
}
}
在 args 中的 toyota-mcp 后添加选项——例如,用于邮寄地址的
["toyota-mcp", "--addresses", "osm"],或用于禁用所有远程指令的
["toyota-mcp", "--read-only"]。
Claude Code
claude mcp add --transport stdio toyota -- uvx toyota-mcp
Cursor、VS Code 和其他 MCP 客户端
任何支持 stdio 的客户端都可使用相同配置——命令为 uvx,
参数为 ["toyota-mcp"]。在 VS Code 中,将其添加到 .vscode/mcp.json;在 Cursor 中,
添加到 ~/.cursor/mcp.json。
首次连接:doctor
在将任何内容接入 MCP 宿主之前,请先在终端检查配置:
uvx toyota-mcp doctor
此命令会验证凭据、列出你的车辆,并显示你的具体车型支持哪些工具。退出代码:0 正常 · 2 配置错误 · 3 身份验证错误 ·
4 无车辆 · 5 API 错误 · 6 指令被拒绝(probe)。
远程访问 — “Connect” 按钮
默认情况下,服务与 MCP 客户端一起通过 stdio 运行。将其指向一个 URL,它就会变成一个拥有独立 OAuth 2.1 授权服务器的远程 MCP 服务,客户端的连接方式与连接 Gmail 或 GitHub 相同:粘贴 URL,按下 Connect,然后在浏览器中批准。
toyota-mcp --http https://toyota.example.com
无需进行其他配置 — 连接即是登录 Toyota:
- 将
https://toyota.example.com/mcp粘贴到客户端中,然后按下 Connect。 - 客户端会注册自身,并将你带到此服务的登录页面。
- 输入 MyToyota 邮箱和密码;如果账户下有多辆车,再选择要使用的车辆。
- 客户端会获取令牌;服务只保留 Toyota 的刷新令牌。
登录 Toyota 账户就是你拥有此部署的证明 — 不需要共享代码,也没有用户数据库。已经连接到一个账户的服务会拒绝使用其他账户登录。
Toyota 自己的网页登录会跳转到移动设备深层链接(com.toyota.oneapp:/…),浏览器无法打开该链接 — 在手机上,它会改为打开 MyToyota 应用 — 因此,登录凭据由你运行的服务发送给 Toyota。凭据绝不会被写入:服务只保留 Toyota 返回的刷新令牌。无法使用启用了双重身份验证的账户,因为 Toyota 的车辆 API 不支持双重身份验证。
在你自己的设备(家用服务器、Raspberry Pi)上运行,并置于终止 TLS 的代理之后:服务会拒绝非 https:// 的公开 URL(localhost 除外),因为承载令牌不得以明文传输。已注册的客户端和已签发的令牌保存在 ~/.local/state/toyota-mcp/oauth.json(权限为 600)中,因此重启不会导致任何人断开连接;访问令牌有效期为一小时,并会静默刷新。
使用 Docker
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
容器没有凭据存储,因此会话和授权都保存在 /data 中 — 请将其保留为卷,否则重启后就得重新登录。TOYOTA_SESSION_FILE 可将会话文件移至其他位置。
身份验证
首次使用前无需进行任何配置。尚未连接任何账户的服务仍会启动并告知你该怎么做:通过 HTTP 时,Connect 流程会为你登录;否则,可使用 toyota-mcp login。随后,toyota_list_vehicles 和 toyota_select_vehicle 会在对话中选择车辆。
Toyota 没有面向第三方的 API 计划:没有开发者门户,也没有应用专用令牌,而且移动应用使用你的账户密码登录。因此,此服务提供两种登录方式,并优先选择不会持有该密码的方式。
toyota-mcp login。 提示输入 MyToyota 邮箱和密码,登录 Toyota,并只保留刷新令牌 — 存储在操作系统的凭据存储中(Keychain、Windows Credential Locker、Secret Service),没有凭据存储时则保存在文件中。密码绝不会被写入,也不会出现在 MCP 宿主的配置文件中。
在环境变量中设置密码。 TOYOTA_USERNAME 和 TOYOTA_PASSWORD 仍可用于无人值守配置,但大多数 MCP 宿主会将其 env 块以纯文本形式存储在磁盘上,因此建议优先使用 toyota-mcp login。
配置
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
TOYOTA_USERNAME | 否 | — | MyToyota 账户邮箱——仅用于密码登录 |
TOYOTA_PASSWORD | 否 | — | MyToyota 账户密码——仅用于密码登录 |
TOYOTA_VIN | 否 | — | 固定一辆车,覆盖登录时的选择 |
TOYOTA_BRAND | 否 | T | T 表示 Toyota,L 表示 Lexus |
TOYOTA_USE_METRIC | 否 | true | false 切换为英里/加仑 |
功能通过命令行选项启用,可在 toyota-mcp --help 和主机的
args 中查看:
| 选项 | 默认值 | 说明 |
|---|---|---|
--read-only | 关闭 | 仅注册读取工具——不包含锁车、后备箱、灯光、空调或充电命令 |
--addresses osm|fr | 关闭 | 将坐标转换为地址:osm 适用于全球(OpenStreetMap),fr 适用于法国(也会启用燃油价格)。默认关闭,因为这会将车辆位置发送给该服务 |
--places SPEC | — | 命名地点,"home=43.6045,1.4440;work=43.6290,1.3630":200 米内的位置会显示相应标签 |
"toyota": {
"command": "uvx",
"args": ["toyota-mcp", "--addresses", "osm", "--places", "home=43.6045,1.4440"]
}
也可以使用本地 .env 文件(参见 .env.example)。凭据不会以其他方式写入磁盘;
令牌仅保存在内存中。
可用工具
读取工具的 readOnlyHint: true。除非服务以 --read-only 运行,
否则会注册以下远程命令。
| 工具 | 示例问题 | 关键字段 |
|---|---|---|
toyota_list_vehicles / toyota_select_vehicle | 有哪些车?使用 Yaris。 | 账户中的所有车辆,以及工具操作的车辆 |
toyota_get_vehicle_info | 这是什么车?订阅是否有效? | 车型、年份、车牌、颜色、首次使用时间、订阅、声明的远程功能 |
toyota_get_energy | 还剩多少续航? | 燃油百分比、续航(km/mi)、电池信息或明确的“不适用”说明 |
toyota_get_charging | 正在充电吗?下次计划充电是什么时候? | 插电式电池百分比、充电状态、EV 续航、充满所需时间、计划(仅 PHEV / EV) |
toyota_get_status | 车锁好了吗?我有没有忘记关灯? | 车门/车窗/后备箱/引擎盖、锁止状态、灯光、后排座椅提醒、总体状态 |
toyota_get_location | 车在哪里? | 纬度/经度、地址(使用开放数据)、Google 地图链接 |
toyota_get_odometer | 里程表上有多少公里? | 带单位的里程表读数 |
toyota_get_last_trip | 上次行程消耗了多少? | 距离、时长、能耗、EV 占比、混动模式占比、起点/终点位置 |
toyota_get_trips | 这周的行程有哪些? | 单次行程,按时间从新到旧排列(≤ 92 天前) |
toyota_get_trip_summary | 过去 7 天的平均能耗是多少?本月的 EV 占比是多少? | 滚动时间窗口或日历周期(today、this_week、this_month、this_year)、重新计算的 L/100km、EV 行驶距离和时间占比 |
toyota_get_health | 车上有警报吗?上次保养是什么时候? | 警告灯、机油指示、通知、完整保养记录 |
toyota_get_climate | 预热正在运行吗?预设是什么? | 远程空调状态、目标温度、预设(持续时间、除霜器、加热座椅) |
toyota_find_fuel_stations | 车附近最便宜的加油站在哪里? | 车附近某种燃油价格最低的加油站(法国,开放数据) |
toyota_refresh_data | 我刚停车——刷新。 | 限定范围的云端重新获取(绝不会唤醒车辆) |
远程命令
默认注册;使用 --read-only 启动可将其排除:
| 工具 | 效果 | 注释 |
|---|---|---|
toyota_lock_doors / toyota_unlock_doors | 锁定 / 解锁车门 | 可逆 / 有破坏性 |
toyota_lock_trunk / toyota_unlock_trunk | 仅锁定 / 解锁后备箱 | 可逆 / 有破坏性 |
toyota_find_car | 短暂闪烁危险警告灯(静音) | 可逆 |
toyota_sound_horn | 短促鸣笛 | 可逆 |
toyota_close_windows | 关闭电动车窗(因车型而异) | 可逆 |
toyota_start_climate | 使用已保存的预设(或指定温度,15–30 °C,步进为 0.5)开始预先调节车内温度——混合动力车型会启动发动机 | 有破坏性 |
toyota_charge_now | 立即开始充电(插电式混合动力 / 电动汽车,且已接入电源) | 可逆 |
toyota_stop_climate | 停止预先调节车内温度 | 可逆 |
toyota_wake_vehicle | 请求车辆立即报告状态(会消耗少量 12 V 电池电量) | 可逆 |
并非每辆车都接受每条命令:Toyota 会回复“vehicle not supported”(不支持此车辆)或“unknown command”(未知命令),工具会据此告知——不会向车辆发送任何内容。有关目前观察到的术语,请参阅 docs/architecture.md。
安全模型:
- 每条命令都需要
confirm参数。confirm=false(默认值)会返回预览,不会发送任何内容;Agent 会收到指示:先预览,征得用户同意后,再使用confirm=true调用。 - MCP 主机仍会对非只读工具应用自己的权限提示。
- 会检查 Toyota 的确认信息:如果 Toyota 拒绝命令(返回码不是
000000),命令会以failed状态返回,且不会轮询。 - 结果会经过验证:发送命令后,服务会请求车辆报告状态(与 MyToyota 应用发出的唤醒请求相同),并轮询报告的状态,最长等待 40 s。
verified表示车辆报告了新状态或一份新的状态报告;accepted表示 Toyota 已接收命令,但尚未报告状态变化——请在一分钟后再次检查;toyota_get_health会显示 Toyota 发送的相关消息(例如车辆正在行驶)。 - 命令频率限制为每 10 s 一次。
提示词
vehicle_briefing(可选的 language 参数)会请求模型根据上述工具生成简短的状态简报,内容包括续航、车门和车灯、位置、最近一次行程、警报,以及油箱油量较低时最便宜的燃油价格。
地址和燃油价格(可选)
--addresses 会将停放位置的坐标以及行程起点 / 终点的坐标转换为地址——无需账户或密钥:
| 选项 | 地址 | 燃油价格 |
|---|---|---|
| (默认) | — | — |
osm | 全球范围,使用 OpenStreetMap Nominatim(根据其使用政策限制为每秒 1 次请求,并缓存结果) | — |
fr | 法国,国家地址数据库(api-adresse.data.gouv.fr) | toyota_find_fuel_stations,价格由加油站自行上报至 data.economie.gouv.fr |
启用此选项会将车辆坐标发送至该服务;否则不会向任何地方发送坐标。地址查询失败时会安全回退(答案中只是不包含地址)。
面向 AI Agent
如果你是 AI 助手,正在阅读本文以决定是否使用此服务,以及如何使用,以下是你需要了解的信息:
它是什么。 一个通过 stdio 暴露一辆欧洲地区 MyToyota/MyLexus 车辆的 MCP 服务。
每个工具都会返回符合其输出架构的 structuredContent。
如何选择工具。 对任何动力系统的燃油量和续航里程,使用 toyota_get_energy;
toyota_get_charging 仅适用于插电式混合动力车和 EV(其他车辆使用时会明确报错,指出「不适用」)。对于车门、车窗、车锁和车灯,使用 toyota_get_status;对于警告灯、机油指示灯、通知和保养历史,使用 toyota_get_health。toyota_get_trips 会列出单次行程,toyota_get_trip_summary 会汇总一段时间或一个日历周期的数据——计算平均值时优先使用汇总工具,并传入 period,以匹配 MyToyota 应用中显示的数据。
默认情况下,数据不是实时的。 汽车会在熄火时上传遥测数据,并在停车时上传位置信息,因此每个响应都包含一个 freshness 区块:fetched_at、age_seconds、source(live / cache / stale_cache),以及 Toyota 提供车辆端时间戳时的 vehicle_reported_at。用户询问当前状态时,请注明数据的时效,而不要暗示数据是实时的。如果用户需要获取此刻的状态,toyota_wake_vehicle 会请求汽车上报(这会消耗少量 12 V 电池电量,因此不要例行调用)。
命令。 每个命令工具都需要传入 confirm。先传入 confirm=false 进行预览:不会发送任何内容,报告会显示当前状态。只有在用户明确同意后才传入 confirm=true,绝不要自行决定执行——toyota_unlock_doors、toyota_unlock_trunk 和 toyota_start_climate 都带有 destructiveHint(最后一项会启动混合动力车的发动机,在室内使用很危险)。结果会准确告知发生了什么:verified(汽车已报告新状态)、accepted(Toyota 已接受命令,但汽车尚未在超时时间内确认——请如实说明,不要声称成功),或 failed(并附上 Toyota 给出的原因)。收到 accepted 后不要重新发送;命令的速率限制为每 10 秒一次。
值得告知用户的限制。 仅支持欧洲地区。非插电式全混合动力车不会提供驱动电池电量——工具会明确说明这一点,而不会猜测。Toyota 会保留约 12 个月的行程历史。并非所有汽车都支持所有命令;Toyota 会回复「车辆不受支持」,且不会向汽车发送任何内容。
数据有多新?
Toyota 云采用事件推送机制:汽车会在熄火时上传遥测数据,并在停车时上传位置信息。更频繁地轮询只会返回相同的数据,因此此服务会将快照缓存 5 分钟(健康和保养数据缓存 15 分钟),并串行处理所有上游调用 (网关会严格限制突发请求)。
每个响应都包含一个 freshness 区块:
fetched_at/age_seconds— 此服务上次读取 Toyota 云的时间;source—live、cache或stale_cache(Toyota 暂时不可用时,返回最后已知的数据,而不是报错);vehicle_reported_at— Toyota 提供时的车辆端时间戳。
toyota_refresh_data 用于处理一个实际的数据空档(你刚停车,想获取最新位置),调用频率限制为每分钟一次。它会重新读取云端数据——不会唤醒汽车,因此不会消耗 12 V 电池电量。
动力系统支持范围
| 数据 | 全混合动力(非插电式) | PHEV / EV | 汽油/柴油 |
|---|---|---|---|
| 燃油量和续航里程 | ✅ | ✅ | ✅ |
| 车门/车窗/车锁 | ✅ | ✅ | ✅ |
| 位置、里程表、健康状况 | ✅ | ✅ | ✅ |
| 行程,包括 EV 占比 | ✅ | ✅ | ✅(不含 EV 占比) |
| 插电式电池电量百分比、充电状态、EV 续航里程、充电计划、立即充电 | — 明确说明「不适用」 | ✅(作者尚未测试——详见文档) | — |
Toyota 不会为非插电式混合动力车提供驱动电池电量——只能在车载显示屏上查看。工具会明确说明这一点,而不会返回容易造成误解的 null 值。
限制
- 仅限欧洲(
ctpa-oneapi— Toyota Connected Europe)。 - 启用了 MFA/2FA 的账户无法通过身份验证。
- Toyota 会在服务器端保留约 12 个月的行程历史记录。
- 车锁/车门状态可能存在延迟;每条回答都会注明数据的时效。
--read-only会移除所有远程命令。
故障排查
| 消息 | 含义 |
|---|---|
MyToyota sign-in failed… | 凭据错误,或账户启用了 MFA。每次尝试之间会暂停 60 秒。运行 uvx toyota-mcp doctor。 |
No saved session and no credentials… | 运行 uvx toyota-mcp login,或设置 TOYOTA_USERNAME / TOYOTA_PASSWORD。 |
| 已保存的会话停止工作 | Toyota 可能会使其失效(例如更改密码、撤销会话)。再次运行 uvx toyota-mcp login。 |
…rate-limiting or temporarily unavailable… | 暂时性问题,与身份验证无关。网关经常返回 429;一分钟后重试。 |
Toyota appears to have changed this API endpoint… | Toyota 迁移了路由。更新 toyota-mcp / pytoyoda。 |
No parked location has been reported… | 汽车从未上传过位置(或不具备此功能)。 |
No vehicles are attached to this MyToyota account. | 先在 MyToyota 移动应用中配对汽车。 |
…does not know that remote command (CTP-REMOTE-40006) | 该命令字符串不在 Toyota 当前支持的命令中(已观察到的情况包括 find-vehicle、engine-start、engine-stop、hazard-off、headlight-off)。没有任何指令发送到汽车。 |
…does not support that remote command (CTP-REMOTE-40041) | Toyota 识别该命令,但这辆汽车不具备相应功能(已观察到的情况:2026 款 Corolla 不支持 headlight-on)。没有任何指令发送到汽车。 |
安全与隐私
- 使用
toyota-mcp login时,密码不会传给本程序:系统凭据存储中只会保存刷新令牌。使用环境变量时,密码会作为SecretStr保存,且不会写入日志。 - GPS 坐标、VIN 和负载绝不会写入日志;pytoyoda 的调试日志(会转储完整的 HTTP 交互)已禁用,只有警告会输出到 stderr。
- 令牌和快照都不会持久化到磁盘。
doctor --dump的输出会递归脱敏,但分享前请手动检查。
贡献
docs/architecture.md 介绍了各层、约定(时效性、验证、隐私),以及添加工具、命令或提供程序时需要修改的内容。变更记录见 CHANGELOG.md。
开发
git clone https://github.com/zepgram/toyota-mcp && cd toyota-mcp
uv sync # version derives from the git tag (hatch-vcs)
uv run pytest # 127 tests, no network
uv run ruff check && uv run ruff format --check
uv run mypy src tests
测试会在 pytoyoda 自身的 controller_class 接口处模拟 Toyota,并使用匿名化负载对真实解析流程进行测试——CI 不会连接 Toyota。发布预览版本前,请使用真实凭据运行实时冒烟测试:
uv run pytest -m live
检查汽车后端接受哪些原始命令字符串——Toyota 的命令集与文档所述不同(pytoyoda#274),只有实时探测才能确认。每条命令都会对汽车执行实际操作,因此请在汽车旁运行:
uvx toyota-mcp probe headlight-on --watch lights
uvx toyota-mcp probe find-vehicle --beeps 2
发布
版本号就是 git 标签——无需修改任何内容。创建标签会发布软件包(通过 PyPI 可信发布,使用 pypi 环境),并根据对应的 CHANGELOG.md 部分创建 GitHub 发布版本:
git tag v0.1.0 && git push origin v0.1.0
使用 MCP Inspector 进行交互式调试:
npx @modelcontextprotocol/inspector uvx toyota-mcp
给贡献者(及其编码 Agent)的说明:本项目使用 MCP Python SDK v2——MCPServer、mcp.server.mcpserver.Context、ToolError。大多数教程仍展示 v1 的 FastMCP 导入方式,但这些导入已不存在。
相关项目
- pytoyoda — 本 MCP 服务基于此 Python 客户端构建;请在此报告 API 变更问题。
- ha_toyota — 基于同一库构建的 Home Assistant 集成。
- tyta — 为同一 API 提供命令行工具和 MCP 服务,并使用自有的 HTTP 客户端。
关键词
Toyota MCP 服务、Lexus MCP 服务、MyToyota MCP、Toyota Connected Services API、Toyota Claude 集成、联网汽车 MCP、车辆遥测 MCP、远程锁定解锁 MCP、电动汽车充电 MCP、Model Context Protocol 汽车、Toyota Corolla RAV4 Yaris C-HR bZ4X、Claude Desktop 汽车集成、pytoyoda MCP。
商标
上方所示的 Toyota 徽标,以及 Toyota、Lexus、MyToyota 和 MyLexus 及其所有相关徽标和标志,均为 Toyota Motor Corporation 及其关联公司的专有财产。保留所有权利。此处仅为标识此工具所连接的服务而使用。这是一个独立的非官方 项目:与 Toyota 无关联,也未获其认可、赞助或支持。你的账户和车辆均受 Toyota 自身条款约束。
许可证
MIT © Benjamin Calef
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。