Project typed repeated query inputs through MCP #33

Closed
opened 2026-07-26 00:45:26 +00:00 by coilyco-ops · 2 comments
Member

Goal

Consume cli-guard's typed inline query contract so ward-mcp exposes accurate MCP tool schemas and preserves repeated query parameters on the wire.

Upstream engine: coilyco-flight-deck/cli-guard#260
First consumer: coilyco-bridge/deploy#218

Acceptance

  • ward-mcp pins the released cli-guard version containing typed, bounded, repeated, and mutually-exclusive inline query support.
  • Tool input schemas preserve integer, boolean, string-array, minimum, maximum, minItems, maxItems, and mutual-exclusion constraints from opcore.
  • Tool calls route scalar query inputs without changing existing behavior.
  • Array query inputs become repeated upstream keys in the caller's input order.
  • Query type, numeric bound, array-length, and mutual-exclusion violations fail before any upstream call.
  • End-to-end tests exercise tools/list plus tools/call against a local upstream for every new shape.
  • Existing flat string query specs remain compatible.
  • README and docs/FEATURES.md document the generic capability.
  • The repository gains the minimal tracked ward/Makefile dev-command surface required by fleet conventions before tests run, because the current repo has neither.

No Discord-specific policy belongs in ward-mcp. The deploy guardfile owns the concrete fields and bounds.

## Goal Consume cli-guard's typed inline query contract so ward-mcp exposes accurate MCP tool schemas and preserves repeated query parameters on the wire. Upstream engine: https://forgejo.coilysiren.me/coilyco-flight-deck/cli-guard/issues/260 First consumer: https://forgejo.coilysiren.me/coilyco-bridge/deploy/issues/218 ## Acceptance * ward-mcp pins the released cli-guard version containing typed, bounded, repeated, and mutually-exclusive inline query support. * Tool input schemas preserve integer, boolean, string-array, minimum, maximum, minItems, maxItems, and mutual-exclusion constraints from opcore. * Tool calls route scalar query inputs without changing existing behavior. * Array query inputs become repeated upstream keys in the caller's input order. * Query type, numeric bound, array-length, and mutual-exclusion violations fail before any upstream call. * End-to-end tests exercise `tools/list` plus `tools/call` against a local upstream for every new shape. * Existing flat string query specs remain compatible. * README and docs/FEATURES.md document the generic capability. * The repository gains the minimal tracked ward/Makefile dev-command surface required by fleet conventions before tests run, because the current repo has neither. No Discord-specific policy belongs in ward-mcp. The deploy guardfile owns the concrete fields and bounds.
Author
Member

Engineering checkpoint is pushed on feat/typed-query-33 at d9d293fa83d558dcd26033970eba304a8c23a33f.

Implemented:

  • tracked Makefile plus ward-routed build, test, vet, format, dependency-pin, and chart commands
  • MCP query routing through opcore.Args.QueryValues, preserving JSON scalar types and repeated array order
  • local-upstream tools/list and tools/call coverage for string, boolean, integer, number, string-array, bounds, required fields, repeated keys, and mutual exclusion
  • pre-upstream rejection coverage for type, numeric-bound, array-length, and mutual-exclusion violations
  • README and FEATURES updates

Validation passes without a local Go workspace: ward exec build, ward exec vet, ward exec test, ward exec helm-lint-chart, ward exec helm-template-clusterip, and ward exec helm-template-nodeport.

The checkpoint pins cli-guard commit 91378ee6bb7d3f259fbe4473a7d7c4ef77750b2a as pseudo-version v0.121.1-0.20260726010912-91378ee6bb7d. Main remains intentionally untouched until cli-guard publishes the release version and independent QA passes.

Engineering checkpoint is pushed on `feat/typed-query-33` at `d9d293fa83d558dcd26033970eba304a8c23a33f`. Implemented: * tracked Makefile plus ward-routed build, test, vet, format, dependency-pin, and chart commands * MCP query routing through `opcore.Args.QueryValues`, preserving JSON scalar types and repeated array order * local-upstream `tools/list` and `tools/call` coverage for string, boolean, integer, number, string-array, bounds, required fields, repeated keys, and mutual exclusion * pre-upstream rejection coverage for type, numeric-bound, array-length, and mutual-exclusion violations * README and FEATURES updates Validation passes without a local Go workspace: `ward exec build`, `ward exec vet`, `ward exec test`, `ward exec helm-lint-chart`, `ward exec helm-template-clusterip`, and `ward exec helm-template-nodeport`. The checkpoint pins cli-guard commit `91378ee6bb7d3f259fbe4473a7d7c4ef77750b2a` as pseudo-version `v0.121.1-0.20260726010912-91378ee6bb7d`. Main remains intentionally untouched until cli-guard publishes the release version and independent QA passes.
Author
Member

Release repin is pushed on feat/typed-query-33 at aecdc62cae9b4114a6ec1dcf909a694f6d4885ce.

The branch now pins released cli-guard v0.122.0 in go.mod, go.sum, the dependency-pin default, and the feature inventory. The temporary pseudo-version is gone.

Validation passes with no GOWORK: ward exec build, ward exec vet, ward exec test, ward exec helm-lint-chart, ward exec helm-template-clusterip, and ward exec helm-template-nodeport. The branch is clean and synchronized. Main remains untouched pending independent ward-mcp QA.

Release repin is pushed on `feat/typed-query-33` at `aecdc62cae9b4114a6ec1dcf909a694f6d4885ce`. The branch now pins released cli-guard `v0.122.0` in `go.mod`, `go.sum`, the dependency-pin default, and the feature inventory. The temporary pseudo-version is gone. Validation passes with no `GOWORK`: `ward exec build`, `ward exec vet`, `ward exec test`, `ward exec helm-lint-chart`, `ward exec helm-template-clusterip`, and `ward exec helm-template-nodeport`. The branch is clean and synchronized. Main remains untouched pending independent ward-mcp QA.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/mcp-beaver#33
No description provided.