uvcs_doctor
Check cm, workspace, and UVCS MCP configuration.
Takes no parameters.
io.github.ProAnimaPublished by GitHub account ProAnimav1.4.1Updated Nov 2, 2026
Safe Plastic SCM / Unity Version Control MCP: history, review, merge preview, and guarded writes.
Local MCP server that lets an AI assistant inspect and safely modify a Plastic SCM / Unity Version Control workspace through the cm CLI.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
Safe MCP server for Plastic SCM, Unity Version Control, and Unity DevOps Version Control source-control workspaces (cm 10.0.16.6656+, including 11.x).
UVCS MCP connects AI IDEs and coding agents to the local cm CLI through a fixed allowlist of documented SCM commands. It helps agents inspect source-control workspace state, prepare changes, create branches and labels, run guarded checkins, and perform merges without arbitrary shell access.
Current release: 1.4.1. Supported cm clients: 10.0.16.6656 and newer, including Unity Version Control / Unity DevOps Version Control 11.x.
cm CLI. init finds it on PATH or in the standard install folders and writes its absolute path; otherwise pass --cm=<path>;cm client with access to the workspace server.UVCS MCP is not a Unity Editor automation server. It does not control scenes, GameObjects, Play Mode, Unity packages, editor windows, builds, or runtime objects.
It works with the Plastic SCM / Unity Version Control cm CLI and focuses on source-control workflows: status, pending changes, branches, labels, checkins, locks, diffs, and merges.
For one workspace, start with the guarded profile:
The preview shows only the uvcs entries, the target files, and whether each file would be created, merged, or left unchanged. Project files such as .cursor/mcp.json go into the workspace folder; pass --project-dir=<folder> to put them elsewhere. Remove --print-config to apply it, then validate the result:
Restart the MCP client, then call:
Use readonly when inspection is sufficient. Use standard only for trusted or disposable workspaces where repository identity pinning is intentionally not required.
Configure the MCP client to auto-approve only read-only tools and to ask you before every *_confirm tool. See Clients.
Ask your AI IDE to install this MCP server from the GitHub repository URL.
For example:
Use a clone only when client configuration should run that checkout instead of the npm package:
Always pass --workspace (or --project-dir): project files are written into the workspace folder, and init refuses to write them into the uvcs-mcp folder itself. Preview first with --print-config.
Restart your MCP client, then ask it to run:
Windows:
macOS:
Linux:
Replace cursor with your client, or list several separated by commas. If cm is not found, add --cm=/path/to/cm. On macOS this matters for GUI clients, which do not inherit the shell PATH; init writes the absolute cm path as UVCS_CM_PATH for that reason.
init validates every target before writing. A malformed or JSONC config aborts the run with nothing written, unless --skip-invalid is passed, which skips that client and prints the entry to add by hand. Changed files are backed up as <file>.<YYYYMMDDHHmmss>.bak; unchanged files are not rewritten. Run uvcs-mcp init --help for every option.
On native Windows npx is the npx.cmd shim. Claude Code, Claude Desktop, Cursor, Codex 0.59+, Kiro, and OpenCode resolve it themselves. For Antigravity and Windsurf / Devin Desktop, or if a client reports spawn npx ENOENT, use "command": "cmd" with "args": ["/c", "npx", "-y", "@proanima/[email protected]"]. See Clients.
Every environment variable is described in Configuration.
The server is listed in the official MCP Registry as io.github.ProAnima/uvcs-mcp. Clients and directories that read the registry can install it from there; it still needs a local cm CLI and a workspace path (UVCS_WORKSPACE).
.mcp.json; init also prints the equivalent claude mcp add --scope user command)See Clients for file locations.
readonly; an unrecognized UVCS_MCP_MODE also means readonly.UVCS_MCP_MODE=standard.*_prepare followed by the matching *_confirm, and tools carry MCP annotations so clients can auto-approve reads and require approval for writes.paths; a path-scoped checkin adds the .meta partner of every selected Unity asset and refuses assets whose .meta is still private.uvcs_merge does not start a merge that the preview reports as conflicting.cm would read as options (leading -) are rejected, and item paths cannot contain the wildcards * or ?.cm runs without a shell and with stdin closed, under separate read and write timeouts and an output limit.cm, arbitrary shell execution, and raw cm api startup are not exposed.UVCS_AUDIT_LOG=/path/to/uvcs-mcp-audit.jsonl.uvcs_doctoruvcs_policy_statusuvcs_setup_statusuvcs_workspace_statusuvcs_pending_changesuvcs_branch_infouvcs_locksuvcs_checkout_prepare / uvcs_checkout_confirmuvcs_release_checkout_prepare / uvcs_release_checkout_confirmuvcs_unity_meta_diagnosticsuvcs_style_rulesuvcs_style_setup_checkuvcs_style_init_prepare / uvcs_style_init_confirmuvcs_name_previewuvcs_release_planuvcs_diff_fileuvcs_changeset_diffuvcs_revision_diffuvcs_file_historyuvcs_annotateuvcs_branch_listuvcs_label_listuvcs_merge_previewuvcs_cleanup_candidatesuvcs_branch_safety_reportuvcs_update_workspace_prepare / uvcs_update_workspace_confirmuvcs_changeset_analyticsuvcs_add_prepare / uvcs_add_confirmuvcs_undo_prepare / uvcs_undo_confirmuvcs_branch_create_prepare / uvcs_branch_create_confirmuvcs_label_create_prepare / uvcs_label_create_confirmuvcs_switch_workspace_prepare / uvcs_switch_workspace_confirmuvcs_merge_prepare / uvcs_merge_confirmuvcs_checkin_prepare / uvcs_checkin_confirmRead-only tools answer "what changed" questions in every safety profile:
uvcs_changeset_diff lists items added, changed, moved, or deleted in a changeset (cs:123), a branch (/main/task), a shelve, or between two changesets or labels, and flags Unity assets added, moved, or deleted without their .meta (and the reverse).uvcs_revision_diff returns a unified line diff of one file for a changeset, between two revisions, or against the workspace copy.uvcs_file_history and uvcs_annotate show who changed a file or a line, and when.uvcs_branch_list and uvcs_label_list find branches and labels by name, owner, date, parent, or branch.uvcs_merge_preview reports what a merge would bring and which items conflict, into the workspace or, with destination, into any branch on the server, without merging.uvcs_checkin_prepare accepts paths to check in only the user's files or folders. Every selected Unity asset brings its .meta file along, new parent folders that the change needs are listed as dependencies, and the token is invalidated if a selected file is edited again before confirm.uvcs_checkout_prepare checks files out before editing. When the server has a lock rule for them (lock.conf), this takes the exclusive lock that protects scenes, prefabs, and other binary assets; files locked by someone else are refused.uvcs_release_checkout_prepare releases checkouts of files whose content did not change. Modified files keep their checkout and their edits until they are checked in.uvcs_locks accepts paths and a scope (all, user, workspace).The package ships an agent skill (SKILL.md) that teaches Claude Code, Codex, Cursor, OpenCode, Gemini CLI, and other SKILL.md agents when and how to use these tools, including the prepare/confirm workflow and Unity .meta rules:
See Agent Skill for every agent, project-scope installs, and the marketplace ZIP.
Use a fleet manifest to configure one MCP server for up to 50 named workspaces:
Start from templates/fleet/workspaces.example.json. See Multi-Workspace and Fleet Work for safety profiles and the recommended prepare-all/confirm-each workflow.
In fleet mode every tool call requires an explicit workspace selector. Use --fleet-layout=isolated only when you prefer one MCP process per workspace.
Validate every configured workspace before restarting the client:
For mass work, inspect every target first, prepare all writes, present one combined plan, and confirm each workspace independently. Cross-repository operations are not atomic.
Run the real Plastic SCM smoke test against a disposable or safe workspace:
The smoke test creates temporary branches, labels, checkins, and a merge through MCP tools.
Ian Panaev, ProAnimaStudio, 2026. Contact: [email protected].
Source: README.md at commit fa4058a
Check cm, workspace, and UVCS MCP configuration.
Takes no parameters.
Show the effective workspace identity, safety profile, allowlists, write limits, and mass-work guidance.
Takes no parameters.
Show safety policy and branch/checkin/release naming setup in one place.
Takes no parameters.
Return concise workspace status.
Takes no parameters.
Return full pending changes from cm status.
Takes no parameters.
Return current branch information.
Takes no parameters.
List exclusive locks (cm lock list). Without paths, the list covers every repository on the server; pass paths to check specific files in this workspace.
pathsscopeDetect common Unity asset/.meta mismatches in the workspace.
Takes no parameters.
Return workspace naming and release style rules.
Takes no parameters.
Check whether workspace naming/checkin/release style rules exist. If missing, guide the model to ask the user to create them before branch work.
Takes no parameters.
Create .uvcs-mcp/style.json with branch naming, checkin message, and release conventions. Requires prepare/confirm. Returns a short-lived confirmation token.
presetoverwritebaseBranchversionFilebranchPrefixCreate .uvcs-mcp/style.json with branch naming, checkin message, and release conventions. Requires prepare/confirm. Confirms and executes a prepared operation. Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequiredPreview a branch name or checkin message from workspace style rules.
kindrequiredtyperequiredtitlesummarybaseBranchPlan a major, minor, or patch release branch, label, and comments from workspace style rules. Read-only.
projectNamereleaseTypecurrentVersionreleaseVersionReturn a unified line diff of one pending file: the revision loaded in the workspace against the file on disk. Output longer than 200000 characters is truncated. Read-only.
contextfilePathrequiredList the items added, changed, moved, or deleted in a changeset, label, shelve, or branch, or between two changesets/labels, with Unity .meta pairing warnings. Read-only.
sourcerequiredmaxItemscompareToReturn a unified line diff of one text file between two revisions, or between a revision and the workspace copy. Pass changeset to see what that changeset changed in the file. Output longer than 200000 characters is truncated. Read-only.
tofromcontextfilePathrequiredchangesetList the revisions of a file or directory, newest first, with changeset, branch, date, owner, and comment. Dates use the cm client locale format (cm history has no date format option). Read-only.
filePathrequiredmaxResultsShow who last changed each line of a text file and in which changeset (blame). Binary files cannot be annotated. Read-only.
filePathrequiredmaxLinesrevisionstartLineList branches, newest first, with owner, parent branch, head changeset, and comment. Read-only.
ownersinceparentnameLikemaxResultsList labels, newest first, with labeled changeset, branch, owner, and comment. Read-only.
ownersincebranchnameLikemaxResultsPreview a merge without changing anything: files that would be taken from the source, items added/moved/deleted, and conflicts. Without destination the target is the workspace branch; with destination the preview is computed on the server for that branch. Read-only.
sourcerequiredmaxItemsdestinationUpdate the workspace to the latest changeset of its branch. Local edits to files changed upstream can produce merge conflicts. Requires prepare/confirm. Returns a short-lived confirmation token.
Takes no parameters.
Update the workspace to the latest changeset of its branch. Local edits to files changed upstream can produce merge conflicts. Requires prepare/confirm. Confirms and executes a prepared operation. Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequiredAnalyze changesets over an optional date, branch, owner, or comment filter. Read-only.
ownersinceuntilbranchmaxResultscommentLikeRead-only helper that lists temporary/agent branch cleanup candidates for manual review. It never deletes branches or changesets.
patternsmaxResultsRead-only helper that reports current branch, pending changes, and recent changesets before risky branch, merge, or cleanup work.
branchrecentChangesetsAdd a path to Plastic SCM / UVCS version control recursively. For Unity assets also add the matching .meta file. Requires prepare/confirm. Returns a short-lived confirmation token.
itemPathrequiredAdd a path to Plastic SCM / UVCS version control recursively. For Unity assets also add the matching .meta file. Requires prepare/confirm. Confirms and executes a prepared operation. Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequiredIrreversibly undo pending changes for one path inside the selected workspace. Workspace-root undo is forbidden. Requires prepare/confirm. Returns a short-lived confirmation token.
itemPathrequiredrecursiveIrreversibly undo pending changes for one path inside the selected workspace. Workspace-root undo is forbidden. Requires prepare/confirm. Confirms and executes a prepared operation. Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequiredCreate a Plastic SCM / UVCS branch from a changeset or label. Requires prepare/confirm. Returns a short-lived confirmation token.
branchrequiredcommentfromLabelfromChangesetCreate a Plastic SCM / UVCS branch from a changeset or label. Requires prepare/confirm. Confirms and executes a prepared operation. Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequiredCreate a Plastic SCM / UVCS label on a changeset. Requires prepare/confirm. Returns a short-lived confirmation token.
labelrequiredtargetrequiredcommentCreate a Plastic SCM / UVCS label on a changeset. Requires prepare/confirm. Confirms and executes a prepared operation. Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequiredSwitch the workspace to a branch, changeset, or label. Refused while tracked pending changes exist. Requires prepare/confirm. Returns a short-lived confirmation token.
targetrequiredSwitch the workspace to a branch, changeset, or label. Refused while tracked pending changes exist. Requires prepare/confirm. Confirms and executes a prepared operation. Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequiredMerge a branch/changeset/label into the current workspace branch. Refused while tracked pending changes exist or when the merge has conflicts (resolve those in the UVCS client); the merge result stays pending until a checkin. Requires prepare/confirm. Returns a short-lived confirmation token.
sourcerequiredcommentMerge a branch/changeset/label into the current workspace branch. Refused while tracked pending changes exist or when the merge has conflicts (resolve those in the UVCS client); the merge result stays pending until a checkin. Requires prepare/confirm. Confirms and executes a prepared operation. Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequiredCheck out files before editing them. When the server has a lock rule for them (lock.conf), this takes the exclusive lock so nobody else can check them out or check in changes to them, which is how teams protect scenes, prefabs, and other binary assets. Files locked by someone else are refused. Requires prepare/confirm. Returns a short-lived confirmation token.
pathsrequiredCheck out files before editing them. When the server has a lock rule for them (lock.conf), this takes the exclusive lock so nobody else can check them out or check in changes to them, which is how teams protect scenes, prefabs, and other binary assets. Files locked by someone else are refused. Requires prepare/confirm. Confirms and executes a prepared operation. Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequiredRelease checkouts (and their locks) of files whose content did not change. Modified files keep their checkout and their edits; check those in or undo them. Requires prepare/confirm. Returns a short-lived confirmation token.
pathsrequiredRelease checkouts (and their locks) of files whose content did not change. Modified files keep their checkout and their edits; check those in or undo them. Requires prepare/confirm. Confirms and executes a prepared operation. Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequiredPrepare a checkin and return a short-lived confirmation token. Without paths it takes ALL tracked pending changes in the workspace; with paths only the changes at or below those paths, plus the Unity .meta partner of every selected asset. Private files are never included, except a new parent folder that a selected item needs (listed in dependencies). Review the returned changes with the user before confirming.
pathsmessagerequiredRun a prepared checkin (all tracked pending changes, or the selected paths). Call only after the user has reviewed the prepared payload and explicitly approved this exact operation.
tokenrequiredconfirmPhraserequired90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
npx -y @proanima/[email protected] init \ --client=cursor,codex \ --workspace="D:/Repositories/YourWorkspace" \ --safety=guarded \ --print-confignpx -y @proanima/[email protected] doctor \ --workspace="D:/Repositories/YourWorkspace"uvcs_setup_statusuvcs_workspace_statusuvcs_style_setup_checkInstall this MCP server from https://github.com/ProAnima/unity-version-control-mcp, configure it for my Plastic SCM / Unity Version Control source-control workspace, and run uvcs_doctor.git clone https://github.com/ProAnima/unity-version-control-mcp.git uvcs-mcpcd uvcs-mcpnpm cinode src/cli.js init-local --client=cursor --workspace="D:/Repositories/YourWorkspace"uvcs_doctoruvcs_workspace_statusnpx -y @proanima/[email protected] init --client=cursor --workspace="D:\Repositories\YourWorkspace"npx -y @proanima/[email protected] init --client=cursor --workspace="$HOME/Repositories/YourWorkspace"npx -y @proanima/[email protected] init --client=cursor --workspace="$HOME/Repositories/YourWorkspace"{ "command": "npx", "args": ["-y", "@proanima/[email protected]"], "env": { "UVCS_WORKSPACE": "D:/Repositories/YourWorkspace", "UVCS_MCP_MODE": "readonly" }}npx -y @proanima/[email protected] skill install --agent=claude,agentsnpx -y @proanima/[email protected] init --manifest=workspaces.json --client=cursor,codex --print-confignpx -y @proanima/[email protected] doctor --manifest=workspaces.jsonnpm cinpm testnpm run lintnpm run checknpm run audit:prodnpm run release:checknpm run smoke:fakenpm run smoke:fleetnpm run smoke:packnpm run pack:skillnpm run smoke:plastic -- "D:/Repositories/YourWorkspace"