About MC3000 Charger
MC3000 Charger is an MCP server for local BLE control of SKYRC MC3000-compatible chargers, intended for users who need charger status or controlled charging in agent workflows. Profile writes and charging starts require validation and per-slot confirmation; MC5000 support is read-only.
Key features
- 01BLE scanning and charger status reads
- 02Battery profile validation and safety limits
- 03Dry-run by default with per-slot confirmation
- 04Voltage curve and session log export
- 05Emergency stop for one or all slots
- 06Read-only MC5000 support
Use cases
- 01Read voltage, current, and temperature for charger slots
- 02Validate a battery profile and preview its changes
- 03Apply a profile and start a slot after confirmation
- 04Stop one or all charging slots immediately if needed
MCP support
Provides 27 tools, resources, and prompts to MCP clients over stdio for connecting to and controlling compatible chargers. Hardware control uses local BLE; writes and starts require explicit confirmation, while emergency stops need no token.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEmc3000-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.
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
| Implementation | Rust binary; no Python runtime |
| MCP | stdio, 27 tools, resources and prompts |
| Safety | code-enforced validation, dry-run first, explicit confirmation |
| Hardware | MC3000 read/write; MC5000 read-only |
| Live-tested | MC3000 firmware 1.23, hardware 2.20, NiMH modes |
| Registry | crates.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
# crates.io
cargo install mc3000-mcp --locked
# Arch Linux
paru -S mc3000-mcp
# released tag, if you prefer installing from source
cargo install --git https://github.com/nietonchique/mc3000-mcp.git --tag v0.2.1 --locked
A Linux x86_64 MCPB bundle is attached to each release for MCPB-compatible clients.
Linux BLE requires BlueZ/D-Bus:
bluetoothctl show
# If the adapter is off:
sudo rfkill unblock bluetooth && bluetoothctl power on
Connect an MCP client
{
"mcpServers": {
"mc3000": {
"command": "mc3000-mcp",
"args": []
}
}
}
Client-specific examples are in examples/.
Try it without hardware:
{
"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:
mkdir -p ~/.codex/skills
curl -fsSL https://github.com/nietonchique/mc3000-mcp/releases/download/v0.2.1/mc3000-mcp-skill-v0.2.1.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:
mc3000-mcp --version
mc3000-mcp scan --timeout 8
mc3000-mcp status --address AA:BB:CC:DD:EE:FF
mc3000-mcp --backend fake scan
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:
{
"name": "charger.apply_profile",
"arguments": {
"slot": 3,
"profile_id": "nimh-aa-conservative-charge"
}
}
Start requires a second explicit confirmation:
{
"name": "charger.start",
"arguments": {
"slot": 3,
"confirmation_token": "START_SLOT_3"
}
}
Emergency stop is deliberately tokenless:
{"name": "charger.stop_all", "arguments": {}}
Tools
Production surface is namespaced as charger.*:
| Tool | Purpose |
|---|---|
scan_devices | Read-only BLE scan. |
connect / disconnect | Manage the charger connection. |
get_status, read_slots | Slot chemistry, mode, voltage/current, temperature, state. |
get_voltage_curve, export_voltage_curve | Charger-stored voltage series as JSON/CSV. |
list_profiles, validate_profile | Bundled profiles and enforced safety checks. |
apply_profile | Dry-run by default; live write requires its slot token. |
start | Start a prepared slot; requires a separate token. |
stop_slot, stop_all | Immediate emergency stop. |
export_session_log | Bounded, 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 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
cargo fmt --all -- --check
cargo clippy --all-targets --all-features --locked -- -D warnings
cargo test --all-features --locked
cargo 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
- 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.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.