MC3000 Charger

io.github.nietonchiquePublished by GitHub account nietonchiquev0.2.4Updated Oct 25, 2026

Safe MCP server for SKYRC MC3000-compatible battery chargers over Bluetooth Low Energy.

VerifiedSTDIODesktop onlyLocation & LifestyleDeveloper Tools

Overview

AI-generated overview

Local MCP server that lets an assistant scan, read and safely control SKYRC MC3000-compatible battery chargers over Bluetooth Low Energy.

What you can do
  • Scan for and connect to or disconnect from a nearby charger over BLE
  • Read slot status, chemistry, mode, voltage, current, temperature and state
  • List and validate battery profiles, then render them as dry runs before any live write
  • Apply a profile and start a slot, each gated by its own per-slot confirmation token
  • Stop a single slot or all slots immediately, and export voltage curves as JSON or CSV
  • Export a bounded, redacted session audit log
When to use it
For people who own a SKYRC MC3000-compatible charger and want an assistant to inspect slot state, prepare and validate charge profiles, and run charging with explicit confirmations while keeping an emergency stop available.
Requirements
Runs as a local Rust binary over stdio (installable via cargo, AUR, or a Linux x86_64 MCPB bundle); no Python runtime. Needs a Bluetooth LE adapter and, on Linux, BlueZ/D-Bus. No accounts, API keys or environment variables are declared. A fake backend is available for trying it without hardware.
Before you install
This controls real charging hardware: wrong chemistry, current, voltage or slot, or unsupervised charging, can damage cells or start a fire, so keep the charger in sight. Live profile writes and starts require explicit per-slot confirmation tokens, and the server is described as the safety boundary rather than the model. Unknown models and MC5000 connections are read-only, and a write acknowledgement does not prove the charger applied it.

Installation

In SourceWeft

  1. Open MC3000 Charger in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

mc3000-mcp

[CI] [License] [MCP]

Safe local MCP control for SKYRC MC3000-compatible chargers.

mc3000-mcp connects an AI agent to a battery charger without handing it an unsupervised hardware API. BLE control is local. Charging is dry-run by default. Live writes and starts need explicit per-slot confirmation. Emergency stop is always one call away.

text
Agent  ──MCP stdio──  mc3000-mcp  ──BLE FFE0/FFE1──  SKYRC MC3000                          │                          ├─ profile validation and chemistry limits                          ├─ dry-run profile rendering                          ├─ confirmation tokens for live writes/starts                          └─ bounded, redacted audit log
ImplementationRust binary; no Python runtime
MCPstdio, 27 tools, resources and prompts
Safetycode-enforced validation, dry-run first, explicit confirmation
HardwareMC3000 read/write; MC5000 read-only
Live-testedMC3000 firmware 1.23, hardware 2.20, NiMH modes
Registrycrates.io, MCP Registry MCPB, AUR

Hardware warning. Wrong chemistry, current, voltage, slot, or unsupervised charging can damage cells or start a fire. The MCP server is the safety boundary, not the LLM. Keep the charger in sight. See SECURITY.md.

Install

bash
# crates.iocargo install mc3000-mcp --locked
# Arch Linuxparu -S mc3000-mcp
# released tag, if you prefer installing from sourcecargo install --git https://github.com/nietonchique/mc3000-mcp.git --tag v0.2.4 --locked

A Linux x86_64 MCPB bundle is attached to each release for MCPB-compatible clients.

Linux BLE requires BlueZ/D-Bus:

bash
bluetoothctl show# If the adapter is off:sudo rfkill unblock bluetooth && bluetoothctl power on

Connect an MCP client

json
{  "mcpServers": {    "mc3000": {      "command": "mc3000-mcp",      "args": []    }  }}

Client-specific examples are in examples/.

Try it without hardware:

json
{  "mcpServers": {    "mc3000": {      "command": "mc3000-mcp",      "args": ["--backend", "fake"]    }  }}

Agent skill

charger-agent uses the portable Agent Skills layout: one folder with a SKILL.md manifest. No vendor-specific installer is required.

Install it for Codex:

bash
mkdir -p ~/.codex/skillscurl -fsSL https://github.com/nietonchique/mc3000-mcp/releases/download/v0.2.4/mc3000-mcp-skill-v0.2.4.tar.gz \  | tar -xz -C ~/.codex/skills

