polestar-mcp
Provides read-only access to the Polestar Data Portal M2M API for connected Polestar vehicles, including vehicle status, battery and charging information, location, health warnings, and charging estimates.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@polestar-mcpHow is my car doing?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
polestar-mcp
Ask your Polestar questions in plain language. Get answers from what the car reports.
A Model Context Protocol server for the Polestar Data Portal M2M API, built for any MCP client: Claude Desktop, ZCode, Cursor, or your own tooling.
Ask "how is my car doing?" and the assistant calls one tool, reads one cached answer, and tells you the charge level, the range, whether everything is locked, and how old each number is. Ask "when will it be charged?" or "plan the cheapest charging for tonight" and it estimates or plans from the car's own configuration.
Every answer is a read. Polestar's documented v1 API publishes no write endpoints, so there is nothing here that can lock your car, start the climate, or change a charge limit. Every tool carries the MCP readOnlyHint, so clients can auto-approve it.
Setup has exactly one trap: the Data Portal gives you two identifiers and the API needs both. The OAuthclient ID authenticates the token request; the Account ID (labeled x-client-id on the portal page) identifies you on every vehicle request. Sending the client ID as the Account ID fails every call with 403 AUTHZ_CLIENT_ID_MISMATCH. The server checks for this at startup and warns you.
What you can ask
You ask | The assistant calls | You get |
"How is my car doing?" |
| One briefing: charge, range, locks, availability, odometer, service countdown, data ages |
"Is everything locked?" |
| A yes/no verdict that names anything open |
"Does anything need attention?" |
| Active warnings only, plus the service countdown |
"When will it be charged?" |
| Energy and time to target, with every assumption stated |
"Plan the cheapest charging tonight" |
| A schedule of hours, given a spot-price curve you paste in |
"Where is the car?" |
| Last known position with heading, speed, and data age |
"How has the battery aged?" |
| Capacity and range trends (needs history, see below) |
Domain tools answer in short prose with the data age in the header, and raw: true appends the untouched API payload:
Vehicle My Car: telemetry/battery (data observed 12 min ago)
Charge: 52% · range 170 km
Charging: Idle · Unplugged
Average consumption: 20.1 kWh/100km(Vehicle name and values come from the project's sanitized test fixtures; live answers carry your own labels and numbers.)
Related MCP server: Unoffical Polestar 2 MCP
Quickstart
1. Try it offline, no Polestar credential
The repository ships a sanitized captured dump, and the demo asserts real values through the full server, token flow included:
npm install
npm run build
npm run demo-dump # runs the whole server in fixture mode, prints DUMP_OK
POLESTAR_FIXTURES_DIR=.. npm start # serve the sibling captured dump interactivelyFixture mode needs a directory of captured responses laid out like test/fixtures/dump; the dump this project was built against sits one level up in the workspace. A dump without a token response fails with AuthError: Token request failed (HTTP 404): fixture mode runs the real auth lifecycle rather than skipping it. A route with no fixture answers NOT_FOUND, deliberately distinct from DATA_NOT_AVAILABLE, so a missing fixture can never masquerade as "the car reports nothing".
2. Connect your car
Log in at data-portal.polestar.com, open the Data Portal API tab, and create a credential. Note the client ID, the client secret (shown once), and the Account ID (
x-client-id) at the top of the page.Store them outside any repository, in the server's home config:
mkdir -p ~/.config/polestar-mcp cat > ~/.config/polestar-mcp/.env.secrets <<'EOF' POLESTAR_CLIENT_ID=paste-your-client-id-here POLESTAR_CLIENT_SECRET=paste-your-client-secret-here POLESTAR_ACCOUNT_ID=paste-your-account-id-here EOFPoint your MCP client at the built server:
{ "mcpServers": { "polestar": { "command": "node", "args": ["/absolute/path/to/polestar-mcp/build/server.js"] } } }Restart the client and ask something.
Credentials can also ride in the client's env block instead of the secrets file; real environment variables always win. The dotenv loader handles export prefixes, both quote styles, and trailing comments.
The tools
Naming is mechanical: API domain target-soc becomes tool get_target_soc. Every tool that reads a car takes an optional vin; omit it on a single-vehicle credential and that car is used, and with several cars the tool asks which one (MCP elicitation) and validates the answer before sending it. Third-party credentials may pass a delegated_account_id argument, checked against the operator's allowlist because the API silently accepts unknown delegated IDs.
Tool | What it answers |
Discovery | |
| VINs, or your friendly names, that this credential may access |
| The server's own registry: every domain with endpoint, scope, and tool name |
Telemetry | |
| Whether the car is reachable/awake, and its usage mode |
| Charge level, charging status and power, range, time to full, consumption, usable energy |
| Doors, windows, hood, tailgate, tank lid, central lock, tailgate lock, alarm |
| Service countdown (days, distance, engine hours) and fluid, light, and 12V warnings |
| Last known position, heading, speed, timestamp |
| Odometer and trip meters, average speeds |
| Preheat/pre-cool status, runtime left, requested seat and wheel heating |
| Cabin air: PM2.5, air quality index, last pre-cleaning cycle |
Charging | |
| Configured maximum AC charging current, source, last update |
| Saved charge locations |
| Charge-now override state (override charge timer sync) |
| Recurring charge window: hours, timezone offset, activation, sync |
| Scheduled climate timers: ready-at hour, weekdays, activation |
| Target charge level and setting type |
| Whether the car is at a saved charge location (often unreported) |
Aggregates and planning | |
| One-call briefing: charge, range, locks, availability, odometer, service, ages |
| Yes/no security verdict that names anything open |
| Active health warnings only, plus the service countdown |
| Energy and time to reach the target SoC, assumptions stated |
| Cheapest hours inside the car's charge window, given your spot prices |
System | |
| Budget used and remaining with reset time, cache hit rate, token expiry, mode |
History (opt-in) | |
| Recorded samples for one domain, one line per change |
| Implied full-charge range and capacity trend over history |
| Charging sessions reconstructed from battery samples |
The fifteen get_* domain tools map one-to-one onto the API's fifteen read domains (eight telemetry, seven charging), each with its endpoint and OAuth scope embedded in the tool description. The full mapping, scopes, and worked examples are in docs/tools-reference.md.
Resources, prompts, and subscriptions
Resources:
polestar://vehicle/{vin}/{telemetry|charging}/{domain}, listed from your credential's vehicles, with VIN and domain completions. Reading one returns the same humanized view as the matching tool.Subscriptions: subscribe to a resource and the server re-reads it once a minute through the cache, notifying the client only when the cloud's
metaEventIdchanged, which happens only when the car reported something new. Subscriptions pause rather than spend the last 10% of the daily budget. (stdio only.)Prompts: three ready-made conversations,
car-status,charge-plan, andbattery-health-report, that wire common questions to the right tool sequence.Annotations: every read carries
readOnlyHint: true; nothing mutates, so clients can skip confirmation prompts.
How the 10,000-calls-per-day budget is handled
Polestar's M2M credential allows 10,000 calls per client per day, roughly seven per minute sustained. The server treats that as the resource it is:
flowchart LR
C["MCP client<br/>stdio or HTTP"] --> T["26 read tools<br/>humanized, data age"]
T --> K["PolestarClient<br/>VIN resolution<br/>identity checks"]
K --> H["Cache<br/>per-domain TTLs<br/>stale-while-revalidate"]
H --> R["Retry<br/>429 / 502 / 503<br/>Retry-After"]
R --> B["Budget meter<br/>10,000 per day<br/>fails closed"]
B --> P["Polestar M2M API"]
H --> S["History store<br/>opt-in JSONL"]Cache first. Each URL gets a TTL matched to how fast the value can change: battery, location, and exterior 30 seconds; availability, odometer, and parking climatization 60 seconds; charging settings 5 minutes; health 10 minutes; pre-cleaning 30 minutes; the vehicle list 1 hour. An expired entry serves the last known value immediately (marked stale) while a single-flight refresh runs in the background, so latency never waits on Polestar.
Retry with limits. 429 responses (honoring
Retry-Afterwhen present) and 502/503 gateway errors are retried up to three times with capped backoff. Every attempt, retries included, is metered before it goes out.Fail closed. When the day's budget is spent, the server refuses further calls with the reset time in the error instead of spending calls it does not have.
polestar_statusshows exactly where you stand, and the resource poller and history sampler stand down on their own (at 90% and 80% spent respectively) so background features never eat the quota you need for real questions.Tokens are managed. One token request covers the union of all domain scopes (trim it with
POLESTAR_SCOPESfor least privilege), tokens are cached until expiry minus a 5-minute skew, concurrent callers share one request, and a 401 triggers exactly one fresh-token retry.
History, sampling, and privacy
The API answers only "what is true right now", so longitudinal questions need a local memory. Set POLESTAR_HISTORY_DIR and every live domain answer lands in an append-only JSONL store, deduplicated by the cloud's metaEventId (unchanged snapshots cost a single line). That feeds get_history, get_degradation_report (implied full-charge range and capacity trends, presented as estimates rather than verdicts), and get_charging_sessions (start, duration, peak power, max SoC). Recording is passive: it reuses answers the server already fetched. If you also want the car sampled while nobody is asking, set POLESTAR_SAMPLE=1; the background round covers battery, odometer, location, and exterior every 10 minutes by default and stands down at 80% of the budget.
Three dials control what leaves your car and how it is named:
Variable | Effect |
|
|
| Masks VINs in rendered output (first 3 and last 3 characters). Not with |
|
|
HTTP mode
Set POLESTAR_HTTP_PORT=8420 npm start and the same engine serves tools, resources, and prompts over stateless Streamable HTTP: each request is independent, while cache, budget, and history are shared. It binds 127.0.0.1 by default; binding any other address requires POLESTAR_HTTP_TOKEN, because a server that reads vehicle location must not sit unauthenticated on a shared network. Subscriptions remain a stdio feature.
The server knows exactly which variables it reads and warns about unrecognized ones (suggesting the closest real name); with POLESTAR_STRICT_ENV=1 a typo is fatal instead of a warning. A value that is present but unusable, a bad URL, a non-numeric timeout, an out-of-range port, fails fast with the fix in the message.
Variable | Default | Purpose |
| required live | OAuth client ID from the Data Portal |
| required live | OAuth client secret |
| required live | The Account ID, sent as |
| unset | Default delegated account for third-party credentials |
| unset | Allowlist a call's |
| production URL | Override the API base URL |
|
| Override just the token endpoint |
| unset | Serve captured responses instead of the live API |
| unset | Alternative dotenv path (default |
| 15000 | Hard deadline per HTTP request |
| 10000 | Daily live-call ceiling; fails closed at the limit |
| 100 | Rolling per-minute ceiling the API also publishes; waited out rather than failed, when the wait fits the deadline |
| on |
|
| all domain scopes | Space- or comma-separated scope override for the token request |
| unset | Enable the JSONL history store (and history tools) here |
| 600 | Seconds between sampler rounds (clamped 60 to 3600) |
| off |
|
| unset |
|
| off |
|
| on |
|
| km |
|
| normal |
|
| off | Scaffold for future write endpoints; registers nothing today |
| 0 (stdio) | 1 to 65535 switches to Streamable HTTP |
| 127.0.0.1 | HTTP bind address |
| unset | Bearer token for HTTP mode; required off loopback |
| off |
|
Development
npm install
npm run build # strict TypeScript, emits build/server.js
npm test # unit suites: token lifecycle, client, runtime, planner, config registry
npm run smoke # stdio end-to-end: registry, tools, resources, prompts, history
npm run smoke-http # Streamable HTTP end-to-end over plain POSTs
npm run demo-dump # stdio end-to-end against the real captured dump
npm run check-secrets # secret-hygiene check
npm run typecheck # types src, test, and scripts togetherRequires Node 20 or newer. The suite covers what is easy to get subtly wrong: token single-flight and expiry skew, envelope unwrapping and identity checks, VIN resolution and delegation, cache TTLs and stale-while-revalidate, retry and budget metering, the charge-window planner (including windows that wrap midnight), history dedup and session reconstruction, and the configuration registry.
Verification is CI, not a claim in this file: every check runs on each push and pull request, and CONTRIBUTING.md carries the full table with what each one proves. The architecture is in docs/architecture.md and docs/development.md; the domain words the code uses are defined in CONTRIBUTING.md.
Security
The threat model is in SECURITY.md. Credentials live outside the repository (~/.config/polestar-mcp/.env.secrets, or POLESTAR_ENV_FILE), no .env-family file inside the tree is ever acceptable, and npm run check-secrets flags JWTs, opaque credential blobs, VIN-shaped identifiers including ones embedded in longer tokens, personal email, phone numbers and precise coordinates in every scanned file. Each detector proves itself on a positive control before a clean scan is allowed to count.
Captured dumps are credentials: they contain long-lived refresh tokens and location history. Do not commit them, paste them into issues, or share them casually.
Every API error carries the requestId and timestamp Polestar support can look up, preserved on the errors this server raises.
Documentation
Document | Contents |
Credentials, every variable explained, first calls, troubleshooting | |
All 26 tools, endpoints and scopes, example responses | |
The client module, the cache/retry/budget chain, history, resources, HTTP mode | |
Authentication, headers, envelope, errors, rate limits | |
The test map, the CI checks, adding a tool |
Status
The documented v1 API is read-only and this server is read-only with it: every tool carries readOnlyHint, and POLESTAR_ENABLE_WRITES registers nothing because Polestar publishes no v1 write endpoints. The app-side consumer API (car model details, render images) is deliberately not wired in either. Its GraphQL queries are unpublished and its refresh tokens rotate destructively, so wiring it would mean depending on a contract that can be revoked without notice.
This is a personal project for one owner's Polestar 2. It is not affiliated with or endorsed by Polestar.
Available Tools
23 toolsget_amp_limitGet amp-limitARead-only
Configured maximum AC charging current (amps) with its source and last update, plus pendingAmpLimit when a change is recorded but the car has not confirmed it. Measured live. (M2M endpoint: /v1/vehicles/{vin}/charging/amp-limit, scope pdp-charging/ampLimit).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description adds meaningful behavior: the value is measured live, includes source and last update, and pendingAmpLimit appears only when a change is recorded but unconfirmed by the car. This helps the agent interpret freshness and pending state correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense, information-rich sentences with no filler. The core semantics are front-loaded, and the endpoint/scope parenthetical is compact and useful for authorization context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read with an output schema, the description covers the core result, live behavior, pending state, endpoint, and authorization scope. Nothing critical for correct invocation or interpretation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with 100% coverage, including the VIN optionality and the raw flag's warning about carrying the VIN despite redaction. The description itself adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies exactly what is returned: the configured maximum AC charging current in amps, its source, last update, and pendingAmpLimit when the car has not yet confirmed a change. This clearly distinguishes it from sibling tools like get_target_soc and get_charging_estimate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is the configured amp limit, measured live, so the agent understands when to use it for live charging-current-limit reads. It does not explicitly name alternatives or exclusions, but the stated purpose makes the usage straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_availabilityGet availabilityARead-only
Vehicle availability: availabilityStatus and usageMode (whether the car is currently reachable/awake). (M2M endpoint: /v1/vehicles/{vin}/telemetry/availability, scope pdp-telemetry/availability).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint and openWorldHint, so the safety profile is known. The description adds useful behavioral context beyond the annotations: it is an M2M endpoint, requires the 'pdp-telemetry/availability' scope, and exposes the raw flag behavior (even carrying VIN when redaction is on, though that detail lives in the schema rather than the description itself).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core meaning, then the endpoint and scope. Every clause adds information; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich output schema present, complete parameter descriptions in the input schema, and annotations covering read-only/open-world behavior, the description only needed to supply the operational essentials (endpoint, scope, and meaning of the fields it returns), all of which are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without parameter details in the description. The description adds field semantics (availabilityStatus, usageMode) and the endpoint template, but does not need to compensate for parameter docs since the schema already documents raw, vin, and delegated_account_id fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it retrieves 'Vehicle availability' with the concrete fields 'availabilityStatus and usageMode (whether the car is currently reachable/awake)'. It does not explicitly differentiate from sibling tools like get_car_status or polestar_status, but the parenthetical makes the availability semantics unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this checks whether a car is reachable/awake, and it identifies the exact M2M endpoint and required OAuth scope. However, it provides no explicit when-to-use versus alternatives among the many sibling get_* tools, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_batteryGet batteryARead-only
Battery state: charge level %, charging status (V1/V2/type), charger connection and power status, estimated distance to empty (km and miles), estimated time to full, and average consumption kWh/100km. The contract also defines charging current and voltage, charging power, since-charge and automatic-trip consumption averages, and an energy-consumption breakdown: those appear only when the car reports them, so a missing field means unreported, not zero. The reference vehicle answered with 14 fields and none of the optional ones. (M2M endpoint: /v1/vehicles/{vin}/telemetry/battery, scope pdp-telemetry/battery).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, but the description adds valuable behavioral nuance beyond these: it explains that optional fields appear only when reported by the car, and that a missing field means unreported rather than zero. This prevents misinterpretation of sparse data. It also includes a concrete reference-vehicle example (14 fields, none optional) and exposes the raw parameter's side effect (VIN leak) via the schema but also reinforces the behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but efficiently organized: it front-loads the core battery fields, then discusses optional fields and the missing-field semantics, and ends with endpoint/scope details. Every sentence contributes useful context, and the structure (main fields, caveat, endpoint) is logical. It is slightly longer than strictly necessary but avoids redundancy, earning a 4 rather than 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (not shown but indicated) and the description thoroughly explains the data contract (including optional-field behavior and a concrete example), the tool is fully specified for an agent to invoke correctly. The endpoint and OAuth scope are provided, and the raw parameter's behavior is covered in the schema. No critical operational detail is missing for a read-only telemetry query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter (raw, vin, delegated_account_id) already has a clear description. The tool description adds no additional parameter-level semantics beyond what the schema provides, but it does reference the endpoint and scope which indirectly clarifies the vin usage. Since the schema carries the full explanatory burden, a baseline of 3 is appropriate; the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear and specific verb-resource pairing: 'Battery state' followed by an enumerated list of the exact metrics returned (charge level, charging status, distance to empty, time to full, consumption). This unambiguously differentiates it from sibling tools like get_odometer or get_location. It names the resource (battery) and gives a concrete inventory of output fields, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly name alternative tools or state when NOT to use it, but it clearly implies its scope: any query about battery state or charging metrics. The field list and endpoint make the usage context obvious, and it notes the data contract for optional fields. While it lacks an explicit exclusion (e.g., 'for charging estimates use get_charging_estimate'), the purpose is unambiguous enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_car_statusGet full car statusARead-only
One-call status of the car: charge level and state, range, lock/doors, availability, odometer, service countdown, and data age for each. Costs several domain reads (cached); use instead of calling five get_* tools.
| Name | Required | Description | Default |
|---|---|---|---|
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds useful behavioral context: it discloses 'Costs several domain reads (cached)' and notes 'data age for each,' giving agents insight into performance and data freshness without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first front-loads the purpose and enumerates the contents, the second gives cost and the alternative. There is no wasted wording, and the key information is presented early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which explains return values) and annotations (readOnlyHint, openWorldHint), the description adequately covers the tool's aggregate nature, cost, and usage. It doesn't describe the output structure, but that is handled by the schema. The minor gap is missing explicit when-not-to-use guidance, but that's a usage-guideline issue more than a completeness issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter (vin) is fully described in the schema with 100% coverage, including optionality and default behavior when omitted. The description adds no additional parameter information, so the baseline of 3 is appropriate since the schema handles the semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'One-call status of the car' and enumerates the specific data fields (charge level, range, lock/doors, etc.). It distinguishes itself from sibling get_* tools by explicitly saying 'use instead of calling five get_* tools,' making the unique role obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case ('use instead of calling five get_* tools') and implies when to use this aggregated tool versus the individual getters. However, it doesn't explicitly state when NOT to use it (e.g., if only one field is needed), though that is strongly implied by the alternative wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_charge_locationsGet charge-locationsARead-only
Configured charge locations. Over M2M this answers as a settings record — typically only an id and a utc0 flag, not a list of addresses — so finding no coordinates is normal rather than a failure. (M2M endpoint: /v1/vehicles/{vin}/charging/charge-locations, scope pdp-charging/chargeLocations).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description only needed to add value beyond those. It does: it explains that over M2M the response is a settings record with typically just an id and utc0 flag, that missing coordinates are expected rather than a failure, and it lists the exact endpoint and OAuth scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the key caveat about settings-record behavior, then packs the endpoint and scope into a parenthetical. Every sentence earns its place, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with zero required parameters, 100% schema coverage, and a provided output schema, the description adds the one crucial non-obvious fact: the response shape over M2M differs from what the name suggests. The endpoint and scope complete the operational picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the three parameters are already fully documented in the input schema. The description doesn't add parameter-level semantics beyond referencing the VIN in the endpoint path, which is acceptable given the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource ('configured charge locations') and the endpoint path, and clarifies that it is not a list of addresses. It doesn't use an explicit verb like 'retrieves', but the tool name and endpoint make the action clear, and it distinguishes itself from a coordinate-lookup expectation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it by explaining that finding no coordinates is normal, and it gives the M2M endpoint and scope. However, it doesn't explicitly state when to prefer this tool over a sibling like get_is_at_charge_location or plan_cheapest_charge, nor does it provide any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_charge_nowGet charge-nowARead-only
Charge-now override state. Over M2M it typically carries only the last sync timestamp of the override, not an active/inactive boolean. (M2M endpoint: /v1/vehicles/{vin}/charging/charge-now, scope pdp-charging/overrideChargeTimer).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation read-only and open-world. The description adds valuable non-obvious behavior: the M2M response typically carries only the last sync timestamp rather than an active/inactive boolean, plus the exact endpoint and required scope. This goes beyond what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler. The core state is stated first, followed by the key behavioral caveat, then endpoint and scope in a compact parenthetical. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only getter with optional parameters, the schema covers all inputs and an output schema exists. The description supplies the endpoint, auth scope, and the unusual timestamp-only payload behavior. The only slight gap is the absence of explicit guidance on when an active/inactive boolean might be present, but this is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter coverage, so the baseline is 3. The description does not add parameter-specific meaning beyond referencing the vehicle in the endpoint path, but the schema already documents raw, vin, and delegated_account_id adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely: "Charge-now override state," with the M2M endpoint spelled out. It clearly distinguishes this from siblings like get_global_charge_timer and get_target_soc by focusing on the charge-now override, though it does not explicitly mention those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The endpoint and scope hint at direct M2M use, and the description implies when the tool is relevant by naming the exact override state, but it gives no explicit when-to-use guidance or alternative tool comparisons. Usage context is present but mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_charging_estimateCharging time and energy estimateARead-only
Estimates the energy and time needed to reach the target charge level from the current SoC, using the reported usable energy (dischargeInfo.energyAvailable) when available, the configured amp limit for power, and the car's own time-to-full when charging.
| Name | Required | Description | Default |
|---|---|---|---|
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| phases | No | AC phases at your charger (default 3). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say read-only and open-world, so the description adds meaningful behavior: it explains the estimation inputs (energyAvailable, configured amp limit, and the car's own time-to-full) and conditional logic ('when available', 'when charging'). This does not contradict the readOnlyHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence with the core purpose front-loaded and supporting estimation logic packed efficiently afterward. It is compact but slightly dense; the parenthetical field reference could be trimmed without losing much value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and fully documented optional parameters, the description covers the key inputs and calculation sources an agent needs. It falls short only in not orienting the agent toward sibling alternatives or clarifying where the target charge level originates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, so the description need not re-document vin/phases. It adds algorithmic context about amp limit and energy sources, but no additional parameter syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: it estimates energy and time needed to reach a target charge level from current SoC. This distinguishes it from siblings like get_target_soc and get_battery without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as plan_cheapest_charge or get_charge_now; it also states no prerequisites or exclusions. The context is inferable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exteriorGet exteriorBRead-only
Exterior state: doors, windows, hood, tailgate, tank lid (open/closed), central lock, tailgate lock, alarm. (M2M endpoint: /v1/vehicles/{vin}/telemetry/exterior, scope pdp-telemetry/exterior).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true and openWorldHint=true, so the safety profile is disclosed and the description does not contradict them. The description adds the M2M endpoint and telemetry scope as data-source context but reveals little else about behavior (staleness, failure modes, unknown-state handling), so it lands at baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the component list front-loaded, followed by a parenthetical endpoint note. Every token carries information; there is no filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 is documented externally, annotations cover read-only and open-world behavior, and the schema fully documents all three optional parameters. The only real gap is usage routing versus the sibling set, which leaves a minor rather than critical hole.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has rich semantics: raw explains its VIN-redaction bypass, vin explains single-vehicle optionality, and delegated_account_id explains the third-party constraint. The description adds no parameter-level meaning beyond the endpoint context, so the high-coverage baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a precise resource — exterior state — and itemizes exactly what it covers (doors, windows, hood, tailgate, tank lid, central lock, tailgate lock, alarm). It reads as a noun phrase without an explicit retrieval verb, and it does not explicitly differentiate from overlapping siblings like is_car_secure, but the component enumeration makes the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance or alternative routing. The description does not say when to prefer this over is_car_secure (which plausibly overlaps on lock/alarm state) or the other get_* telemetry tools. The M2M endpoint and scope note is technical context, not situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_charge_timerGet global-charge-timerARead-only
Recurring charge window: start/stop hour with timezone offset, activation flag and sync status. Pending changes appear only when an edit has not yet reached the car; an empty pending block means nothing is queued. (M2M endpoint: /v1/vehicles/{vin}/charging/global-charge-timer, scope pdp-charging/globalChargeTimer).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds genuinely useful behavioral context beyond the readOnlyHint/openWorldHint annotations: pending changes appear only when an edit has not yet reached the car, and an empty pending block means nothing is queued. This clarifies the sync/pending semantics without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences with no filler: payload definition, the key pending-changes nuance, and endpoint/scope context. Every sentence earns its place, and the most non-obvious behavior is called out explicitly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only getter with a full output schema and fully documented optional parameters, the description provides the non-obvious semantics needed to understand the result (pending behavior, activation, sync status). It is slightly incomplete about selection criteria among sibling charging/timer tools, but nothing required to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 vin, raw, and delegated_account_id. The tool description adds no parameter-level semantics, which keeps this at the baseline rather than elevating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the exact resource (global-charge-timer) and its payload concepts (start/stop hour, timezone offset, activation flag, sync status), making it easy to distinguish from sibling charging/vehicle getters. The action 'get' is clear from the tool name and title, and the endpoint path leaves no ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the many sibling get_* endpoints, nor when not to use it. The word 'Recurring' implies the intended domain, but the agent is left to infer the decision boundary between this and related charging/timer tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_healthGet healthARead-only
Service health: days/distance/engine-hours to service, service warning, and fluid/light/12V warnings (brake fluid, coolant, oil, washer fluid, 19 exterior light positions). (M2M endpoint: /v1/vehicles/{vin}/telemetry/health, scope pdp-telemetry/health).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds the M2M endpoint and required scope, which is useful operational context, but it does not disclose additional behavioral traits such as response shape, rate limits, or the raw payload behavior described in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense: it front-loads the core purpose, lists the specific health categories, and adds the endpoint and scope in a short parenthetical. Every segment earns its place with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, output schema, and annotations, the description is sufficient for an agent to understand what this tool returns and how to invoke it. It could be slightly more explicit about when to choose this over siblings, but that gap is minor for a read-only, parameter-light tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description itself does not explain the parameters, but the schema already provides detailed descriptions for raw, vin, and delegated_account_id, so no further compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as service health and enumerates the specific data returned: days/distance/engine-hours to service, service warning, and fluid/light/12V warnings. This level of detail distinguishes it from sibling tools like get_battery or get_car_status, even though the description uses a noun phrase rather than an explicit verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool—when service intervals or vehicle warnings are needed—but it does not explicitly state when to prefer it over alternatives or mention any exclusions. The endpoint and scope details are helpful context but do not provide direct tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_is_at_charge_locationGet is-at-charge-locationARead-only
Whether the vehicle is currently at a saved charge location. Often unsupported on a vehicle (returns DATA_NOT_AVAILABLE). (M2M endpoint: /v1/vehicles/{vin}/charging/is-at-charge-location, scope pdp-charging/isAtChargeLocation).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, but the description adds valuable behavioral context by noting the tool often returns DATA_NOT_AVAILABLE on unsupported vehicles. It also provides the endpoint and scope, which helps with debugging and authorization.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with a parenthetical technical note. It is front-loaded and contains no fluff, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with all-optional parameters, an output schema, and annotations covering read-only and open-world behavior, the description covers the key edge case (DATA_NOT_AVAILABLE) and provides the endpoint. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are fully documented in the schema. The description adds no additional parameter-level meaning, so it meets the baseline for high coverage without extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks whether the vehicle is currently at a saved charge location, using a specific verb and resource. It also distinguishes itself from sibling tools like get_charge_locations (which lists saved locations) by focusing on the current state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is clear enough that an agent can infer when to use it (checking current location vs. listing saved locations). However, it does not explicitly name alternatives or provide conditions, leaving slight room for ambiguity in tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_locationGet locationARead-only
Last known position: latitude, longitude, altitude, heading, speed, with timestamp. (M2M endpoint: /v1/vehicles/{vin}/telemetry/location, scope pdp-telemetry/location).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds the upstream M2M endpoint and required OAuth scope, which is useful operational context, but does not disclose data freshness, rate limits, or other behavioral caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence front-loads the core result fields and places the endpoint/scope in a compact parenthetical. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool with rich schema documentation and an output schema, the description plus annotations are almost fully sufficient. The only meaningful gap is the absence of any guidance about when this tool should be preferred over sibling getters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes all three parameters fully, including the VIN optionality rule and the raw payload redaction caveat. The description adds no parameter-level meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise resource ('last known position') and enumerates the exact payload fields: latitude, longitude, altitude, heading, speed, and timestamp. This clearly distinguishes get_location from the other telemetry getters 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explain when to use this tool versus alternatives, nor does it give any exclusions, prerequisites, or conditional guidance. The endpoint and scope are informative context, but not usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_needs_attentionHealth warnings needing attentionARead-only
Only the active warnings from the health domain (fluids, lights, 12V, service) plus the service countdown. Empty means nothing needs attention.
| Name | Required | Description | Default |
|---|---|---|---|
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile, so the description carries a lighter burden. It adds genuine value beyond annotations by specifying the selection boundary (health-domain warnings only), the extra inclusion of the service countdown, and how to interpret an empty result. Nothing here contradicts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences with zero filler. The scoping statement is front-loaded, the categories are compactly packed in parentheses, and the empty-result semantics closes the definition. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read tool with one optional parameter, full schema coverage, and an existing output schema, the description covers all essential non-structural semantics: what subset is returned and what an empty response means. The only gap is an explicit pointer to get_health for the broader health picture, which is more a usage-routing concern than an invocation-completeness one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single optional vin parameter is fully documented in the schema, including its optionality and the single-vehicle default behavior. The description contributes no parameter-specific detail, but the baseline of 3 applies because the schema carries the entire burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource – active warnings from the health domain – and enumerates the exact categories (fluids, lights, 12V, service) plus the service countdown, with clear empty-result semantics. The 'Only' scoping implicitly separates it from the sibling get_health, which likely returns the full health dataset, though the sibling is not named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Only...plus...' phrasing and the 'empty means nothing needs attention' line imply this is the curated, decision-ready subset of the health domain, giving a sense of when it fits. However, there is no explicit when-to-use statement, no named alternative, and no exclusion such as 'for the full health status use get_health instead.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_odometerGet odometerBRead-only
Odometer meters, trip meters (manual and automatic, km), average speeds (km/h). (M2M endpoint: /v1/vehicles/{vin}/telemetry/odometer, scope pdp-telemetry/odometer).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description carries no safety burden. It adds useful context by naming the M2M endpoint and OAuth scope, and it clarifies units (km, km/h), but it does not describe response shape, latency, staleness, or other runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loads the data content, and appends the endpoint/scope in a parenthetical. It is slightly awkward phrasing ('Odometer meters') but every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only telemetry getter with zero required parameters, an output schema, and complete parameter documentation, the description provides enough context: data fields, units, endpoint, and auth scope. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all three parameters thoroughly. The description adds no parameter-level detail beyond that, which meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title supplies the verb ('Get') and the description clearly identifies the resource: odometer, trip meters, and average speeds. It does not explicitly contrast itself with sibling tools, but the telemetry domain is distinct enough that an agent can tell it apart from get_battery or get_health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this tool over alternatives, nor does it state any exclusions or prerequisites. The endpoint and scope are useful context but do not help an agent decide between this and sibling getters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parking_climate_timerGet parking-climate-timerARead-only
Scheduled parking-climate timers: ready-at hour, weekdays, repeat flag, activation. (M2M endpoint: /v1/vehicles/{vin}/charging/parking-climate-timer, scope pdp-charging/parkingClimateTimer).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds meaningful context by naming the exact M2M endpoint and required OAuth scope, which helps the agent understand the access context. It adds no contradictory behavior claims.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with the core purpose first and the endpoint/scope appended without fluff. Each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, zero-required-parameter fetch with a full output schema and complete parameter schema, the description is largely sufficient. It adds the endpoint and scope while annotations cover safety. The only mild gap is the lack of an explicit sibling pointer, already accounted for under usage guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameters with detailed descriptions, so the description is not required to add parameter-level meaning. The tool description itself adds no extra detail about raw, vin, or delegated_account_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('scheduled parking-climate timers') and enumerates the returned dimensions (ready-at hour, weekdays, repeat flag, activation), so an agent knows what data it will get. It is clear enough but does not explicitly separate this from the similarly named sibling get_parking_climatization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (reading scheduled parking-climate timer configuration) and includes the endpoint and scope, but it never states when to prefer this over get_parking_climatization or other timer tools. No alternatives or exclusions are given, so guidance is mostly inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parking_climatizationGet parking-climatizationARead-only
Parking climate (preheat/pre-cool): running status, runtime left, requested seat and steering-wheel heating intensities, ventilation. (M2M endpoint: /v1/vehicles/{vin}/telemetry/parking-climatization, scope pdp-telemetry/parkingClimatization).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful context about the endpoint and the returned data fields, but does not disclose additional behavioral traits such as caching, staleness, or vehicle-state prerequisites. With annotations present, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence followed by a parenthetical endpoint/scope reference. It is front-loaded with the core semantics and contains no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The combination of a clear description, 100% schema coverage, readOnly/openWorld annotations, and an output schema covers invocation needs well. The only notable gap is the absence of explicit sibling routing guidance, but that is a usage-guideline concern rather than a completeness gap for calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (raw, vin, delegated_account_id) is already fully documented in the schema. The description adds no extra parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource (parking climatization) and enumerates the exact data it exposes: running status, runtime left, seat/steering-wheel heating intensities, and ventilation. This clearly distinguishes it from siblings like get_parking_climate_timer or get_pre_cleaning, whose resources are different.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: whenever current parking-climate/preconditioning status is needed. However, it does not explicitly state when not to use it or point to alternatives such as get_parking_climate_timer or get_pre_cleaning, leaving usage routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pre_cleaningGet pre-cleaningARead-only
Cabin air pre-cleaning: running status, measured PM2.5 / air quality index, last cycle validity and completion time. (M2M endpoint: /v1/vehicles/{vin}/telemetry/pre-cleaning, scope pdp-telemetry/preCleaning).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, covering the safety profile. The description adds useful context by naming the M2M endpoint/scope and the specific telemetry data returned. It does not add depth on edge cases or response behavior, but given the annotations and output schema, the baseline burden is lower.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact single sentence plus parenthetical endpoint/scope. It front-loads the key semantic data points and includes no filler, repetition, or extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only telemetry getter with an output schema, no required parameters, and fully documented params, the description is nearly complete. The only noticeable gap is the absence of any guidance about when to select this tool over climate/air-quality siblings, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of the three parameters with clear explanations, so the baseline is 3. The description adds only the {vin} route hint and does not otherwise supplement parameter meaning, which is acceptable since the schema already carries that load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (cabin air pre-cleaning) and enumerates exactly what the tool provides: running status, PM2.5/air quality index, last cycle validity and completion time. This is distinct from any sibling getter and leaves no ambiguity about the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many related siblings (e.g., get_parking_climatization, get_car_status, get_needs_attention). No context, exclusions, or alternative routing is provided, so an agent must infer applicability solely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_target_socGet target-socARead-only
Target battery state of charge (%), setting type (CUSTOM/PRESET), last update. (M2M endpoint: /v1/vehicles/{vin}/charging/target-soc, scope pdp-charging/targetSoc).
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return the full raw API payload instead of (or after) the humanized summary. Unchanged upstream content: it carries the VIN even when POLESTAR_REDACT_VIN is on. | |
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| delegated_account_id | No | Third-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value with the M2M endpoint and the OAuth scope pdp-charging/targetSoc, which clarifies access requirements and the data source without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a short, front-loaded summary that states the resource, key output fields, endpoint, and scope in two concise sentences. Every clause carries useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with a fully documented parameter schema, an output schema, and read-only annotations, gives an agent everything needed to invoke a simple read-only retrieval tool correctly. The endpoint and scope add important operational context, and nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents raw, vin, and delegated_account_id. The description does not add parameter-level details, which is acceptable given the high schema coverage, but it also does not enhance understanding of any parameter beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: target battery state of charge, including the setting type and last-update context, so an agent can tell what data the tool returns. It is not fully differentiated from siblings like get_battery or get_charging_estimate, but the word 'target' and the endpoint make its purpose distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when target state of charge or its setting type is needed, but it does not explicitly state when to prefer this tool over related siblings such as get_battery or get_charging_estimate. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_car_secureIs the car closed and lockedARead-only
True/false security check: are all doors, windows, hood and tailgate closed, central lock engaged, alarm OK? Names anything open.
| Name | Required | Description | Default |
|---|---|---|---|
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral detail beyond the readOnlyHint and openWorldHint annotations by clarifying it returns true/false and names any open item. It accurately reflects the read-only nature of the check without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the core behavior first and then specifies exactly what is checked. Every phrase adds useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only check with one optional parameter, an output schema, and full parameter documentation, the description is complete. It tells the agent what the tool returns and what security aspects it covers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter, vin, is fully documented in the input schema with an explanation of its optionality. The description adds no parameter-specific detail, but with 100% schema coverage this is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a true/false security check covering doors, windows, hood, tailgate, central lock, and alarm. It is specific about the resource and behavior, though it does not explicitly distinguish itself from siblings like get_car_status or polestar_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: use this when you need to know whether the car is physically secure and what may be open. However, there is no explicit guidance about when to use this instead of sibling status or health tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domainsList data domainsARead-only
Every domain this server reads, with its endpoint, OAuth scope and tool name. Answer from here rather than guessing a domain name: an unknown domain is a 404 VALIDATION_RESOURCE_NOT_FOUND from the API, which is a different thing from a vehicle reporting no data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and not open-world, and the description reinforces that by saying 'Every domain this server reads.' It adds valuable behavioral context about the 404 error semantics and the distinction from missing vehicle data, which goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense, purposeful sentences. The first states exactly what is returned, and the second gives actionable guidance. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only listing tool with an output schema present, the description fully covers what the tool does, what it returns, and when to use it. The error-semantics note adds important operational context that the schema and annotations alone would not provide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so description-level parameter semantics are largely irrelevant. The baseline of 4 applies because there is nothing for the description to clarify about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every domain the server reads, with endpoint, OAuth scope, and tool name. This distinguishes it from siblings like list_vehicles and the get_* tools, which retrieve vehicle-specific data rather than a catalog of domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to consult this tool rather than guessing a domain name. It also clarifies the difference between an unknown domain returning a 404 VALIDATION_RESOURCE_NOT_FOUND and a vehicle reporting no data, helping the agent diagnose errors correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vehiclesList vehiclesARead-only
List the VINs this Polestar Data Portal credential is authorized to access.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful context that the result is scoped to VINs authorized for this credential, but it does not disclose anything further such as pagination, ordering, or behavior when no vehicles are available.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly scoped sentence that communicates the action, the resource, and the authorization constraint. Every word earns its place, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are no parameters, an output schema exists, and annotations cover read-only and open-world behavior, the description is complete for an agent to select and invoke the tool correctly. It clearly states what is returned (VINs) and the authorization boundary, which is all the agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema description coverage is 100%, so there is no parameter ambiguity to resolve. The baseline for a parameterless tool is 4, and the description appropriately focuses on output instead of inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it lists the VINs authorized for the credential, which clearly distinguishes this from the many get_* siblings that return details about individual vehicles. It is explicit about the scope of the result set, not just a restatement of the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool is for discovering which vehicles the current credential can access, but it does not explicitly state when to use it versus alternatives such as list_domains or the get_* tools. No exclusionary guidance is provided, though the simple no-parameter design makes the intended role fairly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_cheapest_chargePlan the cheapest chargeARead-only
Given hourly electricity prices, computes the cheapest hours inside the car's charge window (from global-charge-timer) that deliver enough energy to reach the target charge level.
| Name | Required | Description | Default |
|---|---|---|---|
| vin | No | Vehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used. | |
| phases | No | AC phases at your charger (default 3, Swedish 400V three-phase). | |
| prices | Yes | Hourly prices from your spot-price provider: [{startsAt: "2026-09-19T22:00:00+02:00", price: 0.42}, ...] | |
| capacityKwh | No | Usable pack capacity; auto-derived from dischargeInfo.energyAvailable when the car reports it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only, and the description reinforces that by saying it 'computes' a plan rather than executing a charge. It adds non-obvious context about depending on the global-charge-timer window and ensuring enough energy to hit the target level. It does not disclose failure behavior when the window cannot satisfy the target, but the output schema and open-world hint mitigate that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler. It front-loads the input ('Given hourly electricity prices'), states the core computation, and names both dependencies. Every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with the fully covered input schema, the output schema, and the readOnly/openWorld annotations, gives an agent everything needed to invoke the tool correctly. It explains the tool's inputs, dependencies, and output intent without over-explaining return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented. The description adds conceptual context by linking prices, the charge window, and the target level, but it does not add parameter-level detail beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('computes') with a clear resource ('cheapest hours inside the car's charge window') and a measurable goal ('deliver enough energy to reach the target charge level'). It is immediately distinct from the sibling getter tools, which retrieve state rather than produce a plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the input condition ('Given hourly electricity prices') and the constraints it uses ('charge window', 'target charge level'), so an agent knows when this tool is relevant. It does not explicitly name alternative tools or exclusion cases, but the context is strong enough to route appropriate requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polestar_statusServer statusARead-only
Server self-report: daily API budget (used/limit/reset), per-minute ceiling, cache hit rate, token expiry, and mode. Call this if you suspect you are burning through the daily API budget.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | False when the call produced no data. |
| vin | No | Vehicle the result is about, masked when POLESTAR_REDACT_VIN is on. |
| code | No | Machine-readable error code when ok is false. |
| data | No | Structured payload; shape documented per tool. |
| hint | No | Actionable guidance when ok is false. |
| tool | No | Tool that produced this result. |
| message | Yes | Result text, identical to the content block. |
| requestId | No | Upstream request id, the handle support needs. |
| ageSeconds | No | Staleness of the underlying telemetry. |
| httpStatus | No | Upstream HTTP status when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral context: it is a self-report that exposes budget consumption, limits, rate ceilings, cache performance, and token expiry. There is no contradiction and no hidden side effects implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with the metric list front-loaded and the usage trigger in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only status tool with an output schema, the description fully explains what the tool reports and when to invoke it. Nothing needed for correct selection or invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description carries no parameter burden. Baseline 4 applies because no parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a distinct purpose: a server self-report covering API budget, rate ceiling, cache hit rate, token expiry, and mode. This clearly separates it from the sibling vehicle-data getters, all of which report car state rather than server/API status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger condition: 'Call this if you suspect you are burning through the daily API budget.' It does not name alternatives or exclusions, but given the unique server-level scope, no sibling is a genuine alternative.
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.
23 tool updates
v0.3.0- First observed
get_amp_limit - First observed
get_availability - First observed
get_battery - First observed
get_car_status - First observed
get_charge_locations - First observed
get_charge_now - First observed
get_charging_estimate - First observed
get_exterior - First observed
get_global_charge_timer - First observed
get_health - First observed
get_is_at_charge_location - First observed
get_location - First observed
get_needs_attention - First observed
get_odometer - First observed
get_parking_climate_timer - First observed
get_parking_climatization - First observed
get_pre_cleaning - First observed
get_target_soc - First observed
is_car_secure - First observed
list_domains - First observed
list_vehicles - First observed
plan_cheapest_charge - First observed
polestar_status
TDQS
Scored across 23 tools
Most tools map cleanly to distinct M2M resources, so get_location, get_odometer, and get_exterior are unambiguous. The main overlap is get_health versus get_needs_attention, and get_car_status intentionally aggregates several get_* tools, which creates mild selection ambiguity.
The dominant pattern is snake_case get_<resource>, which is predictable and consistent across the telemetry and charging tools. The pattern is not perfectly uniform because of list_vehicles, list_domains, is_car_secure, plan_cheapest_charge, and polestar_status.
23 tools sits in the 16-25 range that feels heavy for an agent to navigate. Each tool is mostly endpoint-aligned, but the aggregate and derived helpers such as get_car_status, is_car_secure, get_needs_attention, and plan_cheapest_charge add useful value while also pushing the set toward redundancy.
The read-side surface is broad, covering the major telemetry domains, charging settings, and helpful derived queries, with list_domains preventing endpoint guessing. The main gaps are the lack of any write/control operations and some niche vehicle telemetry such as software version or tire pressure, which agents could work around.
Maintenance
Related MCP Connectors
Control your Tesla - wake it, warm it up, unlock and more. Get your developer token at https://Infoseek.ai/mcp. Also requires your own Tesla developer token which is tied to your car/fleet.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
MCP server wrapping the Tesla Fleet API and TeslaMate API
Auto.dev MCP — wraps the Auto.dev automotive data API (auto.dev)
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides access to Tesla vehicle telemetry data via the Tessie API, enabling real-time monitoring of battery status, charging state, climate controls, location, and other vehicle metrics through 30+ tools with intelligent caching.-
- AlicenseNot gradedqualityDmaintenanceAn MCP (Model Context Protocol) server that exposes Polestar 2 vehicle data to AI assistants like Claude. Query your car's battery status, vehicle info, and health data through natural conversation.MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for controlling Polestar vehicles via natural language, enabling climate, charging, locks, location, and vehicle status management through Claude.MIT
- AlicenseCqualityAmaintenanceEnables reading Tesla vehicle data from a TeslaMate PostgreSQL database, including status, trips, charging, efficiency, weather integration, and more, via 38 tools for MCP-compatible clients like Claude Code.38MIT