Skip to main content
Glama

tesla-grokbot-connector

Read-only Tesla Fleet API MCP for Grok Bot. Each person runs this on their own Grok Bot computer. The Bot starts it as a stdio command. There is no public host and no marketplace tile.

Compatible with Tesla. This project is not affiliated with, endorsed by, or sponsored by Tesla, Inc. Do not name your developer app anything that implies an official Tesla product (use something like “GrokBot Vehicle Bridge”).

Python 3.11+

Install and attach: follow INSTALL.md. Put the client id, client secret, and token key on the computer, run tesla-mcp auth with Take over, then add a custom stdio command in chat.

What it does

Ask how charged the car is, how far it drove this week, or whether range is dropping. The server can:

  • list vehicles (VIN masked)

  • read battery, charging, climate, odometer, and software when the car is already online

  • return the last local snapshot when the car is asleep, without waking it

  • keep that history in SQLite and answer weekly mileage, range trend, and a low-charge check from it

  • wake the car only through tesla_wake_and_refresh, and only inside a small budget

  • optionally poll every 1–2 hours, and only if the car is already online

Related MCP server: mcp-teslamate-fleet

What it does not do

  • The tesla-mcp server does not lock, unlock, honk, start climate, or start and stop charging. Those tools are not registered on it. The only Fleet API write on this server is wake_up, and only from tesla_wake_and_refresh.

  • It does not use a virtual key or tesla-http-proxy.

  • It does not stream Fleet Telemetry and it does not talk to Tesla Energy products.

  • It does not request vehicle_cmds or user_data.

  • It does not wake the car for a status question, a report, or tesla-mcp poll.

Optional vehicle commands

Lock, climate, charge, lights, horn, and sentry on are a separate program, tesla-commands-mcp. You add it as its own connector, tesla-commands, beside tesla. It is optional and off by default. Installing or running tesla-mcp does not add those tools and does not request vehicle_cmds.

Commands stay in dry-run until TESLA_COMMANDS_DRY_RUN is false, 0, no, or off. Those are the only values that turn it off. A blank or unrecognized value stays in dry-run. An empty allowlist allows none of them. Read docs/COMMANDS.md before you turn one on. That page covers the risks, the scope, pairing the virtual key, the signing proxy, and how to remove the key from the car.

Charging history is off. Tesla only exposes it through vehicle_charging_cmds, which also allows charge control. Turn it on only if you accept that grant. This server still will not call charge control.

How this compares to other Tesla MCP servers

Several open-source Tesla MCP servers already exist. The notes below are from their READMEs on 22 Oct 2026.

  • scald/tesla-mcp is a small TypeScript MCP server for Claude Desktop. Its tools wake the car and return basic vehicle info (wake_up, refresh_vehicles, debug_vehicles).

  • ysrdevs/tesla-mcp is Python. The README describes 96 tools covering the Fleet API, including lock/unlock, climate, and charging commands.

  • MyTeslaMate/mcp-tesla is mainly a hosted service: you sign in through https://mcp.myteslamate.com/mcp. The README describes full vehicle-command access plus TeslaMate tools (98 Fleet API tools and 9 TeslaMate tools). Self-hosting is documented as an advanced option.

This project is built for Grok Bot. The tesla-mcp connector is strictly read-only: it has no command tools, no virtual key, and no tesla-http-proxy. An optional commands program lives beside it and is off by default (docs/COMMANDS.md). The read-only connector runs locally on the Grok Bot computer as a stdio process, with no hosted server. Wakes go through one tool with a local budget, so Fleet API wake charges stay capped. Mileage, range, and low-charge answers come from a SQLite history on that same computer.

Cost and billing

Prices from the Fleet API pricing page, checked 22 Oct 2026:

Category

Price

Each

Data

500 / $1

$0.002

Wakes

50 / $1

$0.02

Commands (unused)

1,000 / $1

$0.001

Authentication calls are not billed. Responses under HTTP 500 are billed, including 408 when the car is asleep. There is no sandbox. A live call hits your car and your bill.

A 2-hour poll is about 360 state checks a month, plus about 180 data reads if the car is online half the time ($1.08). About 10 questions a day add $0.60. One wake a day adds $0.60. That is about $2.30 / month, inside the $10 monthly discount, so the net is often $0. Which category GET /vehicles/{vin} and charging history use is per-endpoint in Tesla's docs and is treated as data here until you confirm it.

