# Reported issues for Labby

Pod holds 19 of 31 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [Labby](/mcp/labby).

## Most discussed

### Implement gateway enrichment hints for Code Mode upstreams

## Summary

Implement gateway enrichment hints for Code Mode upstream namespaces.

This issue is self-contained. The root body gives the implementation summary, acceptance criteria, review decisions, and validation. Follow-up comments on this issue contain the full implementation plan and the full text of the epic plus all child beads.

## Current Baseline Already Landed

Branch: `codex/codemode-upstream-description`

Commits already pushed:
- `e96a6ed1` — docs: save codemode upstream descriptio

[Read the thread](https://github.com/dinglebear-ai/labby/issues/154) · 2026-06-25 · closed · 9 comments

### Code Mode catalog stability: remaining hardening after #260 (permanent tool registry, visible-contract hashing, monotonic publication, notification coalescing)

## Context

#260 fixed the observed "Labby tools flapping": the gateway reconcile diff measured change against the **raw** `pool.healthy_tools()` set with no Code Mode filtering, so invisible upstream churn (an upstream becoming healthy, lazily discovering tools, the eager reload probe populating tool maps) flipped `tools_changed` and broadcast `notifications/tools/list_changed`. Clients rebuilt their connector namespace mid-turn and the in-flight call hit a stale `LABBY.codemode` binding — fail

[Read the thread](https://github.com/dinglebear-ai/labby/issues/261) · 2026-07-24 · closed · 3 comments

### Emit outputSchema + structuredContent for directly-listed tools; preserve structured content through Code Mode

## Summary

Emit `outputSchema` + `structuredContent` for **directly-listed** tools, preserve structured content end-to-end through Code Mode, and surface output shapes in the catalog for hidden tools.

## The Code Mode nuance (why this is not blanket)

- Under Code Mode, raw tools are hidden from `list_tools` — the client only sees `execute`/`codemode`. So per-tool `outputSchema` does **not** reach the client for hidden tools; it belongs in the **catalog** (`codemode.describe`) instead.
- Insid

[Read the thread](https://github.com/dinglebear-ai/labby/issues/210) · 2026-07-10 · closed · 2 comments

### Generalize MRTR input overlay for confirmations and primitive parameter completion

## Summary

Generalize Labby's current destructive-confirmation MRTR flow into a policy-driven input overlay for upstream and synthetic tools.

The overlay should support:

1. destructive confirmation;
2. missing primitive parameter completion;
3. action-enum tools, including a two-round action-then-fields flow;
4. Code Mode-hidden MCP App callback calls without a separate hard-block path.

This is a gateway-originated overlay. It complements upstream-to-downstream request relay: the gateway ask

[Read the thread](https://github.com/dinglebear-ai/labby/issues/208) · 2026-07-10 · open · 2 comments

### Add rmcp-openapi support for OpenAPI-derived MCP upstreams

## Summary

Research `rmcp-openapi` and implement a Lab integration path for turning OpenAPI specs into MCP servers/tools through the gateway/upstream runtime.

`rmcp-openapi` is a Rust crate for exposing OpenAPI definition endpoints as MCP tools using the official Rust MCP SDK. The current docs.rs surface exposes a `Server` that implements `rmcp::ServerHandler`, converts OpenAPI operations into tools via `ToolGenerator`, supports dynamic `ToolFilter` / `ResponseTransformer`, and carries runtime

[Read the thread](https://github.com/dinglebear-ai/labby/issues/93) · 2026-06-03 · open · 2 comments

### Node runtime split and role-specific rollout

## Summary

Implement `docs/superpowers/plans/2026-04-24-node-runtime-split.md`. Split `lab serve` into explicit controller and node runtime paths, stop deployed nodes from initializing controller-only surfaces, build role-specific controller/node artifacts, make `nodes update` verify real readiness and WebSocket reconnects, then prove the path with full verification and live rollout.

## Beads

Epic: `lab-686q`

## Plan

- `docs/superpowers/plans/2026-04-24-node-runtime-split.md`
- `docs/NODE_R

[Read the thread](https://github.com/dinglebear-ai/labby/issues/30) · 2026-04-25 · closed · 2 comments

### Param-completion elicitation for action-enum tools (post-action-resolution primitive projection)

## Summary

Param-completion elicitation for **action-enum tools** — the missing-primitive-param overlay from #208's `Fields` rule, adapted to Labby's nested-action-with-enum tool pattern.

## The interaction (why this earns its own issue)

- MCP elicitation schemas are restricted to a **flat object of primitives** — no `oneOf`/`if-then`, no nested objects/arrays.
- Most Labby / rmcp-template servers shape tools as `{ action: enum, <action-specific params> }`, so a single form cannot express the

[Read the thread](https://github.com/dinglebear-ai/labby/issues/216) · 2026-07-10 · closed · 1 comment

### Spike: evaluate rmcp `tower` layers for the dispatch gate chain + elicitation overlay

## Summary (spike)

Evaluate rmcp's `tower` feature for restructuring the dispatch gate chain and hosting the #208 elicitation overlay as composable layers.

## Context

- Gates in `crates/labby/src/mcp/call_tool.rs` are hand-rolled early returns (`codemode → visibility → action → hidden → scope → elicitation → builtin → upstream`). #208 bolts the overlay onto this chain.
- rmcp exposes a `tower` feature (`dep:tower-service`), but it is unclear whether that is **protocol-level** request middlewa

[Read the thread](https://github.com/dinglebear-ai/labby/issues/215) · 2026-07-10 · closed · 1 comment

## Most recent

### Retain and page oversized Code Mode results by handle

## Summary

Add an optional retained-result path for Code Mode outputs that are expensive, rate-limited, non-idempotent, or inherently too large to regenerate safely after the response envelope truncates them.

This is Phase 2 of #217. The primary behavior remains reducing inside the sandbox before returning. Retained paging is a selective fallback, not the default result path.

## Motivation

Re-running a tool with better projection code is acceptable for cheap idempotent reads. It is a poor fa

[Read the thread](https://github.com/dinglebear-ai/labby/issues/274) · 2026-07-27 · open · 0 comments

### Permanent synthetic-tool registry and full client-visible descriptor hashing

## Context

#261 fixed the production symptom and most of the catalog-stability plan through #263, #264, and #267:

- detached reload cancellation is deterministic;
- catalog changes are evaluated per peer and route scope;
- notifications are coalesced and withheld during open tool turns;
- publication ordering was verified to be serialized by the existing mutation lock.

Two structural items from #261 remain. The release PR closed the umbrella issue, but #264 explicitly notes that full descript

[Read the thread](https://github.com/dinglebear-ai/labby/issues/273) · 2026-07-27 · closed · 0 comments

### Streamable HTTP over Unix sockets with optional SO_PEERCRED authentication

## Summary

Support connecting to co-located MCP upstreams over Unix domain sockets using rmcp 3's `transport-streamable-http-client-unix-socket` transport, with optional filesystem and `SO_PEERCRED` authentication for trusted local services.

## Current state

Labby 1.7.0 uses rmcp `3.0.0-beta.2` and enables only `transport-streamable-http-client-reqwest`. Upstream configuration and connection code currently expect HTTP(S) URLs. No Unix-socket client, listener, socket-path configuration, or pee

[Read the thread](https://github.com/dinglebear-ai/labby/issues/218) · 2026-07-11 · closed · 0 comments

### Decide rmcp Tower and request-state adoption

## Summary

Decide whether Labby should adopt two rmcp 3 features that are available but not enabled: protocol-level Tower service composition and `request-state` integrity protection.

This issue consolidates the former #215 Tower spike. The basic research question is now answered; the remaining work is an adoption decision backed by a small prototype.

## 1. Tower protocol service

### Finding

rmcp `3.0.0-beta.2` exposes `service::tower::TowerHandler<S, R>`. It implements rmcp's protocol `Ser

[Read the thread](https://github.com/dinglebear-ai/labby/issues/214) · 2026-07-10 · open · 0 comments

### Set ToolAnnotations on builtin/gateway tools + propagate upstream annotations downstream

## Summary

Set `ToolAnnotations` on Labby's own tools and propagate upstream annotations through the aggregated `list_tools`.

## Current state

- Annotations are **consumed** to derive `destructive` (`crates/labby-gateway/src/upstream/pool/helpers.rs:368` — reads `destructive_hint`, falls back to `!read_only_hint`, **fails closed**).
- But Labby's own builtin/meta tools likely do **not** set hints, and upstream annotations may not be propagated to the downstream client.

## Plan

- Annotate bu

[Read the thread](https://github.com/dinglebear-ai/labby/issues/212) · 2026-07-10 · closed · 0 comments

### URL-mode elicitation (elicit_url / UrlElicitationParams)

## Summary

Add URL-mode elicitation (`elicit_url` / `ElicitRequestParams::UrlElicitationParams`) alongside the existing Form path.

## Motivation

- Only Form elicitation is used today (`crates/labby/src/mcp/elicitation.rs`). URL mode suits auth-style "open this URL" flows and MCP App clients that prefer a hosted form. Directly addresses #208 open question 3.

## Plan

- Add an `elicit_url(context, message, url, elicitation_id)` helper.
- Gate on `ElicitationCapability.url` via `supported_elici

[Read the thread](https://github.com/dinglebear-ai/labby/issues/213) · 2026-07-10 · closed · 1 comment

### Resource subscriptions passthrough (enable_resources_subscribe + resources/updated aggregation)

## Summary

Add resource subscription passthrough: advertise `resources/subscribe`, route subscribe/unsubscribe to the owning upstream, and fan `resources/updated` notifications back to subscribed downstream clients.

## Current state

- `crates/labby/src/mcp/server.rs:169` enables `resources` + `resources_list_changed` but **not** `enable_resources_subscribe()`.
- The stdio bridge already forwards `subscribe`/`unsubscribe` (`bridge.rs:20`), so plumbing is partial.

## Plan

- Add `.enable_resou

[Read the thread](https://github.com/dinglebear-ai/labby/issues/211) · 2026-07-10 · closed · 1 comment

### Destructive-action gate should honor `lab:admin` scope — coordinate with elicitation overlay (#208)

## Summary

Two coupled gate problems around destructive upstream tools. Filing this as the coordination point between the elicitation-overlay work (#208) and the standing admin-scope bug.

- **#208** makes the widget-callback bypass path *attempt elicitation* instead of hard-returning `confirmation_required`.
- **`docs/destructive-gate-admin-scope-bug.md`** documents that the Code Mode destructive gate ignores `lab:admin` entirely — it keys off `surface.allow_destructive_actions()`, driven pure

[Read the thread](https://github.com/dinglebear-ai/labby/issues/209) · 2026-07-10 · open · 0 comments

### Code Mode bypasses the confirmation_required gate for destructive upstream tools

## Summary

Tools classified as destructive are refused on the widget-callback path but execute without challenge through Code Mode. The confirmation gate is enforced per-transport rather than per-tool, so `codemode` is an unauthenticated bypass around it.

This is not theoretical — it was used (unintentionally) to create a real GitHub issue during a debugging session on 2026-07-10.

## Reproduction

### 1. Direct call is refused

```jsonc
// labby::issue_write
{"method":"create","owner":"jmagar

[Read the thread](https://github.com/dinglebear-ai/labby/issues/207) · 2026-07-10 · closed · 0 comments

### [codemode] Thread upstream outputSchema into ToolDescriptor so Output types aren't `unknown`

Parent: #185 · Separate track

## Reality — smaller than it looks
The pipeline already supports output types end to end:
- `ToolDescriptor.output_schema: Option<Value>` **exists** (types.rs L106); the `ToolDescriptor::tool(…, output_schema)` ctor takes it (L135–140).
- `ts_signatures::generate_tool_types(…, output_schema)` emits a real `Output` type and only falls back to `"unknown"` when the schema is `None` (ts_signatures L74–76).

So every tool's `Output` is `unknown` for exactly one reason: 

[Read the thread](https://github.com/dinglebear-ai/labby/issues/193) · 2026-07-04 · closed · 1 comment

### [codemode] Thread CallContext (execution_id + ordinal) to host.call_tool for _meta enrichment

Parent: #185 · Depends on: #190, #191

## Goal
Enrich the same `_meta` with `execution_id` + a monotonic `call_ordinal` so every sandbox-originated upstream call auto-correlates to its Code Mode run and to the `calls[]` telemetry — no sandbox-authored trace, no author discipline.

## Decision (locked)
Thread a **neutral `CallContext` param** into `CodeModeHost::call_tool` rather than smuggling meta through `params` — preserves the trait's deliberately neutral vocabulary (host.rs L5–6, L78–85).

[Read the thread](https://github.com/dinglebear-ai/labby/issues/192) · 2026-07-04 · open · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/dinglebear-ai/labby/issues).
