Skip to main content
Glama

Rivian MCP

Ask Claude or ChatGPT about your Rivian and its recorded drives. Host the recorder in your Cloudflare account, or use the local version for live vehicle data. Tool results go to the AI app you connect. See data handling.

It only reads from Rivian. It sends no commands to your vehicle and changes no settings. This project is unofficial and not affiliated with or endorsed by Rivian.

Claude showing a recorded drive with its route on a map, distance, speed and elevation

Self-host on Cloudflare

You need:

  • A free Cloudflare account. See cost and removal.

  • A free GitHub account. The Deploy button asks you to connect it, and Cloudflare keeps your copy of the project there.

  • Your Rivian email and password, and the phone or email that gets Rivian's one-time code.

To skip GitHub, deploy from a terminal with Node.js 24.

1. Deploy

Deploy to Cloudflare

  1. Select the button and sign in to Cloudflare.

  2. Connect your GitHub account when asked.

  3. On Create and deploy, keep the suggested names and select Deploy.

  4. In the Worker's Settings, then Build, clear Enable Preview Builds.

See the setup guide for screenshots and account sign-up.

The first Rivian account that signs in becomes the owner. Connect right after you deploy.

Cloudflare creates the storage and starts the server. It shows your address:

https://rivian-mcp.<your-name>.workers.dev

Add /mcp to get your connector address:

https://rivian-mcp.<your-name>.workers.dev/mcp

2. Connect Claude

Works on claude.ai and in the Claude desktop and mobile apps.

  1. Open Settings, then Connectors, then Add custom connector.

  2. Name it Rivian and paste your connector address.

  3. Select Add, then Connect.

  4. Sign in with your Rivian email and password, then enter the one-time code Rivian sends you.

Recording starts as soon as you are signed in. In a new chat, ask "Is the recorder running?"

ChatGPT and Codex work too: Connect ChatGPT, Connect Codex.

What you can ask

  • "Show my last drive."

  • "Rivian status."

  • "List my drives this week."

  • "Show my stats for the last 30 days."

  • "Show my charging sessions."

  • "Export my last drive for Roadbook."

  • "What's my battery level?"

  • "Is there a software update available?"

  • "Are all the doors locked?"

Take your drives to Roadbook

Export your route, places and stats for Roadbook, an electric road-trip planner. Importing requires a Roadbook connector with an import_drive tool. Check its availability and privacy settings before sending a drive. See the export format.

Tools

Tool

What it does

show_status

Live dashboard: doors, locks, tires, battery, charging and updates

show_drive

One drive with its route map and speed, energy and elevation charts

show_stats

Totals and efficiency for a period, with every route on one map

show_charging

Charging sessions with energy added, power and battery level curves

list_drives

Drives with places, local times, energy, elevation and quality

get_drive

One drive as a GeoJSON Feature with the route and all stats

export_drive

One drive or a date range as a Roadbook payload, GeoJSON or GPX

recorder_status

Whether the recorder is signed in and connected

rivian_get_user_info

Your account, vehicles and software versions

rivian_get_vehicle_state

Live battery, doors, tires, location, climate and OTA status

rivian_get_ota_status

Current and available software versions

rivian_get_charging_session

Active charging session

rivian_get_charging_history

Past charging sessions with energy, cost and location

rivian_get_charging_schedule

Your charging schedule

rivian_get_drivers_and_keys

Drivers and their phone keys and key fobs

Cost, updates, where your data lives and how to remove it are in docs/cloudflare.md.

Related MCP server: Tesla Tessie MCP Server

Run it locally

The npm package provides a CLI and a local MCP server. Both query your vehicle while they are running; neither records drives. You need Node.js 24 or newer.

CLI

npx rivian-mcp ota    # software update status
npx rivian-mcp stats  # full vehicle state

Or install it globally:

npm install -g rivian-mcp
rivian ota
rivian stats

The CLI reads RIVIAN_EMAIL and RIVIAN_PASSWORD from the environment, or asks for them. Password and one-time-code prompts require an interactive terminal.

Local MCP server

claude mcp add rivian \
  -e RIVIAN_EMAIL=your@email.com \
  -e RIVIAN_PASSWORD=your-password \
  -- npx rivian-mcp

Add to ~/.claude.json or your project's .mcp.json:

{
  "mcpServers": {
    "rivian": {
      "command": "npx",
      "args": ["-y", "rivian-mcp"],
      "env": {
        "RIVIAN_EMAIL": "your@email.com",
        "RIVIAN_PASSWORD": "your-password"
      }
    }
  }
}

