Skip to content

Commit 01b60e3

Browse files
committed
docs(planning): record Phase 5 QA pass and PR #155
Reconcile invoke planning docs with manual QA through section 5 and opt-in filter truncation at 433e7bd. Signed-off-by: crimsonsunset <jsangio1@gmail.com>
1 parent 433e7bd commit 01b60e3

2 files changed

Lines changed: 15 additions & 11 deletions

File tree

docs/planning/meta-gateway-invoke-qa.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ One-session checklist for validating Phases A–C (search → schema → invoke,
1414
- [x] Cursor → MCP → **Reload tools**
1515
- [x] Confirm McpMux endpoint: `http://localhost:45818/mcp`
1616
- [ ] Have at least one OAuth server (GitHub) **installed and connected** but **inactive** in session (for enable-flow tests) — github is `enabled_via_binding`; use session disable for test 2
17+
- [x] Workspace binding with GWorkspace (or target server) configured in UI — **not** via agent `mcpmux_bind_current_workspace`
1718
- [ ] Optional for Phase C tests: create a FeatureSet with 1–2 GitHub tools, bind to workspace; leave surfaced off until test 8
1819

1920
**Tester:** Cursor agent (Composer)
2021
**Date:** May 25, 2026
21-
**McpMux version / commit:** `feat/meta-gateway-invoke` @ `993f378`
22+
**McpMux version / commit:** `feat/meta-gateway-invoke` @ `433e7bd` (PR [#155](https://github.com/mcpmux/mcp-mux/pull/155))
2223

2324
---
2425

@@ -149,8 +150,8 @@ Paste rough char count.
149150

150151
| Check | Pass | Fail | Notes |
151152
| ----- | ---- | ---- | ----- |
152-
| Full backend response returned | || |
153-
| No truncation metadata without filter | || Design: opt-in filter only (May 25) |
153+
| Full backend response returned | || GWorkspace `list_drive_items` `page_size: 100` → 100 items + `nextPageToken` |
154+
| No truncation metadata without filter | || Plain text only; no `{ returned, total, truncated }` (opt-in filter @ `433e7bd`) |
154155

155156
---
156157

@@ -293,8 +294,8 @@ Rules: McpMux meta tools only, read schemas before invoke, note truncation if an
293294

294295
| Area | Result |
295296
| ---- | ------ |
296-
| Phase A — meta invoke core | Pass ☐ Fail |
297-
| Phase B — result shaping | ☐ Pass ☐ Fail |
297+
| Phase A — meta invoke core | Pass ☐ Fail |
298+
| Phase B — result shaping | ☐ Pass ☐ Fail (section 5 pass; section 6 pending) |
298299
| Phase C — ACL + surfaced | ☐ Pass ☐ Fail ☐ Skipped |
299300
| Overall | ☐ Ship ☐ Block |
300301

docs/planning/meta-gateway-invoke.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
**Status:** Implemented on branch — manual QA in progress ([`meta-gateway-invoke-qa.md`](./meta-gateway-invoke-qa.md))
55
**Branch:** `feat/meta-gateway-invoke`
66
**Base branch:** `main`
7-
**Issue:** TBD — file after planning review
7+
**Issue:** [#155](https://github.com/mcpmux/mcp-mux/pull/155)
88
**Depends on:** [`dynamic-mcp-toggle-meta-tools.md`](./dynamic-mcp-toggle-meta-tools.md) (session overrides + meta-tool registry); benefits from workspace bindings / FeatureSets from PR #151
99
**Supersedes:** Token-budget approach in [`tool-level-session-pin.md`](./tool-level-session-pin.md) — pin filtered a bloated `tools/list`; this doc replaces that model with a fixed meta surface + invoke path. Session pin may return as an invoke ACL in Phase F (very optional, last).
1010
**Unblocks:** Agent-usable McpMux sessions at scale (240+ backend tools installed, ~12 tools in client context); homelab + multi-clone installs without context-window collapse
@@ -164,7 +164,7 @@ Prompts and resources: unchanged — still materialized per grants. Invoke model
164164
| ---- | ------- | ------ |
165165
| `crates/mcpmux-gateway/src/services/tool_discovery.rs` | Index + search + schema lookup over Space tool features | ✅ Done |
166166
| `crates/mcpmux-gateway/src/services/meta_tools/invoke.rs` | `InvokeToolTool` impl — permission check, routing, error mapping, result shaping | ✅ Done |
167-
| `tests/rust/tests/integration/meta_gateway_invoke.rs` | Search, schema, invoke, permission deny, surfaced tools, direct backend call rejected | ✅ Done (13 tests) |
167+
| `tests/rust/tests/integration/meta_gateway_invoke.rs` | Search, schema, invoke, permission deny, surfaced tools, direct backend call rejected, filter shaping | ✅ Done (14 tests) |
168168
| `docs/planning/meta-gateway-invoke-qa.md` | Manual QA runbook for Phases A–C | ✅ Done |
169169
| `docs/planning/meta-gateway-invoke.md` | This doc | ✅ Done |
170170

@@ -192,7 +192,7 @@ Prompts and resources: unchanged — still materialized per grants. Invoke model
192192
### Phase A — Meta invoke core
193193

194194
**Effort:** ~3–4 days
195-
**Status:** ✅ Implemented — manual QA sections 0–1 pass; sections 2–4 pending ([`meta-gateway-invoke-qa.md`](./meta-gateway-invoke-qa.md))
195+
**Status:** ✅ Implemented — manual QA sections 0–4 pass; section 5 pass; section 6 pending ([`meta-gateway-invoke-qa.md`](./meta-gateway-invoke-qa.md))
196196

197197
- [x] `ToolDiscoveryService` — build index from Space features; search by query + optional `server_id`; return matches at `detail_level`
198198
- [x] `mcpmux_search_tools` meta tool — pagination (`limit`, `cursor`), `detail_level` enum
@@ -209,7 +209,7 @@ Prompts and resources: unchanged — still materialized per grants. Invoke model
209209
### Phase B — Result shaping on invoke
210210

211211
**Effort:** ~2 days
212-
**Status:** ✅ Implemented — manual QA sections 5–6 pending
212+
**Status:** ✅ Implemented — manual QA section 5 pass; section 6 pending
213213

214214
- [x] Extend `mcpmux_invoke_tool` args with optional `filter: { max_rows?, max_bytes?, fields?, format? }`
215215
- [x] Post-process JSON/text results in gateway when `filter` is provided
@@ -316,6 +316,8 @@ This doc is the source of truth for the meta-gateway invoke model. Phases A–C
316316

317317
**Design revision (May 25, 2026):** Removed default smart truncation — `filter` is opt-in only. Rationale: plain-text MCP backends (GWorkspace) don't map cleanly to JSON row truncation; agents should explicitly bound payloads when needed.
318318

319+
**QA ergonomics (May 25, 2026):** Bind FeatureSets in Workspaces UI before agent QA — session enable alone is insufficient without binding ACL. Do **not** call `mcpmux_bind_current_workspace` during routine QA (triggers Space-wide approval modal). Reload MCP tools after UI binding changes.
320+
319321
**Manual QA progress (May 25, 2026):**
320322

321323
| QA section | Result | Notes |
@@ -325,5 +327,6 @@ This doc is the source of truth for the meta-gateway invoke model. Phases A–C
325327
| 2 — Fail-closed + recovery | ✅ Pass | Session disable → actionable error → enable → retry |
326328
| 3 — Search detail levels + compact schema | ✅ Pass | compact omits top-level description only |
327329
| 4 — Session toggle (list size unchanged) | ✅ Pass | search empty when disabled; 10 meta tools stable |
328-
| 5 — Pass-through without filter (Phase B) | ⬜ Pending | invoke without filter → full backend response, no metadata |
329-
| 6 — Explicit filter (Phase B) | ⬜ Pending | primary truncation test path |
330+
| 5 — Pass-through without filter (Phase B) | ✅ Pass | GWorkspace `list_drive_items` @ `433e7bd`: 100 items, ~45k chars, no metadata |
331+
| 6 — Explicit filter (Phase B) | ⬜ Pending | `max_rows` / `max_bytes` with metadata |
332+
| 7–11 | ⬜ Pending | |

0 commit comments

Comments
 (0)