sync-mcp rebuilds the lsp component if a prior sync wiped its dist; sync-mcp.test
builds in a before hook; checkVendored flags only real unbundled imports (a guarded
require.resolve fallback is allowed); test:claude runs the destructive sync-components
test in its own node --test pass so it never races the build-checking tests.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ast_grep + lsp servers vendored under plugin/mcp via sync-mcp.mjs; .mcp.json uses
${CLAUDE_PLUGIN_ROOT} (no ../). Both boot from a node_modules-free tree (verified
JSON-RPC initialize handshakes). lsp hook bundled to inline lsp-tools-mcp. mcp/
dist is gitignored (regenerated by build).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>