Set a billing limit around $10 and add a card. The dashboard default is $0, and an app with no payment method is disabled. Alerts arrive at 80% and 100%. Crossing the limit suspends the API. Payment works in the US and most of Europe, including IE and GB.

Wakes are also capped by Tesla at 3 per minute. A loop at that cap is about $86 a day. This server defaults to 3 wakes in a rolling 24-hour window and 1 wake per 30 minutes. It will not let you configure more than 3 per minute, more than 10 wakes in that window, or a minimum gap longer than 24 hours.

tesla_usage shows the local estimate. It is not Tesla's invoice.

Tools

Tool

What you get

tesla_list_vehicles

Masked VIN, name, model when Tesla sends it, state

tesla_get_status

Battery %, range, charging, plugged in, locked. Live or cached.

tesla_get_climate

Inside and outside °C, climate on, set points

tesla_get_odometer

Odometer miles, optional 7d / 30d / this_week from history

tesla_get_software

Installed version and pending update fields

tesla_query_history

Local time series

tesla_report

weekly_mileage, range_trend, charging_summary, low_charge

tesla_wake_and_refresh

Fresh snapshot. Requires confirm=true. Budget-gated.

tesla_usage

Calls this month, estimated USD, wake budget

tesla_get_location

Opt-in. Coarse (~1 km) unless precision=precise.

tesla_get_charging_history

Opt-in. Charging sessions. Optional start and end; ranges over a year are split.

vin is optional when the account has one car. Pass a display name or the masked VIN when there are several. Distances from the Fleet API are miles. Temperatures are Celsius. Every tool is marked read-only. tesla_wake_and_refresh is also marked non-idempotent because it costs money and wakes the car.

tesla_get_charging_history accepts a date (YYYY-MM-DD) or an ISO 8601 time for start and end. Leave both out for the last 365 days. A date-only start is midnight UTC, and a date-only end is 23:59:59 UTC. Tesla rejects a single request longer than one year (Date range cannot exceed 1 year), so a longer range is loaded in consecutive windows of at most 365 days, up to 10 years. Duplicate sessions are dropped and the newest session is returned first. The start and end in the reply are the UTC times that were queried. When Tesla rejects a request, the reply includes Tesla's explanation rather than only the HTTP status.

Scopes

Scope

Default

openid, offline_access, vehicle_device_data

On

vehicle_location

Off. Set TESLA_ENABLE_LOCATION=true and sign in again.

vehicle_charging_cmds

Off. Set TESLA_ENABLE_CHARGING_HISTORY=true and sign in again.

vehicle_cmds

Not requested by tesla-mcp. Only tesla-commands-mcp auth requests it, and only when TESLA_ENABLE_COMMANDS=true. See docs/COMMANDS.md.

user_data

Never requested

Granted scopes are read from the access token at startup. A tool whose scope was not granted is not registered. Run tesla-mcp scopes to see the diff. Changing scopes needs tesla-mcp auth again (prompt_missing_scopes is set).

Poll and routines

tesla-mcp poll lists vehicles and, only when state is online, reads vehicle_data. Asleep and offline cars get a state-only row. It never calls wake_up.

Ask the Bot to run this every 1–2 hours:

uv run --frozen --directory /workspace/tesla-grokbot-connector tesla-mcp poll

tesla-mcp poll --loop stays in the foreground. Intervals under 1 hour are raised to 1 hour. A routine that runs the one-shot command is the better fit.

Example routines, all of them using the last snapshot rather than a wake:

  • Weekly mileage (Monday 08:00): tesla_report with weekly_mileage. Gaps while the car slept are split evenly between readings.

  • Range trend: tesla_report with range_trend. Rated range is scaled to 100% charge (range / SoC) over 30 and 90 days.

  • Low charge (21:00): tesla_report with low_charge. Alerts under 30% when the car is unplugged. If the snapshot is older than 6 hours, the report says so.

  • Charging summary (1st of the month): only after the charging-history opt-in. Compares the previous month with the one before it. If Tesla rejects the request, the reply includes Tesla's explanation.

Sign-in and token file

Place

Path

Data directory on the Grok Bot computer

/workspace/.tesla-mcp/

Encrypted tokens

/workspace/.tesla-mcp/tokens.json.enc (mode 600)

History

/workspace/.tesla-mcp/history.db (mode 600)

Config

