Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Let AI agents interact with real BLE hardware — scan, connect, read, write, and subscribe.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
BLE_MCP_ALLOW_WRITES, BLE_MCP_WRITE_ALLOWLIST, BLE_MCP_PLUGINS, BLE_MCP_TOOL_SEPARATORNecesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"ble": {
"command": "uvx",
"args": [
"ble-mcp-server"
],
"env": {
"BLE_MCP_ALLOW_WRITES": "your-value",
"BLE_MCP_WRITE_ALLOWLIST": "your-value",
"BLE_MCP_PLUGINS": "your-value",
"BLE_MCP_TOOL_SEPARATOR": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add ble --env BLE_MCP_ALLOW_WRITES=your-value --env BLE_MCP_WRITE_ALLOWLIST=your-value --env BLE_MCP_PLUGINS=your-value --env BLE_MCP_TOOL_SEPARATOR=your-value -- uvx ble-mcp-serverCompleta los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"ble": {
"command": "uvx",
"args": [
"ble-mcp-server"
],
"env": {
"BLE_MCP_ALLOW_WRITES": "your-value",
"BLE_MCP_WRITE_ALLOWLIST": "your-value",
"BLE_MCP_PLUGINS": "your-value",
"BLE_MCP_TOOL_SEPARATOR": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"ble": {
"type": "stdio",
"command": "uvx",
"args": [
"ble-mcp-server"
],
"env": {
"BLE_MCP_ALLOW_WRITES": "your-value",
"BLE_MCP_WRITE_ALLOWLIST": "your-value",
"BLE_MCP_PLUGINS": "your-value",
"BLE_MCP_TOOL_SEPARATOR": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
BLE_MCP_ALLOW_WRITES envBLE_MCP_WRITE_ALLOWLIST envBLE_MCP_PLUGINS envBLE_MCP_TOOL_SEPARATOR envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 6 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub es617, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.3.0) llegó al registro hace 7 meses.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, topo^alpin
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Avalanche bulletins and mountain weather forecasts for any place in the Alps.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
A stateful Bluetooth Low Energy (BLE) Model Context Protocol (MCP) server for developer tooling and AI agents. Works out of the box with Claude Code, VS Code with Copilot, and any MCP-compatible runtime. Defaults to stdio (no HTTP, no open ports), with optional SSE and Streamable HTTP transports for remote access and multi-session use. Uses bleak for cross-platform BLE on macOS, Windows, and Linux.
Example: Let Claude Code scan for nearby BLE devices, connect to one, read characteristics, and stream notifications from real hardware.
7-minute video walkthrough — scanning a real BLE device, discovering services, reading values, and promoting flows into plugins.
You have a BLE device. You want an AI agent to talk to it — scan, connect, read sensors, send commands, stream data. This server makes that possible.
It gives any MCP-compatible agent a full set of BLE tools: scanning, connecting, reading, writing, subscribing to notifications — plus protocol specs and device plugins, so the agent can reason about higher-level device behavior instead of just raw UUIDs and bytes.
The agent calls these tools, gets structured JSON back, and reasons about what to do next — no human in the loop for each BLE operation.
What agents can do with it:
pip install ble-mcp-server
claude mcp add ble -- ble_mcp
Then in Claude Code, try:
"Scan for nearby BLE devices and connect to the one whose name starts with Arduino."
The server is read-only by default. Writes and plugins can control real hardware and execute code, and are opt-in via environment variables. See Safety for details.
Once connected, the agent has full BLE capabilities:
BLE_MCP_ALLOW_WRITES)sensortag.read_temp) instead of raw reads/writesThe agent handles multi-step flows automatically. For example, "read the temperature from my SensorTag" might involve scanning, connecting, discovering services, attaching a spec, enabling the sensor, and reading the value — without you specifying each step.
At a high level:
Raw BLE → Protocol Spec → Plugin
You can start with raw BLE tools, then move up the stack as your device protocol becomes understood and repeatable. See Concepts for how the pieces fit together.
# Editable install from repo root
pip install -e .
uv pip install -e .
MCP is a protocol — this server works with any MCP-compatible client. Below are setup instructions for the most common ones.
# Minimal (read-only)
claude mcp add ble -- ble_mcp
claude mcp add ble -- python -m ble_mcp_server
claude mcp add ble -e BLE_MCP_ALLOW_WRITES=true -- ble_mcp
claude mcp add ble \ -e BLE_MCP_ALLOW_WRITES=true \ -e BLE_MCP_WRITE_ALLOWLIST="2a00,12345678-1234-1234-1234-123456789abc" \ -- ble_mcp
claude mcp add ble -e BLE_MCP_PLUGINS=all -- ble_mcp
claude mcp add ble -e BLE_MCP_PLUGINS=sensortag,hello -- ble_mcp
claude mcp add ble -e BLE_MCP_LOG_LEVEL=DEBUG -- ble_mcp
Add to your project's .vscode/mcp.json (or create it):
{
"servers": { "ble": { "type": "stdio", "command": "ble_mcp", "args": [], "env": { "BLE_MCP_ALLOW_WRITES": "true", "BLE_MCP_PLUGINS": "all" } } } }
Adjust env to match your needs — remove BLE_MCP_ALLOW_WRITES for read-only mode, or set BLE_MCP_PLUGINS to specific plugin names.
Add to your project's .cursor/mcp.json (or create it):
{
"mcpServers": { "ble": { "command": "ble_mcp", "args": [], "env": { "BLE_MCP_ALLOW_WRITES": "true", "BLE_MCP_PLUGINS": "all" } } } }
| Variable | Default | Description |
|---|---|---|
BLE_MCP_ALLOW_WRITES | disabled | Set to true, 1, or yes to enable ble.write. |
BLE_MCP_WRITE_ALLOWLIST | empty | Comma-separated UUID allowlist for writable characteristics (checked only when writes are enabled). |
BLE_MCP_PLUGINS | disabled | Plugin policy: all to allow all, or name1,name2 to allow specific plugins. Unset = disabled. |
BLE_MCP_LOG_LEVEL | WARNING | Python log level (DEBUG, INFO, WARNING, ERROR). Logs go to stderr. |
BLE_MCP_TRACE | enabled | JSONL tracing of every tool call. Set to 0, false, or no to disable. |
BLE_MCP_TRACE_PAYLOADS | disabled | Include value_b64/value_hex in traced args (stripped by default). |
BLE_MCP_TRACE_MAX_BYTES | 16384 | Max payload chars before truncation (only applies when TRACE_PAYLOADS is on). |
BLE_MCP_TOOL_SEPARATOR | _ | Character used to separate tool name segments. Set to . if your client supports dots in tool names. Default changed to _ because most clients (Cursor, Claude Desktop) reject dots. |
BLE_MCP_MAX_SESSIONS | 1 | Maximum concurrent MCP sessions (only meaningful for SSE and Streamable HTTP transports). |
BLE_MCP_MAX_CONNECTIONS | 3 | Maximum active BLE connections per session. |
BLE_MCP_MAX_SCANS | 5 | Maximum active scans per session. |
BLE_MCP_MAX_SUBSCRIPTIONS_PER_CONN | 10 | Maximum notification subscriptions per connection. |
BLE_MCP_AUTH_TOKEN | unset | Password for OAuth approval page on HTTP transports. Required unless --no-auth is used. Ignored for stdio. |
See Concepts for how everything fits together, and the Tools Reference for detailed input/output schemas.
| Category | Tools |
|---|---|
| BLE Core | ble_scan_start, ble_scan_get_results, ble_scan_stop, ble_connect, ble_disconnect, ble_connection_status, ble_discover, ble_mtu, ble_read, ble_write, ble_read_descriptor, ble_write_descriptor, ble_subscribe, ble_unsubscribe, ble_wait_notification, ble_poll_notifications, ble_drain_notifications |
| Introspection | ble_connections_list, ble_subscriptions_list, ble_scans_list, ble_tasks_list, ble_tasks_cancel |
| Protocol Specs | ble_spec_template, ble_spec_register, ble_spec_list, ble_spec_attach, ble_spec_get, ble_spec_read, ble_spec_search |
| Tracing | ble_trace_status, ble_trace_tail |
| Plugins | ble_plugin_template, ble_plugin_list, ble_plugin_reload, ble_plugin_load |
Specs are markdown files that describe a BLE device's protocol — services, characteristics, commands, and data formats. They live in .ble_mcp/specs/ and teach the agent what a device can do beyond raw UUIDs and bytes.
Without a spec, the agent can still discover services and read characteristics. With a spec, it knows what the values mean and what commands to send.
You can create specs by telling the agent about your device — paste a datasheet, describe the protocol, or just let it explore and document what it finds. The agent generates the spec file, registers it, and references it in future sessions. You can also write specs by hand.
See Concepts for details on spec format and how the agent uses them.
Plugins add device-specific shortcut tools to the server. Instead of the agent composing raw read/write sequences, a plugin provides high-level operations like sensortag.read_temp or ota.upload_firmware.
The agent can also create plugins (with your approval). It explores a device, writes a plugin based on what it learns, and future sessions get shortcut tools — no manual coding required.
To enable plugins:
# Enable all plugins
claude mcp add ble -e BLE_MCP_PLUGINS=all -- ble_mcp
claude mcp add ble -e BLE_MCP_PLUGINS=sensortag,ota -- ble_mcp
Editing an already-loaded plugin only requires ble_plugin_reload — no restart needed.
Plugins can start background asyncio tasks for continuous monitoring — periodic scans, data collection loops, etc. The plugin template includes commented examples for this pattern.
Background tasks are registered with the server via state.register_task(name, task), making them visible to the agent:
ble_tasks_list — shows all running background tasks with statusble_tasks_cancel — stops a task by ID (safety net for runaway tasks)Plugins can send MCP log notifications to the client via state.on_log_cb(level, message). This allows plugins
Solo se muestra el principio; lee el resto en el repo