Rivian asks for a one-time code on every new sign-in:

  1. Ask Claude, "Log in to Rivian."

  2. Rivian sends a code to your phone or email.

  3. Tell Claude, "The code is 123456."

The local server adds rivian_login and rivian_submit_otp for this step. The CLI and the local server share the session in ~/.rivian-mcp/session.json. It is reused for up to 90 days.

Support

If you are thinking about getting a Rivian, my referral code gets you benefits on your purchase and supports this project:

Get a Rivian R1 with referral benefits

Development

git clone https://github.com/zentered-studios/rivian-mcp.git
cd rivian-mcp
npm ci
npm run typecheck
npm run lint
npm test
npm run build
npx wrangler deploy --dry-run

Use Node.js 24 or newer. Tests use fixtures, mocked requests and an in-memory SQLite database; they do not need Rivian credentials or a Cloudflare account. The dry run builds the Worker and embedded views without deploying.

For local Worker development, run npm run worker:dev and apply the schema with npx wrangler d1 migrations apply DB --local. No .dev.vars file is required. To pin the owner, create an ignored .dev.vars containing RIVIAN_EMAIL="you@example.com". Hosted AI connectors need a publicly reachable HTTPS Worker; localhost is for development.

Register live queries in src/tools.ts and local login tools in src/mcp-server.ts. Recorder tools belong in worker/src/mcp.ts; embedded views belong in worker/ui/. Add a regression test for behavior changes. Rivian access must remain read-only apart from authentication.

See tool-call examples for JSON arguments.

Claude Code plugin

The plugin documents the Rivian API fields, authentication and formatters for Claude Code.

claude /plugin marketplace add zentered-studios/rivian-mcp
claude /plugin install rivian-mcp@rivian-ai

References

Available Tools

9 tools
rivian_get_charging_historyA
Read-only

List past charging sessions, newest first. Each row has date, start and end time, duration, energy in kWh, cost or free, city, charging network and charger type (home, public or other). Use it for completed sessions. For a charge in progress use rivian_get_charging_session. Returns readable text. Includes charging sessions from every vehicle on the account. Requires a signed-in Rivian session and returns an error without one. Read-only: sends no command to the vehicle.

NameRequiredDescriptionDefault
limitNoHow many of the newest sessions to return, for example 10. Whole number of 1 or more. Defaults to 25.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond readOnlyHint/openWorldHint it adds real behavioral context: a signed-in Rivian session is required and an error is returned otherwise, sessions from every vehicle on the account are aggregated, and output is readable text. The read-only restatement mildly duplicates the annotation, but the auth, scope, and return-format disclosures are substantive additions.

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?

Front-loaded with the resource and ordering, then progressively adds row contents, usage routing, scope, and prerequisites. Sentences are dense and every one carries information; 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?

With no output schema, the description compensates by enumerating returned fields (date, times, duration, kWh, cost/free, city, network, charger type). Auth requirements and account-wide scope are covered, so an agent has everything needed to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, and the single 'limit' parameter is fully documented in the schema (meaning, example, default of 25). The description adds nothing about the parameter, so the baseline 3 applies.

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

Purpose5/5

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

The first sentence gives a specific verb and resource ('List past charging sessions, newest first') and the second enumerates exactly what each row contains. It explicitly distinguishes itself from the sibling tool rivian_get_charging_session, so an agent can route without opening a schema.

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?

It states when to use it ('Use it for completed sessions') and names the exact alternative for the excluded case ('For a charge in progress use rivian_get_charging_session'). Both the selection condition and the sibling routing are explicit.

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

rivian_get_charging_scheduleA
Read-only

Get the charging schedules saved for the vehicle: start and end time, duration, whether each is enabled, amperage, the days of the week and the location it applies to. Use it to see when the vehicle is set to charge. It does not change a schedule. For a charge in progress use rivian_get_charging_session. Returns readable text. Reads the first vehicle on the account. Requires a signed-in Rivian session and returns an error without one. Read-only: sends no command to the vehicle.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation it discloses the auth requirement ('requires a signed-in Rivian session and returns an error without one'), the vehicle-selection behavior ('reads the first vehicle on the account'), the output form ('returns readable text'), and confirms no command is sent to the vehicle. This is rich behavioral context an agent could not derive from the annotations alone.

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?

