Make MCP servers and skills personal, not managed - #438
Open
david-siqi-liu wants to merge 1 commit into
Open
Conversation
This was referenced Sep 1, 2026
david-siqi-liu
marked this pull request as ready for review
September 1, 2026 20:43
david-siqi-liu
force-pushed
the
david/managed-state-slots
branch
from
September 1, 2026 23:27
ba39bfa to
84859b6
Compare
david-siqi-liu
force-pushed
the
david/personal-mcp-skills
branch
from
September 1, 2026 23:28
ba90328 to
82c09bb
Compare
david-siqi-liu
force-pushed
the
david/managed-state-slots
branch
from
September 2, 2026 00:38
84859b6 to
e2ca8e2
Compare
david-siqi-liu
force-pushed
the
david/personal-mcp-skills
branch
from
September 2, 2026 00:39
82c09bb to
223b263
Compare
david-siqi-liu
force-pushed
the
david/managed-state-slots
branch
from
September 2, 2026 23:32
e2ca8e2 to
6cab5df
Compare
david-siqi-liu
force-pushed
the
david/personal-mcp-skills
branch
from
September 2, 2026 23:32
223b263 to
591ad29
Compare
david-siqi-liu
changed the base branch from
david/managed-state-slots
to
main
September 3, 2026 01:05
david-siqi-liu
force-pushed
the
david/personal-mcp-skills
branch
from
September 3, 2026 01:05
591ad29 to
b2e5ea5
Compare
An admin could publish `mcp_servers` and `skills` in the workspace's managed config, and every launch applied them to each developer's coding tools. That is the wrong owner: which MCP servers and skills a developer wants is a property of their machine and their project, not of workspace policy, and a managed launch silently rewrote registrations they had made themselves. Move both out of the managed config entirely. The manifest no longer reads, authors, serializes, or applies them; `ucode setup mcps` and `ucode setup skills` are gone, and the personal commands move to the top level as `ucode mcp` and `ucode skills`. A launch calls `migrate_off_managed_mcp_and_skills` once to drop the registrations a previous managed launch installed, so a developer isn't left with servers nobody owns. That migration unregisters what the marker recorded rather than diffing `mcp_servers`. The old apply path kept managed servers out of `mcp_servers`, so diffing that list found nothing to undo: the marker was cleared and the developer told the servers were removed while they stayed registered. A marker outlives the agent it names, so the migration only targets agents whose CLI is still installed. Unregistering shells out to that CLI, and a marker naming an agent the developer has since removed would make every launch die on `FileNotFoundError` before reaching the agent they actually asked for, with the markers still in place so the next launch failed the same way. `publish` keeps `mcp_servers` and `skills` in the update mask so publishing clears whatever a workspace already has, and it ignores those fields in a config file exported by an older ucode rather than rejecting the file. Co-authored-by: Isaac <no-reply@databricks.com>
david-siqi-liu
force-pushed
the
david/personal-mcp-skills
branch
from
September 3, 2026 02:32
b2e5ea5 to
3ceeae9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🥞 Stack (AIGTWY-4342 ucode configure)
ucode setupwith aucode configure-centered workflow #433ucode configurepath end to end #440Superseded: #437 (folded into #433, so the draft slot arrives together with its first writer).
What did you change, and why?
MCP servers and UC Skills were carried inside the managed config, which meant an admin publishing a
config could silently rewrite a developer's own MCP registrations. Both are per-developer settings,
so they come out of the managed path entirely and stay with the commands that own them,
ucode mcpand
ucode skills.for them.
ucode skillsmoves out from underucode configure, since it configures nothing managed.tests that only existed to cover it.
src/ucode/mcp.pythat unregisters servers a previous managedconfig had installed and then drops the
managed_mcp_serversmarker. That is the only part of thisPR that touches a developer's existing state rather than just deleting code. Two things about it
are load-bearing. It diffs from the marker list, not from the developer's
mcp_servers, becausethe old apply path deliberately kept managed servers out of that list. And it narrows the work to
agents whose CLI is still on PATH: a marker outlives the agent it names, unregistering shells out
to that agent's CLI, and this runs on the launch path, so a marker naming a since-uninstalled agent
would otherwise take down every launch with a
FileNotFoundErrorbefore the agent the developeractually asked for ever starts, markers still in place so the next launch fails the same way.
How do you know it works?
The MCP, skills, wizard, and CLI suites were reworked to the new boundary, including cases for the
upgrade path above: markers naming a mix of installed and uninstalled agents, markers naming only
uninstalled agents, and the skills variant. Each was checked against the unfixed source first and
fails there, so they exercise the launch crash rather than restating current behavior. Full unit
suite green locally at this layer, with one pre-existing exception,
test_e2e_user_agent.py'sgateway assertion, which fails identically without this PR's changes applied. The total test count
drops relative to
mainbecause the tests for the removed managed MCP and skills path are deletedwith it.