Process environment, TESLA_MCP_CONFIG, or /workspace/.tesla-mcp/config.env

Override

TESLA_MCP_DATA_DIR

A .env file in the working directory is not loaded. TESLA_FLEET_API_BASE, TESLA_TOKEN_URL, and TESLA_AUTH_URL, when set, must be the exact https endpoint for that setting and TESLA_REGION, on port 443. The Fleet host is fleet-api.prd.na.vn.cloud.tesla.com, fleet-api.prd.eu.vn.cloud.tesla.com, or, only when the region is cn, fleet-api.prd.cn.vn.cloud.tesla.cn. Token and sign-in stay fleet-auth.prd.vn.cloud.tesla.com and auth.tesla.com in every region. Other hosts are refused at startup.

Client id and secret come from a secret-request or from config.env. The AES key comes from TESLA_TOKEN_KEY and is not written into the token file. Refresh tokens are single-use. The new refresh token is saved atomically before the new access token is used. The previous refresh token stays valid for 24 hours. A routine at least once a week keeps the chain alive (the poll does this whenever it runs). 401 login_required means run tesla-mcp auth again.

Every Bot on your Cursor account shares this computer. Encryption keeps the tokens unreadable without the key. It does not isolate one Bot from another Bot that can read the same secret. That is acceptable here because the scopes are read-only. Say so once.

Regions: TESLA_REGION=na, eu, or cn. A wrong region returns HTTP 421. Details: docs/partner-registration.md.

Privacy

  • Location is off unless you opt in. The default precision is about 1 km. Precise coordinates are not written to SQLite. Logs do not contain coordinates or tokens.

  • Logs are tool name, masked VIN, status, and cost category.

  • tesla-mcp logout deletes the token file. Add --delete-history to delete snapshots as well.

  • Revoke the app at https://auth.tesla.com/user/revoke/consent?revoke_client_id=<id> or in the Tesla app under Security & Privacy → Third-Party Apps.

  • The billing limit is a hard spend cap.

See SECURITY.md.

Development

uv sync --locked
make test
make lint

Tests mock the Fleet API. They do not call Tesla. scripts/live_smoke.py refuses to run unless TESLA_LIVE_SMOKE=1, and it still does not wake the car. Expect a few data calls, well under $1.

Before you turn this on

  1. Create the developer app, host the public key, and register the partner domain. docs/partner-registration.md.

  2. Add a card and set a billing limit around $10.

  3. Decide region (na, eu, or cn), whether location is in, and whether the charging-history scope is worth the broader grant.

  4. Confirm localhost is accepted as a redirect URI. If it is not, use tesla-mcp auth --paste with the Pages callback.html.

Unconfirmed with Tesla, as of this version: github.io as a partner domain, the exact vehicle_data endpoints names, software-update field names on every firmware, whether home charging appears in charging history, and whether reading an already-awake car delays sleep. Virtual-key-free vehicle_data is what Tesla's proxy documents for that endpoint; confirm it on your car.

License

MIT. Copyright (c) 2026 Naoise Irwin. See LICENSE.

Available Tools

9 tools
tesla_get_climateTesla Get ClimateA
Read-onlyIdempotent

Inside and outside temperature in Celsius, and whether climate is on. Does not wake the car.

NameRequiredDescriptionDefault
vinNoVehicle name or masked VIN. Omit this when the account has one car.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly and idempotent, so the bar is lower; the description still adds real value by disclosing that the call does not wake a sleeping vehicle, which is a non-obvious side-effect trait not encoded in any structured field. It stops short of saying what happens if the car is asleep and unreachable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the return payload front-loaded and the wake caveat as a trailing qualifier. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return shape needn't be described, and the description still previews the payload. For a zero-required-param read tool with full annotation and schema coverage, the only missing piece is behavior when the vehicle is asleep or offline.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single vin parameter is fully documented in-schema, including the 'omit when the account has one car' guidance. The description adds nothing about the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the specific resource (climate readings) and enumerates exactly what comes back: inside/outside temperature in Celsius plus climate on/off. That is concrete enough to distinguish it from tesla_get_status or tesla_get_odometer, though it never uses an explicit verb like 'get' and doesn't state the car association directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'Does not wake the car' implicitly tells the agent to prefer this over tesla_wake_and_refresh when the vehicle is asleep, but that inference is left to the reader. It never explicitly names tesla_wake_and_refresh or tesla_get_status as alternatives, nor states when this tool is insufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tesla_get_odometerTesla Get OdometerA
Read-onlyIdempotent

