Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Let AI agents interact with real BLE hardware — scan, connect, read, write, and subscribe.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
BLE_MCP_ALLOW_WRITES, BLE_MCP_WRITE_ALLOWLIST, BLE_MCP_PLUGINS, BLE_MCP_TOOL_SEPARATORต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"ble": {
"command": "uvx",
"args": [
"ble-mcp-server"
],
"env": {
"BLE_MCP_ALLOW_WRITES": "ใส่ค่าของคุณ",
"BLE_MCP_WRITE_ALLOWLIST": "ใส่ค่าของคุณ",
"BLE_MCP_PLUGINS": "ใส่ค่าของคุณ",
"BLE_MCP_TOOL_SEPARATOR": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add ble --env BLE_MCP_ALLOW_WRITES='ใส่ค่าของคุณ' --env BLE_MCP_WRITE_ALLOWLIST='ใส่ค่าของคุณ' --env BLE_MCP_PLUGINS='ใส่ค่าของคุณ' --env BLE_MCP_TOOL_SEPARATOR='ใส่ค่าของคุณ' -- uvx ble-mcp-serverเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"ble": {
"command": "uvx",
"args": [
"ble-mcp-server"
],
"env": {
"BLE_MCP_ALLOW_WRITES": "ใส่ค่าของคุณ",
"BLE_MCP_WRITE_ALLOWLIST": "ใส่ค่าของคุณ",
"BLE_MCP_PLUGINS": "ใส่ค่าของคุณ",
"BLE_MCP_TOOL_SEPARATOR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"ble": {
"type": "stdio",
"command": "uvx",
"args": [
"ble-mcp-server"
],
"env": {
"BLE_MCP_ALLOW_WRITES": "ใส่ค่าของคุณ",
"BLE_MCP_WRITE_ALLOWLIST": "ใส่ค่าของคุณ",
"BLE_MCP_PLUGINS": "ใส่ค่าของคุณ",
"BLE_MCP_TOOL_SEPARATOR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
BLE_MCP_ALLOW_WRITES envBLE_MCP_WRITE_ALLOWLIST envBLE_MCP_PLUGINS envBLE_MCP_TOOL_SEPARATOR envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub es617 ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.3.0) เข้า registry 7 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, topo^alpin
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
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.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
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
ตัดมาแค่ช่วงต้น อ่านต่อใน repo