Skip to main content
Glama
nietonchique

mc3000-mcp

by nietonchique

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.

Agent  ──MCP stdio──  mc3000-mcp  ──BLE FFE0/FFE1──  SKYRC MC3000
                          │
                          ├─ profile validation and chemistry limits
                          ├─ dry-run profile rendering
                          ├─ confirmation tokens for live writes/starts
                          └─ bounded, redacted audit log

Implementation

Rust binary; no Python runtime

MCP

stdio, 27 tools, resources and prompts

Safety

code-enforced validation, dry-run first, explicit confirmation

Hardware

MC3000 read/write; MC5000 read-only

Live-tested

MC3000 firmware 1.23, hardware 2.20, NiMH modes

Registry

crates.io, MCP Registry MCPB, AUR

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

Install

# crates.io
cargo install mc3000-mcp --locked

# Arch Linux
paru -S mc3000-mcp

# released tag, if you prefer installing from source
cargo install --git https://github.com/nietonchique/mc3000-mcp.git --tag v0.2.4 --locked

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

Linux BLE requires BlueZ/D-Bus:

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

Related MCP server: aranet4-mcp-server

Connect an MCP client

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

Client-specific examples are in examples/.

Try it without hardware:

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

Agent skill

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

Install it for Codex:

mkdir -p ~/.codex/skills
curl -fsSL https://github.com/nietonchique/mc3000-mcp/releases/download/v0.2.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:

mc3000-mcp --version
mc3000-mcp scan --timeout 8
mc3000-mcp status --address AA:BB:CC:DD:EE:FF
mc3000-mcp --backend fake scan

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

Safe workflow

  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:

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

Start requires a second explicit confirmation:

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

Emergency stop is deliberately tokenless:

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

Tools

Production surface is namespaced as charger.*:

Tool

Purpose

scan_devices

Read-only BLE scan.

connect / disconnect

Manage the charger connection.

get_status, read_slots

Slot chemistry, mode, voltage/current, temperature, state.

get_voltage_curve, export_voltage_curve

Charger-stored voltage series as JSON/CSV.

list_profiles, validate_profile

Bundled profiles and enforced safety checks.

apply_profile

Dry-run by default; live write requires its slot token.

start

Start a prepared slot; requires a separate token.

stop_slot, stop_all

Immediate emergency stop.

export_session_log

Bounded, redacted audit log.

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

Safety model

  • API slots are zero-based 0..3; physical slots 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

cargo fmt --all -- --check
cargo clippy --all-targets --all-features --locked -- -D warnings
cargo test --all-features --locked
cargo audit && cargo deny check

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

Documentation

License

Apache-2.0. See LICENSE.

Available Tools

27 tools
charger.apply_profileB

Validate and apply a profile to a slot. Dry-run is default; live write requires token.

NameRequiredDescriptionDefault
slotYes
dry_runNo
profileNo
profile_idNo
confirmation_tokenNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
addressNo
timeoutNo

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
slotYes
formatNojson
timeoutNo

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
slotYes
timeoutNo

TDQS

B3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
slotNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
timeoutNo

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
slotYes
confirmation_tokenYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
slotYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
profileNo
profile_idNo

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness1/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
modeNo0 charge, 1 refresh, 2 storage/break-in, 3 discharge, 4 cycle
startNo
breakinNo
slot_maskNoslot bitmask: slot1=1, slot2=2, slot3=4, slot4=8
cycle_modeNo
cycle_countNo
profile_hexNo
temp_cutoffNo
battery_typeNo0 LiIon, 1 LiFe, 2 LiIo4.35, 3 NiMH, 4 NiCd, 5 NiZn, 6 Eneloop, 7 RAM, 8 LTO, 9 Na-Lion
capacity_mahNo
keep_voltage_mvNoOmit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV.
charge_current_maNo
negative_delta_mvNo
time_limit_minutesNo
trickle_current_maNo
charge_rest_minutesNo
discharge_current_maNo
charge_stop_current_maNoOmit for chemistry default; NiMH/NiCd/Eneloop default is 50mA.
charge_stop_voltage_mvNoOmit for chemistry default; NiMH/NiCd/Eneloop default is 1650mV.
discharge_rest_minutesNo
discharge_stop_current_maNo
discharge_stop_voltage_mvNoOmit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV.

TDQS

