MC3000 Charger

io.github.nietonchique由 GitHub 账号 nietonchique 发布v0.2.4更新于 Oct 25, 2026

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

已验证STDIO仅桌面位置与生活开发者工具

概览

AI 生成的概览

本地 MCP 服务器,让助手通过低功耗蓝牙扫描、读取并安全控制兼容 SKYRC MC3000 的电池充电器。

可以做什么
  • 扫描附近的充电器并通过蓝牙连接或断开
  • 读取槽位状态、电池化学类型、模式、电压、电流、温度与状态
  • 列出并校验电池配置,先以试运行方式渲染,再执行实际写入
  • 应用配置与启动槽位各自需要独立的按槽位确认令牌
  • 立即停止单个槽位或全部槽位,并将电压曲线导出为 JSON 或 CSV
  • 导出有容量上限且已脱敏的会话审计日志
适用场景
适合拥有兼容 SKYRC MC3000 充电器、希望助手查看槽位状态、准备并校验充电配置,并在明确确认下执行充电且随时可紧急停止的用户。
运行要求
以本地 Rust 二进制通过 stdio 运行(可用 cargo、AUR 或 Linux x86_64 的 MCPB 包安装),无需 Python 运行时。需要蓝牙低功耗适配器,Linux 上还需 BlueZ/D-Bus。未声明任何账号、API 密钥或环境变量。提供假后端,可在无硬件时试用。
安装前请注意
它会控制真实的充电硬件:化学类型、电流、电压或槽位选错,或无人看管地充电,可能损坏电芯甚至引发火灾,请让充电器保持在视线内。实际写入配置和启动都需要按槽位的确认令牌,服务器本身被描述为安全边界而非模型。未知型号与 MC5000 连接为只读,且写入确认并不代表充电器已实际应用。

安装

在 SourceWeft 中

  1. 打开 控制台中的 MC3000 Charger,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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.

来源:README.md,提交 73a4acd

工具

0
SourceWeft 曾在隔离沙箱中以无凭据方式启动该软件包一次,以列出其工具,但未能完成:该软件包类型无法在沙箱中运行。

版本历史

2
  1. v0.2.4最新Oct 25, 2026
  2. v0.2.1Oct 23, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分