canbus-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DYLD_LIBRARY_PATH | No | Path to the PEAK PCBUSB library (macOS only). Typically /usr/local/lib |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_interfacesA | List available CAN interface types, channels, and current connection status. Use this first to confirm what hardware/channels are available. |
| detect_baudrate_autoA | Auto-detect CAN bus baudrate by listening for valid frames at each common rate. Tries: 500k, 250k, 1M, 125k, 100k, 83.3k, 50k, 33.3k, 20k, 10k bps. Requires live traffic on the bus. If the bus is idle, put the vehicle/ECU into a state that generates traffic (ignition on, engine running) before calling this. Args: interface: CAN interface type. Use 'pcan' for PEAK PCAN-USB. channel: Interface channel. Default 'PCAN_USBBUS1' for first PCAN-USB device. timeout_per_rate: Seconds to listen at each baudrate before trying next. |
| connectA | Open a connection to a CAN interface. Args: interface: Interface type ('pcan' for PEAK PCAN-USB, 'virtual' for testing). channel: Channel name (e.g. 'PCAN_USBBUS1'). baudrate: Bus speed in bps. Common: 500000, 250000, 1000000, 125000. |
| disconnectA | Close the current CAN interface connection. |
| captureA | Capture CAN frames for a fixed duration. Frames accumulate in the internal buffer for use by analysis tools. Args: duration: Capture window in seconds. filter_ids: Optional list of decimal CAN IDs to capture. None = capture all. |
| take_snapshotA | Save the current capture buffer as a named snapshot. Use this for before/after comparison:
Args: name: Snapshot label. |
| clear_captureA | Clear all captured frames from the internal buffer. Does not affect snapshots. |
| get_traffic_summaryA | Summarize all captured message IDs: frame count, frequency, DLC, and category. High-frequency IDs (>100 Hz) are typically sensor loops. Low-frequency IDs (<5 Hz) are typically status or event-driven messages. |
| analyze_messageA | Deep-analyze a single CAN message ID across all captured frames. Reports per-byte entropy, counter/checksum detection, and signal candidates. Args: can_id: CAN message ID in decimal (e.g. 1234) or use int('0x4B0', 16). |
| track_signalA | Extract a byte range from captured frames and show how the value changes over time. Use this to observe a candidate signal while correlating with physical inputs. Args: can_id: CAN message ID. start_byte: First byte index (0-based). num_bytes: How many consecutive bytes to read (1–4). signed: Interpret as signed integer. scale: Physical = raw * scale + offset. offset: Physical = raw * scale + offset. byte_order: 'little_endian' (Intel) or 'big_endian' (Motorola). |
| compare_snapshotsA | Diff two named snapshots to find which IDs and bytes changed. Args: before_name: Label of the baseline snapshot. after_name: Label of the post-event snapshot. |
| list_snapshotsA | List all saved snapshots and their frame counts. |
| define_signalA | Define a named signal from a CAN message (bit-level precision). Physical value = (raw * scale) + offset. Args: name: Signal name, e.g. 'engine_rpm' or 'throttle_pct'. can_id: CAN message ID. start_bit: LSB position (little_endian) or MSB position (big_endian), 0-based. length: Signal width in bits. byte_order: 'little_endian' (Intel/LSB-first) or 'big_endian' (Motorola/MSB-first). value_type: 'unsigned' or 'signed'. scale: Multiplier for raw→physical conversion. offset: Addend for raw→physical conversion. unit: Physical unit string, e.g. 'rpm', 'km/h', '%', '°C'. description: Human-readable description. |
| list_signalsA | List all defined signals in the current session. |
| remove_signalB | Remove a signal definition by name. |
| decode_frameA | Decode a raw CAN frame against all known signal definitions for that CAN ID. Args: can_id: CAN message ID. data_hex: Frame payload as a hex string, e.g. '0A1B2C3D4E5F6789'. |
| import_dbcA | Import a DBC file and add its signal definitions to the current session. Signals are named as 'MessageName.SignalName'. Args: file_path: Absolute path to the .dbc file. |
| export_dbcA | Export all current signal definitions to a DBC file. Can be opened in SavvyCAN, PEAK PCAN-Explorer, CANdb++, etc. Args: file_path: Absolute path for the output .dbc file. |
| check_obd2_supportA | Query OBD2 service 01 PID 00 to check if the vehicle supports OBD2 and which PIDs are available. Requires connection to the vehicle CAN bus (typically 500k or 250k baud on 11-bit ID bus). |
| read_obd2_pidsB | Query all known OBD2 PIDs (RPM, speed, throttle, temps, MAF, fuel level, etc.) and return decoded physical values. |
| query_obd2_pidB | Send a raw OBD2 request and return the response bytes. Args: service: OBD2 service number (e.g. 1 for current data, 3 for DTCs). pid: PID/subfunction number. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/harrisonfaulkner/canbus-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server