CLI tool and MCP server for Quectel LC29H GNSS modules on Linux/Raspberry Pi
Project description
lc29h
CLI tool and MCP server for Quectel LC29H dual-band (L1+L5) GNSS modules on Linux.
A native Linux replacement for the Windows-only QGNSS tool. Provides position monitoring, satellite tracking, constellation configuration, NTRIP-based RTK corrections for centimeter-level accuracy, base station survey-in, and dead reckoning control -- all from the terminal or through an MCP server for LLM integration.
Supports all five LC29H module variants: AA, BA, CA, DA, and BS.
Documentation: https://lc29h.warehack.ing/
Installation
Requires Python 3.11 or later.
# Recommended
uv tool install lc29h
# Alternative
pipx install lc29h
Serial Port
The module communicates over UART. Specify the port with --port or the LC29H_PORT environment variable:
lc29h --port /dev/ttyS0 info # Pi 4B (built-in UART)
lc29h --port /dev/ttyAMA0 info # Pi 5
lc29h --port /dev/ttyUSB0 info # USB-to-serial adapter
Default: /dev/ttyS0. Baud rate defaults to 115200, configurable via --baud or LC29H_BAUD.
CLI Reference
Module Information
lc29h info
Model: LC29HDANR11A07S
Firmware: LC29HDANR11A07S_RSA
Built: 2024/07/16 17:50:56
Chip: AG3335A
Chip FW: AXN_5.3.0_p2
Position Monitoring
lc29h monitor # Live table (default)
lc29h monitor --format csv # CSV output for logging
lc29h monitor --format nmea # Raw NMEA sentences
lc29h monitor --count 10 # Stop after 10 fixes
Satellite Status
lc29h satellites
Displays dual-band (L1/L5) signal-to-noise ratios per satellite, grouped by physical PRN:
PRN Const Elev Azim L1 L5 Used
--------------------------------------------
2 GPS 51 283 34 30 *
5 GPS 14 180 22 ---
7 GPS 63 47 38 34 *
10 GPS 27 130 30 28 *
24 GPS 41 314 33 32 *
3 GALILEO 32 73 31 28 *
8 GALILEO 19 210 27 25
26 GALILEO 68 155 36 33 *
8 satellites tracked (14 signal observations)
Configuration
# Enable/disable constellations
lc29h config constellation --gps --galileo --no-glonass --no-beidou
# Set position fix rate (100-10000 ms)
lc29h config fix-rate 200 # 5 Hz updates
# Change serial baud rate
lc29h config baud 230400
# Save current settings to flash (persist across reboots)
lc29h config save
# Restore factory defaults
lc29h config restore
Module Restart
lc29h restart hot # Keep all data (~1s TTFF)
lc29h restart warm # Clear ephemeris (~30s TTFF)
lc29h restart cold # Full reacquisition (~60s TTFF)
NTRIP (RTK Corrections)
For centimeter-level positioning on DA and BA variants:
# List available mount points
lc29h ntrip sources --host rtk2go.com
# Stream RTK corrections (auto-detects NTRIP 1.0/2.0, exponential backoff)
lc29h ntrip start --host rtk2go.com --mount NEAR_ME \
--user user@example.com --password none
Base Station Survey-In (BS Variant)
# Start survey-in (average position for 1 hour, target 0.5m accuracy)
lc29h survey-in start-survey --duration 3600 --accuracy 0.5
# Check progress (shows WGS84 position converted from ECEF)
lc29h survey-in status
# Stop survey-in
lc29h survey-in stop
JSON Output
All commands support --json for machine-readable output:
lc29h --json info
lc29h --json monitor --count 1
MCP Server
The package includes lc29h-mcp, a FastMCP server that exposes GNSS functionality as tools for LLM integration. The server maintains a persistent serial connection with background NMEA parsing, so position and satellite data are always current.
Setup
# Add to Claude Code
claude mcp add lc29h -- uvx lc29h-mcp
# Or run directly
lc29h-mcp
Configure via environment variables: LC29H_PORT, LC29H_BAUD.
Tools (20)
Position and Status
get_position-- Current lat/lon/alt, fix type, satellites, HDOP, speed, courseget_satellites-- All tracked satellites with PRN, elevation, azimuth, SNR, constellationget_module_info-- Firmware version, model, chip identification
Configuration
configure_constellations-- Enable/disable GPS, GLONASS, Galileo, BeiDou, QZSSset_fix_rate-- Position update rate (100ms to 10s)save_config-- Persist settings to flashrestart_module-- Hot/warm/cold restart
NTRIP (RTK Corrections)
ntrip_connect-- Connect to caster, or list mount points if no mountpoint givenntrip_status-- Check connection statentrip_disconnect-- Stop correction stream
Base Station (BS Variant)
survey_in_start-- Begin position averaging with duration/accuracy targetssurvey_in_status-- Progress, accuracy, WGS84 position from ECEF
Dead Reckoning (BA/CA Variants)
dead_reckoning_config-- Get/set DR mode (GNSS only, DR only, auto)
EASY / AGNSS (AA Variant)
easy_status-- Query ephemeris prediction statuseasy_enable-- Enable/disable orbit prediction for faster TTFF
Power and Performance
odometer-- Enable/disable/reset distance accumulationelevation_mask-- Get/set satellite elevation cutoff anglespeed_clamping-- Zero-speed reporting when stationarygnss_suspend_resume-- Idle the GNSS engine to save powerperiodic_mode-- Duty-cycled tracking (run/sleep windows)
Resources
gnss://position-- Live position summarygnss://satellites-- Current constellation viewgnss://status-- Module and NTRIP connection state
Supported Variants
| Variant | Features |
|---|---|
| LC29H(AA) | SBAS augmentation, EASY self-generated ephemeris |
| LC29H(BA) | Dead Reckoning + RTK |
| LC29H(CA) | Dead Reckoning (inertial navigation, no RTK) |
| LC29H(DA) | RTK with fast convergence |
| LC29H(BS) | Base Station (RTCM3 output, survey-in) |
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lc29h-2026.2.27.tar.gz.
File metadata
- Download URL: lc29h-2026.2.27.tar.gz
- Upload date:
- Size: 178.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"EndeavourOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2095f18bf90f66c14b3a6e8ebbd9279448030f7df8c86de3cc0c6d4a99db0772
|
|
| MD5 |
418f900aa1f63fa599133aa3daf05a39
|
|
| BLAKE2b-256 |
f82a8347f15a1ee440f34d1ce7ec1ffa0a8255ad3436e3314519e4576254eaf0
|
File details
Details for the file lc29h-2026.2.27-py3-none-any.whl.
File metadata
- Download URL: lc29h-2026.2.27-py3-none-any.whl
- Upload date:
- Size: 62.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"EndeavourOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20663155fe63ff2c642b1b7a5a73e155d37ad84a4bba26aaa4b8d047161ffb6d
|
|
| MD5 |
9b1a087bde725663ffaacd0716d500db
|
|
| BLAKE2b-256 |
bb111e4923360e2aa510fa5f74faed1bdb061e2333d63cf3f8db154ccdb2544f
|