Front-loaded with the returned fields and free of filler. There is mild redundancy between 'It does not change a schedule' and the closing 'Read-only: sends no command to the vehicle', but each targets a slightly different concern, so the cost is small.

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, no-output-schema read tool, the description covers purpose, fields returned, auth preconditions, error behavior, vehicle scoping, and the sibling alternative. An agent has everything needed to call it correctly.

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

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing parameter-level the description needs to compensate for, and it correctly implies that no arguments are 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?

States a specific verb and resource (get charging schedules saved for the vehicle) and enumerates the exact fields returned (start/end time, duration, enabled, amperage, days of week, location). It explicitly distinguishes itself from the sibling rivian_get_charging_session, so an agent can route without opening schemas.

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?

Gives the use case ('see when the vehicle is set to charge'), an explicit exclusion ('does not change a schedule'), and names the alternative for the adjacent case ('For a charge in progress use rivian_get_charging_session'). Nothing is left to inference.

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

rivian_get_charging_sessionA
Read-only

Get the charge happening now: battery level, power in kW, energy added in kWh, current in A, time elapsed and remaining, cost so far or free, whether it is a Rivian charger, and the charger location. When no live session exists, it reports the vehicle charging state instead. For finished sessions use rivian_get_charging_history; for planned charging use rivian_get_charging_schedule. Returns readable text. Reads the first vehicle on the account. Requires a signed-in Rivian session and returns an error without one. Read-only: sends no command to the vehicle.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint annotations, it discloses an auth prerequisite and the failure mode ('Requires a signed-in Rivian session and returns an error without one'), an account-scoping quirk ('reads the first vehicle on the account'), a graceful degradation path (reports vehicle charging state when no session exists), and the return shape (readable text). These are operationally relevant facts not present in 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.

Conciseness4/5

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

The first sentence front-loads the core purpose and field inventory; routing guidance and preconditions follow in a logical order. It is dense and slightly list-heavy, and 'Returns readable text' is low-value filler, but no sentence is redundant.

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 no output schema, the description carries the return-value burden and does so by enumerating the fields and stating the format is readable text. It also covers auth, account scoping, and the no-live-session case, so an agent has everything needed to call it and interpret results.

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

Parameters4/5

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

The tool takes zero parameters, so per the baseline this scores 4. The description's field list describes outputs rather than inputs, which is appropriate here.

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?

Names a specific verb and resource ('get the charge happening now') and enumerates the exact fields returned (battery level, kW, kWh, current, elapsed/remaining time, cost, charger identity/location). It explicitly differentiates itself from rivian_get_charging_history and rivian_get_charging_schedule by naming them as the tools for finished and planned sessions.

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?

Gives explicit routing rules: use this for a live session, rivian_get_charging_history for finished sessions, rivian_get_charging_schedule for planned charging. It also states the fallback behavior when no live session exists, so the agent knows there is no error case to route around.

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

rivian_get_drivers_and_keysA
Read-only

List who and what can open and drive the vehicle: invited drivers, enrolled phone keys and key fobs. Use it to audit access to the vehicle. It does not add or revoke access. For account and vehicle details use rivian_get_user_info. Returns readable text. Reads the first vehicle on the account. Requires a signed-in Rivian session and returns an error without one. Read-only: sends no command to the vehicle.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/openWorldHint annotations: it discloses the auth prerequisite ('Requires a signed-in Rivian session and returns an error without one'), the implicit scoping behavior ('Reads the first vehicle on the account'), and the return format ('Returns readable text'). These are exactly the traits an agent cannot derive from the structured fields.

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?

Front-loaded with the core purpose and kept to short, scannable sentences with no filler. The closing 'Read-only: sends no command to the vehicle' partially restates the readOnlyHint annotation, a minor redundancy in an otherwise tight definition.

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 tool with no output schema, the description covers everything needed: what it returns, the format, the auth requirement, the error behavior, and the vehicle scope. An agent has no remaining questions before invoking it.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description correctly explains why no selector exists by noting it reads the first vehicle on the account, which compensates for the absent vehicle-selection parameter.

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

Purpose5/5

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

States a specific verb and resource ('List who and what can open and drive the vehicle') and enumerates the concrete items returned: invited drivers, enrolled phone keys, key fobs. It also explicitly differentiates itself from the sibling rivian_get_user_info, so an agent can route correctly without opening either schema.

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?

Gives explicit when-to-use ('Use it to audit access to the vehicle'), an explicit boundary ('It does not add or revoke access'), and names the alternative tool for a related need ('For account and vehicle details use rivian_get_user_info'). Nothing about selection is left to inference.

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

rivian_get_ota_statusA
Read-only

Get the installed software version, the update status reported by the vehicle (for example idle) and any available update with its version and release notes link. Use it to check whether an update is waiting. For the full account and vehicle list use rivian_get_user_info. Returns readable text; shows "up to date" when no update is available. Reads the first vehicle on the account. Requires a signed-in Rivian session and returns an error without one. Read-only: sends no command to the vehicle.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/openWorldHint annotations, the description discloses the authentication prerequisite ('Requires a signed-in Rivian session and returns an error without one'), the scope limitation ('Reads the first vehicle on the account'), the side-effect profile ('sends no command to the vehicle'), and the return format including the 'up to date' sentinel. This is exactly the context annotations cannot carry.

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 core capability is front-loaded in the first sentence, followed by usage, alternative routing, return format, auth requirement, and read-only confirmation. Every sentence carries distinct information, though the description is on the long side for a no-argument read tool.

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 no output schema, the description still documents what comes back (readable text, 'up to date' when nothing is pending), the auth failure mode, and the single-vehicle scope. An agent has everything needed to call and interpret it.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics to compensate for; baseline 4 applies. The description correctly does not invent parameter details.

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 verb+resource (installed software version, update status, available update) and scopes it precisely, noting it reads the first vehicle on the account. It explicitly distinguishes itself from the sibling rivian_get_user_info, which handles the full account/vehicle list.

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

Usage Guidelines4/5

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

'Use it to check whether an update is waiting' states the triggering condition clearly, and 'For the full account and vehicle list use rivian_get_user_info' names the alternative with the condition that selects it. There is no explicit when-not guidance, but the routing is unambiguous.

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

rivian_get_user_infoA
Read-only

Get the account owner and each vehicle on the account: name, model, VIN, trim, drive system, colors, wheels, build date, installed software version and any available update with a release notes link. Use it to identify the vehicle or the account. For update progress use rivian_get_ota_status; for live readings use rivian_get_vehicle_state. Returns readable text. Requires a signed-in Rivian session and returns an error without one. Read-only: sends no command to the vehicle.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds substantive behavioral context beyond them – a signed-in Rivian session is required and an error is returned without one, no command is sent to the vehicle, and the response is readable text. This is the kind of auth/prerequisite disclosure that must live in prose.

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?

Front-loaded with the purpose and field list, then alternatives, then prerequisites in a logical order. It is a dense four sentences, but each carries distinct information (content, routing, auth, safety) rather than padding.

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 no output schema, the description compensates by enumerating what the response contains (owner, per-vehicle fields, software version, update with release-notes link). Auth requirement, error behavior, and read-only status are all covered, leaving no gap for an agent to fill.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4 per the rubric; there is nothing for the description to clarify beyond the empty schema. It correctly does not invent or discuss parameters.

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?

Specific verb ('Get') plus concrete resource (account owner and each vehicle) with an enumerated field list (name, model, VIN, trim, drive system, colors, wheels, build date, software version, update link). This clearly separates it from siblings like rivian_get_vehicle_state and rivian_get_ota_status without needing to open any schema.

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?

Explicitly states when to use it ('identify the vehicle or the account') and routes to alternatives by name with conditions: rivian_get_ota_status for update progress, rivian_get_vehicle_state for live readings. Nothing is left to inference.

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

rivian_get_vehicle_stateA
Read-only

Get the live vehicle state as readable text: battery level and range, doors, windows, tires, location, climate, seat heating and ventilation, steering wheel heat, software versions, and security and trailer status. Use it for how the vehicle is right now. For an active charge use rivian_get_charging_session; for past charges use rivian_get_charging_history; for updates use rivian_get_ota_status. Distances follow the unit set in the vehicle. Reads the first vehicle on the account. Requires a signed-in Rivian session and returns an error without one. Read-only: sends no command to the vehicle.

NameRequiredDescriptionDefault
propertiesNoNames of the vehicle state properties to read, for example "batteryLevel" or "doorFrontLeftLocked". Omit or pass an empty array for the full report. An unknown name makes the Rivian API reject the request.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/openWorldHint annotations by disclosing the auth requirement ('Requires a signed-in Rivian session and returns an error without one'), the account-scoping behavior ('Reads the first vehicle on the account'), the unit convention ('Distances follow the unit set in the vehicle'), and the side-effect profile ('sends no command to the vehicle'). These are the operational facts an agent needs before calling.

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?

