Skip to main content
Glama

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.

version node tools API offline demo

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.

IMPORTANT

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?"

get_car_status

One briefing: charge, range, locks, availability, odometer, service countdown, data ages

"Is everything locked?"

is_car_secure

A yes/no verdict that names anything open

"Does anything need attention?"

get_needs_attention

Active warnings only, plus the service countdown

"When will it be charged?"

get_charging_estimate

Energy and time to target, with every assumption stated

"Plan the cheapest charging tonight"

plan_cheapest_charge

A schedule of hours, given a spot-price curve you paste in

"Where is the car?"

get_location

Last known position with heading, speed, and data age

"How has the battery aged?"

get_degradation_report

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 interactively

Fixture 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

  1. 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.

  2. 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
    EOF
  3. Point your MCP client at the built server:

    {
      "mcpServers": {
        "polestar": {
          "command": "node",
          "args": ["/absolute/path/to/polestar-mcp/build/server.js"]
        }
      }
    }
  4. 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

list_vehicles

VINs, or your friendly names, that this credential may access

list_domains

The server's own registry: every domain with endpoint, scope, and tool name

Telemetry

get_availability

Whether the car is reachable/awake, and its usage mode

get_battery

Charge level, charging status and power, range, time to full, consumption, usable energy

get_exterior

Doors, windows, hood, tailgate, tank lid, central lock, tailgate lock, alarm

get_health

Service countdown (days, distance, engine hours) and fluid, light, and 12V warnings

get_location

Last known position, heading, speed, timestamp

get_odometer

Odometer and trip meters, average speeds

get_parking_climatization

Preheat/pre-cool status, runtime left, requested seat and wheel heating

get_pre_cleaning

Cabin air: PM2.5, air quality index, last pre-cleaning cycle

Charging

get_amp_limit

Configured maximum AC charging current, source, last update

get_charge_locations

Saved charge locations

get_charge_now

Charge-now override state (override charge timer sync)

get_global_charge_timer

Recurring charge window: hours, timezone offset, activation, sync

get_parking_climate_timer

Scheduled climate timers: ready-at hour, weekdays, activation

get_target_soc

Target charge level and setting type

get_is_at_charge_location

Whether the car is at a saved charge location (often unreported)

Aggregates and planning

get_car_status

One-call briefing: charge, range, locks, availability, odometer, service, ages

is_car_secure

Yes/no security verdict that names anything open

get_needs_attention

Active health warnings only, plus the service countdown

get_charging_estimate

Energy and time to reach the target SoC, assumptions stated

plan_cheapest_charge

Cheapest hours inside the car's charge window, given your spot prices

System

polestar_status

Budget used and remaining with reset time, cache hit rate, token expiry, mode

History (opt-in)

get_history

Recorded samples for one domain, one line per change

get_degradation_report

Implied full-charge range and capacity trend over history

get_charging_sessions

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 metaEventId changed, 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, and battery-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-After when 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_status shows 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_SCOPES for 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

POLESTAR_VEHICLE_LABELS

VIN=Friendly Name pairs, so answers say "My Car" instead of printing identifiers

POLESTAR_REDACT_VIN=1

Masks VINs in rendered output (first 3 and last 3 characters). Not with raw:true, which returns the payload as sent

POLESTAR_ALLOW_LOCATION=0

get_location refuses, and coordinates are stripped from aggregates

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

POLESTAR_CLIENT_ID

required live

OAuth client ID from the Data Portal

POLESTAR_CLIENT_SECRET

required live

OAuth client secret

POLESTAR_ACCOUNT_ID

required live

The Account ID, sent as x-client-id (distinct from the client ID)

POLESTAR_DELEGATED_ACCOUNT_ID

unset

Default delegated account for third-party credentials

POLESTAR_DELEGATED_ACCOUNT_IDS

unset

Allowlist a call's delegated_account_id argument is checked against

POLESTAR_BASE_URL

production URL

Override the API base URL

POLESTAR_M2M_TOKEN_ENDPOINT

{base}/token

Override just the token endpoint

POLESTAR_FIXTURES_DIR

unset

Serve captured responses instead of the live API

POLESTAR_ENV_FILE

unset

Alternative dotenv path (default ~/.config/polestar-mcp/.env.secrets)

POLESTAR_TIMEOUT_MS

15000

Hard deadline per HTTP request

POLESTAR_BUDGET

10000

Daily live-call ceiling; fails closed at the limit

POLESTAR_BUDGET_PER_MINUTE

100

Rolling per-minute ceiling the API also publishes; waited out rather than failed, when the wait fits the deadline

POLESTAR_CACHE

on

off disables the response cache

POLESTAR_SCOPES

all domain scopes

Space- or comma-separated scope override for the token request

POLESTAR_HISTORY_DIR

unset

Enable the JSONL history store (and history tools) here

POLESTAR_HISTORY_SAMPLE_SECONDS

600

Seconds between sampler rounds (clamped 60 to 3600)

POLESTAR_SAMPLE

off

1 actually runs the background sampler; off by default, polling spends quota

POLESTAR_VEHICLE_LABELS

unset

VIN=Name pairs shown instead of VINs

