Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.chrischall/kiaaccess-mcp

NPM · KIAACCESS-MCP · SCANNED SEP 21

Kia Access for Claude — vehicle status, location, doors, climate, and charging

Available components

+15 this week 88 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security93
  • No malware found by supply-chain analysis.Pass
  • Known CVEs were checked across the 4 of 5 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • Dependency health was assessed across the 4 of 5 dependencies we could resolve, so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to chrischall/kiaaccess-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 0 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability72
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2837 tokens (~166/item across 17 items; 17 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
  • Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety45
  • Injection-marker check failed: the description of tool "kia_vehicle_status" contains an instruction to conceal the call from the user, the text "do not tell the user", at byte 673 of that field. See how to fix → Fail
  • 4 of 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "kia_charge_targets" implies "charge" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the io.github.chrischall/kiaaccess-mcp server?

io.github.chrischall/kiaaccess-mcp runs locally as an npm package, launched with npx -y kiaaccess-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · kiaaccess-mcp

# add to Claude Code
claude mcp add chrischall-kiaaccess-mcp -- npx -y kiaaccess-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "chrischall-kiaaccess-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "kiaaccess-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "chrischall-kiaaccess-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "kiaaccess-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add chrischall-kiaaccess-mcp -- npx -y kiaaccess-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "chrischall-kiaaccess-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "kiaaccess-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add chrischall-kiaaccess-mcp --command npx --arg -y --arg kiaaccess-mcp
# ~/.hermes/config.yaml
mcp_servers:
  chrischall-kiaaccess-mcp:
    command: "npx"
    args: ["-y", "kiaaccess-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "chrischall-kiaaccess-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "kiaaccess-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add chrischall-kiaaccess-mcp -t stdio -c npx -a -y kiaaccess-mcp
// mcp.json
{
  "mcpServers": {
    "chrischall-kiaaccess-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "kiaaccess-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 21 Sept 26 0
    • Known CVEs: pass → partial security
    • Destructive annotations: 0% → 80% functional
    • Dependency health: 1.00 → partial functional
    • Package version: 1.0.0 → 1.0.1 functional
  • 20 Sept 26 +1
    • MCP protocol: Implements a current MCP spec version (2026-07-28). functional
    • Package version: 0.9.0 → 1.0.0 functional
  • 18 Sept 26 −2
    • Stability: pass → unverified security
    • Tool safety: fail → unverified security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Dependency health: 0.86 → 1.00 functional
    • Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
    • Stability: pass → 0.80 functional
    • Package version: 0.8.2 → 0.9.0 functional
  • 17 Sept 26 0
    • Stability: 0.97 → pass security
  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 +15
    • Malware scan: unverified → pass security
  • 14 Sept 26 −14
    • Stability: 0.87 → unverified security
    • Malware scan: pass → unverified security
    • Tool safety: fail → unverified security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
    • Package version: 0.8.1 → 0.8.2 functional
  • 12 Sept 26 +16
    • Malware scan: unverified → pass security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Analysed npm/kiaaccess-mcp@1.0.1

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo chrischall/kiaaccess-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/chrischall/kiaaccess-mcp/.github/workflows/release-please.yml@refs/heads/main
Rekor log index 2904926766
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:6463dbaf84c13f8396f0e5ba56d4e6ff9521b1428a4bdcae485a6eb60ee122cf3353e9bf3b70a5552b54564fc910e28f497eaf4bffe1f3b5384365549

Background: How many MCP packages publish verified provenance →

Dependencies 4 packages
Packages resolved 4
Tree resolution Partial

The dependency tree was only partially resolved, so these counts may be incomplete.

Background: SBOMs and build attestations, explained →

MCP tools · 17 exposed · ~2,837 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
kia_charge_targets ~78

Read the EV charge targets (`evc/gts`): the target state of charge per plug type (one entry for AC, one for DC). Verified live against a real vehicle. Read-only — makes no changes.

NameTypeReqDescription
vinKeystringyesVehicle key (the `vehicleKey` from the vehicle-list tool). Not the VIN.

No output schema declared.

No examples provided.

kia_export_refresh_token ~147

Return the stored Kia remember-me token (rmtoken) IN PLAINTEXT. This is a CREDENTIAL: it bypasses MFA entirely and, with the account password, grants full control of the vehicle — including unlocking it. It exists for one purpose: moving a locally-bootstrapped session into a hosted deployment, which stores it in the user's encrypted credentials. Do NOT call it to "check the session" (use kia_session_status), and never display or log the value except where the user explicitly asked for it. Without confirm:true the token is not even read.

NameTypeReqDescription
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.

No output schema declared.

No examples provided.

kia_forget_session ~129

Discard the locally stored Kia session (the remember-me token), so the next Kia call needs the one-time MFA bootstrap again. This is the recovery path when the stored token no longer works — Kia revoked it, the password changed, or the account moved to another device — and the only alternative is deleting the session file by hand. It makes NO network call: Kia is not told anything, only this machine forgets. Without confirm:true nothing is deleted and you get a preview instead.

NameTypeReqDescription
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.

No output schema declared.

No examples provided.

kia_healthcheck ~94

Resolves the credential the way real tools do, then makes one authenticated request to Kia Connect. Reports which source supplied the credential, whether Kia Connect accepted it, the round-trip time, and a plain-English hint distinguishing 'no credential' from 'credential rejected' from 'a Kia Connect-side problem'. Read-only; never returns the credential itself. Call this when a real tool fails and you want to know which hop broke.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

kia_list_vehicles ~67

List the vehicles enrolled on this Kia Owners account (ownr/gvl). Returns each vehicleKey — the id every other Kia tool takes — plus nickname, model year/name/trim, mileage, fuel type and telematics unit. VINs are masked to their last 6 characters.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

kia_refresh_status ~122

Ask the car for a fresh reading (rems/rvs, requestType 0). This WAKES THE TELEMATICS UNIT, so it is much slower than kia_vehicle_status and draws a little power — prefer the cached read unless staleness matters. Kia only acknowledges the request; it does not return the new data and gives no completion signal, so read kia_vehicle_status afterwards to see the refreshed values.

NameTypeReqDescription
vehicle_keystringvehicleKey from kia_list_vehicles. Optional: defaults to the only vehicle when the account has exactly one.

No output schema declared.

No examples provided.

kia_send_otp ~172

Step 2 of the Kia MFA bootstrap (cmm/sendOTP): deliver a one-time passcode to the account by SMS or email. Takes the `otpKey` and `xid` from kia_start_login — it cannot run without them, which is why it has no separate confirm gate. Ask the user which channel they want (kia_start_login reports the masked destinations Kia has on file). The passcode expires in about two minutes; `expiresAt` reports when.

NameTypeReqDescription
notifyTypestringyesDelivery channel. Ask the user; do not guess which destination they can read right now.
otpKeystringyesThe `otpKey` returned by kia_start_login.
xidstringyesThe `xid` returned by kia_start_login. Sent with every OTP call.

No output schema declared.

No examples provided.

kia_session_status ~95

Whether this server is configured and logged in to Kia: are credentials present, has the one-time MFA bootstrap been completed on this device, and which vehicle commands are registered (KIA_WRITE_MODE). Makes NO network call and returns no secret — the account email is masked, the device id is truncated, and neither the session id nor the remember-me token is ever included. Start here when a Kia tool reports it is not configured.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

kia_set_charge_limits ~203

Set the target state of charge per plug type (`evc/sts`). Verified against a real vehicle. The write is checked: afterwards the targets are re-read from evc/gts and compared, and the result reports whether the change actually landed. Send BOTH plug types — the list replaces the stored one, so omitting an entry drops that target. Without confirm:true it makes NO network call (not even the baseline read) and returns a dry-run preview of exactly what would be sent.

NameTypeReqDescription
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
targetsarrayyesOne entry per plug type. Read the current targets first and change only what you mean to.
verifybooleanRe-read evc/gts afterwards to check the change landed. Defaults to true.
vinKeystringyesVehicle key (the `vehicleKey` from the vehicle-list tool). Not the VIN.

No output schema declared.

No examples provided.

kia_start_charge ~166

Ask the vehicle to start charging (`evc/charge`). Verified against a plugged-in vehicle: evStatus.batteryCharge goes true within ~30-60s. Requires the car to be plugged in — on an unplugged car Kia still accepts the request and nothing happens. Confirm with kia_vehicle_status rather than trusting the success status. Without confirm:true it makes NO network call and returns a dry-run preview of exactly what would be sent.

NameTypeReqDescription
chargeRatiointegerCharge up to this percentage, 10–100. Defaults to 100.
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
vinKeystringyesVehicle key (the `vehicleKey` from the vehicle-list tool). Not the VIN.

No output schema declared.

No examples provided.

kia_start_climate ~465

Start remote climate control / preconditioning (Kia `rems/start`, live-verified). Without confirm:true this makes NO network call and returns a dry-run preview of the exact body; with confirm:true it sends the command and re-reads cmm/gvi until the NESTED `climate.airCtrl` reads true (there is no flat `airCtrlOn` field). On an EV `engine` stays false while climate runs — `ign3` is the ignition proxy and is reported alongside. `commandAccepted` (Kia took the request) and `stateConfirmed` (the car actually reads running) are separate; state changes were observed to take 30–60s. TEMPERATURE IS BEST-EFFORT AND UNCONFIRMED: per docs/KIA-API.md a start requesting 70°F still read back 72°F, so the car may report its own last-set target rather than the requested one — do not promise the user a specific cabin temperature. Seat and steering-wheel/rear-window heating are not sent at all: the request body deliberately omits `heatVentSeat` (Kia validates seat capability per car) and leaves every `heatingAccessory` field at 0.

NameTypeReqDescription
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
defrostbooleanRun front defrost (default false).
durationMinutesintegerMinutes the ignition stays on (default 5).
temperatureTarget cabin temperature in °F, 62–82, or the sentinel "LOW"/"HIGH" for the ends of the range (default 70). A quoted whole number ("72") is accepted and treated as the number. BEST-EFFORT / UNCONFIRM…
vinKeystringyesThe vehicle key (`vehicleKey` from the vehicle-list tool), used as the `vinkey` header. Not the VIN.
waitSecondsintegerHow long to keep re-reading cmm/gvi for proof the command landed (default 60). Observed changes took 30–60s. 0 checks once and returns immediately — the command may still land afterwards.

No output schema declared.

No examples provided.

kia_start_login ~165

Step 1 of the ONE-TIME Kia MFA bootstrap (prof/authUser): send the configured credentials and get back the `otpKey` and `xid` the next two steps need. Only needed when kia_session_status reports hasSession:false — once the bootstrap is done the stored remember-me token refreshes sessions silently forever. Without confirm:true it makes NO network call and returns a dry-run preview. The gate is real: Kia counts failed logins and eventually enforces reCAPTCHA, which breaks server-side login for this account PERMANENTLY — so a rejection is never retried, and a wrong password must be fixed in the environment rather than guessed at.

NameTypeReqDescription
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.

No output schema declared.

No examples provided.

kia_stop_charge ~120

Ask the vehicle to stop charging (`evc/cancel`). Verified against a charging vehicle: evStatus.batteryCharge goes false within ~30-60s. Confirm with kia_vehicle_status rather than trusting the success status. Without confirm:true it makes NO network call and returns a dry-run preview of exactly what would be sent.

NameTypeReqDescription
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
vinKeystringyesVehicle key (the `vehicleKey` from the vehicle-list tool). Not the VIN.

No output schema declared.

No examples provided.

kia_stop_climate ~241

Stop remote climate control (Kia `rems/stop`, live-verified). Without confirm:true this makes NO network call and returns a dry-run preview; with confirm:true it sends the command and re-reads cmm/gvi until the NESTED `climate.airCtrl` reads false (there is no flat `airCtrlOn` field); `ign3` — the EV ignition proxy — is reported alongside. `commandAccepted` (Kia took the request) and `stateConfirmed` (the car actually reads stopped) are separate. State changes were observed to take 30–60s.

NameTypeReqDescription
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
vinKeystringyesThe vehicle key (`vehicleKey` from the vehicle-list tool), used as the `vinkey` header. Not the VIN.
waitSecondsintegerHow long to keep re-reading cmm/gvi for proof the command landed (default 60). Observed changes took 30–60s. 0 checks once and returns immediately — the command may still land afterwards.

No output schema declared.

No examples provided.

kia_vehicle_location ~126

The vehicle's last known location, from the `location` block of the cached cmm/gvi read. This is where the telematics unit last reported being, not a live GPS fix — run kia_refresh_status first for a recent one. Latitude/longitude and a map link are derived when the block carries `coord.lat`/`coord.lon`; otherwise the raw block is returned as-is (its exact field names are not verified).

NameTypeReqDescription
vehicle_keystringvehicleKey from kia_list_vehicles. Optional: defaults to the only vehicle when the account has exactly one.

No output schema declared.

No examples provided.

kia_vehicle_status ~291

Read the vehicle's CACHED status (cmm/gvi): door lock, ignition, and the remote-climate block. Fast, but it reports whatever the telematics unit last uploaded — use kia_refresh_status first when freshness matters. Requested with airTempRange/seatHeatCoolOption = "1" so the nested `climate` object is present; when it is still absent the result says so rather than reporting climate as off. Note `ign3` (not `engine`) is the ignition on an EV, and `syncDate` advances on every read, so it never proves anything changed. Per-seat heat/vent state is reported under `climate.seats` as the RAW numbers Kia sends: the `heatVentType`/`heatVentLevel` encoding is UNVERIFIED, so do not tell the user a seat is heating, ventilating or off based on them. An absent seat block means this read carried no seat data — it does NOT mean the car lacks heated seats, which this server cannot currently determine. Pass include_raw for the untrimmed status block (battery/EV detail, doors, tyres, …).

NameTypeReqDescription
include_rawbooleanInclude the full vehicleStatus block as `raw` (default false).
vehicle_keystringvehicleKey from kia_list_vehicles. Optional: defaults to the only vehicle when the account has exactly one.

No output schema declared.

No examples provided.

kia_verify_otp ~156

Step 3 of the Kia MFA bootstrap (cmm/verifyOTP): exchange the passcode for a session. The resulting remember-me token is stored locally and is NOT returned — from here on every Kia tool refreshes its own session silently and MFA is never needed again on this device. Takes the `otpKey` and `xid` from kia_start_login plus the code the user received.

NameTypeReqDescription
otpstringyesThe one-time passcode Kia sent to the user — 6 digits in every observed case.
otpKeystringyesThe `otpKey` returned by kia_start_login.
xidstringyesThe `xid` returned by kia_start_login. Sent with every OTP call.

No output schema declared.

No examples provided.

Common questions

What is the io.github.chrischall/kiaaccess-mcp server?

io.github.chrischall/kiaaccess-mcp is listed in the public MCP registry as io.github.chrischall/kiaaccess-mcp. Kia Access for Claude, vehicle status, location, doors, climate, and charging. This page covers its npm package (kiaaccess-mcp).

Is the io.github.chrischall/kiaaccess-mcp server safe to use?

io.github.chrischall/kiaaccess-mcp scores 88 out of 100 on VerifyMCP. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.chrischall/kiaaccess-mcp server expose?

io.github.chrischall/kiaaccess-mcp exposes 17 tools: kia_healthcheck, kia_session_status, kia_start_login, kia_send_otp, kia_verify_otp, and 12 more. Their descriptions and schemas cost roughly 2,837 tokens of context every time the server is loaded.

Is the io.github.chrischall/kiaaccess-mcp server still maintained?

io.github.chrischall/kiaaccess-mcp is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.chrischall/kiaaccess-mcp server under?

io.github.chrischall/kiaaccess-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.