B3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
modeNo0 charge, 1 refresh, 2 storage/break-in, 3 discharge, 4 cycle
breakinNo
slot_maskYesslot bitmask: slot1=1, slot2=2, slot3=4, slot4=8
cycle_modeNo
cycle_countNo
temp_cutoffNo
battery_typeNo0 LiIon, 1 LiFe, 2 LiIo4.35, 3 NiMH, 4 NiCd, 5 NiZn, 6 Eneloop, 7 RAM, 8 LTO, 9 Na-Lion
capacity_mahNo
keep_voltage_mvNoOmit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV.
charge_current_maNo
negative_delta_mvNo
time_limit_minutesNo
trickle_current_maNo
charge_rest_minutesNo
discharge_current_maNo
charge_stop_current_maNoOmit for chemistry default; NiMH/NiCd/Eneloop default is 50mA.
charge_stop_voltage_mvNoOmit for chemistry default; NiMH/NiCd/Eneloop default is 1650mV.
discharge_rest_minutesNo
discharge_stop_current_maNo
discharge_stop_voltage_mvNoOmit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
addressNo
timeoutNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
macNoOptional charger MAC to include exactly like the Android app.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
slotYes
timeoutNo

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

NameRequiredDescriptionDefault
slotYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
timeoutNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
hexNo
waitNo
startNo
timeoutNo
frame_hexNo

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
displayNo
input_mvNo
temp_unitNo0=celsius, 1=fahrenheit
cooling_fanNo
screensaverNo
system_beepNo

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
slotYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
slotNo

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
slotYes

TDQS

C2.4/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv0.1.1
    • Addedcharger.apply_profile
    • Addedcharger.connect
    • Addedcharger.export_session_log
    • Addedcharger.export_voltage_curve
    • Addedcharger.get_status
    • Addedcharger.get_voltage_curve
    • Addedcharger.list_profiles
    • Addedcharger.read_slots
    • Addedcharger.scan_devices
    • Addedcharger.start
    • Addedcharger.stop_all
    • Addedcharger.stop_slot
    • Addedcharger.validate_profile
    • Changedmc3000_apply_profile8 fields changed
      • removedInput schema / properties / charge_stop_current_ma / default
        Removed value: -100
      • addedInput schema / properties / charge_stop_current_ma / description
        Added value: +"Omit for chemistry default; NiMH/NiCd/Eneloop default is 50mA."
      • removedInput schema / properties / charge_stop_voltage_mv / default
        Removed value: -4200
      • addedInput schema / properties / charge_stop_voltage_mv / description
        Added value: +"Omit for chemistry default; NiMH/NiCd/Eneloop default is 1650mV."
      • removedInput schema / properties / discharge_stop_voltage_mv / default
        Removed value: -3000
      • addedInput schema / properties / discharge_stop_voltage_mv / description
        Added value: +"Omit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV."
      • removedInput schema / properties / keep_voltage_mv / default
        Removed value: -4150
      • addedInput schema / properties / keep_voltage_mv / description
        Added value: +"Omit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV."
    • Changedmc3000_build_profile8 fields changed
      • removedInput schema / properties / charge_stop_current_ma / default
        Removed value: -100
      • addedInput schema / properties / charge_stop_current_ma / description
        Added value: +"Omit for chemistry default; NiMH/NiCd/Eneloop default is 50mA."
      • removedInput schema / properties / charge_stop_voltage_mv / default
        Removed value: -4200
      • addedInput schema / properties / charge_stop_voltage_mv / description
        Added value: +"Omit for chemistry default; NiMH/NiCd/Eneloop default is 1650mV."
      • removedInput schema / properties / discharge_stop_voltage_mv / default
        Removed value: -3000
      • addedInput schema / properties / discharge_stop_voltage_mv / description
        Added value: +"Omit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV."
      • removedInput schema / properties / keep_voltage_mv / default
        Removed value: -4150
      • addedInput schema / properties / keep_voltage_mv / description
        Added value: +"Omit for chemistry default; NiMH/NiCd/Eneloop default is 1000mV."
    • Addedmc3000_mc5000_status
  2. 13 tool updatesv0.1.0
    • First observedmc3000_apply_profile
    • First observedmc3000_build_profile
    • First observedmc3000_connect
    • First observedmc3000_disconnect
    • First observedmc3000_get_basic
    • First observedmc3000_get_version
    • First observedmc3000_get_voltage_curve
    • First observedmc3000_scan
    • First observedmc3000_send_raw
    • First observedmc3000_set_basic
    • First observedmc3000_start
    • First observedmc3000_status
    • First observedmc3000_stop

TDQS

C2.7/5.0

Scored across 27 tools

Disambiguation2/5

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.

Naming Consistency2/5

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.

Tool Count2/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers