10 Commits

Author SHA1 Message Date
45c1e57dfe Add SPP (Serial Port Profile) for classic Bluetooth serial over RFCOMM
Registers a Profile1 D-Bus endpoint with BlueZ for bidirectional raw
byte streams — same pattern as HFP AG minus the AT command layer.
Supports both server mode (accept inbound) and client mode (connect
outbound via ConnectProfile). Includes 8 MCP tools, 2 resources, and
cursor-based recv polling with deque(maxlen=500).
2026-02-12 18:27:49 -07:00
d0f0565e62 Add BLE GATT server and ELM327 OBD-II emulator
Implement peripheral/GATT server support (14 tools) using BlueZ's
GattManager1 D-Bus API, enabling mcbluetooth to act as a BLE device
that advertises, accepts connections, and handles reads/writes/notifications.

Add ELM327 emulator (7 tools) that builds on the GATT server to emulate
a BLE OBD-II adapter over Nordic UART Service. Handles AT commands,
Mode 01/03/04/09 queries, configurable PIDs, DTCs, and VIN with
auto-response — no LLM round-trip needed for protocol handling.

New files:
- gatt_server.py: D-Bus ServiceInterface hierarchy + GattServerManager
- tools/gatt_server.py: MCP tool wrappers for server lifecycle
- tools/bt_elm327_emu.py: ELM327 protocol handler + NUS setup

Also adds 2 MCP resources (bluetooth://gatt/server, .../writes).
2026-02-12 12:50:58 -07:00
b0aa6434ae Add production docs deployment
- Add Dockerfile with multi-stage build (node -> caddy)
- Add docker-compose.yml for caddy-docker-proxy
- Update astro.config.mjs with production site URL
- Add Documentation link to README.md header
- Add Documentation URL to pyproject.toml
2026-02-10 17:08:10 -07:00
d9b66560d9 Bump version to 2026.02.09 2026-02-09 13:07:52 -07:00
3df5a25f18 Bump version to 2026.02.06 2026-02-06 21:14:58 -07:00
914db838d7 Exclude docs-site build artifacts from sdist 2026-02-06 20:55:51 -07:00
6849cd43bc Update repository URL to git.supported.systems/MCP 2026-02-04 07:38:36 -07:00
41306bb36f Bump version to 2026.02.04 2026-02-04 07:36:57 -07:00
0799067a1a Fix HFP AG E2E: post-SLC handlers, fd management, DTMF routing
Multiple bugs preventing stable HFP connections with real hardware
(ESP32 Bluedroid HFU):

- Add AF_BLUETOOTH/BTPROTO_RFCOMM fallback constants for Python builds
  compiled without bluetooth.h
- Fix NewConnection fd handling: validate, os.dup, transfer to socket
  via socket.fromfd with proper protocol param, close intermediate fd
- Remove premature +BCS codec selection from AT+BAC handler — sending
  +BCS during SLC setup confuses Bluedroid's state machine
- Add post-SLC command handlers: AT+BIA (indicator activation),
  AT+CCWA (call waiting), AT+CLIP (caller line ID) — without these
  the HF drops the RFCOMM connection after ~22 seconds
- Route AT+VTS= to DTMF handler (standard HFP command, alongside
  the non-standard AT+DTMF=)
- Fix simulate_call_end to handle OUTGOING/ALERTING call states
- Respect AT+BIA flags in _update_indicator
- Only send +CLIP during RING when HF has enabled it
- Clean up debug logging: remove file-based logger, use log.debug
- Add ruff per-file-ignores for dbus-fast D-Bus type annotations

Validated: 85/86 E2E tests PASS with ESP32 HFP Hands-Free Unit
2026-02-03 18:38:34 -07:00
013cd0eb2f Initial implementation of mcbluetooth MCP server
Comprehensive BlueZ MCP server exposing Linux Bluetooth stack to LLMs:

- Adapter management (list, power, discoverable, pairable)
- Device discovery and management (scan, pair, connect, trust)
- Audio profiles with PipeWire/PulseAudio integration (A2DP/HFP switching)
- BLE/GATT support (services, characteristics, read/write/notify)

Built on:
- FastMCP 2.14.4 for MCP protocol
- dbus-fast 4.0.0 for async BlueZ D-Bus communication
- pulsectl-asyncio 1.2.2 for audio control
2026-02-02 02:03:49 -07:00