For OMP, use ~/.omp/agent/skills as the destination. For Claude-compatible clients, use ~/.claude/skills. Hermes can also install the raw file, but it is just one compatible client—not the distribution format.

The folder contains the charger workflow plus a pre-start checklist and example profile. It is guidance only; the Rust MCP server remains the enforced safety boundary.

CLI

The default command starts MCP stdio. Read-only diagnostics are also available directly:

bash
mc3000-mcp --versionmc3000-mcp scan --timeout 8mc3000-mcp status --address AA:BB:CC:DD:EE:FFmc3000-mcp --backend fake scan

The CLI can scan and read slots. It cannot write profiles, change settings, or start charging.

Safe workflow

  1. Read slot status.
  2. Validate a battery profile.
  3. Render it as a dry run.
  4. Apply it with confirmation_token=APPLY_PROFILE_SLOT_<slot>.
  5. Start it with a separate confirmation_token=START_SLOT_<slot>.
  6. Monitor voltage, current, temperature, and status.
  7. Use charger.stop_slot / charger.stop_all immediately if anything looks wrong.

Example dry run for physical slot 4 / API slot 3:

json
{  "name": "charger.apply_profile",  "arguments": {    "slot": 3,    "profile_id": "nimh-aa-conservative-charge"  }}

Start requires a second explicit confirmation:

json
{  "name": "charger.start",  "arguments": {    "slot": 3,    "confirmation_token": "START_SLOT_3"  }}

Emergency stop is deliberately tokenless:

json
{"name": "charger.stop_all", "arguments": {}}

Tools

Production surface is namespaced as charger.*:

ToolPurpose
scan_devicesRead-only BLE scan.
connect / disconnectManage the charger connection.
get_status, read_slotsSlot chemistry, mode, voltage/current, temperature, state.
get_voltage_curve, export_voltage_curveCharger-stored voltage series as JSON/CSV.
list_profiles, validate_profileBundled profiles and enforced safety checks.
apply_profileDry-run by default; live write requires its slot token.
startStart a prepared slot; requires a separate token.
stop_slot, stop_allImmediate emergency stop.
export_session_logBounded, redacted audit log.

Fourteen legacy mc3000_* tools remain for protocol/debugging work. They use the same confirmation policy for non-emergency writes. Raw writes cannot implicitly start slots and always block factory/calibration restore opcodes.

Safety model

  • API slots are zero-based 0..3; physical slots are 1..4.
  • apply_profile defaults to dry_run=true.
  • Live profile writes require exactly APPLY_PROFILE_SLOT_<slot>.
  • Starts require exactly START_SLOT_<slot>.
  • Safety checks run before any backend call; unsupported chemistry fails closed.
  • NiMH/Eneloop/NiCd, LiIon, and LiFe have enforced limits.
  • Unknown charger models and MC5000 connections are read-only.
  • Session logs redact addresses and confirmation tokens and are bounded in memory.

Full model: docs/safety-model.md. Profile schema and bundled examples: docs/profile-schema.md.

Compatibility

Confirmed live: SKYRC MC3000 firmware 1.23, hardware 2.20.

Protocol details are documented from the official Android app and hardware testing in docs/ble-protocol-notes.md and docs/reverse-notes.md. MC5000 support is intentionally read-only until writes are verified on real hardware.

Charger firmware behavior can differ. A profile write acknowledgement is not proof that the charger applied it—start the slot and verify mode/current/status.

Development

bash
cargo fmt --all -- --checkcargo clippy --all-targets --all-features --locked -- -D warningscargo test --all-features --lockedcargo audit && cargo deny check

The fake backend keeps hardware out of normal tests and CI. See CONTRIBUTING.md for the full workflow and hardware-safety rule.

Documentation

License

Apache-2.0. See LICENSE.

Source: README.md at commit 73a4acd

Tools

0
SourceWeft started this package once in an isolated sandbox, without credentials, to list its tools. That failed: the package type cannot run in the sandbox.

Version history

2
  1. v0.2.4LatestOct 25, 2026
  2. v0.2.1Oct 23, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts