Vue Harvest

io.github.virgilvox由 GitHub 帳號 virgilvox 發布v0.0.3更新於 Oct 24, 2026

Extract reusable component libraries and design tokens from Vue applications

已驗證STDIO僅桌面開發者工具媒體與設計

概覽

AI 產生的概覽

分析 Vue 專案,找出可重複使用的元件與設計權杖,並讓助理透過工具處理難以抽取的元件。

可以做什麼
  • 對指定的 Vue 專案路徑執行完整分析流程,並依層級或信心度篩選列出元件
  • 檢視單一元件的 props、事件、插槽、相依性與耦合問題
  • 將元件抽取為獨立套件,支援重寫後再抽取
  • 深入分析耦合情況,產生重構前後程式碼建議,或為綁定 store 的元件產生組合式封裝
  • 批次分流待複核的元件,並輸出專案層級的耦合報告
  • 抽取設計權杖(顏色、字型、間距、圓角、陰影)並依類型回傳
適用情境
適合從既有 Vue 應用中提煉元件庫或設計系統,也適合元件落在 30-70% 信心度區間、需要判斷如何與 store、路由或 i18n 解耦後再抽取的情境。
執行需求
以本機 stdio 程序在桌面端執行,透過 npm 套件 vue-harvest-mcp 安裝(需要 Node.js)。它會讀取本機的 Vue 專案目錄,包含 .vue 檔案以及用於路徑別名的 tsconfig.json。未宣告需要帳號、API 金鑰或環境變數。
安裝前請注意
分析與抽取會寫入專案檔案,預設寫入 .vue-harvest 目錄,內含抽取出的元件套件、註冊表、目錄頁與報告。抽取會改寫匯入路徑,且可強制越過信心度門檻,採用前應先檢查產生的元件套件。助理會讀取被分析專案的原始碼。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Vue Harvest,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

vue-harvest

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.

What it does

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.

Install

bash
npm install -g vue-harvest
# or run directlynpx vue-harvest analyze ./my-app

For the MCP server:

bash
npm install -g vue-harvest-mcp

CLI

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.

bash
vue-harvest analyzevue-harvest analyze ./path/to/projectvue-harvest analyze --threshold 60vue-harvest analyze --output ./harvestedvue-harvest analyze --json | jq '.summary'

Output goes to .vue-harvest/ by default:

.vue-harvest/  registry.json       Component registry (shadcn-compatible format)  catalog.html        Browsable catalog with tier filters  analysis.json       Full analysis dump for the MCP server  SUMMARY.md          Human-readable report  components/         Extracted component bundles    Button/      Button.vue      manifest.json    Card/      Card.vue      manifest.json

vue-harvest list [path]

Lists all components sorted by extraction confidence.

bash
vue-harvest listvue-harvest list --tier primitivevue-harvest list --json

vue-harvest inspect <name>

Full breakdown of a single component: props, events, slots, dependencies, coupling issues, style analysis.

bash
vue-harvest inspect Buttonvue-harvest inspect UserProfileCard --json

vue-harvest extract <name>

Extracts a specific component and all its local dependencies into a standalone bundle.

bash
vue-harvest extract Buttonvue-harvest extract UserProfileCard --forcevue-harvest extract Card --output ./my-components

vue-harvest tokens [path]

Extracts design system tokens from the project.

bash
vue-harvest tokensvue-harvest tokens --jsonvue-harvest tokens --output ./design-system

Outputs:

  • tokens.css with CSS custom properties
  • tokens.json with the full token dataset
  • design-system.html with a visual explorer (color swatches, font scales, spacing visualization)

vue-harvest init

Creates a harvest.config.json with detected project settings.

Configuration

Optional. Place a harvest.config.json in the project root:

json
{  "include": ["**/*.vue"],  "exclude": [    "node_modules/**",    "dist/**",    "**/*.test.*",    "**/*.story.*"  ],  "extractionThreshold": 70,  "outDir": ".vue-harvest",  "registry": "json"}

Path aliases are auto-detected from tsconfig.json. If your project has @ mapped to ./src, vue-harvest picks that up.

Component classification

Every component gets classified into a reusability tier based on its interface, dependencies, and coupling:

TierConfidenceWhat it means
Primitive85-100%Pure UI, no business logic. Button, Input, Card.
Composite70-85%Built from primitives, minimal logic. FormField, DataTable.
Feature50-70%Has business logic but potentially reusable. UserAvatar, SearchBar.
Page-bound30-50%Tightly coupled to a specific page or route.
App-specific0-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.

Coupling issues

The analyzer detects these coupling patterns:

IssueSeverityDescription
direct-store-accesswarningImports a Pinia/Vuex store directly
hardcoded-apiwarningContains hardcoded API endpoint URLs
router-dependencyinfoUses vue-router
i18n-dependencywarningUses vue-i18n
global-injectwarningUses inject() for app-level provides
env-variablewarningReferences import.meta.env
unscoped-csswarningHas unscoped styles that leak globally
deep-provide-chainwarningRelies on provide/inject chains
implicit-globalwarningUses globally registered components without importing them
side-effect-importwarningHas imports that execute side effects

MCP server

Setup with Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

json
{  "mcpServers": {    "vue-harvest": {      "command": "vue-harvest-mcp"    }  }}

Setup with Claude Code

bash
claude mcp add vue-harvest vue-harvest-mcp

Available tools

ToolWhat it does
analyze-projectRuns the full pipeline on a project path
list-componentsLists components with filters (tier, confidence range)
inspect-componentFull analysis with source code
extract-componentExtracts with force option
deep-analyzeStructured coupling analysis for LLM reasoning
suggest-refactorBefore/after code for decoupling
generate-wrapperCreates composable wrappers for store-bound components
adapt-and-extractFull rewrite + extract in one step
batch-triagePrioritizes all reviewable components with effort estimates
coupling-reportProject-wide coupling patterns
analyze-design-systemExtracts design tokens
get-design-tokensReturns tokens filtered by type

Resources

The server exposes these as MCP resources after analysis:

  • harvest://registry : full registry JSON
  • harvest://graph : dependency graph
  • harvest://summary : analysis summary
  • harvest://component/{name} : individual component analysis
  • harvest://design-system : extracted design tokens

Prompts

  • analyze-new-project : guided first analysis
  • extraction-sprint : batch refactor and extract session
  • refactor-component : single component deep refactor
  • extract-design-system : design token extraction and analysis

Example conversations

"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"

Programmatic API

vue-harvest exports its analysis engine for use in other tools:

typescript
import { analyze, writeOutput, analyzeTokens } from 'vue-harvest'
const report = await analyze('./my-vue-app', {  extractionThreshold: 0.6,})
console.log(report.summary)// { totalFiles: 42, analyzed: 40, autoExtracted: 12, needsMCP: 8, ... }
await writeOutput(report)
// Design tokensconst tokens = await analyzeTokens('./my-vue-app')console.log(tokens.palette)    // [{ hex: '#3b82f6', usageCount: 14 }, ...]console.log(tokens.spacing)    // ['4px', '8px', '12px', '16px', '24px']

Architecture

vue-harvest (monorepo)  packages/    cli/                        Published as "vue-harvest" on npm      src/        types.ts                Type system shared across the whole project        index.ts                Pipeline orchestrator        cli.ts                  CLI entry point (citty)        analyzers/          sfc-analyzer.ts       SFC parsing, interface extraction, coupling detection          graph-builder.ts      Dependency graph with Tarjan's SCC for cycle detection          design-system-analyzer.ts   Token extraction from CSS        extractors/          component-extractor.ts   Import rewriting, file bundling, manifest generation        generators/          registry.ts           Registry JSON + catalog HTML generation        commands/               CLI command definitions        utils/          config.ts             Config resolution, alias detection from tsconfig      tests/        fixtures/               A real mini Vue project used as test input        unit/                   66 tests across 5 suites
    mcp/                        Published as "vue-harvest-mcp" on npm      src/        index.ts                MCP server (12 tools, resources, prompts)

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.

Development

bash
git clone https://github.com/virgilvox/vue-harvest.gitcd vue-harvestpnpm installpnpm buildpnpm test

Watch mode for the CLI:

bash
pnpm --filter vue-harvest dev

Run a specific test file:

bash
npx vitest run packages/cli/tests/unit/sfc-analyzer.test.ts

How it works internally

  1. Discovery. Globs for .vue files, reads tsconfig.json for path aliases.
  2. SFC parsing. @vue/compiler-sfc splits each file into template, script, and style blocks.
  3. Interface extraction. Regex-based extraction of defineProps, defineEmits, <slot> tags. Handles generic type syntax, withDefaults, and object syntax with nested options.
  4. Dependency analysis. es-module-lexer parses imports. Each import gets classified by kind (internal component, composable, store, util, external package, etc).
  5. Coupling detection. Pattern matching on the script and template AST for store access, hardcoded APIs, router usage, i18n, inject, env vars, unscoped CSS.
  6. Classification. Confidence scoring starts at 1.0 and gets penalized for coupling issues, store access, and page-path patterns. Boosted for props/slots interfaces and UI-path patterns.
  7. Graph building. Resolves import paths, builds adjacency lists, runs Tarjan's strongly connected components algorithm for cycle detection, computes transitive dependency closures.
  8. Extraction. For components above threshold: collects the component plus all its local deps (composables, utils, types, styles), rewrites import paths to be relative within the extracted bundle, generates a manifest listing peer dependencies and required globals.
  9. Token extraction. PostCSS value parser identifies colors (hex, rgb, hsl), font properties, spacing values, radii, and shadows from CSS declarations. Deduplicates, normalizes hex values, and groups by type.

License

MIT

來源:README.md,提交 47c29cf

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.0.3最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分