connected-car-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@connected-car-mcpWhich vehicles in the fleet need attention right now, and why?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
connected-car-mcp
An MCP (Model Context Protocol) server over a synthetic connected-vehicle fleet: telemetry, rule-based anomaly detection, and maintenance recommendations, exposed as five narrow tools instead of one open-ended query interface.
Built as a small, self-contained illustration of a specific design habit: deciding what belongs behind a tool boundary, and logging every call across it. Runs entirely on synthetic data generated locally — no external API, no account, no proprietary source.
Why it's shaped this way
The whole dataset could be exposed through a single run_query(sql: str)
tool. That's the wrong shape for an agent to call reliably: it pushes
schema-learning onto the model at call time, and there's no way to scope or
audit "what can be asked" per capability. Instead:
Tool | Contract |
| Enumerate the fleet |
| Raw readings for one vehicle, time-bounded |
| Latest snapshot + fleet averages |
| Rule-based flags: overheating, low battery, fault codes, harsh driving |
| Prioritized actions for one vehicle |
A model composes these — summary → pick a flagged vehicle → pull its
telemetry → get a recommendation — rather than writing free-form queries
against raw rows. It also makes the audit story trivial: there are only
five well-defined calls to log, so audit_log.jsonl (see
connected_car_mcp/audit.py) is one line per
call — timestamp, tool, arguments, duration, success/failure — with no
custom logic per tool. A production deployment would emit the same record
as structured logs via MCPServer's middleware hook (which sees every
JSON-RPC call, tool or resource) rather than a local file; the decorator
here keeps the demo runnable with zero extra infrastructure.
Anomaly thresholds are simple and explainable (engine_temp_c >= 110, not
a trained model) on purpose — a fleet monitor's flags need to be
auditable by a human, not just accurate.
Related MCP server: mcp-live-telemetry
Data
data/generate_telemetry.py generates a deterministic (fixed-seed),
fully synthetic dataset: 12 vehicles, readings every 10 minutes over 3 days.
A few vehicles are seeded with faults so the anomaly detector has real
signal to find:
CCV-004 — engine temperature ramps into critical range (cooling system failure)
CCV-009 — battery voltage degrades over time (failing battery/alternator)
CCV-002, CCV-011 — intermittent DTC fault codes
CCV-006 — occasional harsh-driving speed spikes
data/telemetry.csv is committed so the repo runs immediately; regenerate
it with:
python data/generate_telemetry.pyRunning it
python -m venv .venv
.venv/Scripts/activate # .venv/bin/activate on macOS/Linux
pip install -r requirements.txt
python -m connected_car_mcp.server # starts the MCP server over stdioTo try it from Claude Desktop or another MCP client, point it at the
module with cwd set to the repo root, e.g. in claude_desktop_config.json:
{
"mcpServers": {
"connected-car-fleet": {
"command": "python",
"args": ["-m", "connected_car_mcp.server"],
"cwd": "/path/to/connected-car-mcp"
}
}
}Then ask something like "Which vehicles in the fleet need attention right
now, and why?" — the model will call fleet_health_summary, follow up
with detect_anomalies on the flagged vehicles, and can call
get_maintenance_recommendations to turn that into next actions.
Tests
pip install pytest
pytest tests/Covers the data layer directly (fleet size, unknown-vehicle handling, and that the seeded faults actually get flagged) rather than round-tripping through the MCP protocol layer.
Project layout
connected_car_mcp/
server.py MCP tool + resource definitions
data_store.py Query layer over the telemetry CSV (pandas)
audit.py Per-call audit log decorator
data/
generate_telemetry.py Synthetic dataset generator
telemetry.csv Generated dataset (committed)
tests/
test_data_store.pyLicense
MIT — see LICENSE.
Available Tools
5 toolsdetect_anomaliesA
List rule-based anomalies (overheating, low battery, fault codes, harsh driving) across the fleet, or for a single vehicle_id if given.
| Name | Required | Description | Default |
|---|---|---|---|
| vehicle_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosing behavioral traits. It does not mention whether the operation is read-only, has side effects, requires specific permissions, or any rate limits. The verb 'list' implies read-only but it is not explicit, and no additional behavioral context is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action and resource, then immediately adds clarifying parameters and examples. Every element earns its place; there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema present, the description covers purpose, parameter semantics, and scope. It does not explicitly address integration with siblings or pagination, but the presence of an output schema reduces the need to describe return format. Overall, it is adequately complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does so by explaining that the optional vehicle_id parameter, if provided, scopes the anomaly listing to a single vehicle; otherwise, it returns fleet-wide anomalies. This clarifies the default behavior (null) and adds meaning beyond the bare schema declaration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists rule-based anomalies, enumerates specific types (overheating, low battery, fault codes, harsh driving), and specifies the scope as fleet-wide or single-vehicle via an optional parameter. This is a specific verb-resource pairing that distinguishes it from sibling tools by its unique focus on anomalies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for anomaly detection but provides no explicit guidance on when to choose it over alternatives like fleet_health_summary or get_vehicle_telemetry. It does not mention when not to use it or name any sibling. The usage context is implied by the purpose, but there is no direct comparison or exclusionary statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fleet_health_summaryA
Get a fleet-wide snapshot: latest reading per vehicle, fleet averages, and which vehicles currently have an active anomaly flag.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It fully describes the return content and implies a read-only operation ('Get'), which is accurate. It doesn't mention side effects or latency, but given it's a summary tool with no parameters, this is adequate. No contradiction with annotations (which are absent).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the purpose and the three key outputs. Every phrase carries meaning, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description is responsible for conveying what the tool returns. It covers all essential elements (latest reading, averages, anomaly flags) and is sufficiently complete for an agent to decide when and how to use it. No gaps are apparent for a simple fleet-summary tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4. The description doesn't need to add parameter details, and it doesn't. It correctly implies that no inputs are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('fleet-wide snapshot'), and explicitly lists what it returns (latest reading per vehicle, fleet averages, active anomaly flags). This clearly distinguishes it from siblings like list_vehicles and get_vehicle_telemetry which target individual entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fleet-wide overviews without stating when not to use it. It doesn't name alternatives explicitly, but the clear scope makes it obvious this is the go-to for aggregated fleet health. A minor omission is the lack of explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_maintenance_recommendationsB
Get prioritized maintenance recommendations for one vehicle, combining service-interval mileage with any active anomaly flags.
| Name | Required | Description | Default |
|---|---|---|---|
| vehicle_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It explains the operation combines service-interval mileage and active anomaly flags and returns prioritized results, which is useful. However, it does not clarify read-only nature, prerequisites (e.g., vehicle must exist), error conditions, or what happens if no anomalies exist, leaving gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the tool's purpose ('Get prioritized maintenance recommendations for one vehicle') and then specifies the inputs. No fluff, reads naturally, and is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and zero parameter schema descriptions, the description leaves out critical details: what the output format is, how prioritization is determined, whether it requires prior anomaly detection, and how to ensure the vehicle ID is valid. While an output schema exists, its content is unknown, so the description should explain enough for an agent to call it confidently, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage for parameters is 0%, and the description provides no additional meaning for vehicle_id beyond the schema's type/name. It does not specify that vehicle_id is the unique identifier of the vehicle, how to obtain a valid value, or any format hints. Since the description is the only source of param semantics, it is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'prioritized maintenance recommendations' for 'one vehicle', combining two data sources. The 'one vehicle' scope implicitly distinguishes it from fleet-level tools like fleet_health_summary, but it does not explicitly name the alternatives, so it's clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus siblings (e.g., list_vehicles, get_vehicle_telemetry, detect_anomalies). While 'one vehicle' implies it is not for fleet-level summaries, the description does not state exclusions or recommend alternatives based on use cases, leaving the decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vehicle_telemetryA
Get raw telemetry readings for one vehicle, optionally bounded by an
ISO-8601 start/end timestamp. Returns at most limit readings, most
recent first within that window.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| limit | No | ||
| start | No | ||
| vehicle_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals that results are capped by 'limit' and ordered 'most recent first', which is valuable. However, it does not mention error handling (e.g., unknown vehicle, empty results) or whether the operation is read-only, though 'Get' implies non-mutating. It could go further.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundancy. The purpose is stated first, then the limit and ordering are added efficiently. Every clause earns its place, and the wording is clean and direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core call requirements: vehicle_id is implied, optional time bounds are explained, and the result cap is specified. The presence of an output schema covers return details. It lacks explicit alternative routing (e.g., 'for fleet summaries use fleet_health_summary'), but the sibling names are self-explanatory and the tool's purpose is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameter meaning. It clarifies that 'start' and 'end' are ISO-8601 timestamps and that 'limit' caps the number of readings. vehicle_id is self-evident from its name and the singular 'one vehicle'. This adds meaning beyond the schema for 3 of 4 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and a clear resource 'raw telemetry readings for one vehicle', and distinguishes it from sibling tools like fleet_health_summary (summaries) and detect_anomalies (anomaly detection). The term 'raw' signals it's the underlying data, not derived artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when raw per-vehicle readings are needed) and provides optional parameters (start/end, limit), but it does not explicitly compare to siblings or state when not to use it. The alternatives are inferable from their names, so usage guidance is adequate but implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vehiclesA
List every vehicle in the fleet with its first/last telemetry timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It states what the tool returns (vehicles with first/last telemetry timestamp), which gives some transparency. However, it does not disclose whether the operation is read-only (likely but not stated), any performance implications, rate limits, or pagination behavior. For a simple list operation this is partially sufficient but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence that front-loads the primary action ('List every vehicle') and then specifies the key output detail. There is no redundant wording or filler. It is optimally concise for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The presence of an output schema means the return value structure is already defined, so the description need not explain it. The description adds the key detail of including first/last telemetry timestamps, which is useful for selection. However, it omits any mention of ordering, pagination, or limits, which could matter for large fleets, but for a simple list this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema description coverage is trivially 100%. According to the rubric, zero parameters justify a baseline of 4 because there is nothing for the description to explain about parameters. The 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'every vehicle in the fleet', with the added detail of returning 'first/last telemetry timestamp'. This unambiguously distinguishes it from siblings like get_vehicle_telemetry (which targets a single vehicle) and fleet_health_summary (which provides summary metrics).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention any exclusions, prerequisites, or context where another sibling would be more appropriate. The agent must infer the use case solely from the purpose, which is a gap in routing decision support.
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.
5 tool updates
v0.1.0- First observed
detect_anomalies - First observed
fleet_health_summary - First observed
get_maintenance_recommendations - First observed
get_vehicle_telemetry - First observed
list_vehicles
TDQS
Scored across 5 tools
Every tool targets a distinct concern: listing vehicles, retrieving raw telemetry, fleet-wide health snapshot, anomaly detection, and maintenance recommendations. The overlap between fleet_health_summary and detect_anomalies is minimal because one is a snapshot and the other is a detailed listing.
Most tools follow a clear verb_noun pattern (list_vehicles, get_vehicle_telemetry, detect_anomalies, get_maintenance_recommendations). The exception is fleet_health_summary, which lacks a verb prefix, creating a minor inconsistency in the naming scheme.
Five tools is well-scoped for a connected-car MCP, covering the core operations of vehicle listing, telemetry retrieval, fleet health, anomaly detection, and maintenance recommendations without redundancy or bloat.
The set covers the primary read/analysis workflows: listing vehicles, fetching raw data, summarizing health, detecting anomalies, and recommending maintenance. A minor gap is the lack of a tool for direct vehicle metadata (e.g., model, year), but this is not critical for the apparent monitoring/analytics purpose.
Maintenance
Related MCP Connectors
Public MCP digital twin with synthetic systems and an agent firewall. No customer data.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
A paid remote MCP for AI SDK eval dashboard, built to return verdicts, receipts, usage logs, and aud
Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server that unifies real-time telemetry from industrial systems into a single queryable interface, enabling production visibility, anomaly detection, and operational insights.511 npmMIT
- AlicenseAqualityBmaintenanceExposes live industrial IoT telemetry to any MCP client, streaming simulated sensor data from a fleet of machines and detecting anomalies, with the ability to inject faults on demand.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables incident detection and analysis by identifying anomalies in metric time series and surfacing root-cause candidates and recommended actions. Supports both mock (synthetic) and VictoriaMetrics backends with identical MCP tool contracts for seamless development-to-production switching.MIT
- AlicenseAqualityCmaintenanceExposes digital twin device data capabilities as MCP tools, allowing MCP clients to query device status, read real-time metrics, fetch time-series data, and check alerts. Includes a simulated PLC driver with a clean interface for connecting real devices via OPC-UA, Modbus, or gateway APIs.6MIT