Skip to main content
Glama
ca11mebaraka

evaconnect-mcp

by ca11mebaraka

evaconnect

Typed Python client and stdio MCP server for the Evolute companion API (https://app.evassist.ru). Own account / own vehicle only.

Read telemetry (charge, climate, doors, online) and recent trips without the official Android app. Vehicle commands are not implemented — the command channel is unconfirmed.

Install

Python 3.12+.

cd /Users/nmel/Documents/Projects/evaconnect
python3.12 -m venv .venv
source .venv/bin/activate
pip install ".[dev]"

Editable (pip install -e) is optional. On Python 3.14 / macOS the hatchling .pth is often marked hidden, and 3.14 then skips it — evolute fails with No module named 'evaconnect'. Either install without -e, or after -e run:

chflags nohidden .venv/lib/python*/site-packages/*.pth

Entry points after install:

  • evolute — small CLI (status, trips, vehicles, info)

  • evaconnect-mcp — stdio MCP server

  • evaconnect-poller — write telemetry/trips to Postgres for Grafana

Remote poller + Postgres next to an existing Grafana: see deploy/README.md.

Related MCP server: Rivian MCP

Auth

Preferred for the poller: credentials.json (created chmod 600). Refresh rotates refreshToken; the file is the source of truth.

{
  "accessToken": "",
  "refreshToken": "",
  "carId": ""
}

Override the path with EVOLUTE_CREDENTIALS. Env vars (EVOLUTE_ACCESS_TOKEN / EVOLUTE_REFRESH_TOKEN / EVOLUTE_CAR_ID) fill missing fields only — they do not override tokens already in the file. After refresh the new pair is written back to the file and into the process env.

Do not commit tokens, phone, VIN, IMEI, or coordinates.

Library login (CLI / scripts only — not exposed as MCP tools):

from evaconnect import EvoluteClient

with EvoluteClient() as client:
    info = client.get_info()          # no token; field is capcha, not captcha
    client.request_otp(phone, phone_country)  # one SMS; formats are caller-supplied
    client.sign_in(phone, code)

Auth header is access-token: <token>, not Authorization: Bearer.

Library

from evaconnect import EvoluteClient

with EvoluteClient() as client:
    client.refresh()
    me = client.me()
    cars = client.list_vehicles()          # id, plate, model; VIN/IMEI not in repr
    car = client.get_vehicle(cars[0].id)
    tel = client.get_telemetry(car_id=car.id)  # or imei=…
    session = client.get_charge_session()      # may be None
    trips = client.list_trips(car.id, limit=5, offset=0)
    trip = client.get_trip(car.id, trips.rows[0].id, trips.rows[0].segment_start_time)

get_telemetry accepts an IMEI or a mongo car _id (24 hex chars) and resolves IMEI when needed. Those two IDs are not interchangeable.

send_command exists only as a stub and always raises NotImplementedError.

CLI

evolute info          # GET /id-service/info (no token)
evolute status
evolute trips -n 5
evolute vehicles

MCP (Cursor)

stdio server. Tools (read-only):

Tool

What it returns

evolute_status

Charge, climate, doors, online. Geo hidden unless include_pii

evolute_vehicles

List; VIN/IMEI masked unless include_pii

evolute_trips

Last N trips; no addresses/track

evolute_trip

One trip; track only if include_track=true

evolute_charge

Current charge session (or empty)

evolute_auth_status

Session present/valid; no raw tokens

There is no request_otp and no command-sending tool.

Cursor mcp.json example (~/.cursor/mcp.json or project .cursor/mcp.json):

{
  "mcpServers": {
    "evaconnect": {
      "command": "/Users/nmel/Documents/Projects/evaconnect/.venv/bin/evaconnect-mcp",
      "env": {
        "EVOLUTE_ACCESS_TOKEN": "",
        "EVOLUTE_REFRESH_TOKEN": "",
        "EVOLUTE_CAR_ID": ""
      }
    }
  }
}

If the venv is on PATH, "command": "evaconnect-mcp" is enough.

Default MCP output redacts VIN, IMEI, phone, tokens, and exact coordinates (include_pii off). Do not poll telemetry faster than once per 5 seconds (the client caches within that window).

Tests

Mocks only — tests never call production.

pytest

Spec gaps (explicit parameters, no guessing)

  • Phone / phoneCountry format is unknown — pass them as strings.

  • Trip sort.by / dir default to live-confirmed DATE / DESC (DURATION / DISTANCE and ASC are also valid).

  • distance units (m vs km) are unknown — raw int, no conversion.

  • Access-token TTL is unknown — one auto-refresh on HTTP 401, no loop.

  • Charge-session body when charging is not fully specified.

  • Time-Zone header is unused (not confirmed).

License

MIT

A
license - permissive license
B
quality
C
maintenance

Maintenance

UpdatingMaintainers
UpdatingResponse time
Release cycle
0Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides access to Alpha ESS solar inverter and battery system data, enabling monitoring of energy statistics, real-time power data, and configuration of battery charging and discharge schedules through the Alpha ESS Open API.
    10
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables read-only access to vehicle data via the unofficial Rivian GraphQL API, allowing users to monitor battery levels, OTA updates, and charging status. It provides tools to check vehicle state and user account information directly through Claude.
    9
    20
    2
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables querying Cariot APIs for fleet management data, including alcohol checks, daily reports, drivers, vehicles, and realtime snapshots, with utility for generating chart configurations.
    7
    24
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server wrapping the Tesla Fleet API and TeslaMate API

  • Unofficial integration! ## ✨ Key Features ### 💰 Financial Intelligence - **Smart Charging Cost An…

  • Find EV charging stations, detail, and reliability check-ins via the global Open Charge Map.

View all MCP Connectors

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/ca11mebaraka/evaconnect'

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