Odometer in miles, plus distance over a period from local snapshots. Does not wake the car.

NameRequiredDescriptionDefault
vinNoVehicle name or masked VIN. Omit this when the account has one car.
periodNoOptional window: 7d, 30d, or this_week.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint), so the bar is lower, and the description still adds two real behavioral facts: it does not wake the vehicle, and the distance figure comes from local snapshots (implying possible staleness). It does not state how fresh those snapshots are or what happens when no snapshot exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the core capability stated first and the wake behavior as a secondary qualifier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is unnecessary, and the description covers both the returned metrics and the non-waking behavior. It could still note snapshot freshness or the no-snapshot fallback, but it is sufficient to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both vin and period are already documented, including the accepted period values. The description only echoes 'over a period' without adding format or default behavior beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the specific resource returned (odometer in miles plus distance over a period), which an agent can distinguish from status/climate/software siblings. Units are given explicitly. It lacks a verb and does not explicitly contrast with the closest sibling (tesla_usage or tesla_query_history), so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Does not wake the car' implies this is the non-intrusive read path versus tesla_wake_and_refresh, but the description never states when to choose this over tesla_get_status or tesla_usage. Usage is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tesla_get_softwareTesla Get SoftwareA
Read-onlyIdempotent

Installed software version and pending update status. Does not wake the car.

Field names follow vehicle_state.car_version and vehicle_state.software_update. A missing value means this firmware did not return that field.

NameRequiredDescriptionDefault
vinNoVehicle name or masked VIN. Omit this when the account has one car.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, and open-world behavior, while the description adds meaningful context: it does not wake the car and missing fields indicate firmware did not return them. It does not cover auth, rate limits, or error behavior, but it adds useful behavioral detail beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, with the main purpose in the first sentence and useful caveats after it. Every sentence adds information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with an output schema, one optional parameter, and safety annotations, the description is largely complete. The main remaining gap is that it does not clarify when to prefer this tool over tesla_get_status for broader vehicle information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage and fully documents the optional vin parameter. The description adds no parameter-specific details, so the schema appropriately carries parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific resource and return focus: installed software version and pending update status. It also distinguishes itself somewhat from wake-related tools by saying it does not wake the car, though it does not explicitly position itself against tesla_get_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "Does not wake the car" implies a useful context for querying software state without waking the vehicle. However, there is no explicit when-to-use guidance or named alternative such as tesla_get_status for broader vehicle state.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tesla_get_statusTesla Get StatusA
Read-onlyIdempotent

Battery, range, charging, and lock state. Live when the car is online, otherwise cached.

Distances are miles, as returned by the Fleet API. This does not wake the car.

NameRequiredDescriptionDefault
vinNoVehicle name or masked VIN. Omit this when the account has one car.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and open-world behavior, so the description wisely adds operational context: live versus cached responses and the fact that the call does not wake the vehicle. It also specifies miles as the distance unit returned by the Fleet API.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the returned status fields. Each sentence adds useful information: data freshness, distance units, and the non-waking behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the available output schema, rich annotations, and fully documented single parameter, the description provides everything needed for correct invocation. It covers status contents, freshness semantics, units, and wake behavior without redundant return-value explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the optional vin parameter is fully documented in the schema as a vehicle name or masked VIN that can be omitted for single-car accounts. The description adds no parameter-specific meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource contents: battery, range, charging, and lock state. It is specific enough to distinguish this status tool from siblings like tesla_get_climate, tesla_get_odometer, and tesla_get_software, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The note that data is live when the car is online and otherwise cached, plus the statement that it does not wake the car, gives useful contextual guidance. However, it does not explicitly say when to use this versus tesla_wake_and_refresh or when cached data is insufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tesla_list_vehiclesTesla List VehiclesA
Read-onlyIdempotent

