
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.
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.
Installation
In SourceWeft
- Open MC3000 Charger in the dashboard and add it to a workspace.
- 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
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.
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
A Linux x86_64 MCPB bundle is attached to each release for MCPB-compatible clients.
Linux BLE requires BlueZ/D-Bus:
Connect an MCP client
Client-specific examples are in examples/.
Try it without hardware:
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:
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:
The CLI can scan and read slots. It cannot write profiles, change settings, or start charging.
Safe workflow
- Read slot status.
- Validate a battery profile.
- Render it as a dry run.
- Apply it with
confirmation_token=APPLY_PROFILE_SLOT_<slot>. - Start it with a separate
confirmation_token=START_SLOT_<slot>. - Monitor voltage, current, temperature, and status.
- Use
charger.stop_slot/charger.stop_allimmediately if anything looks wrong.
Example dry run for physical slot 4 / API slot 3:
Start requires a second explicit confirmation:
Emergency stop is deliberately tokenless:
Tools
Production surface is namespaced as charger.*:
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 are1..4. apply_profiledefaults todry_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
The fake backend keeps hardware out of normal tests and CI. See
CONTRIBUTING.md for the full workflow and hardware-safety rule.
Documentation
- Security and disclosure:
SECURITY.md - Safety model:
docs/safety-model.md - Supported devices:
docs/supported-devices.md - Examples:
docs/examples.md - Release/publishing checklist:
docs/publishing.md - Agent skill:
skill/SKILL.md
License
Apache-2.0. See LICENSE.
Source: README.md at commit 73a4acd
Tools
0Version history
2- v0.2.4LatestOct 25, 2026
- 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