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
feat(gateway): Phase C — FeatureSet invoke ACL + surfaced tools
Autonomous decisions:
- Keep session-enable all-tools expansion only when no FeatureSet is bound — preserves Phase A bootstrap path while member filter is authoritative once bound
- Add migration 019 surfaced column on feature_set_members — matches existing ALTER TABLE pattern, default 0
- Surface toggle UI only on selected tools in FeatureSetPanel — surfaced without include is meaningless
Signed-off-by: crimsonsunset <jsangio1@gmail.com>
Copy file name to clipboardExpand all lines: README.md
+13-8Lines changed: 13 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -77,7 +77,7 @@ Lightweight and cross-platform — built in Rust with Tauri 2, McpMux uses minim
77
77
}
78
78
```
79
79
80
-
**3.** Done. Every tool from every server is available in every client, right now.
80
+
**3.** Done. Connected clients see a small fixed meta-tool surface (~12 `mcpmux_*` tools). Backend tools are discovered via **`mcpmux_search_tools`** → **`mcpmux_get_tool_schema`** → **`mcpmux_invoke_tool`**, keeping context windows lean. Optionally surface individual hot-path tools into `tools/list` per FeatureSet.
81
81
82
82
McpMux routes calls to the right server, refreshes OAuth tokens automatically, and keeps credentials encrypted in your OS keychain — you never think about it again.
83
83
@@ -109,28 +109,33 @@ Create isolated Spaces — each with their own servers, credentials, and permiss
109
109
110
110
### Control What Each Client Can Do
111
111
112
-
Not every AI client should have the same power. Create Feature Sets — permission bundles that control exactly which tools, prompts, and resources a client can access. Build a "Read Only" set for cautious workflows, a "React Development" set with just GitHub and Filesystem, or a "Full Stack Dev" set with everything. Assign them per-client so each tool only goes where you want it.
112
+
Not every AI client should have the same power. Create Feature Sets — permission bundles that control exactly which tools a client can **invoke** (search + invoke ACL), plus optional per-tool **Surface in client** promotion for one-hop hot paths. Build a "Read Only" set for cautious workflows, a "React Development" set with just GitHub and Filesystem, or a "Full Stack Dev" set with everything. Assign them per-client so each tool only goes where you want it.
Routing everything through one gateway endpoint means connected AI clients can see every backend tool at session start — even when the project only needs a handful. Workspace bindings pin stable per-folder toolsets, but they do not cover one-off needs ("enable Firebase for the next 15 minutes") or discovery-driven workflows where the LLM picks servers as it goes.
118
+
Connected AI clients see a fixed ~12-tool meta surface instead of every backend tool definition. FeatureSets define what is **invokable**; optional **surfaced** tools (0–N per set) can be promoted into `tools/list` for one-hop hot paths. Workspace bindings pin stable per-folder toolsets; session enable/disable gates server activity without bloating context.
119
119
120
-
McpMux exposes a built-in `mcpmux_*` tool namespace so the LLM can introspect and reshape its own tool surface mid-conversation:
120
+
McpMux exposes a built-in `mcpmux_*` tool namespace for search → schema → invoke workflows:
121
121
122
122
1. Call **`mcpmux_list_servers`** — server-level manifest with per-server status: `enabled_via_binding`, `enabled_via_session`, `disabled_via_session`, or `inactive`.
123
-
2. Call **`mcpmux_enable_server`** or **`mcpmux_disable_server`** — toggle servers on or off. The gateway pushes `tools/list_changed` so the tool list refreshes without reconnecting.
124
-
3. Use **`scope: "session"`** (default) for ephemeral overrides that die with the MCP session, or **`scope: "workspace"`** to persistently add/remove a server from the workspace binding (workspace writes always require approval).
123
+
2. Call **`mcpmux_enable_server`** or **`mcpmux_disable_server`** — toggle servers on or off for the session or workspace.
|`mcpmux_get_tool_schema`| read | Load input schemas before invoke |
135
+
|`mcpmux_invoke_tool`| read | Invoke a backend tool by server_id + tool name |
131
136
|`mcpmux_enable_server`| write | Enable a server (session or workspace scope) |
132
137
|`mcpmux_disable_server`| write | Disable a server (session or workspace scope) |
133
-
|`mcpmux_create_feature_set`| write | Create a custom FeatureSet |
138
+
|`mcpmux_create_feature_set`| write | Create a custom FeatureSet (optional `surfaced_tools[]`) |
134
139
|`mcpmux_bind_current_workspace`| write | Bind the session's workspace root to FeatureSets |
135
140
136
141
In the desktop app: **Settings → Self-management tools** toggles the whole namespace and optional approval for session-scope overrides. **Workspaces → live folder inspector → Active session overrides** shows per-session enabled/disabled servers and lets you clear overrides with one click.
0 commit comments