Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
DYLD_LIBRARY_PATHNoPath to the PEAK PCBUSB library (macOS only). Typically /usr/local/lib

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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:

  1. Capture baseline traffic → take_snapshot('idle')

  2. Trigger an action (press throttle, turn steering, etc.)

  3. Capture again → take_snapshot('throttle_pressed')

  4. compare_snapshots('idle', 'throttle_pressed') to find changed bytes

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

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