---
title: Device Pairing
description: Pair Bluetooth devices with automatic PIN and passkey handling
---
import { Aside, Tabs, TabItem } from '@astrojs/starlight/components';
Pairing establishes a trusted relationship between devices, enabling secure communication. mcbluetooth includes a smart pairing agent that handles all Bluetooth pairing methods.
## Scanning for Devices
Before pairing, discover available devices:
```
bt_scan adapter="hci0" timeout=10 mode="both"
```
**Scan modes:**
- `classic` — Traditional Bluetooth (BR/EDR)
- `ble` — Bluetooth Low Energy only
- `both` — Both types (default)
## Initiating Pairing
### Basic Pairing
```
bt_pair adapter="hci0" address="AA:BB:CC:DD:EE:FF"
```
### Pairing Modes
```
bt_pair adapter="hci0" address="..." pairing_mode="interactive"
```
Returns immediately with status. If confirmation needed, use `bt_pair_confirm` to respond.
```
bt_pair adapter="hci0" address="..." pairing_mode="auto"
```
Automatically accepts all pairing requests. Use only in trusted environments.
```
bt_pair adapter="hci0" address="..." pairing_mode="elicit"
```
Uses MCP elicitation to prompt the user directly (if the MCP client supports it).
## Pairing Methods
Bluetooth uses different pairing methods based on device capabilities:
| Method | Description | Agent Action |
|--------|-------------|--------------|
| **Just Works** | No user interaction | Auto-accepted |
| **Numeric Comparison** | Confirm 6-digit code matches | Show code, await confirmation |
| **Passkey Entry** | Enter code shown on other device | Prompt for passkey |
| **Legacy PIN** | Enter 4-6 digit PIN | Prompt for PIN |
### Handling Confirmation Requests
When pairing requires confirmation:
```
# Check for pending requests
bt_pairing_status
# Confirm with passkey (if needed)
bt_pair_confirm adapter="hci0" address="..." passkey=123456 accept=true
# Or reject
bt_pair_confirm adapter="hci0" address="..." accept=false
```
## Managing Paired Devices
### List Paired Devices
```
bt_list_devices adapter="hci0" filter="paired"
```
### Remove Pairing
```
bt_unpair adapter="hci0" address="AA:BB:CC:DD:EE:FF"
```
This removes the device from known devices and deletes all pairing information.
## Connection Management
### Connect to Paired Device
```
bt_connect adapter="hci0" address="AA:BB:CC:DD:EE:FF"
```
### Disconnect
```
bt_disconnect adapter="hci0" address="AA:BB:CC:DD:EE:FF"
```
## Trust and Security
### Trust a Device
Trusted devices can connect automatically without explicit authorization:
```
bt_trust adapter="hci0" address="..." trusted=true
```
### Untrust
```
bt_trust adapter="hci0" address="..." trusted=false
```
### Block a Device
Prevent a device from connecting:
```
bt_block adapter="hci0" address="..." blocked=true
```
### Unblock
```
bt_block adapter="hci0" address="..." blocked=false
```
## Device Information
### Get Device Details
```
bt_device_info adapter="hci0" address="AA:BB:CC:DD:EE:FF"
```
Returns:
```json
{
"address": "AA:BB:CC:DD:EE:FF",
"name": "Bose NCH700",
"alias": "My Headphones",
"paired": true,
"bonded": true,
"trusted": true,
"connected": true,
"uuids": ["0000110b-...", "0000110e-..."],
...
}
```
### Set Device Name
```
bt_device_set_alias adapter="hci0" address="..." alias="My Headphones"
```
## Common Workflows
### Pair New Headphones
```
# Put headphones in pairing mode first!
# Scan for them
bt_scan adapter="hci0" timeout=15
# Pair
bt_pair adapter="hci0" address="C8:7B:23:55:68:E8"
# Trust for auto-reconnect
bt_trust adapter="hci0" address="C8:7B:23:55:68:E8" trusted=true
# Connect
bt_connect adapter="hci0" address="C8:7B:23:55:68:E8"
```
### Pair a Phone for OBEX
```
# Scan and pair
bt_scan adapter="hci0"
bt_pair adapter="hci0" address="AA:BB:CC:DD:EE:FF"
# Both devices may show confirmation prompts - accept on both
# After pairing, OBEX profiles become available
bt_obex_status
```
## Troubleshooting
### Pairing Fails Immediately
- Ensure the device is in pairing mode
- Check device isn't already paired (try `bt_unpair` first)
- Verify adapter is powered and pairable
### "Authentication Rejected"
- Device may have reached its pairing limit
- Try resetting Bluetooth on the other device
- Delete the pairing on both sides and retry
### Pairing Stuck
```
# Check for pending requests
bt_pairing_status
# Cancel if stuck
bt_pair_confirm adapter="hci0" address="..." accept=false
```
### Device Connects Then Disconnects
- Profile incompatibility (e.g., device doesn't support expected audio profile)
- Check device UUIDs with `bt_device_info`
- Try connecting specific profile with `bt_connect_profile`