Rule-of-three threshold met: 4 plugin proposals (molecule-firecrawl
#512, molecule-github-mcp #520, molecule-browser-use #553, mcp-connector
#573) all independently shipped the same mcpServers-adapter pattern.
Adds MCPServerAdaptor to builtins.py — plugins wrapping an MCP server
now declare `from plugins_registry.builtins import MCPServerAdaptor as
Adaptor` in their per-runtime adapter file. The adaptor:
- Merges mcpServers from settings-fragment.json into
<configs>/.claude/settings.json (deep-merge so multiple plugins'
servers coexist).
- Optionally ships skills/rules/setup.sh via AgentskillsAdaptor
delegation.
- On uninstall: removes skills/rules but intentionally leaves
mcpServers entries in settings.json (users may share configs with
other tools or have manually curated entries).
Also fixes _deep_merge_hooks: non-hook top-level keys that are dicts
(e.g. mcpServers) are now deep-merged with existing values instead of
being skipped via setdefault.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>