网易春风 · 心跳元力 MCP
Enables local Bluetooth Low Energy (BLE) communication with DokiDoki DK-META2 devices, allowing control of vibration, linear extension, and rotation through GATT characteristic writes.
Click on "Deploy 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., "@网易春风 · 心跳元力 MCPscan for my DK-META2, connect, and start vibration at 20"
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.
网易春风 · 心跳元力 MCP|使用 AI 控制你的设备
让 AI 成为你的设备秘书:通过自然语言和本地 Bluetooth Low Energy(BLE),控制心跳元力 DokiDoki DK-META2 设备的震动、伸缩与旋转。
这是一个非官方、本地优先的 MCP 实现,主打隐私、低延迟和可控的设备操作。
本项目是非官方实现,不读取账号、不调用云端控制接口,也不包含官方客户端源码、安装包或设备固件。DokiDoki、心跳元力及相关名称归其各自权利人所有;本项目与设备厂商没有隶属或背书关系。
状态:实验性项目。协议和设备行为来自对客户端通信行为的观察,使用前请在场确认设备状态,并保留实体停止方式。
工作原理
MCP 只是 AI 客户端与本地工具之间的调用协议,真正的设备通信链路如下:
MCP 客户端
│ JSON-RPC / stdio
▼
heartbeat_yuanli_mcp.server
│ 工具参数校验与生命周期管理
▼
DokiDokiDeviceManager
│ Bleak
▼
Windows Bluetooth LE
│ GATT service/characteristic 写入
▼
DK-META2当前只实现 DK-META2 profile:
能力 | 命令码 |
震动 |
|
伸缩 |
|
旋转 |
|
Related MCP server: MCP Casambi
要求
Python 3.11 或更高版本;
支持 BLE 的操作系统,Windows 是当前主要验证环境;
系统蓝牙已开启,设备没有被官方客户端或其他程序独占;
对应系统账户具有蓝牙扫描和连接权限。
安装
py -3.11 -m venv .venv
& .\.venv\Scripts\python.exe -m pip install -e .检查运行环境和附近支持的设备:
& .\.venv\Scripts\python.exe -m heartbeat_yuanli_mcp.server --doctor启动 MCP 服务
标准 MCP 客户端需要启动以下命令,并通过 stdio 与其通信:
python -m heartbeat_yuanli_mcp.server也可以使用安装后的入口命令:
heartbeat-yuanli-mcp配置示例见 mcp-config.example.json。如果需要固定设备,可以通过环境变量设置自己的设备名或蓝牙地址;公开仓库不会保存真实设备地址。
MCP 工具
工具 | 作用 |
| 扫描并列出支持的 BLE 设备,不发送动作 |
| 连接设备并发现 GATT 能力 |
| 查看 MCP 自己持有的连接状态 |
| 设置震动强度,范围 |
| 设置伸缩强度,范围 |
| 设置旋转强度,范围 |
| 将所有已支持输出归零 |
| 停止心跳、归零输出并断开连接 |
典型调用顺序:
list_devices
connect_device
set_vibration(level=20, confirm=true)
set_linear(level=20, confirm=true)
set_rotary(level=20, confirm=true)
stop_device
disconnect_device非零动作必须显式传入 confirm=true。确认参数只是本地安全门槛,不是设备的蓝牙认证机制。当前 MCP 不提供任意特征、任意命令码或原始十六进制写入工具。
BLE 协议概览
设备使用以下 GATT 能力:
Service: 0000ffac-0000-1000-8000-00805f9b34fb
Write with response: ffb5
Write without response: ffb7
Notify: ffb8一个普通控制帧为:
[message_id] [0x02] [0x00] [length] [command] [value] [checksum]例如震动强度 20:
01 02 00 03 08 14 E4其中 0x14 是十进制 20,校验和只覆盖 [command, value]:
checksum = (-(command + value)) & 0xFF完整说明见 docs/protocol.md。
安全与已知限制
连接成功后每两秒发送一次心跳;心跳或写入失败时会尝试停止输出并断开;
MCP 退出、显式断开和停止操作都会尝试把支持的输出归零;
官方心跳元力客户端和 MCP 不应同时持有同一个 GATT 连接。连接失败时先在官方客户端中断开设备;
当前只验证
DK-META2。虽然扫描器识别若干TF-、DK-、TRYFUN-前缀,但其他型号不会因为名称匹配就自动获得兼容性;BLE 连接本身依赖操作系统权限和设备固件行为,本项目不实现厂商账号认证、加密配对或云端授权;
协议层当前按单动作发送一帧,快速连续调用没有额外的 120ms 应用层节流。需要高频控制时请先在实际设备上验证稳定性。
请勿在无人看护、无法快速停止或不清楚设备当前状态时运行非零动作。
开发与测试
& .\.venv\Scripts\python.exe -m unittest discover -s tests -v协议构造函数是纯函数,可以在没有蓝牙设备的环境中测试。实机测试应从低强度开始,并先验证 stop_device。
许可证
本项目使用 MIT License,见 LICENSE。依赖包各自遵循其上游许可证。
贡献
提交问题或改动前请阅读 CONTRIBUTING.md。涉及安全、设备异常动作或潜在隐私泄露的问题,请优先阅读 SECURITY.md。
Available Tools
8 toolsconnect_deviceC
连接指定的心跳元力 BLE 设备并发现 GATT 能力。
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| address | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add one genuine behavioral fact beyond the tool name: it discovers GATT capabilities as part of the call, not just establishing a link. However, it omits failure behavior (device not found, connection timeout), whether it is idempotent or how to release the connection, and any Bluetooth permission 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?
A single front-loaded sentence with no filler, which is structurally sound. It is, however, under-specified rather than concise — the brevity is the source of the gaps in parameter and usage guidance.
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?
An output schema exists, so return values need not be described, but for a zero-annotation, zero-schema-coverage tool the description should at minimum explain the name-vs-address selection and the connection lifecycle. Neither is present, so an agent could call this with no arguments and have no idea what happens.
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 both parameters, and the description does not compensate: it never mentions that the device may be targeted either by 'name' or by 'address', nor whether they are mutually exclusive or what address format is expected. With both parameters nullable and optional, the description leaves the primary input decision unexplained.
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 specific verb+resource pair: connecting a designated '心跳元力' BLE device and discovering its GATT services. That is clearly distinguishable from the sibling disconnect_device and from the setters (set_vibration etc.), though it never explicitly names those alternatives. It also does not clarify how the target device is identified, which the ambiguous parameters leave open.
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?
There is no statement of when to call this versus list_devices, get_device_status, or disconnect_device, and no prerequisite (e.g. 'call after list_devices to obtain the address'). The agent must infer the call ordering from the BLE domain alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_deviceA
停止心跳并断开 MCP 持有的 BLE 连接。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden, and it does reveal two concrete effects: heartbeat termination and release of the BLE link held by MCP. It does not say what happens if no connection exists, whether the call is idempotent, or whether it is reversible without re-running connect_device.
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 short sentence that front-loads the primary effect and adds the heartbeat detail without waste. Nothing is padded or repeated from the schema.
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?
An output schema exists, so return values need not be described, and a zero-parameter tool needs little input detail. However, the relationship to the sibling stop_device and connect_device (ordering, error state) is left unaddressed, which is the main thing an agent needs to sequence calls 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 tool takes zero parameters, so the schema has nothing to explain and the baseline of 4 applies. The description correctly implies no input is needed to identify the target.
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 a specific verb and resource: stop the heartbeat and disconnect the BLE connection held by MCP. It is clear this tears down a connection rather than driving the device, which separates it from setters like set_vibration. It stops short of explicitly contrasting with stop_device, which could also plausibly stop activity.
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?
Usage is only implied: an agent can infer it should call this when it is finished with a device, but there is no statement of when to prefer it over stop_device or whether it must be called before reconnecting. No alternatives or prerequisites are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_statusB
读取 MCP 自己持有的设备连接、profile 和 GATT 状态。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. '读取' implies a read-only operation and the description lists the state categories (connection, profile, GATT), but it does not disclose side effects, permissions, rate limits, or whether the call is safe to repeat. The output schema covers return values, but behavioral context remains thin.
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, front-loaded sentence with no filler. It efficiently conveys what state is read and whose state it is.
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 zero-parameter read tool with an output schema, the description is mostly complete: it names the state categories being returned. It lacks usage context relative to connect/disconnect siblings, but given the low complexity and available output schema, the gap is minor.
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 takes zero parameters, so the schema does not require parameter-level description. The description adds no parameter details, but none are needed, making this a baseline 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 states a specific verb (读取/read) and resource (device connection, profile, and GATT status held by MCP itself). It distinguishes this from querying a device directly by specifying that the status is MCP-held. However, it does not explicitly differentiate from siblings such as list_devices or connect_device.
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?
There is no explicit guidance on when to use this tool versus alternatives like list_devices or connect_device. Usage is only implied by the tool name and purpose; no when-to-use, prerequisites, or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesC
扫描并列出附近已知的心跳元力 BLE 设备。
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It says it scans, but discloses nothing about side effects (radio activation), permission requirements, how long the scan blocks, or what distinguishes a 'known' from a newly discovered device. This is a significant gap for an operation with environmental 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?
A single short sentence with the action front-loaded and zero filler. It is efficient, though its brevity is part of why other dimensions are under-specified.
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?
An output schema exists, so return values need not be described, but for a two-parameter discovery tool with no annotations the description omits prerequisites, scan behavior, and parameter meaning. It is too thin for the agent to invoke confidently.
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%, so the description must compensate, yet it mentions neither 'prefix' (name filtering) nor 'timeout' (scan duration). The scanning concept loosely relates to timeout but no semantics, units, or filtering behavior are conveyed, leaving both parameters opaque.
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 a specific verb pair (扫描/列出, scan/list) and resource (附近的心跳元力 BLE 设备), so the agent knows this is the device-discovery entry point among siblings like connect_device and get_device_status. It is not explicitly contrasted with any sibling, and '已知的' (known) is slightly ambiguous for a scan operation, keeping it below 5.
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 indication of when to call this versus the alternatives: it does not say this is the prerequisite step before connect_device, nor does it mention Bluetooth permissions, adapter state, or that results feed later connect/set_* calls. Usage is only implied by the word 'scan'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_linearB
设置 DK-META2 伸缩强度;非零值必须 confirm=true。
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It usefully discloses that non-zero values require confirm=true, a safety-relevant condition, but omits what happens if confirm is omitted or false, whether zero values are safe, and any device authorization or rate-limit behavior.
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 compact sentence with the core action front-loaded and the critical confirmation condition attached. It contains no filler.
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 device-mutating tool with no annotations and only 0% schema description coverage, the description is too sparse. Output schema exists so return values need not be explained, but operational context, level range, and safety behavior remain incomplete.
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%, so the description has to compensate. It clarifies that level controls 伸缩强度 and that non-zero level requires confirm=true, which adds meaningful semantics, but it gives no range, units, or integer bounds for level.
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 names a specific verb (设置) and resource (DK-META2 伸缩强度), making the tool's purpose clear. It distinguishes itself somewhat from set_vibration and set_rotary by specifying linear extension/retraction intensity, but it does not explicitly route against those siblings.
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 only guidance is that non-zero values require confirm=true, which is a parameter precondition rather than general when-to-use guidance. There is no explanation of when to choose this tool over set_vibration, set_rotary, or stop_device.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_rotaryB
设置 DK-META2 旋转强度;非零值必须 confirm=true。
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the important safety gate (non-zero values require explicit confirmation), which is real behavioral context. However it omits repeat-call semantics, what happens if confirm is false, connection prerequisites, and whether the value persists, leaving substantive gaps for a mutation tool.
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 compact sentence that front-loads the purpose and immediately qualifies the confirm requirement. No wasted text, though it is terse enough that some necessary detail is simply absent rather than trimmed.
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?
An output schema exists, so return-value explanation is not needed. For a device-mutating tool with no annotations, the description covers the core safety rule but omits prerequisites (e.g. connect_device first), level bounds, and failure/edge behavior.
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% across two parameters, so the description does all the work. It conveys that 'level' is rotation intensity and that 'confirm' is a boolean gate tied to non-zero levels, but adds no ranges, units, or bounds for 'level' or default behavior for 'confirm'.
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?
Names a specific verb+resource: setting the rotation intensity of the DK-META2 device, which distinguishes it from the sibling set_vibration and set_linear tools. It is clear about what is affected, though it does not explicitly contrast itself against stop_device or the other setter siblings.
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?
Provides one concrete usage condition: a non-zero level requires confirm=true, which is a genuine invocation rule an agent must honor. It offers no guidance on when to choose this over set_vibration/set_linear/stop_device or any prerequisite ordering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_vibrationC
设置 DK-META2 振动强度;非零值必须 confirm=true。
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It mentions that non-zero values require confirm=true, which is a useful behavioral hint, but it lacks information about permissions, side effects, reversibility, or response format. For a mutation tool, this is a significant gap.
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 is concise and directly states the action and a key condition. It doesn't waste words, though it could benefit from additional structure 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?
Given the tool is a mutation with no annotations, 0% schema coverage, and an output schema that is not leveraged in the description, the definition is incomplete. It should describe parameter ranges, device state requirements, and side effects to be fully callable by 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%, meaning neither the schema nor the description explains the 'level' parameter (e.g., range, units) or the 'confirm' parameter beyond the conditional requirement. The description adds a constraint (confirm=true for non-zero) but leaves the primary parameter 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 states a specific verb ('设置' = set) and resource (DK-META2 vibration intensity). However, it doesn't clearly distinguish this tool from siblings like set_linear or set_rotary beyond the 'vibration' aspect. It's somewhat vague on whether this is the only vibration parameter tool.
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 a conditional rule about 'confirm' but does not explain when to use this tool versus alternatives, prerequisites, or device connection requirements. No when-to-use or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_deviceA
将当前设备所有已支持输出归零;可重复调用。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It usefully states idempotency ('可重复调用'), which is real behavioral information, but omits whether an active connection is required and what happens if the device is already stopped or disconnected.
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 tight clauses, front-loaded with the action and followed by the idempotency caveat. No filler or restatement of the tool name.
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 zero-parameter action with an output schema present, the description covers the action and idempotency, which is most of what an agent needs. The only gap is connection/prerequisite state, which is minor at this 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?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. No parameter meaning is needed or missing.
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 a specific verb and resource: zeroing all supported outputs on the current device. This contrasts implicitly with the per-output siblings (set_vibration, set_linear, set_rotary), though it never names them, so the distinction must be inferred.
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?
Usage is implied by the action itself (stop all outputs on the current device), and the idempotency note gives operational context. However, there is no explicit guidance on when to use this versus disconnect_device or the individual set_* tools, and no prerequisites are stated.
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.
8 tool updates
v0.1.0- First observed
connect_device - First observed
disconnect_device - First observed
get_device_status - First observed
list_devices - First observed
set_linear - First observed
set_rotary - First observed
set_vibration - First observed
stop_device
TDQS
Scored across 8 tools
Each tool has a distinct role across the BLE lifecycle: discovery, connection, status, modality-specific output control, stopping outputs, and disconnection. The three set_* tools are clearly separated by vibration, linear, and rotary outputs, while stop_device and disconnect_device are distinguishable by scope.
All tool names use consistent snake_case with verb_noun or verb_noun_noun structure. list_devices, connect_device, get_device_status, set_vibration, set_linear, set_rotary, stop_device, and disconnect_device follow the same predictable convention.
Eight tools are well-scoped for a BLE device control server. The set covers discovery, connection management, status inspection, three independent output modes, emergency stop, and disconnect without unnecessary bloat.
The surface covers the core device control lifecycle and operation modes well. Minor gaps remain around reading current output intensities or device telemetry such as battery/firmware, but agents can complete the main workflows.
Maintenance
Related MCP Connectors
Turns a phone into a camera+Bluetooth remote so AI assistants can see and control any PC.
Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 290+ tools across device control, app management, automation sessions, browser automation, and flow recording / replay. Bearer-auth — get a token at robotactions.com → Profile → API Tokens.
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Melaya is a remote MCP server. It gives an assistant hands on your own Android phone and browser: it reads the screen through the accessibility tree, then taps, types and navigates inside the apps and sites you allow-list, with no per-app API. It also builds, schedules and runs agent pipelines across 6k+ connected tools. OAuth 2.1, nothing to install.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables communication with G1 Bluetooth devices using the Nordic UART protocol over BLE. Supports device discovery, connection management, and message exchange for G1 audio devices through natural language commands.52MIT
- AlicenseNot gradedqualityDmaintenanceEnables control of lights in CASAMBI networks through Bluetooth interface without requiring APIs. Provides direct lighting control and management capabilities through natural language interactions.1GPL 3.0
- AlicenseBqualityDmaintenanceEnables AI assistants to control Anki Vector robots locally via natural language, providing tools for speech, motion, perception, and interaction without cloud dependency.2420MIT
- AlicenseAqualityFmaintenanceLets AI assistants control the physical Return to Dark Tower board game tower via Bluetooth, enabling connection, calibration, sound, lights, drum rotation, seal breaking, and game sequences through natural language.3427 npmMIT