Context
Governance over MCP tool calls exists on both dispatch paths today, but the two grew separately:
Plugin-tool bridge (src/plugins/mcp-bridge.ts)
MCP multiplexer (src/plugins/mcp-multiplexer/)
Observation
The multiplexer already establishes a fairly mature policy + audit vocabulary; the bridge is the less-governed of the two paths. If #230 and the multiplexer evolve independently we risk:
- Divergent schemas — two different config shapes for the same conceptual control (enable/allow/deny a tool).
- Two audit streams instead of one combined "what can Claude call, where, and was it allowed?" surface.
Proposal (for discussion)
Converge on one policy model + one audit chain across both paths:
@TerrysPOV — keen on your input before any SPEC
Your repo, your call — flagging the design question before either of us builds:
- One unified policy model across bridge + multiplexer, or keep them separate and just align vocabulary?
- Is contextual (channel / mode / session) scoping in scope, or is per-server / per-tool sufficient for the regulated posture you're targeting?
- Where should the shared policy schema live (settings block, plugin manifest, both)?
Refs #230, #31, #70.
Context
Governance over MCP tool calls exists on both dispatch paths today, but the two grew separately:
Plugin-tool bridge (
src/plugins/mcp-bridge.ts)signCall/verifyCall),pluginIdvalidation + fqn namespacing.MCP multiplexer (
src/plugins/mcp-multiplexer/)enabled(kill switch) andallowedToolsallow-list (~/.config/claudeclaw/mcp-proxy.json).AuditPolicy(settings.mcp.audit):enforce(fail-closed — "no log → no action", synchronous intent gate) vsbest-effort(default).mcp.tool_callaudit chain (src/observability/tool-call.ts), per-PTY identity + revocation, rate-limit, cost metrics (mcp-multiplexer: cost-tracking metrics on dispatch path #68), idempotent-tool cache (mcp-multiplexer: response caching for idempotent tools #69).Observation
The multiplexer already establishes a fairly mature policy + audit vocabulary; the bridge is the less-governed of the two paths. If #230 and the multiplexer evolve independently we risk:
Proposal (for discussion)
Converge on one policy model + one audit chain across both paths:
enabled,allowedTools,AuditPolicyenforce/best-effort) rather than introducing a parallel model.mcp.tool_callchain, so audit stays single-stream.@TerrysPOV — keen on your input before any SPEC
Your repo, your call — flagging the design question before either of us builds:
Refs #230, #31, #70.