Skip to main content
Glama
ayhammouda

OBD MCP Server

OBD MCP Server

CI Security OpenSSF Scorecard Python 3.11+ License: Apache-2.0 OR MIT

A safety-first, local-first MCP server that gives AI clients structured, read-only vehicle diagnostic observations without exposing raw protocol access or state-changing operations.

Start with a deterministic simulator, optionally connect an ELM327 adapter, and extend the server through normalized drivers and source-labeled diagnostic profiles. The policy core remains authoritative regardless of the client, driver, or profile.

CAUTION

This is pre-release diagnostic software, not a safety system or a substitute for a qualified technician. It must never be used to decide that a vehicle is safe to drive. Do not connect development builds to a moving vehicle.

Why this project

  • Read-only by construction: fixed diagnostic capabilities are enforced in the core before a request reaches a driver.

  • Useful without hardware: the simulator exercises the complete MCP path on Linux and macOS.

  • Extensible without raw access: drivers implement normalized reads, while declarative profiles can only narrow allowlisted operations.

  • Data-conscious: VIN-shaped values are rejected, outputs use a local pseudonymous fingerprint, and bundled profiles require redistribution provenance.

  • Built for review: safety, privacy, legal/data, threat-model, packaging, and supply-chain checks are part of the repository.

Related MCP server: viam-community-mcp

30-second simulator demo

Prerequisites: Python 3.11+ and uv.

git clone https://github.com/ayhammouda/obd-mcp-server.git
cd obd-mcp-server
uv sync
uv run python scripts/smoke_mcp.py --command .venv/bin/obd-mcp

The smoke command initializes a real MCP client session, lists the seven typed tools, and discovers a synthetic vehicle without hardware. To start the server for an MCP client, run uv run obd-mcp; stdio stdout is reserved for MCP messages.

Current scope

The 0.1.x foundation provides:

  • seven typed MCP tools for vehicle discovery, standard signal reads, DTC reads, source-labeled ECU snapshots, and local issue timelines;

  • a hard read-only policy with no raw request or fault-clearing surface;

  • a built-in simulator so the complete MCP flow works without hardware;

  • an optional py-obdii ELM327 integration; the extra installs its dependency, and configuration validation does not import it or contact an adapter;

  • an entry-point plugin API for future SocketCAN, ISO-TP, K-line, replay, and vendor-neutral adapter packages, disabled unless the operator explicitly opts in to trusted in-process plugin code;

  • declarative, externally mounted profiles with provenance and redistribution metadata;

  • per-vehicle/per-ECU serialization, short-lived read caching, local SQLite issue storage, and pseudonymous VIN fingerprints;

  • stdio plus loopback-only Streamable HTTP transports.

It intentionally does not include OEM databases, copied standards content, Renault/CLIP/DDT/PyRen data, ECU coding, clearing, flashing, actuator control, security access, arbitrary CAN/UDS/KWP requests, remote HTTP access, or raw capture.

Explore the checkout

Inspect the CLI and validate a configuration without connecting to a vehicle:

uv run obd-mcp --help
uv run obd-mcp check-config --config examples/obd-mcp.toml
uv run obd-mcp drivers

For built-in drivers, check-config validates the TOML schema, referenced profiles, driver options, and optional dependency availability without constructing a driver or connecting to a vehicle. It cannot establish that a third-party plugin is safe or that live hardware will work.

Run loopback-only Streamable HTTP:

uv run obd-mcp http --config examples/obd-mcp.toml \
  --host 127.0.0.1 --port 8765

The MCP endpoint is http://127.0.0.1:8765/mcp. Non-loopback binds are rejected because the server does not yet implement remote authentication.

MCP tools

Tool

Behavior

Vehicle mutation

obd_list_vehicles

Lists configured vehicles and capabilities

None

obd_get_vehicle_status

Reports connection state and a pseudonymous VIN fingerprint/redacted suffix

None

obd_read_standard_pids

Reads only fixed, allowlisted Mode 01 PIDs

None

