You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Current follow-up focus: previous read/write split only separated tool names and operation enums in some builders. It still leaves mixed mode descriptions and write-only schema fields visible on read tools. Examples: `pkg/mcp/builders/kafka/topics.go` and `pkg/mcp/builders/pulsar/namespace.go`; same class can exist in other split builders. Connector review can still treat this as a mixed surface because `tools/list` exposes write verbs/examples/parameters through read tools.
34
+
33
35
Static `mcp.NewTool(...)` definitions found under `pkg/`: 36 tool definitions plus dynamic Pulsar Functions-as-Tools.
34
36
35
37
Current gaps:
@@ -39,6 +41,7 @@ Current gaps:
39
41
- Only `sncloud_resources_apply` and `sncloud_resources_delete` currently set `WithToolAnnotation`; `apply` sets title only.
40
42
- Dynamic Pulsar Functions-as-Tools in `pkg/mcp/pftools/manager.go` create tools without title/read-only/destructive annotations.
41
43
- Many admin tools multiplex read and write operations through one `operation` parameter. Claude review criteria says mixed read/write catch-all tools can be rejected even if description documents safe/unsafe operations.
44
+
- Some already-split tools still have mixed descriptions and schemas. Mode-specific enum is not enough; read tools must not expose write operations, examples, or write-only parameters.
- read tools do not expose known write-only parameters
463
+
- read tool descriptions do not mention known write-only operations, examples, or destructive verbs for that family
464
+
- write tool schemas do not expose read-only-only parameters unless genuinely shared
447
465
- StreamNative Cloud/context/log/resource tools have valid annotations.
448
466
- PFTools dynamic tool creation has valid annotation.
449
467
- Operation validation rejects read operations on write tools and write operations on read tools.
450
468
451
-
Optional static test:
469
+
Static guard:
452
470
453
471
- Build all feature sets and assert no `operation` enum contains both read and write verbs in one tool.
472
+
- For split tool families, assert mode-specific schema/description purity with family-specific allow/deny lists.
454
473
455
474
## Risks
456
475
@@ -460,12 +479,12 @@ Optional static test:
460
479
- Some current tools may have read-only-mode logic embedded in handlers; after split, registration and handler validation must both enforce mode to prevent write leakage.
461
480
-`mcp-go` default annotations are unsafe for compliance because title empty and destructive default true.
462
481
463
-
## Questions to confirm
482
+
## Confirmed decisions
464
483
465
-
1. Can we remove legacy mixed tool names from default registration, accepting breaking tool-name changes for Claude readiness?
466
-
2. Should we add an opt-in legacy compatibility flag, disabled by default, or avoid compatibility layer entirely?
467
-
3. For consume tools, should we conservatively classify as destructive, or implement a true non-mutating read variant first?
468
-
4. Should session-only context changes (`sncloud_context_use_cluster/reset`) be marked destructive for Claude safety?
484
+
- Fix all current mixed read/write surfaces, not only `kafka/topics.go` and `pulsar/namespace.go`.
485
+
- Do not preserve old mixed tool names or old mixed builder/schema patterns.
486
+
- Runtime-visible docs must be updated with read/write split and must avoid mixed read/write wording.
487
+
- Conservative safety annotations are acceptable for ambiguous side-effect tools unless implementation proves true read-only behavior.
0 commit comments