7ebaa2cec0
* refactor(mcp): extract MCP server registry from onboard into shared module Move _RECOMMENDED_MCP_SERVERS, _install_pip_package, and _pip_install_hint from config/onboard.py into mcp/registry.py as a shared MCPServerEntry dataclass and registry functions. This enables reuse by the new /install-mcp command and marketplace integration. * feat(mcp): add /install-mcp command for browsing and installing MCP servers Interactive browser for MCP servers (built-in registry + EvoSkills marketplace), supporting three modes: - /install-mcp — interactive tag filter + checkbox selection - /install-mcp <name> — direct install by name or tag pre-filter - /install-mcp file.yaml — import servers from arbitrary YAML file Also available as /mcp install and EvoSci mcp install. Includes TUI browser widget (MCPBrowserWidget) mirroring the skill browser UX. * chore(tavily): conditionally pass tavily_search when TAVILY_API_KEY is set * fix(tui): Enter key detection for /install-mcp - Fix message handler names: Textual converts MCPBrowserWidget to mcpbrowser_widget (not mcp_browser_widget), so Confirmed/Cancelled messages were never received by the app - Distinguish empty selection from cancel in result handling * chore(widgets): stop auto-advancing cursor on Space toggle in browser widgets * style: linter * refactor(mcp): simplify MCP registry to marketplace-only Remove built-in server list and arbitrary YAML import — all server definitions now come from the EvoSkills marketplace (mcp/*.yaml). Onboarding filters by the `onboarding` tag instead of a hardcoded list. * refactor(mcp): consolidate /install-mcp into /mcp install Remove standalone /install-mcp command — use /mcp install as the single entry point. CLI adapter now delegates logic to the shared InstallMCPCommand class, keeping only the questionary UI layer. * chore(cli): rm reference to yaml import