mc3000-mcp
This server provides safe MCP-based monitoring and control of SKYRC MC3000/MC5000-compatible battery chargers over Bluetooth Low Energy, with enforced safety gates for dangerous operations.
BLE Discovery & Connection
Scan for supported chargers by advertised name, connect by BLE address or auto-connect, and disconnect.
Status & Monitoring
Read one or all four slot statuses (chemistry, mode, voltage, current, capacity, temperature, internal resistance, and more).
Retrieve firmware/hardware version and device settings (display, fan, beep, temperature unit, etc.).
Read MC5000 slot status using the MC5000 frame layout.
Voltage Curves
Read charger-stored voltage time-series for a slot (up to 120 millivolt points) and export as JSON or CSV.
Battery Profile Management
List bundled safe example profiles, validate custom profiles against chemistry/device/safety limits, and build 40-byte MC3000 profile frames without sending.
Apply profiles to a slot — dry-run by default; live writes require an explicit confirmation token (
APPLY_PROFILE_SLOT_<slot>).
Charger Control
Start charging/program on a slot (requires confirmation token
START_SLOT_<slot>).Emergency stop for a single slot or all slots simultaneously (no confirmation or validation bypass required).
Device Configuration
Update device settings such as display, input voltage, temperature unit, cooling fan, screensaver, and system beep.
Logging & Diagnostics
Export the in-memory session log with redacted device identifiers.
Send raw hex frames directly to the charger for protocol experiments and debugging.
Safety Enforcement
Profile writes and start operations require explicit confirmation tokens; dry-run is the default.
Emergency stop bypasses validation for immediate action.
All production tools enforce chemistry and device safety limits server-side.
Provides tools for monitoring and controlling SKYRC MC3000-compatible battery chargers over Bluetooth Low Energy.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mc3000-mcpscan for nearby MC3000 chargers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mc3000-mcp
Safe MCP server and companion agent skill for monitoring and controlling SKYRC MC3000-compatible battery chargers over Bluetooth Low Energy.
The BLE protocol was recovered from the official Android app (MC3000 4.1.2). The production charger.* MCP tools expose safe charger operations: inspect slot state, read charger-stored voltage curves, validate battery profiles, dry-run profile writes, require explicit confirmation for live writes/starts, and provide emergency stop tools.
Status: alpha. Protocol framing, MCP stdio behavior, safety validation, and fake-client flows are tested. Live testing has confirmed MC3000 BLE operation on NiMH Charge, Discharge, Refresh, Break-in, and Cycle modes. Hardware behavior still depends on charger firmware/revision and BLE availability.
Safety warning
This software can control a physical battery charger. Wrong chemistry, current, voltage, or slot selection can damage cells or create a fire risk.
The LLM/agent is not the safety layer; limits and dangerous-action gates are enforced in the MCP server.
Verify battery chemistry, capacity, cell count, voltage/cutoff, temperature policy, and slot before applying any profile.
API slot numbers are zero-based (
0..3), matching Android app internals. Physical slot 1 is API slot0.charger.apply_profileis dry-run by default. Live writes requireconfirmation_token=APPLY_PROFILE_SLOT_<slot>.charger.startrequires a separateconfirmation_token=START_SLOT_<slot>.Keep the charger in sight while testing. Do not expose this MCP server to untrusted clients.
Factory/calibration reset opcodes are documented for research but intentionally not exposed as production tools.
See SECURITY.md and docs/safety-model.md before using live hardware.
Related MCP server: aranet4-mcp-server
Features
BLE discovery using the same advertised names as the Android app.
Connect/disconnect over BLE FFE0/FFE1.
Read one slot or all four slots.
Parse slot status: chemistry, mode, status, time, voltage, current, capacity, temperature, internal resistance, LED state.
Read firmware/hardware version and basic device settings.
Read the app-compatible charger-stored voltage time-series (
0x56) and export it as JSON/CSV.Validate battery profiles against conservative chemistry/device limits.
Build/apply 40-byte MC3000 profiles with chemistry and mode-aware defaults.
Dry-run-by-default production tools plus explicit confirmation tokens for writes/starts.
Emergency stop for one slot or all slots.
Companion
charger-agentskill for Hermes Agent workflows.Legacy
mc3000_*low-level tools for protocol/debug work.
MC3000 vs MC5000 selection
Model selection is based on the charger/protocol, not the inserted battery. If the physical charger is known, configure/use that model explicitly. If it is unknown, use only read-only probes: MC3000 status is opcode 0x55, while MC5000 slot status is opcode 0x91 with a slot bitmask and a different response layout. Unknown devices must not receive profile writes or start commands.
MC5000 support is being added conservatively from protocol facts in kolinger/skyrc-mc3000: status parsing can be implemented/read-only first; profile writes/start remain MC3000-only until verified on real MC5000 hardware.
Install
From source:
git clone https://github.com/nietonchique/mc3000-mcp.git
cd mc3000-mcp
python -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[test]'Once published to PyPI, install/run with one of:
pipx install mc3000-mcp
pipx run mc3000-mcp
# or
uvx mc3000-mcpLinux BLE access requires BlueZ/DBus. Confirm the adapter is powered:
bluetoothctl showIf scans return no devices, make sure the charger is powered on, not connected to the phone app, and close enough to the PC BLE adapter.
Configure as an MCP server
Local source checkout:
hermes mcp add mc3000 --command "$(pwd)/.venv/bin/mc3000-mcp"
hermes mcp test mc3000Published package / pipx:
hermes mcp add mc3000 --command "pipx run mc3000-mcp"
hermes mcp test mc3000Common client config examples are in examples/claude-desktop.json, examples/codex.json, and examples/cursor.json.
Install the companion Hermes skill
The MCP server enforces safety. The skill teaches the agent the safe workflow: ask for missing battery facts, choose conservative profiles, show dry-run summaries, require explicit confirmation, monitor after start, and stop on unsafe state.
Install from this repository:
hermes skills install \
https://raw.githubusercontent.com/nietonchique/mc3000-mcp/main/skill/SKILL.md \
--name charger-agentUse it explicitly:
hermes -s charger-agent
# or inside a running session:
# /skill charger-agentThe raw SKILL.md is intentionally self-contained. Additional repository files under skill/profiles/ and skill/checklists/ are examples/checklists for humans and future bundle-style registries; the server-side safety rules remain in mc3000_mcp.safety.
Production MCP tools
Preferred tools are namespaced as charger.* and enforce dry-run/confirmation on dangerous actions:
Tool | Purpose |
| Read-only BLE scan. |
| Connect to a selected device. |
| Read current charger status. |
| Read one slot or all slots. |
| Read charger-stored voltage time-series ( |
| Export that voltage curve as JSON or CSV. |
| List bundled example profiles. |
| Validate a battery profile against enforced limits. |
| Validate and apply a profile; dry-run by default, live write requires |
| Start a slot; requires |
| Emergency stop for one slot. |
| Emergency stop for all slots. |
| Export redacted in-memory command/session log. |
Legacy mc3000_* tools remain for low-level protocol work and backwards compatibility.
Safe workflow examples
Dry-run a bundled conservative NiMH AA profile for physical slot 4 / API slot 3:
{
"name": "charger.apply_profile",
"arguments": {
"slot": 3,
"profile_id": "nimh-aa-conservative-charge"
}
}Apply after explicit confirmation:
{
"name": "charger.apply_profile",
"arguments": {
"slot": 3,
"profile_id": "nimh-aa-conservative-charge",
"dry_run": false,
"confirmation_token": "APPLY_PROFILE_SLOT_3"
}
}Start after a separate explicit confirmation:
{
"name": "charger.start",
"arguments": {
"slot": 3,
"confirmation_token": "START_SLOT_3"
}
}Export the charger-stored voltage curve as CSV:
{
"name": "charger.export_voltage_curve",
"arguments": {
"slot": 3,
"format": "csv"
}
}Emergency stop all slots:
{"name": "charger.stop_all", "arguments": {}}More examples: docs/examples.md.
Voltage curves
The Android app's graph is a voltage curve, not a generic telemetry logger. It requests opcode 0x56, receives a charger-stored sample interval plus up to 120 millivolt points, and plots/exports time vs voltage. Current, capacity, temperature, and resistance are status fields, not historical curve series.
This project exposes that same data as:
mc3000_get_voltage_curve— low-level protocol/debug tool.charger.get_voltage_curve— production-safe JSON time-series.charger.export_voltage_curve— JSON/CSV export.
No background polling is required for the app-compatible voltage curve.
Documentation map
SECURITY.md— hardware safety and disclosure policy.docs/supported-devices.md— confirmed devices and compatibility policy.docs/safety-model.md— what is enforced in code vs guidance.docs/profile-schema.md— battery profile schema and examples.docs/ble-protocol-notes.md— GATT/framing/opcode notes.docs/reverse-notes.md— detailed reverse-engineering notes.docs/examples.md— safe dry-run/apply/start/stop/curve examples.docs/publishing.md— release/listing/skill distribution checklist.skill/SKILL.md— companion agent playbook.server.json— draft Official MCP Registry metadata.
Protocol short version
Service UUID:
0000FFE0-0000-1000-8000-00805f9b34fbWrite/notify characteristic UUID:
0000FFE1-0000-1000-8000-00805f9b34fbDevice names:
SimpleBLEPeripheral,Charger,HitecChargerNormal command: 20 bytes, checksum in byte 19.
Profile command (
0x11): 40 bytes, checksum in byte 39, written as two 20-byte chunks.Voltage curve command (
0x56): charger-stored voltage curve for a zero-based slot.Status/curve slot args are zero-based; start/stop use slot bitmasks.
Development
python -m pip install -e '.[test]'
python -m pytest -q
python -m ruff check .
python -m ruff format --check .
python -m mypy src testsLocal MCP stdio smoke test without hardware:
python -m mc3000_mcp.server <<'EOF'
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05"}}
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"charger.list_profiles","arguments":{}}}
EOFBuild/publish checks:
python -m build
python -m twine check dist/*Repository hygiene
The repository intentionally does not include the APK, decompiled Java, local reverse-engineering scratch outputs, virtualenvs, or build caches. Those are excluded by .gitignore.
License
Apache-2.0. See LICENSE.
Available Tools
27 toolscharger.apply_profileB
Validate and apply a profile to a slot. Dry-run is default; live write requires token.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes | ||
| dry_run | No | ||
| profile | No | ||
| profile_id | No | ||
| confirmation_token | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses that dry-run is default and live write requires a token, hinting at safety. However, it does not specify outcomes on validation failure, or any destructive aspects beyond 'apply'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences, but the structure could be improved by separating validation and application steps for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, and the description does not mention return values, error states, or post-conditions. The complex nested 'profile' object lacks behavioral hints, leaving the agent guessing about validation outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description should explain parameters beyond 'slot' and 'token'. It mentions 'dry-run' but not how it affects behavior, and does not clarify 'profile' vs 'profile_id' or the meaning of 'confirmation_token'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates and applies a profile to a slot. It distinguishes the action from validation-only tools like 'charger.validate_profile', but does not explicitly differentiate from 'mc3000_apply_profile' which may be related but in a different namespace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for dry-run by default and live write with a token, but does not provide explicit guidelines on when to use this tool versus siblings like 'charger.validate_profile' for validation-only scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.connectC
Connect to a selected charger. Prefer an explicit address from scan_devices.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | ||
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits such as whether the connection is stateful, what side effects occur, or authentication requirements. The description adds no value beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short sentences, but the brevity comes at the cost of essential details. It is front-loaded but lacks structure to fully guide an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, and 2 parameters, the description is incomplete. It fails to explain return values, prerequisites, or connection behavior, leaving significant gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides only minimal context for the 'address' parameter (suggesting it comes from scan_devices). The 'timeout' parameter is not explained. The description adds some meaning but is insufficient for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Connect' and the resource 'charger', and adds context about using an address from scan_devices. It distinguishes from sibling tools like charger.start or charger.get_status by specifying the action, but does not explicitly differentiate from mc3000_connect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description hints at when to use the tool by suggesting an explicit address from scan_devices, but it does not state when not to use it or mention alternative tools. The guidance is minimal and implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.export_session_logA
Export in-memory session log with redacted device identifiers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It mentions 'redacted device identifiers', adding transparency. However, it does not state if the operation is read-only, destructive, or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with key action and scope. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple with no parameters and no output schema. Description covers the core function and an important behavioral detail (redaction). Slightly incomplete due to lack of output format or permission hints, but adequate for a straightforward export.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Baseline for 0 parameters is 4. Description adds no parameter-specific info, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Export' and resource 'in-memory session log'. It distinguishes from siblings like 'export_voltage_curve' by specifying the log contents and redaction of identifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No mention of prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.export_voltage_curveC
Export the charger-stored voltage curve as JSON or CSV.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes | ||
| format | No | json | |
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description does not disclose if the tool modifies state, whether it initiates a download or returns data inline, or potential side effects. The timeout parameter suggests a long operation but is not explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is very concise, but may be overly terse given the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is severely incomplete: no explanation of what a voltage curve is, what slots represent, how the export works, or how it differs from similar sibling tools. With 3 parameters, no output schema, and no annotations, the description fails to provide adequate context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds no meaning to the parameters. The only hint is 'JSON or CSV' relating to format, but slot and timeout are not explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Export' and resource 'charger-stored voltage curve', and mentions output formats. However, it does not differentiate from sibling 'charger.get_voltage_curve' which likely returns similar data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use 'export' vs alternative tools like 'charger.get_voltage_curve' or 'charger.export_session_log'. No mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.get_statusA
Read current charger status for all slots.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry full burden. It indicates a read-only operation, which is correct, but lacks details like whether a connection is required or how status is returned. Minimal but not contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, efficient and front-loaded. Every word is necessary and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description adequately states the action. However, it could hint at what 'status' includes or the return format to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100%. Baseline for 0 parameters is 4; description adds no param info because none exist, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states specific verb 'Read' and resource 'charger status for all slots', clearly distinguishing it from sibling tools like 'charger.start' or 'charger.read_slots'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'charger.get_voltage_curve' or 'charger.read_slots'. The description does not mention any conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.get_voltage_curveB
Read the charger-stored app-style voltage time-series for one slot. No polling.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes | ||
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It only states 'Read' (non-destructive) and 'No polling' (no repeated requests). It does not disclose response format, speed, error conditions, or slot availability requirements, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 12-word sentence is concise and front-loaded. However, its brevity sacrifices necessary detail on parameters and output, making it less effective than a slightly longer, more informative description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 2 parameters, no output schema, and no annotations. The description does not explain what a 'voltage time-series' is, what the output resembles, or how parameters affect behavior. This leaves the agent with insufficient context to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description makes no mention of parameters. The input schema has 0% description coverage, so the agent must rely solely on schema constraints (e.g., slot range) without understanding parameter meaning (e.g., timeout unit or effect). Description adds zero value for parameter interpretation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Read') and resource ('charger-stored app-style voltage time-series for one slot'), effectively distinguishing from sibling tools like 'charger.export_voltage_curve' (export vs read) and 'charger.read_slots' (slot status vs curve).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'No polling' implies a one-shot read, but the description does not provide explicit guidance on when to use this tool versus alternatives (e.g., when to poll vs get a single point). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.list_profilesC
List bundled safe example profiles.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral transparency. It states the profiles are 'safe' and 'example', implying no destructive effects, but gives no details on connectivity requirements, speed, or side effects. The description is minimal and does not compensate for the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently states the tool's action. It is concise but may be too brief for some contexts. However, for a simple list operation, it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description should explain what the output contains (e.g., list of profile names, descriptions) and any setup requirements. It lacks this information, leaving the agent unsure of the return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so schema coverage is 100%. The description adds no parameter information because there are none. Baseline score of 3 is appropriate since parameter semantics are adequately handled by the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'bundled safe example profiles'. It distinguishes this tool from siblings like apply_profile or validate_profile, which perform actions on profiles rather than listing them. However, it does not explicitly differentiate it from other list-type tools if any exist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as charger.apply_profile or charger.validate_profile. It lacks context on prerequisites or typical workflow, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.read_slotsB
Read one slot or all slot statuses. Slot is zero-based 0..3.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides some behavioral info (slot is zero-based, range 0..3), but lacks disclosure on whether the operation is read-only, requires authorization, or has side effects. With no annotations, the description carries the full burden and is only partially adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no fluff. Information is front-loaded and each word adds value. Ideal for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema or annotations, the description is mostly adequate but lacks information about return values or possible errors. It leaves some gaps for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It explains the parameter 'slot' is zero-based with range 0..3, adding meaning beyond the schema's min/max constraints. However, it does not explain the behavior when omitted (all slots) or the output format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads slot statuses and specifies the slot range. It distinguishes from sibling tools like 'charger.get_status' by focusing on individual slot statuses, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'charger.get_status'. The description only states what it does, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.scan_devicesC
Read-only BLE scan for supported chargers.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description must fully disclose behavior. It mentions read-only, but does not explain timeout behavior, return format, or what happens on scan completion (e.g., how devices are returned). Inadequate for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely short (one phrase), which is concise, but omits critical details. Not structured for easy scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one optional parameter and no output schema, the description is still too sparse. It lacks information on error states, typical usage flow, and how it relates to other scan tools in the same domain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description does not mention the 'timeout' parameter at all. No units, default explanation, or purpose beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (scan), resource (devices for supported chargers), and nature (read-only, BLE). It distinguishes from siblings like charger.connect or charger.get_status, but 'supported chargers' is ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., mc3000_scan). No prerequisites or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.startC
Start the already-applied operation on a slot. Requires START_SLOT_ token.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes | ||
| confirmation_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only discloses the token requirement, but does not specify if the operation is destructive, idempotent, or what side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two short sentences) and front-loaded, but the brevity sacrifices essential details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and critical missing info on return values, errors, and prerequisites beyond token, the description is severely incomplete for a tool requiring two parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description adds no explanation of the 'slot' or 'confirmation_token' parameters beyond implying the token's format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Start' and the resource 'slot', and implies starting an operation that has been previously applied. This distinguishes it from siblings like 'apply_profile' and 'stop_slot'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite token but does not specify when to use this tool versus alternatives, nor does it condition usage on prior application of a profile.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.stop_allA
Emergency stop for all slots; bypasses profile validation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes key behavior (stops all slots, bypasses validation) but lacks details on irreversibility, side effects, or safety implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, with critical information front-loaded ('Emergency stop for all slots').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, no output schema), the description adequately covers its purpose and a key behavioral note (bypasses validation).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; baseline score of 4 applies as description adds no parameter info (not needed).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States it performs an emergency stop for all slots, clearly distinguishing it from sibling tools like charger.stop_slot which stops a single slot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Indicates emergency use and that it bypasses profile validation, suggesting it's for urgent scenarios. Could be more explicit about when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.stop_slotA
Emergency stop for one slot; bypasses profile validation.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the key behavior of bypassing profile validation, but does not cover other traits like potential destructive effects, reversibility, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at 6 words, front-loading the critical 'emergency stop' action. Every word earns its place, focusing on the unique aspect of bypassing validation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description is fairly complete. It conveys the purpose and the exceptional behavior (bypassing validation), though it lacks details about failure modes or slot numbering conventions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the 'slot' parameter. The tool description does not explain what the slot parameter represents beyond the integer range already in the schema. No additional semantic value is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states an 'emergency stop for one slot' and distinguishes itself by noting it 'bypasses profile validation.' This sets it apart from sibling tools like charger.stop_all, which stops all slots, and charger.start.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'emergency stop' implies urgent scenarios, but there is no explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it or contrast with other stop operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
charger.validate_profileB
Validate a battery profile against enforced chemistry/device/safety limits.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | ||
| profile_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'validate', implying a read-only operation. It does not disclose whether validation is synchronous, what happens on failure (error vs. boolean return), or any side effects. Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that directly states the tool's purpose without any extraneous words. It is appropriately concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a complex nested object parameter (18+ properties in the profile) and no output schema or annotations, the description is severely lacking. It does not explain the validation output format, error behavior, or how to use the result. Very incomplete given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not add meaning to the two parameters. It doesn't explain the 'profile' object's role or the 'profile_id' parameter beyond what names imply. The description fails to compensate for the lack of schema property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'validate' and the resource 'battery profile', and specifies the context 'enforced chemistry/device/safety limits', distinguishing it from sibling tools like apply_profile or build_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. Usage is implied as a pre-check before applying a profile, but alternatives like apply_profile are not mentioned or differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_apply_profileB
Apply a profile/program. Pass profile_hex from mc3000_build_profile or pass the same profile fields directly. Optionally start selected slots.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 0 charge, 1 refresh, 2 storage/break-in, 3 discharge, 4 cycle | |
| start | No | ||
| breakin | No | ||
| slot_mask | No | slot bitmask: slot1=1, slot2=2, slot3=4, slot4=8 | |
| cycle_mode | No | ||
| cycle_count | No | ||
| profile_hex | No | ||
| temp_cutoff | No | ||
| battery_type | No | 0 LiIon, 1 LiFe, 2 LiIo4.35, 3 NiMH, 4 NiCd, 5 NiZn, 6 Eneloop, 7 RAM, 8 LTO, 9 Na-Lion | |
| capacity_mah | No | ||
| keep_voltage_mv | No | Omit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV. | |
| charge_current_ma | No | ||
| negative_delta_mv | No | ||
| time_limit_minutes | No | ||
| trickle_current_ma | No | ||
| charge_rest_minutes | No | ||
| discharge_current_ma | No | ||
| charge_stop_current_ma | No | Omit for chemistry default; NiMH/NiCd/Eneloop default is 50mA. | |
| charge_stop_voltage_mv | No | Omit for chemistry default; NiMH/NiCd/Eneloop default is 1650mV. | |
| discharge_rest_minutes | No | ||
| discharge_stop_current_ma | No | ||
| discharge_stop_voltage_mv | No | Omit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It merely says 'Apply' without disclosing side effects, conflict resolution when both profile_hex and fields are provided, idempotency, or behavior when slots are already running.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences that front-load the action and key options. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (22 parameters, no annotations, no output schema), the description is far from complete. It does not cover return values, error scenarios, prerequisites, or detailed parameter interactions, leaving significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (32%), yet the description adds minimal context beyond what the schema provides. It mentions profile_hex and slot_mask implicitly ('selected slots') but does not explain other 20 parameters, leaving most of the parameter semantics undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Apply a profile/program' and mentions two ways to provide the profile (hex from build_profile or direct fields). It is specific enough to distinguish from sibling tools like mc3000_build_profile and mc3000_start, though explicit differentiation is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives implicit guidance by offering two methods (profile_hex or direct fields) and mentions optional starting of slots. However, it lacks explicit when-to-use or when-not-to-use compared to siblings like mc3000_start or charger.apply_profile.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_build_profileA
Build a 40-byte MC3000 profile/program frame without sending it.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 0 charge, 1 refresh, 2 storage/break-in, 3 discharge, 4 cycle | |
| breakin | No | ||
| slot_mask | Yes | slot bitmask: slot1=1, slot2=2, slot3=4, slot4=8 | |
| cycle_mode | No | ||
| cycle_count | No | ||
| temp_cutoff | No | ||
| battery_type | No | 0 LiIon, 1 LiFe, 2 LiIo4.35, 3 NiMH, 4 NiCd, 5 NiZn, 6 Eneloop, 7 RAM, 8 LTO, 9 Na-Lion | |
| capacity_mah | No | ||
| keep_voltage_mv | No | Omit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV. | |
| charge_current_ma | No | ||
| negative_delta_mv | No | ||
| time_limit_minutes | No | ||
| trickle_current_ma | No | ||
| charge_rest_minutes | No | ||
| discharge_current_ma | No | ||
| charge_stop_current_ma | No | Omit for chemistry default; NiMH/NiCd/Eneloop default is 50mA. | |
| charge_stop_voltage_mv | No | Omit for chemistry default; NiMH/NiCd/Eneloop default is 1650mV. | |
| discharge_rest_minutes | No | ||
| discharge_stop_current_ma | No | ||
| discharge_stop_voltage_mv | No | Omit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It indicates the tool is non-destructive (only builds a frame), but omits details on prerequisites (e.g., connection), error conditions, or whether the frame is stored or returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no redundancy, front-loads the core action and key constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 20 parameters and no output schema; the description is minimal and does not explain the built frame's structure or how to use it subsequently. Adequate but could benefit from more context about the frame format or next steps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (35%), and the description adds no parameter-level context. The many parameters (20) need additional explanation to guide the agent, but the description is generic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (build), the object (40-byte MC3000 profile/program frame), and a key qualifier (without sending it), differentiating it from sibling tools like mc3000_apply_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without sending it' implies a two-step process (build then apply), and sibling names like mc3000_apply_profile clarify when to use each. No explicit when-not-to-use or alternatives, but context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_connectC
Connect to MC3000 by BLE address, or scan and connect to the first matching charger if address is omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | ||
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions connection but doesn't describe blocking behavior, timeout effects, error handling, or side effects (e.g., connection state). The timeout parameter is present but not explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, which is efficient, but it lacks structure and could benefit from being split into separate statements for the two modes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given numerous sibling tools and no output schema or parameter descriptions, the description is too brief. It doesn't address return values, errors, or important nuances like scanning behavior, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description does not explain the address format (e.g., MAC address) or the timeout parameter beyond its default. The description adds no value to parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool connects to an MC3000 via BLE address, with an option to scan if omitted. It distinguishes from sibling tools like mc3000_scan by including connection, but does not explicitly mention the BLE nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to omit the address (scan and connect to first matching charger) but does not provide explicit guidance on when to use this tool versus mc3000_scan or other tools, nor does it mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_disconnectA
Disconnect from charger.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description only says 'Disconnect from charger.' It does not disclose any behavioral traits such as side effects, prerequisites (e.g., being connected), or state changes, leaving the agent without critical context for a potentially destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with one sentence. While it is not verbose, it could benefit from a bit more structure or additional context. Nonetheless, it has no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (no parameters, no output schema), the description is minimally complete. However, it lacks context about when disconnection is appropriate (e.g., after scanning or charging) and what the state becomes, which would be helpful for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters and schema coverage is 100%. The description adds no parameter info, which is acceptable since there are none. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('disconnect') and resource ('from charger'), distinguishing it from sibling tools like mc3000_connect and mc3000_start.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The context is implied but lacks exclusions or alternatives, which is acceptable given the tool's simplicity but not ideal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_get_basicB
Read basic device settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It indicates a read operation but does not confirm it is side-effect-free, nor does it describe any required state (e.g., connection needed).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence is concise and front-loaded. It could benefit from additional context, but for a simple tool it is appropriately short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should clarify what is returned. It does not explain the nature of 'basic settings' or the format of the output, leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4. The description adds no parameter info, but none is needed as there are no parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Read basic device settings' clearly specifies the verb (read) and resource (basic device settings), distinguishing it from sibling tools like get_version or get_voltage_curve. However, 'basic settings' is somewhat vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, nor any mention of prerequisites or context. The description simply states what it does without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_get_versionB
Read firmware/hardware version.
| Name | Required | Description | Default |
|---|---|---|---|
| mac | No | Optional charger MAC to include exactly like the Android app. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It only says 'Read' implying a safe operation, but fails to disclose any behavioral traits such as whether a connection is required, authentication needs, or if it's idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a single 3-word sentence. No fluff, but it feels slightly under-specified. Front-loaded with the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (reading version), the description is adequate. However, it omits any mention of return format or the effect of the optional MAC parameter. No output schema exists, so description could do more.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'mac', which has a description. The tool description adds no additional meaning beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Read' and resource 'firmware/hardware version', clearly defining the tool's action and output. It distinguishes from siblings like mc3000_get_basic, which likely reads other data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any exclusions or prerequisites. The description only states what it does without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_get_voltage_curveB
Read voltage curve for a zero-based slot. Response is parsed into millivolt points.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes | ||
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions response format (millivolt points), providing some transparency. However, it does not disclose that the operation is read-only, potential side effects, error conditions, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no unnecessary words. Efficient, though adding structure (e.g., bullet points for parameters) could improve scannability without increasing verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with 2 parameters and no output schema, the description is partially complete. It covers the main action and output unit. Missing param descriptions, usage context, and error handling make it adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description does not explain any parameters. The description omits details about the 'slot' parameter (0-3) and 'timeout' parameter (default 8). It adds no value beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Read voltage curve' for a specific resource (zero-based slot). The tool name and description align well. Among siblings, there is no similarly named tool, so it is distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like mc3000_get_basic or mc3000_status. The description lacks context for appropriate usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_mc5000_statusA
Read slot status using MC5000 frame layout (opcode 0x91).
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It states 'Read' indicating a non-destructive operation, but lacks details on permissions, response format, or potential errors. Adequate for a simple read, but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence that front-loads the core purpose. Every word is necessary with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with one parameter, the description is under-specified. It omits what the response contains (e.g., status details) and lacks any error handling context, making it minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the single parameter 'slot', and the tool description does not explain it further. While the schema sets min/max (0-3), the description adds no semantic meaning about what slot numbers represent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Read'), the resource ('slot status'), and specifies the technical context ('using MC5000 frame layout (opcode 0x91)'). This distinguishes it from sibling tools like 'mc3000_status' which likely pertain to MC3000 format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for MC5000 format status reading, but does not explicitly state when to use this tool versus alternatives like 'mc3000_status' or 'charger.read_slots'. The guidance is implied through technical specificity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_scanC
Scan BLE devices and return devices whose advertised name matches the official MC3000 app filters.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits; it only states scanning and filtering, omitting whether scanning is continuous, what return format is, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence front-loaded with purpose, but misses crucial details; could be restructured to include parameter info and output description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description should specify return structure, filter criteria, and potential error states; it provides none.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the tool description does not mention the timeout parameter, its units, or its effect on scanning behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states the action (scan), resource (BLE devices), and a specific filter (official MC3000 app filters), distinguishing it from sibling tools like mc3000_connect or mc3000_apply_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no prerequisites or constraints mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_send_rawC
Send a raw hex frame. Escape hatch for protocol experiments.
| Name | Required | Description | Default |
|---|---|---|---|
| hex | No | ||
| wait | No | ||
| start | No | ||
| timeout | No | ||
| frame_hex | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose safety or side effects. It only states the action without mentioning potential disruptions, required state (e.g., connected), or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While concise (two sentences), the description is too brief for a tool with multiple parameters and no schema descriptions. It sacrifices essential information for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters with no descriptions, no output schema, and no annotations, the description is wholly inadequate. It fails to provide enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the 5 parameters (hex, wait, start, timeout, frame_hex). It adds no meaning beyond the schema field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Send a raw hex frame' clearly states the action and resource. It distinguishes from siblings like mc3000_apply_profile or mc3000_scan, which do not send raw frames.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Escape hatch for protocol experiments' hints at advanced/emergency use but provides no explicit guidance on when to use this tool versus alternatives, nor any conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_set_basicC
Set basic device settings.
| Name | Required | Description | Default |
|---|---|---|---|
| display | No | ||
| input_mv | No | ||
| temp_unit | No | 0=celsius, 1=fahrenheit | |
| cooling_fan | No | ||
| screensaver | No | ||
| system_beep | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It only states 'Set basic device settings,' which implies a write operation, but does not mention idempotency, error conditions, required authentication, or side effects. The lack of detail leaves the agent without critical behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at 4 words, but it sacrifices informative content. While it is front-loaded and has no waste, it fails to earn its place by providing sufficient functional context. A more balanced description with additional key details would be appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, no output schema, and no annotations, the description is severely incomplete. It does not mention device type, return values, error cases, or how parameters interact. The agent cannot reliably use this tool based solely on the provided description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17% (only temp_unit has a description). The description adds no parameter information beyond the parameter names. While names like 'display' and 'input_mv' are somewhat self-explanatory, the schema lacks ranges, units, or formats for most parameters. The description does not compensate for this gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Set basic device settings' clearly states the action (set) and resource (device settings). It is a specific verb+resource combination, but it does not differentiate from siblings like mc3000_apply_profile, which also sets settings but via a profile. The purpose is clear but lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like mc3000_get_basic (reading settings) or mc3000_apply_profile (applying a profile). The description does not mention prerequisites, such as requiring a connection (via mc3000_connect), or conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_startC
Start charging/program on a zero-based slot 0..3.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavior. It only says 'start' without mentioning side effects, authentication needs, or what happens if the slot is already in use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (one sentence) and front-loaded, but lacks structure. It is concise but at the expense of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, the description is insufficient. It fails to explain the outcome, return values, or any prerequisites, especially given the lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, requiring the description to clarify parameter meaning. The description merely restates the schema's 'zero-based slot 0..3', adding no additional value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start charging/program') and the resource ('zero-based slot 0..3'), but does not differentiate it from sibling tools like stop or status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_statusA
Poll slot status. Slot is zero-based 0..3; omit slot to poll all four.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey all behavioral traits. It only mentions polling slot status and the slot parameter, but lacks disclosure of side effects, authentication requirements, rate limits, or what 'status' entails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core action. Every word serves a purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple polling tool with no output schema, the description covers the basic operation and parameter semantics. However, it lacks any information about the return value format or structure, which is a gap expected for the tool's complexity and lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'slot' is explained with range (0-3) and the meaning of omission (polls all four). This adds significant value beyond the schema's type/min/max, which is especially important given 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Poll slot status') and the resource ('slot status'). It distinguishes from siblings which have different actions like applying profiles or connecting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when slot status is needed but does not provide explicit when-to-use or when-not-to-use guidance relative to sibling tools. No exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mc3000_stopC
Stop a zero-based slot 0..3.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description gives no behavioral information such as destruction, side effects, or required state. Completely opaque beyond the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence. However, the extreme brevity sacrifices completeness. Earns its place but could include more without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description is still incomplete—missing behavioral context, usage hints, and any mention of related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description merely restates the schema constraints ('zero-based slot 0..3') without adding any meaning. Schema coverage is 0%, so the description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Stop' and the resource 'zero-based slot', with range specification 0..3. It is distinct from sibling like mc3000_start, but lacks any additional context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no prerequisites or conditions mentioned. The description only states what it does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Many tools have overlapping purposes, e.g., charger.connect vs mc3000_connect, charger.get_status vs mc3000_status, charger.get_voltage_curve vs mc3000_get_voltage_curve. This duplication makes it difficult for agents to choose the correct tool.
Two inconsistent naming conventions are used: 'charger.' prefix with dot notation and 'mc3000_' prefix with underscore notation. Within each set, names are consistent, but mixing them is confusing. Also, 'mc3000_mc5000_status' is an outlier.
27 tools is excessive for a charger control server. Much of this is due to duplication between the two tool sets. The server would be better served with a single, streamlined set of around 10-15 tools.
Despite the duplication, the server covers most essential operations: connect, disconnect, scan, apply profiles, start/stop, get status, get voltage curve, and export logs. Minor gaps like firmware update are present but not critical.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server wrapping the Tesla Fleet API and TeslaMate API
MCP server for Klever blockchain smart contract development.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceBluetooth Low Energy (BLE) MCP server that allows AI agents to scan, connect to and communicated with BLE devices, as well as simulate BLE perhipherals.16BSD 2-Clause "Simplified"
- FlicenseNot gradedqualityCmaintenanceMCP server to manage your Aranet4 CO2 sensor, enabling scanning, data fetching, historical querying, and plotting.4
- AlicenseNot gradedqualityDmaintenanceMCP server for controlling compatible boards over Bluetooth serial, including DC motors, servos, IO, and sensors.MIT
- AlicenseAqualityAmaintenanceMCP server that connects to Felicity Solar cloud battery data, allowing natural language queries about battery status, cell voltages, and charge state.1722MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/nietonchique/mc3000-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server