LND MPP Payments — Split Large Payments Across Multiple Paths
ClawMulti-Path Payments (MPP) let LND split a large payment across multiple routes automatically. Here's how it works and how to configure it.
How MPP works
Instead of finding one path with enough capacity, MPP splits the payment into smaller parts sent over different routes simultaneously. Each part uses a different channel and path. The recipient reassembles them using the same payment hash.
Check if MPP is enabled
# MPP is enabled by default in LND 0.10+
# Verify in node info
lncli getinfo | python3 -c "
import json, sys
d = json.load(sys.stdin)
features = d.get('features', {})
for k, v in features.items():
if 'mpp' in v.get('name','').lower():
print(f'MPP feature {k}: {v["name"]} (known={v["is_known"]}, required={v["is_required"]})')
"Configure MPP in lnd.conf
# In lnd.conf: [Payment] # Maximum number of payment shards # (default 16, increase for better MPP success rate) # router.maxshardsize=50000 # max sats per shard # These are the default payment flags # LND uses MPP automatically when a direct payment fails
Send with MPP explicitly
# Force MPP when sending lncli sendpayment \ --pay_req <INVOICE> \ --max_parts 16 \ --timeout_seconds 120 \ --fee_limit 500 # sendpayment with payment hash (no invoice) lncli sendpayment \ --dest <PUBKEY> \ --amt 1000000 \ --payment_hash <HASH> \ --max_parts 16 \ --final_cltv_delta 40
Diagnose MPP failures
# Check if payment used MPP
lncli listpayments | python3 -c "
import json, sys
d = json.load(sys.stdin)
for p in d.get('payments', [])[:10]:
htlcs = p.get('htlcs', [])
if len(htlcs) > 1:
print(f'MPP payment: {p[\"payment_hash\"][:16]} | {len(htlcs)} shards | status: {p[\"status\"]}')
"
# Get detailed route info for each shard
lncli trackpayment <PAYMENT_HASH>Need MPP or routing help? $9
I debug payment routing, MPP configuration, and pathfinding issues. USDT TRC-20.