ClaudeR
Runs code from an AI assistant inside your live R or Python session in RStudio or Positron
Read-only OBD-II diagnostics for Claude: trouble codes, freeze frame and live engine data
By Neil Roberts (individual) Python Local · stdio Data and analytics
17 popularity score ★ 25
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs SHADETREE_PORT. Replace each <NAME> with your value.
pipx install https://github.com/iamneilroberts/shadetree-ai/archive/refs/heads/main.zipclaude mcp add shadetree-ai -e SHADETREE_PORT=<SHADETREE_PORT> -- shadetree-ai-mcp{
"mcpServers": {
"shadetree-ai": {
"command": "shadetree-ai-mcp",
"args": [],
"env": {
"SHADETREE_PORT": "<SHADETREE_PORT>"
}
}
}
}{
"mcpServers": {
"shadetree-ai": {
"command": "shadetree-ai-mcp",
"args": [],
"env": {
"SHADETREE_PORT": "<SHADETREE_PORT>"
}
}
}
}{
"servers": {
"shadetree-ai": {
"type": "stdio",
"command": "shadetree-ai-mcp",
"args": [],
"env": {
"SHADETREE_PORT": "<SHADETREE_PORT>"
}
}
}
}[mcp_servers.shadetree-ai]
command = "shadetree-ai-mcp"
args = []
[mcp_servers.shadetree-ai.env]
SHADETREE_PORT = "<SHADETREE_PORT>"gemini mcp add --scope user -e SHADETREE_PORT=<SHADETREE_PORT> shadetree-ai shadetree-ai-mcpSHADETREE_PORT |
Required: Serial port of the OBD-II adapter, e.g. /dev/serial/by-id/... or a COM port; live tools fail without it. |
|---|---|
SHADETREE_HOME |
Optional: Folder for snapshots/ and transcripts/ (they contain the VIN); default is the current directory. |
SHADETREE_BAUD |
Optional: Adapter baud rate, default 115200. |
SHADETREE_TIMEOUT |
Optional: Seconds allowed per adapter command, default 10. |
shadetree-ai connects Claude Code or Claude Desktop to a car through a USB OBD-II adapter so the assistant can pull diagnostic data and talk the owner through what it means. It reads stored, pending and (on CAN cars) permanent trouble codes, the check-engine lamp state, the freeze frame, emissions readiness monitors, Mode 06 on-board test results and the VIN, and it can sample live sensor readings such as fuel trims.
The tools fall into two groups. Nine offline tools work on scan snapshots already saved to disk, so a car does not need to be connected to review, compare or re-explain an earlier scan. Eight live tools talk to the adapter: a full scan that saves a new snapshot, single-PID reads, timed live-data polling, a fuel-trim summary, Mode 06 results, adapter identification, and a pair that start and read the project's local browser dashboard.
The read-only rule is enforced below the tools, not by instructions to the model: the transport layer accepts only OBD Modes 01, 02, 03, 05, 06, 07, 09 and 0A plus a few adapter setup commands, and no tool takes a raw command string. The server registers every built-in tool with a read-only annotation and checks at start that the tool list matches a fixed reviewed set (src/obd_reader/mcp_server.py, src/obd_reader/tools.py). The same package also ships a standalone CLI scanner and dashboard that make no AI calls.
The project's maker calls it early: the plain-words code meanings are drafted by a model and unreviewed, and the planned reference library with cited sources is not built, so Claude's explanations rest on its general knowledge.
| Runtime | Python 3.11+ |
|---|
An OBDLink EX USB adapter (the only one tested; OBDLink CX and cheap ELM327 clones are not supported). A 1996 or newer US OBD-II car, parked with the ignition on, for the live tools. Python 3.11 or newer and pipx (installed from the GitHub zip, not from PyPI). SHADETREE_PORT set to the adapter's serial port; on Linux the user must be in the dialout group. Claude Desktop needs the full path printed by `which shadetree-ai-mcp`.
Reads only: it cannot clear codes, write to an ECU, run actuator tests or flash modules. Not for OBD-I cars, Teslas, Mercedes or secure-gateway cars. Hardware-tested only on a 2024 Honda Ridgeline (CAN) and an early-2000s GMC truck (J1850 VPW); ISO 9141, KWP2000 and J1850 PWM are untried on real cars. live_data polls at most 8 PIDs for up to 120 s at up to 10 Hz (10 s at 2 Hz by default); Mode 06 values are raw, without unit scaling; protocols A-C (J1939, user CAN) are refused (src/obd_reader/tools.py). One tool holds the adapter at a time; live tools report busy while the dashboard samples. Code meanings are unreviewed; DTC lookup and repair playbooks are not built.
Suits a home mechanic or tinkerer with an OBDLink EX who wants Claude to read a check-engine light and explain the codes, freeze frame and fuel trims without any risk of the tool changing the car. The offline snapshot tools also suit reviewing saved scans away from the car. Pick something else if you need to clear codes, run bidirectional tests or code modules, use a cheap ELM327 clone or a Bluetooth/Wi-Fi dongle, or work on a non-US, OBD-I or secure-gateway vehicle. Because explanations come from the model's general knowledge rather than a service manual, treat its diagnoses as a starting point.
list_snapshotsget_snapshotimport_snapshotread_dtcsfreeze_framereadinessvehicle_infolist_supported_pidscompare_snapshotsadapter_infoscanread_pidlive_datatrim_summarymode06_testsopen_consoleconsole_data