lw-ble-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| lw_ble_scanA | Kick off a passive BLE discovery sweep. The call returns a scan handle immediately; the sweep runs for up to timeout_s seconds (bounded 1–60) and then shuts itself down. Retrieve findings with lw_ble_scan_poll or abort early with lw_ble_scan_stop. |
| lw_ble_scan_pollC | Fetch everything a sweep has gathered so far, plus whether it is still running. |
| lw_ble_scan_stopB | End a sweep now and hand back everything it recorded before stopping. |
| lw_ble_connectB | Open a GATT session with a peripheral, addressed by its MAC. Returns a connection_id on success. The operation is wrapped in an outer timeout so a stalled driver call cannot leave the client waiting forever. |
| lw_ble_disconnectB | Close and forget an existing GATT session given its connection_id. |
| lw_ble_connection_statusB | Report the liveness of a session and the peripheral's identity details. |
| lw_ble_connection_listB | Enumerate every session the server currently holds. |
| lw_ble_discoverB | Walk the remote GATT database and dump its services, characteristics, and associated descriptors in one call. |
| lw_ble_readC | Fetch a characteristic's contents; the reply carries them as base64, hex, and a plain byte count. |
| lw_ble_writeB | Send bytes to a characteristic. Encode the payload as base64 (data_b64) or hex (data_hex); with_response selects write-with-response vs. fire-and-forget. |
| lw_ble_mtuB | Show the MTU agreed for a session; the useful per-packet payload is MTU minus three bytes of ATT overhead. |
| lw_ble_read_descriptorB | Read a descriptor's bytes by its attribute handle; handles come from lw_ble_discover. |
| lw_ble_write_descriptorC | Store bytes into a descriptor addressed by handle; encode the payload as base64 or hex. |
| lw_ble_subscribeB | Begin receiving notification events from a characteristic; returns a subscription_id that later calls use to manage the stream. |
| lw_ble_unsubscribeC | Stop a notification stream and release its buffered data. |
| lw_ble_poll_notificationsA | Drain whatever notifications are already queued, without waiting; an empty result means nothing has arrived yet. The dropped counter reports overflow that was shed while nobody was reading. |
| lw_ble_wait_notificationB | Wait up to timeout_s for the next notification and return it, or null if nothing arrives within the window. |
| lw_ble_subscription_listA | Show every notification stream the server is currently holding. |
| lw_ble_scan_listA | Show every discovery sweep the server knows about, finished or not. |
| lw_ble_dumpB | One-shot device recon: service table, every readable characteristic value, and the negotiated MTU in a single call. Characteristics that fail to read are reported in read_failures instead of aborting the whole dump. |
| lw_ble_engine_statusA | Report engine resource usage: live links, scans, notification streams, and whether the I/O bridge thread is healthy. Useful for diagnosing resource exhaustion in long-running sessions. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Most tools target a distinct resource+action (connect/disconnect, read/write, subscribe/unsubscribe), and the descriptions clearly separate similar-sounding pairs like scan_poll vs scan_list and poll_notifications vs wait_notification. The main soft spot is lw_ble_dump overlapping with lw_ble_discover + lw_ble_read, since dump bundles discovery and characteristic reads into one convenience call.
All tools share the lw_ble_ prefix and snake_case, with a predictable verb_noun pattern (scan_stop, read_descriptor, poll_notifications, subscription_list). A few names are noun-only or omit the verb (mtu, dump, engine_status, connection_status), which is a minor deviation from the otherwise consistent scheme.
At 21 tools this is on the heavier side, but the BLE domain legitimately spans scanning, connection management, GATT discovery, characteristic/descriptor I/O, notifications, and diagnostics, and each tool maps to a real operation. No tool looks like filler, though a couple (dump, engine_status) are arguably conveniences rather than primitives.
The surface covers the full BLE lifecycle: scan start/poll/stop/list, connect/disconnect/status/list, GATT discovery, characteristic read/write, descriptor read/write, notification subscribe/unsubscribe/poll/wait/list, MTU, plus dump and engine diagnostics. There are no obvious dead ends for typical central-role workflows.