List vehicles on the Tesla account. VINs are masked. This does not wake the car.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only/idempotent safety profile, but the description adds two non-obvious behavioral facts: VINs are masked in the response, and the call avoids the side effect of waking the vehicle. That is valuable context beyond structured fields, though pagination or account-permission behavior is unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero waste. The purpose comes first, and the two caveats (masked VINs, no wake) follow immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and no parameters, the description carries little burden and covers the key non-obvious behaviors. Only the absence of any note on multi-vehicle/account-scoping ambiguity keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate beyond confirming the call is unscoped.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List vehicles on the Tesla account'), which is clearly distinguishable from siblings like tesla_get_status or tesla_get_odometer. It does not explicitly name a sibling to differentiate against, keeping it just below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'This does not wake the car' implicitly tells the agent to prefer this call over tesla_wake_and_refresh when it just wants a cheap read. It gives a clear usage context but states no explicit exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tesla_query_historyTesla Query HistoryA
Read-onlyIdempotent

Time series from the local snapshot database. Does not call Tesla or wake the car.

NameRequiredDescriptionDefault
endYesEnd date (YYYY-MM-DD), inclusive, in TESLA_TIMEZONE.
vinNoVehicle name or masked VIN. Omit when there is one car.
startYesStart date (YYYY-MM-DD), inclusive, in TESLA_TIMEZONE.
bucketNohour, day, or week.day
metricYesbattery_level, battery_range, odometer, inside_temp, or outside_temp.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-open-world behavior. The description adds meaningful context beyond that: it uses a local snapshot database and avoids calling Tesla or waking the car, which is important operational behavior. It does not describe data freshness or staleness, but it adds real value over the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the data source and followed by the key operational constraint. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a complete input schema and an output schema, so return values need not be explained. The description covers the source and non-wake behavior, but it omits any note on snapshot freshness or data lag, which would help an agent decide when local history is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents metric, dates, bucket, and vin semantics. The description does not add parameter-level meaning beyond the schema, which is acceptable given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource as a time series from the local snapshot database and distinguishes it from live/wake tools by saying it does not call Tesla or wake the car. It is clear enough for an agent to recognize historical local data retrieval, though it does not explicitly use a query/retrieve verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Does not call Tesla or wake the car' strongly implies when this tool is preferable: when avoiding vehicle wake-up or live API calls. However, it gives no explicit alternatives or when-not guidance versus siblings like tesla_usage or tesla_get_odometer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tesla_reportTesla ReportA
Read-onlyIdempotent

A ready-to-read summary. Local reports do not wake the car.

weekly_mileage uses the last 7 days of odometer snapshots. range_trend compares 30-day and 90-day normalized rated range. low_charge alerts below 30% when unplugged, and says so if the snapshot is older than 6 hours. charging_summary calls Tesla only when charging history is opted in.

NameRequiredDescriptionDefault
vinNoVehicle name or masked VIN. Omit when there is one car.
typeYesweekly_mileage, range_trend, charging_summary, or low_charge.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond the read-only annotations: it notes that local reports do not wake the car, specifies data windows for weekly_mileage and range_trend, defines the low_charge alert condition and staleness caveat, and clarifies that charging_summary only calls Tesla when opted in. This is exactly the kind of operational detail an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly structured: a two-sentence summary up front, followed by one focused line per report type. There is no redundant filler, and the most important behavioral note (local reports do not wake the car) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, the 100% schema coverage, and the presence of an output schema, the description provides everything an agent needs: the report types, their data windows, external-call behavior, and staleness handling. No important call-selection context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters. The description goes further by explaining what each type value produces (weekly_mileage, range_trend, charging_summary, low_charge), adding meaningful semantics beyond the schema's short type list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool produces a ready-to-read summary and enumerates the four report types, which is a specific verb+resource. However, it does not explicitly name or contrast with sibling tools like tesla_query_history or tesla_get_odometer, leaving some differentiation implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through phrases like 'ready-to-read summary' and details each report type, but it never explicitly says when to choose this tool over alternatives such as tesla_query_history or tesla_get_odometer. The guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tesla_usageTesla UsageA
Read-onlyIdempotent

Calls recorded this month, estimated cost, and the wake budget. Local only.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, and closed-world, so the bar is lowered. The description still adds two things beyond them: the reporting window ('this month') and the 'Local only' guarantee that no vehicle wake or network call occurs — exactly the side-effect detail an agent needs before calling a Tesla tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with what is returned, with the operational constraint last. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be documented. What the tool reports, the time window, and the fact it stays local are all covered; only durability/scope of the recorded history is left unstated, which is minor for a zero-parameter read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the baseline of 4 applies. The description correctly implies no input is needed, consistent with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the concrete payload (calls this month, estimated cost, wake budget), which is specific enough to tell it apart from the vehicle-data siblings like tesla_get_status or tesla_get_odometer. It lacks an explicit verb ('returns'/'shows'), but the resource and scope are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Local only' implicitly signals when to prefer this over siblings that touch the vehicle (tesla_wake_and_refresh, tesla_get_status), but no alternative is named and no explicit when/when-not condition is stated. Usage is inferable rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tesla_wake_and_refreshTesla Wake And RefreshA
Read-only

Wake the car, then store a fresh snapshot. Refuses unless confirm is true.

Default budget: at most one wake every 30 minutes and 3 wakes in any 24-hour period. A hard cap of 3 wakes per minute cannot be raised. This is the only wake path.

NameRequiredDescriptionDefault
vinNoVehicle name or masked VIN. Omit this when there is one car.
confirmNoMust be true. A wake is billed and brings the car online.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses real side effects — the wake is billed, it brings the car online, it is rate-limited to one wake per 30 minutes and three per 24 hours, plus a hard 3-per-minute cap — which is exactly the kind of state-changing, cost-incurring behavior readOnlyHint=true denies. The annotation profile directly conflicts with the described semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Action and snapshot outcome are front-loaded in the first clause, the confirm gate follows immediately, and the remaining sentences carry only non-obvious operational constraints (budget, hard cap, exclusivity). No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so snapshot contents need no explanation, parameters are documented, and the rate-limit model is fully spelled out for a tool with side effects. The only remaining gap is guidance on when the car is already awake versus which read tool to use instead.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters already carry the essential meaning (vin optional for single-car accounts, confirm must be true and is billed). The description's "Refuses unless confirm is true" reinforces the schema but adds no new syntax or edge-case detail beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific two-step action ("Wake the car, then store a fresh snapshot") with a concrete resource, and explicitly claims exclusivity ("This is the only wake path"), which separates it from the passive getters like tesla_get_status and tesla_get_odometer in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly establishes the precondition ("Refuses unless confirm is true") and the routing rule that this is the only way to wake a vehicle, so an agent knows to use it when the car is asleep. It stops short of explicitly contrasting with tesla_get_status for the already-awake case, leaving a small inference gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.1.0
    • First observedtesla_get_climate
    • First observedtesla_get_odometer
    • First observedtesla_get_software
    • First observedtesla_get_status
    • First observedtesla_list_vehicles
    • First observedtesla_query_history
    • First observedtesla_report
    • First observedtesla_usage
    • First observedtesla_wake_and_refresh

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation4/5

Each tool targets a distinct data slice (climate, status, odometer, software, history, usage) and the descriptions repeatedly clarify scope and wake behavior. There is mild overlap between tesla_get_status (battery, range, charging, lock) and the narrower getters (climate, odometer), and between tesla_query_history and tesla_report, but the raw-vs-summary framing keeps them separable.

Naming Consistency4/5

All tools share a tesla_ prefix and most follow a clean verb_noun pattern (list_vehicles, get_climate, get_status, query_history, wake_and_refresh). tesla_report and tesla_usage break the pattern by being bare verbs/nouns, a minor inconsistency in an otherwise predictable set.

Tool Count5/5

Nine tools is well within the sweet spot for a vehicle telemetry server, with each tool covering a distinct aspect (fleet listing, per-signal reads, history, reports, wake, quota). Nothing feels redundant or padded.

Completeness4/5

The read/telemetry lifecycle is well covered: vehicles, climate, status, odometer, software, historical time series, summary reports, wake-and-snapshot, and usage/quota. The only gap is that there are no control operations (lock, climate start, charging control), which appears intentional given the strict wake budget and read-only framing, so agents can still answer monitoring questions without dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that connects to the Tesla Fleet API, allowing users to control vehicles and retrieve real-time status updates through Claude and other AI assistants. It supports functions such as waking up vehicles, viewing detailed vehicle information, and debugging via both stdio and HTTP/SSE transports.
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    MCP server combining TeslaMate historical analytics with Fleet API live data and commands. Works with Claude Code, Claude Desktop, Cursor, and any MCP-compatible client.
    29
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A Model Context Protocol server for the TeslaFi API that lets MCP clients query live vehicle data, drive and charge history, commute patterns, and optionally send commands.
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A local-first, read-only MCP server for vehicle diagnostics that exposes structured OBD-II tools for reading PIDs, DTCs, and ECU snapshots without raw protocol access.
    7
    Apache 2.0