obd_read_dtcs

Reads diagnostic trouble codes without clearing them

None

obd_read_ecu_snapshot

Uses the profile bound to the configured vehicle, or returns a normalized standard snapshot when no profile is bound

None

obd_open_issue

Writes a note to the local issue database, never the vehicle

None

obd_get_issue_timeline

Reads locally stored issue observations

None

There is no generic send, query, command, clear, or raw-frame tool.

Codex configuration

Use an absolute checkout path:

[mcp_servers.obd]
command = "uv"
args = [
  "--directory",
  "/absolute/path/to/obd-mcp-server",
  "run",
  "obd-mcp",
  "stdio",
  "--config",
  "/absolute/path/to/obd-mcp-server/examples/obd-mcp.toml",
]

The explicit stdio subcommand is recommended in client configuration even though it is also the CLI default.

Claude Code project configuration

The repository includes a project-scoped .mcp.json that launches the safe simulator configuration from the current checkout:

{
  "mcpServers": {
    "obd": {
      "type": "stdio",
      "command": "uv",
      "args": [
        "--directory",
        "${CLAUDE_PROJECT_DIR:-.}",
        "run",
        "obd-mcp",
        "stdio",
        "--config",
        "${CLAUDE_PROJECT_DIR:-.}/examples/obd-mcp.toml"
      ]
    }
  }
}

Project-scoped MCP configuration requires client approval before it runs. Nothing in this file enables third-party drivers or live hardware.

Live ELM327 adapter

The simulator is the default. To install the optional, MIT-licensed adapter integration:

uv sync --extra elm327

Then configure a vehicle with the elm327 driver and an explicit serial transport. The adapter only maps fixed symbolic reads to library commands; it does not construct arbitrary commands and never imports or calls the library's clear-DTC operation. The protocol is fixed to a supported OBD transport (iso_15765_4_can by default), verified again after connection, and never auto-detected. J1939 is not accepted by this Mode 01/03 driver. Adapter timeouts are restricted to 0.1–5 seconds.

py-obdii is currently a beta dependency and is pinned deliberately. Treat live hardware support as opt-in until it has been validated against your adapter, vehicle, market, and ignition-state procedure.

Start from examples/elm327.example.toml, replace the serial port explicitly, and run check-config before connecting. The server never scans serial or network endpoints automatically. If a request times out while blocking adapter work is cancelling, the request returns a bounded error, cleanup drains in the background, and further work for that vehicle is fenced until draining finishes.

The source test matrix and installed-wheel smoke run on Linux and macOS. Windows is intentionally unsupported in 0.1 because secure issue-store permissions currently rely on POSIX file modes; a future Windows release needs an ACL-aware storage implementation and dedicated security tests. The current matrix is not evidence that the optional ELM327 path works with a particular adapter, serial stack, or vehicle; live hardware remains unvalidated and opt-in.

Extension model

Third-party Python packages may register a driver under the obd_mcp.drivers entry-point group. They are disabled by default. Enabling them requires an explicit operator decision:

[extensions]
allow_third_party_drivers = true

Drivers implement the normalized interface and cannot add MCP tools through the profile or driver contract. However, an enabled Python plugin executes inside the server process with the user's permissions. It is trusted code and can bypass in-process controls through arbitrary side effects. Review, pin, and audit it before opting in.

Enhanced ECU definitions live in external profiles, not executable code:

profile
├── schema version, profile id, name, and version
├── provenance: source, origin, license, redistribution, confidence
├── optional vehicle and ECU selector hints; schema v1 protocol is UDS
└── explicitly allowed UDS reads
    ├── ECU + service + identifier
    └── signal id + bounded decoder (for data identifiers)

See the profile format and driver plugin guide before building an extension.

The repository is designed to avoid distributing OEM technical information or copyrighted standards. A right to access repair information does not by itself grant a right to redistribute it. External profile authors and users are responsible for confirming their source and license rights.

