miller/test/cases
John Kerl 41f5188bd0
Add mlr mcp MCP server + agent playbook, with a --no-shell gate (#2098 PR7) (#2133)
* Plan: flesh out PR7 (MCP server + Agent Skill) design

stdio transport (no HTTP port), mlr mcp terminal in the main binary,
SDK-vs-handroll decision, tool list, in-process vs subprocess split,
run-tool safety (--no-shell prerequisite), single-sourced skill, tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Add mlr mcp: MCP server + agent playbook; --no-shell gate (#2098 PR7)

New terminal `mlr mcp` runs a Model Context Protocol server over stdio
(spawned by MCP clients; no network port), exposing five tools --
list_capabilities, which, validate_dsl, describe_data, run -- plus an
agent playbook as MCP prompt/resource. Catalog tools are served
in-process from the help registries; the rest subprocess this same
binary with MLR_ERRORS_JSON=1, a timeout, and an output cap.

Prerequisite: a new --no-shell flag / MLR_NO_SHELL env var (one-way
gate) disables the DSL system/exec functions, piped redirects, and
--prepipe/--prepipex; the MCP server sets it on the commands it runs
unless started with --allow-shell.

Adds the github.com/modelcontextprotocol/go-sdk dependency.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Force LF checkout for the embedded SKILL.md (Windows CI fix)

go:embed embeds checkout bytes, so a CRLF checkout on Windows made the
embedded playbook differ per platform and failed
TestPlaybookHasFrontmatter. Pin the file to eol=lf in .gitattributes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Move no-shell test DSL into per-case mlr files (Windows CI fix)

Inline single-quoted DSL in cmd files is mangled by the Windows shell
(single quotes are not quote characters there); the harness's
put -f ${CASEDIR}/mlr pattern avoids shell quoting entirely.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 19:41:49 -04:00
..
auxents
chaining
cli-csv-rs-environment-defaults
cli-default-verb-cat Default to "cat" verb when none is supplied (#2060) 2026-05-17 12:13:21 -04:00
cli-fixed-width
cli-getoptish
cli-help Add mlr describe schema/shape introspection verb (#2098 PR6) (#2132) 2026-07-03 18:43:49 -04:00
cli-mfrom
cli-norc/0001
cli-ofmt
dsl-absent-empty
dsl-argpass-typedecl
dsl-array-map-indexing
dsl-arrayify
dsl-asserting
dsl-basic
dsl-begin-end
dsl-block-exit
dsl-break-continue
dsl-bytes-conversions Add a first-class bytes type to the DSL, with b"..." literals and base64/hex codecs (#2122) 2026-07-03 11:58:44 -04:00
dsl-bytes-literals/0001 Add a first-class bytes type to the DSL, with b"..." literals and base64/hex codecs (#2122) 2026-07-03 11:58:44 -04:00
dsl-bytes-ops/0001 Add a first-class bytes type to the DSL, with b"..." literals and base64/hex codecs (#2122) 2026-07-03 11:58:44 -04:00
dsl-clean-whitespace
dsl-collection-equality
dsl-comments
dsl-concat
dsl-contains Fix mlr -s shebang doc and reject arrays/maps in contains/index (#1658) (#2058) 2026-05-17 11:40:39 -04:00
dsl-context-specific-validation
dsl-context-validation
dsl-depth/0001
dsl-do-while
dsl-do-while-loops
dsl-dump-print
dsl-emit
dsl-emit-basic-indexing
dsl-emit-het
dsl-emit1/0001
dsl-empty/0001
dsl-empty-statements
dsl-env
dsl-explain Add DSL validate/dry-run: put/filter --explain (#2098 PR5) (#2131) 2026-07-03 18:12:23 -04:00
dsl-extended-typeof/0001
dsl-filter
dsl-filter-pattern-action
dsl-first-class-functions
dsl-flatten-unflatten
dsl-for-bind-loops-for-valgrind
dsl-for-map-depth
dsl-for-multi
dsl-for-one
dsl-for-oosvar-loops
dsl-for-srec-loops
dsl-for-two
dsl-for-variants
dsl-forbind-typedecl
dsl-format
dsl-from-file
dsl-func-decl-hoist
dsl-functional-tests
dsl-gmt-date-time-functions
dsl-hashing/0001
dsl-haskey
dsl-if-chain
dsl-if-chaining
dsl-index/0001
dsl-indexing
dsl-indirect-oosvar-assignments
dsl-indirect-srec-assignments
dsl-int-function
dsl-is-predicates
dsl-json-collection-output
dsl-json-parse-json-stringify
dsl-lashed-emitp-singles
dsl-latin1
dsl-leafcount/0001
dsl-leftpad-rightpad
dsl-length
dsl-length-depth-leafcount
dsl-lhs-indexing
dsl-line-number-column-number
dsl-load
dsl-local-date-time-functions
dsl-local-map-variable-typedecl
dsl-local-map-variable-write-read
dsl-localvar-scope-and-extent
dsl-localvar-typedecl
dsl-localvar-unsets
dsl-map-dot
dsl-map-funcs
dsl-map-variant-dumps
dsl-mapsum-mapdiff-mapexcept
dsl-mapvar-assignments
dsl-mapvar-emit/0003
dsl-mapvar-for-loops/0001
dsl-mapvars-in-scalar-function-call-contexts
dsl-mapvars-udfs-subroutines
dsl-match
dsl-mathy
dsl-max-variadic
dsl-min-max-types
dsl-modular-arithmetic/0001
dsl-more-type-predicates
dsl-multi-index
dsl-multipart-scripts
dsl-nested-double-quotes/0001
dsl-no-filter-in-filter
dsl-null-empty-handling
dsl-number-formatting
dsl-oosvar-assignments
dsl-oosvars
dsl-operator-associativity
dsl-operator-precedence
dsl-operator-rewrites
dsl-output-redirects
dsl-parameterized-emit
dsl-parse
dsl-prefixed-unprefixed-emit
dsl-print
dsl-programming-examples
dsl-put-dash-s
dsl-put-multiple-dash-e/0001
dsl-pythonic-division
dsl-redirects
dsl-regex
dsl-regex-captures
dsl-regex-matching
dsl-scientific-notation
dsl-scope/0001
dsl-sec2gmt
dsl-semicolons
dsl-short-circuit
dsl-slice
dsl-sorts
dsl-split-join
dsl-split-join-more
dsl-stack-allocation
dsl-stat/0001
dsl-stats
dsl-string-array-indexing-slicing
dsl-strlen/0001
dsl-subr
dsl-subs
dsl-substr
dsl-toupper-tolower/0001
dsl-trailing-commas
dsl-triple-for-loops
dsl-truncate
dsl-type-inference
dsl-type-predicates
dsl-type-reflect
dsl-typed-overlay
dsl-typedecl
dsl-unformat
dsl-unset
dsl-user-defined-functions
dsl-user-defined-functions-and-subroutines
dsl-utf8-field-names
dsl-utf8-strlen/0001
dsl-utf8-uppercase-lowercase
dsl-warnings
dsl-whitespace
globbing/0001
help Tier-2 structured verb options: OptionSpec, initial migration (#2098) (#2111) 2026-07-03 14:27:23 -04:00
int64-io
io-barred-pprint
io-compressed-input
io-csv-auto-unsparsify
io-dcf
io-dedupe-field-names
io-format-conversion-keystroke-savers
io-gen
io-het-csv-input
io-het-pprint-input
io-implicit-header-csv-input
io-in-place-processing
io-infer-flags
io-ixs-regex
io-json-io Allow empty-string keys in JSON and YAML input (#2068) 2026-05-27 20:19:03 -04:00
io-jsonl-io
io-lf-crlf-and-autodetect
io-markdown
io-missing-final-lf
io-multi
io-multi-character-ixs Fix PPRINT alignment with multi-character OFS (#1819) (#2063) 2026-05-17 12:45:49 -04:00
io-nr-progress-mod/0001
io-pprint/0001
io-ragged-implicit-header-csvlite/0001 Fix data dropped from ragged implicit-header TSV/CSV-lite input (#1749) (#2059) 2026-05-17 11:46:59 -04:00
io-ragged-implicit-header-tsv/0001 Fix data dropped from ragged implicit-header TSV/CSV-lite input (#1749) (#2059) 2026-05-17 11:46:59 -04:00
io-ragged-non-rfc-csv
io-rfc-csv
io-separator-aliases
io-skip-pass-comments
io-space-padding
io-spec-tsv
io-tsv-auto-unsparsify
io-uri-schemes/0001
io-utf8-alignment
io-utf8-bom
io-yaml-io Allow empty-string keys in JSON and YAML input (#2068) 2026-05-27 20:19:03 -04:00
mcp/help Add mlr mcp MCP server + agent playbook, with a --no-shell gate (#2098 PR7) (#2133) 2026-07-03 19:41:49 -04:00
mix-null-field-input
mix-number-formatting
no-shell Add mlr mcp MCP server + agent playbook, with a --no-shell gate (#2098 PR7) (#2133) 2026-07-03 19:41:49 -04:00
non-windows
output-colorization
repl
repl-help
script/0001
verb-altkv
verb-bar
verb-bootstrap
verb-case
verb-cat
verb-check
verb-count
verb-count-distinct
verb-count-similar
verb-cut
verb-cut-regexed
verb-decimate
verb-describe Add mlr describe schema/shape introspection verb (#2098 PR6) (#2132) 2026-07-03 18:43:49 -04:00
verb-fill-down
verb-fill-empty
verb-flatten-unflatten Fix issue #1983 (#2040) 2026-04-19 10:44:53 -04:00
verb-format-values
verb-fraction
verb-gap Tier-2 structured verb options: OptionSpec, initial migration (#2098) (#2111) 2026-07-03 14:27:23 -04:00
verb-grep
verb-group-by
verb-group-like/0001
verb-having-fields
verb-head Add new tail -n +N, head -n -N options (#2071) 2026-06-21 10:34:16 -04:00
verb-head-early-out/0002
verb-histogram
verb-int-float-stats1-step1
verb-join Apply join prefixes/rename to unpaired records (#1821) (#2062) 2026-05-17 12:35:58 -04:00
verb-join-mixed-format
verb-json-parse-json-stringify
verb-label
verb-latin1-to-utf8/0001
verb-merge-fields
verb-most-least-frequent
verb-nest
verb-nothing
verb-regularize
verb-remove-empty-columns
verb-rename
verb-rename-no-regex
verb-rename-regex
verb-reorder
verb-repeat
verb-reshape
verb-sample
verb-sec2gmt
verb-seqgen
verb-shuffle
verb-skip-trivial-records
verb-sort
verb-sort-within-records Add regexed field-selection to sort-within-records (#1964) 2026-04-19 11:35:58 -04:00
verb-sparsify
verb-split
verb-stats1
verb-stats1-percentile-interpolation
verb-stats1-regexed-field-names Fix Windows CI fail on PR #1994 (#2044) 2026-04-19 10:58:59 -04:00
verb-stats2
verb-step
verb-sub-gsub-ssub
verb-summary
verb-surv/0001
verb-tac
verb-tail Add new tail -n +N, head -n -N options (#2071) 2026-06-21 10:34:16 -04:00
verb-template
verb-top
verb-truncate
verb-uniq
verb-unspace
verb-unsparsify
verb-utf8-to-latin1/0001