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
Metadata
Release files for lc29h 2026.2.27
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| lc29h-2026.2.27.tar.gz | 178.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lc29h-2026.2.27-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 241.4 kB
Release files / lc29h-2026.2.27.tar.gz
| Download URL | lc29h-2026.2.27.tar.gz |
|---|---|
| Size | 178.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2095f18bf90f66c14b3a6e8ebbd9279448030f7df8c86de3cc0c6d4a99db0772
|
|
BLAKE2b-256 checksum How to use checksums |
f82a8347f15a1ee440f34d1ce7ec1ffa0a8255ad3436e3314519e4576254eaf0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / lc29h-2026.2.27-py3-none-any.whl
| Download URL | lc29h-2026.2.27-py3-none-any.whl |
|---|---|
| Size | 62.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
20663155fe63ff2c642b1b7a5a73e155d37ad84a4bba26aaa4b8d047161ffb6d
|
|
BLAKE2b-256 checksum How to use checksums |
bb111e4923360e2aa510fa5f74faed1bdb061e2333d63cf3f8db154ccdb2544f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Security for lc29h 2026.2.27
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.