Front-loads the resource and its contents, then moves to routing rules, then prerequisites and safety. Every sentence carries distinct information (contents, alternative routing, units, auth, read-only) 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?

With no output schema, the description compensates by enumerating the returned state categories, and it covers the auth prerequisite, account scoping, unit conventions, and the read-only guarantee. An agent has everything needed to call this correctly and interpret the result.

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%: the single 'properties' parameter already documents accepted names, the omit/empty-array behavior for a full report, and the failure mode for unknown names. The description adds nothing further about the parameter, so the baseline 3 for fully-documented schemas applies.

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

Purpose5/5

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

States a specific verb and resource ('Get the live vehicle state as readable text') and enumerates the exact contents returned (battery, doors, windows, tires, location, climate, software versions, security/trailer). It clearly distinguishes itself from the charging and OTA siblings by naming them explicitly.

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?

Gives an explicit when-to-use rule ('Use it for how the vehicle is right now') and routes three adjacent cases to named alternatives: rivian_get_charging_session for active charge, rivian_get_charging_history for past charges, and rivian_get_ota_status for updates. Nothing is left to inference.

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

rivian_loginA

Sign in to Rivian with the RIVIAN_EMAIL and RIVIAN_PASSWORD set in the MCP server configuration. Call it when no session is saved or after the session expires; a saved session is restored on launch. Takes no arguments. Replaces the current session and saves it to ~/.rivian-mcp/session.json. When Rivian requires two-step verification, it sends a code to your phone or email and the sign-in stays pending until you pass the code to rivian_submit_otp. Returns a message saying either that you are signed in or that a code was sent, and an error if the credentials are missing or Rivian rejects them.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare write/open-world/non-destructive, but the description adds substantive behavior: it replaces the current session, persists to ~/.rivian-mcp/session.json, leaves sign-in pending until OTP is submitted, and returns either a signed-in message or a code-sent message plus credential errors. This is exactly the context annotations cannot convey.

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?

Front-loaded with purpose and trigger condition; every sentence carries distinct information (trigger, persistence, OTP flow, returns). It is dense but slightly long, with the return-value sentence arguably recoverable from behavior, so not quite maximal conciseness.

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 no output schema, the description compensates by describing both success and failure return messages and the pending-OTP state. Trigger conditions, credential source, side effects, and follow-up tool are all covered for what is a moderately complex auth operation.

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

Parameters5/5

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

There are zero parameters, and the description explicitly confirms 'Takes no arguments' alongside the fact that credentials come from server configuration (RIVIAN_EMAIL/RIVIAN_PASSWORD) rather than the call. That removes any ambiguity about supplying credentials as 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?

States a specific verb+resource ('Sign in to Rivian') and immediately distinguishes itself from the sibling read tools, which all fetch state rather than establish a session. An agent can tell from the first clause that this is the authentication entry point.

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?

Explicitly names the conditions for calling ('when no session is saved or after the session expires') and notes that a saved session is restored automatically on launch, so the agent knows when NOT to call. It also routes the OTP follow-up to rivian_submit_otp by name, covering the alternative path.

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

rivian_submit_otpA

Finish a Rivian sign-in with the verification code Rivian sent to your phone or email. Use it only after rivian_login reported that a code was sent; without a pending sign-in it returns an error and asks you to call rivian_login. On success it saves the session to ~/.rivian-mcp/session.json. Uses the RIVIAN_EMAIL set in the MCP server configuration. Returns a message saying you are signed in, or an error if Rivian rejects the code.

NameRequiredDescriptionDefault
otp_codeYesThe verification code exactly as Rivian sent it, as a string, for example "123456". Do not include spaces.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true); the description goes further by disclosing a concrete side effect (session persisted to ~/.rivian-mcp/session.json), a configuration dependency (RIVIAN_EMAIL from server config), and both success and rejection return behavior.

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?

Four short sentences, front-loaded with the action and the sequencing constraint, followed by the side effect and return behavior. No filler and nothing repeated from the schema.

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 no output schema, the description must describe returns, and it does ('a message saying you are signed in, or an error if Rivian rejects the code'). Combined with preconditions, auth source, and persistence, an agent has everything needed to call it correctly.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, so the schema already defines format, type, and the no-spaces rule. The description adds only the faintly useful provenance detail that the code arrives by phone or email, which is the baseline-3 case.

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

Purpose5/5

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

States a specific verb and resource ('Finish a Rivian sign-in with the verification code') and names the sibling tool it complements (rivian_login), so the agent can distinguish it from the eight other rivian_* tools immediately.

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?

