Skip to main content
Glama
README.md
# MCP Component Review

An MCP (Model Context Protocol) server for reviewing React component changes. Analyzes structural differences, generates visual diffs, and validates implementations against Figma designs.

## Features

- **Structural Analysis**: Parse React components (TSX/JSX) and extract props, children, and styles
- **Style Detection**: Support for Tailwind CSS, styled-components, and CSS Modules
- **Visual Diff**: Screenshot components and generate pixel-level diff images
- **Figma Integration**: Extract design specs and validate implementation compliance
- **Branch Review**: Analyze all changed components in a git branch

## Installation

```bash
git clone https://github.com/yourusername/mcp-component-review.git
cd mcp-component-review
npm install
npm run build
```

## Usage

### With Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "component-review": {
      "command": "node",
      "args": ["/path/to/mcp-component-review/dist/index.js"]
    }
  }
}
```

### With Claude Code

```bash
claude mcp add component-review node /path/to/mcp-component-review/dist/index.js
```

## Available Tools

### `analyze_component`

Analyze a single React component file.

```typescript
analyze_component({
  file: "/path/to/Button.tsx"
})
```

**Output:**
- Component name and props
- Component tree structure
- Extracted styles (colors, spacing, typography)

### `compare_components`

Compare two component files and get a structured diff.

```typescript
compare_components({
  oldFile: "/path/to/Button.old.tsx",
  newFile: "/path/to/Button.new.tsx"
})
```

**Output:**
- Text content changes
- Child component additions/removals
- Prop changes
- Style changes (colors, spacing, typography)

### `visual_diff_components`

Generate visual diff screenshots.

```typescript
visual_diff_components({
  oldFile: "/path/to/Button.old.tsx",
  newFile: "/path/to/Button.new.tsx",
  outputDir: "/path/to/output"
})
```

**Output:**
- Screenshots of old and new components
- Diff image highlighting changes
- Combined side-by-side view

### `get_figma_specs`

Extract design specifications from Figma.

```typescript
get_figma_specs({
  figmaUrl: "https://www.figma.com/file/ABC123/Design?node-id=1:2",
  figmaToken: "figd_xxxxx"
})
```

**Output:**
- Dimensions (width, height)
- Spacing (padding, margin, gap)
- Colors (background, text, border)
- Typography (font-size, font-weight, line-height)
- Border (radius, width)

### `validate_design_implementation`

Compare Figma specs with implementation.

```typescript
validate_design_implementation({
  figmaUrl: "https://www.figma.com/file/ABC123/Design?node-id=1:2",
  figmaToken: "figd_xxxxx",
  componentFile: "/path/to/Button.tsx",
  tolerance: 2
})
```

**Output:**
```markdown
# Design Validation Report: Button

## Summary ⚠️
- **Score**: 75%
- **Matches**: 6/8
- **Mismatches**: 2

## Validation Details

| Property      | Figma     | Implementation       | Status     |
|---------------|-----------|----------------------|------------|
| padding-top   | 8px       | 8px (p-2)            | ✅ match   |
| background    | #22C55E   | #16A34A (bg-green-600)| ❌ mismatch|
| font-size     | 16px      | 18px (text-lg)       | ❌ mismatch|
```

### `review_branch`

Review all changed components in a git branch.

```typescript
review_branch({
  repoPath: "/path/to/repo",
  baseBranch: "main",
  targetBranch: "feature/new-button",
  figmaToken: "figd_xxxxx",
  figmaFileKey: "ABC123",
  figmaMapping: {
    "src/components/Button.tsx": "1:234",
    "src/components/Card.tsx": "1:567"
  },
  outputDir: "/path/to/visual-diffs"
})
```

**Output:**
- Summary of all changed components
- Structural analysis for each component
- Visual diffs for modified components
- Figma validation scores

### `validate_and_fix`

Validate a component and get auto-fix instructions. If the component doesn't match Figma, returns exact Tailwind/CSS changes needed.

```typescript
validate_and_fix({
  figmaUrl: "https://www.figma.com/file/ABC123/Design?node-id=1:2",
  figmaToken: "figd_xxxxx",
  componentFile: "/path/to/Button.tsx"
})
```

**Output (when fixes needed):**
```markdown
🔧 **AUTO-FIX REQUIRED** for `src/Button.tsx`

Current design compliance: **62%**

## Required Changes

### 🔴 Missing (High Priority)
- **gap**: Add `gap-2`
  - Expected: `8px`

### 🟡 Mismatches (Medium Priority)
- **background**: Change to `bg-green-500`
  - Current: `bg-green-600`
  - Expected: `#22C55E`
- **font-size**: Change to `text-base`
  - Current: `text-lg`
  - Expected: `16px`

## Instructions

1. Open `src/Button.tsx`
2. Find the className or styled-components styles
3. Apply the following Tailwind class changes:

```
Add/Replace: gap-2 bg-green-500 text-base
```

4. Save the file
5. Run validation again to confirm compliance
```

This output is designed to be directly actionable by an AI agent to automatically fix the issues.

## Getting a Figma Token

1. Go to Figma → Settings → Account
2. Scroll to "Personal access tokens"
3. Click "Create new token"
4. Copy the token (starts with `figd_`)

## Example Workflow

### Design Review Automation

```typescript
// 1. Get the Figma specs for a component
const specs = await get_figma_specs({
  figmaUrl: "https://www.figma.com/file/ABC/Design?node-id=1:2",
  figmaToken: process.env.FIGMA_TOKEN
});

// 2. Validate the implementation
const validation = await validate_design_implementation({
  figmaUrl: "https://www.figma.com/file/ABC/Design?node-id=1:2",
  figmaToken: process.env.FIGMA_TOKEN,
  componentFile: "src/components/Button.tsx"
});

// 3. If there are visual changes, generate a diff
const visualDiff = await visual_diff_components({
  oldFile: "src/components/Button.old.tsx",
  newFile: "src/components/Button.tsx",
  outputDir: "./review-output"
});
```

### PR Review Automation

```typescript
// Review all components changed in a PR
const review = await review_branch({
  repoPath: ".",
  baseBranch: "main",
  targetBranch: "HEAD",
  figmaToken: process.env.FIGMA_TOKEN,
  figmaFileKey: "ABC123",
  figmaMapping: {
    "src/components/Button.tsx": "1:234"
  }
});
```

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Run in development mode
npm run dev
```

## License

MIT

## Contributing

Contributions are welcome! Please read the contributing guidelines before submitting a PR.