POLESTAR_REDACT_VIN

off

1 masks VINs in rendered output and the structured envelope. raw:true is exempt: it returns the upstream payload unchanged, VIN included

POLESTAR_ALLOW_LOCATION

on

0 refuses location reads and strips coordinates

POLESTAR_UNITS

km

mi (or miles) for humanized distances

POLESTAR_LOG

normal

debug for verbose stderr diagnostics

POLESTAR_ENABLE_WRITES

off

Scaffold for future write endpoints; registers nothing today

POLESTAR_HTTP_PORT

0 (stdio)

1 to 65535 switches to Streamable HTTP

POLESTAR_HTTP_HOST

127.0.0.1

HTTP bind address

POLESTAR_HTTP_TOKEN

unset

Bearer token for HTTP mode; required off loopback

POLESTAR_STRICT_ENV

off

1 makes an unrecognized variable fatal

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 together

Requires 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.

WARNING

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

Getting started

Credentials, every variable explained, first calls, troubleshooting

Tool reference

All 26 tools, endpoints and scopes, example responses

Architecture

The client module, the cache/retry/budget chain, history, resources, HTTP mode

The upstream API contract

Authentication, headers, envelope, errors, rate limits

Development and verification

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 tools
get_amp_limitGet amp-limitA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 availabilityA
Read-only

Vehicle availability: availabilityStatus and usageMode (whether the car is currently reachable/awake). (M2M endpoint: /v1/vehicles/{vin}/telemetry/availability, scope pdp-telemetry/availability).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 batteryA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 statusA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-locationsA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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-nowA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 estimateA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
phasesNoAC phases at your charger (default 3).

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

With an output schema present and 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 exteriorB
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

An output schema exists so return shape 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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-timerA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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.

Usage Guidelines2/5

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 healthA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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-locationA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 locationA
Read-only

Last known position: latitude, longitude, altitude, heading, speed, with timestamp. (M2M endpoint: /v1/vehicles/{vin}/telemetry/location, scope pdp-telemetry/location).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 attentionA
Read-only

Only the active warnings from the health domain (fluids, lights, 12V, service) plus the service countdown. Empty means nothing needs attention.

ParametersJSON Schema
NameRequiredDescriptionDefault
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 odometerB
Read-only

Odometer meters, trip meters (manual and automatic, km), average speeds (km/h). (M2M endpoint: /v1/vehicles/{vin}/telemetry/odometer, scope pdp-telemetry/odometer).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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

For a simple read-only 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents 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.

Purpose4/5

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.

Usage Guidelines2/5

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-timerA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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-climatizationA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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-cleaningA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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-socA
Read-only

Target battery state of charge (%), setting type (CUSTOM/PRESET), last update. (M2M endpoint: /v1/vehicles/{vin}/charging/target-soc, scope pdp-charging/targetSoc).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn 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.
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
delegated_account_idNoThird-party credentials only: read the shared vehicles of this account for this call. Must be listed in POLESTAR_DELEGATED_ACCOUNT_IDS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema 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.

Purpose4/5

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.

Usage Guidelines3/5

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 lockedA
Read-only

True/false security check: are all doors, windows, hood and tailgate closed, central lock engaged, alarm OK? Names anything open.

ParametersJSON Schema
NameRequiredDescriptionDefault
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 domainsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 vehiclesA
Read-only

List the VINs this Polestar Data Portal credential is authorized to access.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 chargeA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
vinNoVehicle Identification Number. Optional when the credential has exactly one vehicle, omit it and the only vehicle is used.
phasesNoAC phases at your charger (default 3, Swedish 400V three-phase).
pricesYesHourly prices from your spot-price provider: [{startsAt: "2026-09-19T22:00:00+02:00", price: 0.42}, ...]
capacityKwhNoUsable pack capacity; auto-derived from dischargeInfo.energyAvailable when the car reports it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 statusA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYesFalse when the call produced no data.
vinNoVehicle the result is about, masked when POLESTAR_REDACT_VIN is on.
codeNoMachine-readable error code when ok is false.
dataNoStructured payload; shape documented per tool.
hintNoActionable guidance when ok is false.
toolNoTool that produced this result.
messageYesResult text, identical to the content block.
requestIdNoUpstream request id, the handle support needs.
ageSecondsNoStaleness of the underlying telemetry.
httpStatusNoUpstream HTTP status when ok is false.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 23 tool updatesv0.3.0
    • First observedget_amp_limit
    • First observedget_availability
    • First observedget_battery
    • First observedget_car_status
    • First observedget_charge_locations
    • First observedget_charge_now
    • First observedget_charging_estimate
    • First observedget_exterior
    • First observedget_global_charge_timer
    • First observedget_health
    • First observedget_is_at_charge_location
    • First observedget_location
    • First observedget_needs_attention
    • First observedget_odometer
    • First observedget_parking_climate_timer
    • First observedget_parking_climatization
    • First observedget_pre_cleaning
    • First observedget_target_soc
    • First observedis_car_secure
    • First observedlist_domains
    • First observedlist_vehicles
    • First observedplan_cheapest_charge
    • First observedpolestar_status

TDQS

A3.7/5.0

Scored across 23 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers