The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Vue Harvest listing page.
Point it at a Vue project. It finds every component, figures out which ones are reusable, and extracts them. It also pulls out your design tokens (colors, spacing, typography) and gives you a visual report.
The hard cases that need judgment (store-coupled components, ambiguous dependencies) get handled by an MCP server that feeds structured analysis to an LLM.
Component extraction. Parses every .vue file in a project using @vue/compiler-sfc. For each component it extracts the full interface (props, emits, slots), maps out the dependency graph, detects coupling issues, and scores a confidence level for safe extraction. Components above the threshold get auto-extracted into standalone bundles with rewritten imports and a manifest of peer dependencies.
Design token extraction. Scans all CSS (scoped styles, standalone stylesheets) and pulls out colors, font families, font sizes, font weights, spacing values, border radii, and shadows. Outputs a CSS custom properties file, a JSON dump, and a visual HTML explorer showing swatches and scales.
MCP server. Twelve tools that give an LLM the structured data it needs to reason about the harder cases: components in the 30-70% confidence range that could be extracted with some refactoring. The LLM can deep-analyze coupling, generate decoupling suggestions with before/after code, create composable wrappers for store-bound components, and do full rewrite-and-extract in one shot.
For the MCP server:
vue-harvest analyze [path]Full analysis pipeline. Discovers .vue files, parses interfaces, builds the dependency graph, classifies every component, auto-extracts the safe ones, and generates a registry + catalog.
Output goes to .vue-harvest/ by default:
vue-harvest list [path]Lists all components sorted by extraction confidence.
vue-harvest inspect <name>Full breakdown of a single component: props, events, slots, dependencies, coupling issues, style analysis.
vue-harvest extract <name>Extracts a specific component and all its local dependencies into a standalone bundle.
vue-harvest tokens [path]Extracts design system tokens from the project.
Outputs:
tokens.css with CSS custom propertiestokens.json with the full token datasetdesign-system.html with a visual explorer (color swatches, font scales, spacing visualization)vue-harvest initCreates a harvest.config.json with detected project settings.
Optional. Place a harvest.config.json in the project root:
Path aliases are auto-detected from tsconfig.json. If your project has @ mapped to ./src, vue-harvest picks that up.
Every component gets classified into a reusability tier based on its interface, dependencies, and coupling:
| Tier | Confidence | What it means |
|---|---|---|
| Primitive | 85-100% | Pure UI, no business logic. Button, Input, Card. |
| Composite | 70-85% | Built from primitives, minimal logic. FormField, DataTable. |
| Feature | 50-70% | Has business logic but potentially reusable. UserAvatar, SearchBar. |
| Page-bound | 30-50% | Tightly coupled to a specific page or route. |
| App-specific | 0-30% | Deeply coupled to app state. Not reusable as-is. |
Components at or above the extraction threshold (default 70%) are auto-extracted. The 30-70% band is where the MCP server comes in.
The analyzer detects these coupling patterns:
| Issue | Severity | Description |
|---|---|---|
direct-store-access | warning | Imports a Pinia/Vuex store directly |
hardcoded-api | warning | Contains hardcoded API endpoint URLs |
router-dependency | info | Uses vue-router |
i18n-dependency | warning | Uses vue-i18n |
global-inject | warning | Uses inject() for app-level provides |
env-variable | warning | References import.meta.env |
unscoped-css | warning | Has unscoped styles that leak globally |
deep-provide-chain | warning | Relies on provide/inject chains |
implicit-global | warning | Uses globally registered components without importing them |
side-effect-import | warning | Has imports that execute side effects |
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
| Tool | What it does |
|---|---|
analyze-project | Runs the full pipeline on a project path |
list-components | Lists components with filters (tier, confidence range) |
inspect-component | Full analysis with source code |
extract-component | Extracts with force option |
deep-analyze | Structured coupling analysis for LLM reasoning |
suggest-refactor | Before/after code for decoupling |
generate-wrapper | Creates composable wrappers for store-bound components |
adapt-and-extract | Full rewrite + extract in one step |
batch-triage | Prioritizes all reviewable components with effort estimates |
coupling-report | Project-wide coupling patterns |
analyze-design-system | Extracts design tokens |
get-design-tokens | Returns tokens filtered by type |
The server exposes these as MCP resources after analysis:
harvest://registry : full registry JSONharvest://graph : dependency graphharvest://summary : analysis summaryharvest://component/{name} : individual component analysisharvest://design-system : extracted design tokensanalyze-new-project : guided first analysisextraction-sprint : batch refactor and extract sessionrefactor-component : single component deep refactorextract-design-system : design token extraction and analysis"Analyze my Vue project at /Users/me/projects/my-app"
"Show me all the components that need review"
"Deep analyze the UserProfileCard component and suggest how to decouple it from the auth store"
"Do an extraction sprint, go through all reviewable components and extract what you can"
"Extract the design system tokens and recommend a naming convention"
vue-harvest exports its analysis engine for use in other tools:
The split between CLI and MCP is deliberate. The CLI handles everything deterministic: parsing, graph building, classification, extraction. The MCP handles the 20% that needs reasoning: decoupling suggestions, refactoring code generation, ambiguity resolution.
Watch mode for the CLI:
Run a specific test file:
.vue files, reads tsconfig.json for path aliases.@vue/compiler-sfc splits each file into template, script, and style blocks.defineProps, defineEmits, <slot> tags. Handles generic type syntax, withDefaults, and object syntax with nested options.es-module-lexer parses imports. Each import gets classified by kind (internal component, composable, store, util, external package, etc).MIT