github dathere/qsv 17.0.0

10 hours ago

[17.0.0] - 2026-03-03 "The User 🧑🏻 and Agent 🤖 Experience (UAX) Release"

This release is all about getting Human Users and AI Agents working together in harmony to wrangle data faster and more effectively - whether you're a solo analyst or a data team using Claude Desktop/Cowork/Code or Gemini.

The UAX theme introduced in 16.1.0 reaches full stride — the new qsvmcp binary variant gives AI agents a purpose-built, leaner binary; the MCP server levels up with better tool guidance, TSV output for token efficiency, reproducibility logging, DuckDB-powered Parquet conversion, automatic moarstats enrichment, SQL translation hardening, and interactive working directory elicitation. On the core CLI side, stats cache reliability improves across delimiters and output formats, sniff resolves symlinks correctly, and moarstats gets faster hot-path performance.


Major Features

New qsvmcp Binary Variant

A purpose-built binary optimized for use with the qsv MCP server, adding session logging while dispensing with unneeded features (like apply, fetch, fetchpost, foreach, to) for a faster, smaller build. The MCP server now prefers qsvmcp with automatic fallback to the full qsv binary. qsvmcp is now included in release distributions alongside qsv, qsvlite, and qsvdp.

qsv MCP Server: Agent-Native Enhancements

The MCP server (now v17.0.0) receives its biggest update yet, with features designed to make AI agents more effective at data wrangling:

  • TSV Output Format — Default output switched to TSV for ~30% token reduction in agent responses, configurable via QSV_MCP_OUTPUT_FORMAT
  • Session Logging — New qsv_log tool and automatic qsvmcp.log audit trail for reproducibility, with configurable log levels via QSV_MCP_LOG_LEVEL
  • DuckDB Parquet Conversion — When DuckDB is available, CSV-to-Parquet conversion uses DuckDB instead of sqlp for faster, more reliable conversion
  • Auto-moarstatsmoarstats automatically runs after stats execution for richer statistical context at minimal cost
  • SQL Translation Hardening — Major translateSql overhaul: unique table aliases (_tbl_N), string literal protection, user-provided alias preservation, and pre-scan qualified ref fixing
  • Working Directory Elicitation — Interactive directory picker via MCP Elicitation protocol for first-time setup
  • Reserved Cache Filename Guard — Prevents accidental --output overwrites of .stats.csv and .freq.csv cache files
  • Cache-Aware SQL Guidance — Server instructions now guide agents to leverage stats and frequency caches when composing sqlp, joinp, and pivotp queries
  • Polars SQL Engine Header — Clear engine indicator differentiates Polars SQL vs DuckDB query results
  • Absolute Path Resolution — All file-path arguments now resolved to absolute paths for robustness
  • Cowork CLAUDE.md Auto-Deploy — Automatically deploys project CLAUDE.md to Claude Cowork working folder on session start (cross-platform Node.js implementation)

Detailed MCP changes are documented in the MCP CHANGELOG.


Added

  • feat: qsvmcp binary variant — purpose-built for MCP server usage, included in release distributions

Changed

  • perf(moarstats): fix outlier key bug and optimize hot-path allocations
  • perf(stats): optimize to_record() output path and weighted_mad()
  • refactor(describegpt): simplify code for clarity and reduce redundancy
  • deps: bump pragmastat from 10.0 to 11.1.0
  • deps: bump polars to latest upstream (rev 802550b)
  • deps: bump Luau from 0.708 to 0.709
  • deps: bump chrono from 0.4.43 to 0.4.44
  • deps: bump csv-nose from 0.8.0 to 1.0.1
  • deps: bump jsonschema from 0.42 to 0.44.0
  • deps: bump strum/strum_macros from 0.27.2 to 0.28.0
  • deps: bump tempfile from 3.25.0 to 3.26.0
  • deps: bump serial_test from 3.3.1 to 3.4.0
  • deps: bump actions/upload-artifact from 6 to 7
  • deps: switch csvlens to patched fork using csv-nose 1.0.1
  • deps: update ort dependency to include tls-rustls feature (by @kulnor)
  • applied select clippy suggestions

Fixed

  • fix(stats): always write stats cache as CSV regardless of output format (Snappy, TSV, etc.)
  • fix(stats): decouple Snappy compression from cache — cache files always use comma delimiter
  • fix(sniff): resolve symlinks before MIME detection and metadata lookup (#3529)
  • fix(moarstats): harden outlier test assertion and fix comment inconsistency
  • fix(describegpt): restore error logging in Redis connection failure
  • docs: fix ~70 false claims found by documentation audits across qsv and MCP server

Full Changelog: 16.1.0...17.0.0

Don't miss a new qsv release

NewReleases is sending notifications on new releases.