Gives an explicit precondition ('Use it only after rivian_login reported that a code was sent') and states the failure path when that precondition is unmet ('it returns an error and asks you to call rivian_login'). That is a full when-to-use / what-happens-otherwise rule.

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. 3 tool updatesv1.10.1
    • Changedrivian_get_charging_history1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Number of newest sessions to show. Defaults to 25."New value: +"How many of the newest sessions to return, for example 10. Whole number of 1 or more. Defaults to 25."
    • Changedrivian_get_vehicle_state1 field changed
      • changedInput schema / properties / properties / description
        Previous value: -"Specific properties to check. Leave empty for a full status report."New value: +"Names of the vehicle state properties to read, for example \"batteryLevel\" or \"doorFrontLeftLocked\". Omit or pass an empty array for the full report. An unknown name makes the Rivian API reject the request."
    • Changedrivian_submit_otp1 field changed
      • changedInput schema / properties / otp_code / description
        Previous value: -"The verification code"New value: +"The verification code exactly as Rivian sent it, as a string, for example \"123456\". Do not include spaces."
  2. 9 tool updatesv1.9.3
    • Changedrivian_get_charging_history2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Number of newest sessions to show. Defaults to 25.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
    • Changedrivian_get_charging_schedule1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrivian_get_charging_session1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrivian_get_drivers_and_keys1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrivian_get_ota_status1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrivian_get_user_info1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrivian_get_vehicle_state2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedrivian_login1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedrivian_submit_otp2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
  3. 6 tool updatesv1.5.4
    • Addedrivian_get_charging_history
    • Addedrivian_get_charging_schedule
    • Changedrivian_get_charging_session3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / vehicle_id
        Removed value: -{
        -  "description": "Vehicle ID from your account info",
        -  "type": "string"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "vehicle_id"
        -]
    • Changedrivian_get_drivers_and_keys3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / vehicle_id
        Removed value: -{
        -  "description": "Vehicle ID from your account info",
        -  "type": "string"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "vehicle_id"
        -]
    • Changedrivian_get_ota_status3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / vehicle_id
        Removed value: -{
        -  "description": "Vehicle ID from your account info",
        -  "type": "string"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "vehicle_id"
        -]
    • Changedrivian_get_vehicle_state2 fields changed
      • removedInput schema / properties / vehicle_id
        Removed value: -{
        -  "description": "Vehicle ID from your account info",
        -  "type": "string"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "vehicle_id"
        -]
  4. 7 tool updatesv1.0.0
    • First observedrivian_get_charging_session
    • First observedrivian_get_drivers_and_keys
    • First observedrivian_get_ota_status
    • First observedrivian_get_user_info
    • First observedrivian_get_vehicle_state
    • First observedrivian_login
    • First observedrivian_submit_otp

TDQS

A4.6/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, with descriptions that explicitly differentiate similar tools (e.g., live vs. historical charging, OTA vs. vehicle state). No overlapping functionality; an agent can easily select the right tool.

Naming Consistency5/5

All tool names follow a consistent 'rivian_' prefix followed by a verb or noun phrase in snake_case, with no deviations. The pattern is predictable and readable.

Tool Count5/5

Nine tools provide a well-scoped set for reading Rivian vehicle and account data, without unnecessary or missing operations. The count is appropriate for the read-only focus.

Completeness3/5

The toolset is entirely read-only and lacks any commands to control the vehicle (e.g., lock/unlock, start charging, climate control) or manage schedules and access. These are notable gaps for a Rivian MCP server.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    Enables Claude Desktop to access Tesla vehicle data through the Tessie API. Users can query their car's location, battery level, mileage, driving history, and charging status using natural language.
    5
    9
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides access to Tesla vehicle telemetry data via the Tessie API, enabling real-time monitoring of battery status, charging state, climate controls, location, and other vehicle metrics through 30+ tools with intelligent caching.
    -
  • A
    license
    C
    quality
    C
    maintenance
    Enables reading Tesla vehicle data from a TeslaMate PostgreSQL database, including status, trips, charging, efficiency, weather integration, and more, via 38 tools for MCP-compatible clients like Claude Code.
    38
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    A Model Context Protocol server that connects Claude to your own Kia vehicle through the Kia Owners API, enabling vehicle status, location, odometer, EV charge state, and confirm-gated commands for doors, climate, and charging.
    16
    309 npm
    MIT