Full VIN-shaped values are rejected at configuration, normalized-domain, and tool-output boundaries. When a driver reports a valid VIN, the public identity is a deterministic, truncated SHA-256 fingerprint plus the last four characters. This is pseudonymous vehicle-related data, not anonymous data.

“Legally compliant” is a process and jurisdiction-specific assessment, not a warranty this repository can make. Obtain legal advice before distributing OEM data or operating the project commercially.

Development

uv sync --all-extras
uv run ruff check .
uv run ruff format --check .
uv run mypy src
uv run pytest
uv build --build-constraints build-constraints.txt --require-hashes
uv run twine check dist/*
uv run pip-audit
uv run pip-licenses --format=markdown

Hardware tests are opt-in and never target a real vehicle in CI. See the test strategy.

Publishing status

The source repository is public and community-ready, but the project is not represented as published on PyPI or the MCP Registry. The package name, trusted publisher, release environment, tag, artifact, and fresh-install smoke test must all be verified before the first release. The ELM327 integration has not been validated against real hardware. See the release runbook. server.json therefore carries source identity and version metadata only; it deliberately advertises no package or remote installation.

Get involved

  • Ask usage and design questions in Discussions.

  • Report sanitized bugs or propose features through the issue forms.

  • Read SUPPORT.md and CONTRIBUTING.md before contributing.

  • If this safety-first approach is useful to you, star the repository so other MCP and automotive developers can find it.

Safety-policy changes require tests and focused review. Never put VINs, vehicle captures, credentials, proprietary data, or unsafe commands in a public issue.

License

Dual-licensed under the Apache License 2.0 or the MIT License, at your option. See LICENSE, LICENSE-MIT, and NOTICE.

Available Tools

7 tools
obd_get_issue_timelineGet local issue timelineA
Read-onlyIdempotent

Read a diagnostic issue timeline from the local SQLite database.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
issueYes
eventsYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds context by specifying the data source ('from the local SQLite database'), which provides useful behavioral information beyond annotations. It agrees with the read-only nature.

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?

The description is a single sentence that is front-loaded with the key action and resource. Every word is necessary, and there is no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter and an output schema (not shown), the description adequately covers the purpose and data source. It does not need to explain return values. Minor gaps in parameter details are compensated by the parameter name and schema constraints.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should explain parameter meaning. However, it provides no details about the 'issue_id' parameter, its format, pattern, or length constraints. The parameter name is self-explanatory but insufficient for clarity on constraints.

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 clearly states the tool reads a diagnostic issue timeline from a local SQLite database. The verb 'Read' specifies the action, and 'diagnostic issue timeline' identifies the resource. It distinguishes from sibling tools like 'obd_list_vehicles' and 'obd_read_dtcs'.

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

Usage Guidelines3/5

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

The description implies the tool is for reading an issue timeline but provides no explicit guidance on when to use it versus alternatives like 'obd_read_dtcs' or 'obd_read_ecu_snapshot'. No exclusions or prerequisites are mentioned.

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

obd_get_vehicle_statusGet vehicle statusB
Read-onlyIdempotent

Read connection and ECU status. This is an observation, not a roadworthiness determination.

ParametersJSON Schema
NameRequiredDescriptionDefault
vehicle_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
ecusNo
notesNo
vehicleYes
observed_atNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior. The description adds that it reads connection and ECU status, clarifying the scope beyond annotations.

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?

Two sentences, each adding value: first states action, second adds important clarity. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool and presence of an output schema, the description is somewhat complete, but the lack of parameter semantics is a notable gap.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description does not explain the sole parameter 'vehicle_id' or its purpose/format, leaving the agent without necessary context.

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

Purpose4/5

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

Clearly states it reads connection and ECU status, with a note distinguishing from roadworthiness determination. The verb and resource are specific, but it does not explicitly differentiate from sibling read tools.

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

Usage Guidelines3/5

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

Provides context by saying it's an observation, not a roadworthiness check, but no explicit guidance on when to use vs. alternatives like obd_read_standard_pids or obd_read_dtcs.

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

obd_list_vehiclesList vehiclesA
Read-onlyIdempotent

List configured vehicles using normalized, VIN-safe identities.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
vehiclesYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by specifying that identities are 'normalized, VIN-safe', which is not covered by annotations.

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?

Single sentence with no wasted words delivers the essential purpose and a key qualifier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list tool with an output schema, the description adequately covers purpose and identity format. It doesn't mention scope (e.g., returns all vs. paginated), but the simplicity mitigates the gap.

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 has zero parameters, so the baseline is 4. Description adds no parameter info, but none is 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?

The description uses a specific verb ('List') and resource ('configured vehicles'), clearly distinguishing it from sibling tools like obd_get_vehicle_status or obd_read_dtcs which have different purposes.

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?

While no explicit when-to-use or alternatives are given, the tool's simplicity (no parameters, list action) makes usage self-evident. Sibling tool names provide implicit context for differentiation.

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

obd_open_issueOpen local diagnostic issueA

Create an issue only in the local SQLite database. This never sends a vehicle command or changes vehicle state.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
severityNomedium
dtc_codesNo
vehicle_idYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleYes
statusNo
issue_idYes
severityNo
closed_atNo
dtc_codesNo
opened_atNo
vehicle_idYes
descriptionNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations provide readOnlyHint=false and destructiveHint=false, indicating a non-destructive write. The description adds critical context by confirming the operation is purely local (SQLite database) and has no effect on the vehicle. This goes beyond the annotations to prevent misunderstandings.

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?

The description is two sentences long with no redundant information. It is front-loaded with the core action and scope, making it easy to scan. Every word serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (which likely documents return values), the description covers the essential behavioral aspects: local creation and lack of vehicle effect. It could be enhanced by hinting at what the output contains (e.g., issue ID), but overall it is sufficiently complete for a straightforward create operation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate by explaining parameters. However, the description does not mention any of the five parameters (vehicle_id, title, severity, dtc_codes, description) or their meanings. The parameter names are somewhat self-explanatory, but without any elaboration, the description fails to add value for proper usage.

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 uses a specific verb ('Create'), identifies the resource ('issue'), and clarifies the scope ('only in the local SQLite database'). This distinguishes the tool from sibling tools which are all read operations.

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?

The description explicitly states that the operation never sends a vehicle command or changes vehicle state, providing clear guidance on when to use it (local issue logging) and implied when not to (if vehicle state change is needed). No explicit exclusions or alternative tools are mentioned, but the context is clear.

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

obd_read_dtcsRead diagnostic trouble codesB
Read-onlyIdempotent

Read DTC observations without clearing or changing vehicle state.

ParametersJSON Schema
NameRequiredDescriptionDefault
ecu_idNo
vehicle_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dtcsYes
ecu_idNo
vehicle_idYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description reinforces that it does not clear or change state, adding no new behavioral information beyond annotations. No contradictions.

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?

Single sentence, front-loaded with action and key constraint. Very concise, but could improve by adding parameter context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema (not shown), the description lacks any mention of what is returned (e.g., DTC codes, descriptions), error conditions, or usage scenarios. Incomplete for a tool with two parameters needing explanation.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must explain parameters. It does not mention vehicle_id or ecu_id at all, leaving the agent without meaning beyond the schema's pattern constraints.

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 clearly states 'Read DTC observations' which matches the tool name and title. It adds 'without clearing or changing vehicle state' emphasizing read-only nature, distinguishing it from potentially destructive sibling tools like obd_open_issue.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus siblings like obd_read_standard_pids or obd_read_ecu_snapshot. The description only implies it's for reading DTCs non-destructively, but lacks explicit when-not or alternatives.

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

obd_read_ecu_snapshotRead ECU snapshotB
Read-onlyIdempotent

Read an ECU snapshot using only identifiers in a validated, source-labeled read-only profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
ecu_idYes
vehicle_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dtcsNo
ecu_idYes
signalsNo
protocolNo
profile_idNo
vehicle_idYes
captured_atNo
profile_sourceNo
profile_confidenceNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds 'validated, source-labeled' context, which is helpful but not critical. No contradictions.

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?

A single sentence of 13 words that front-loads the verb and resource. No superfluous information. Every word is necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for a simple read-only tool with comprehensive annotations and an output schema (not shown). It could mention what an ECU snapshot contains, but the output schema likely covers that.

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

Parameters2/5

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

The description mentions 'using only identifiers' which loosely maps to the two parameters, but it does not explain what vehicle_id or ecu_id represent or their format beyond the schema. With 0% schema coverage, the description should compensate but fails to do so.

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

Purpose4/5

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

The description clearly states the verb 'Read' and resource 'ECU snapshot', specifying it uses identifiers and is read-only. However, it does not distinguish this from sibling tools like obd_read_standard_pids or obd_read_dtcs, which also read vehicle data.

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

Usage Guidelines2/5

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

The description implies this tool is for reading snapshots with valid identifiers in a read-only context, but provides no explicit guidance on when to use it versus alternatives, nor any prerequisites or conditions.

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

obd_read_standard_pidsRead standard PIDsA
Read-onlyIdempotent

Read only fixed, centrally allowlisted Mode 01 PIDs; arbitrary commands and service identifiers are not accepted.

ParametersJSON Schema
NameRequiredDescriptionDefault
pidsNo
vehicle_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
readingsYes
vehicle_idYes

TDQS

A4.3/5.0
Behavior5/5

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

The description adds that only fixed, centrally allowlisted PIDs are accepted and arbitrary commands are rejected, which supplements the annotations (readOnlyHint, idempotentHint, destructiveHint) with specific constraints.

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?

The description is a single sentence that directly conveys the tool's purpose and constraints with no superfluous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main behavioral aspect but omits parameter semantics. Given the presence of an output schema, return values need not be explained. Minor gap: default behavior when pids is null.

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

Parameters2/5

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

With 0% schema description coverage, the description fails to clarify the parameters. It does not explain the format of 'pids' (e.g., that they are hex codes like 010C) or the role of 'vehicle_id'.

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 clearly states it reads Mode 01 PIDs from a specific allowlist, distinguishing it from sibling tools like obd_read_dtcs or obd_read_ecu_snapshot.

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?

The description indicates the tool is for reading only standard allowlisted PIDs and not arbitrary commands, providing implicit usage context. It does not explicitly name alternatives or when-not to use.

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. Dates show when Glama detected each change.

  1. 7 tool updatesv0.1.0
    • First observedobd_get_issue_timeline
    • First observedobd_get_vehicle_status
    • First observedobd_list_vehicles
    • First observedobd_open_issue
    • First observedobd_read_dtcs
    • First observedobd_read_ecu_snapshot
    • First observedobd_read_standard_pids

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct operation: listing vehicles, reading status, reading PIDs, reading DTCs, reading ECU snapshots, and managing local issues. There is no overlap between tool purposes.

Naming Consistency5/5

All tools follow a consistent 'obd_verb_noun' naming pattern (e.g., obd_read_dtcs, obd_open_issue), making the tool set highly predictable.

Tool Count5/5

7 tools is a reasonable number for a diagnostics-focused server, covering core read operations and local issue tracking without being overwhelming or sparse.

Completeness3/5

The tool set covers essential read-only OBD functions and issue management, but lacks common operations like reading VIN, freeze frame data, or clearing DTCs, which are typical in OBD diagnostics.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    B
    maintenance
    A headless MCP server that enables AI tools (like Claude Code) to read and analyze serial logs from embedded boards (ESP32, STM32) for firmware debugging, with read-only tools for log retrieval and a built-in web viewer.
    6
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    An unofficial MCP server for inspecting and diagnosing Viam robotics fleets. It is currently in early development and not yet functional.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Local, read-only MCP server for inspecting DBC files and decoding CAN capture logs, with bounded and composable tools.
    13
    MIT

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/ayhammouda/obd-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server