Skip to main content
Glama
README.md9.99 kB
# @agiflowai/style-system > MCP server for enforcing brand consistency and style guide compliance Help AI coding agents follow your company's branding and style guide. style-system ensures AI-generated code uses only approved design tokens, existing components, and adheres to your visual standards. ## Why Use This? When AI agents write frontend code, they don't know your brand guidelines: - What colors, spacing, and typography are approved? - What UI components already exist in your design system? - Does the output match your brand's visual identity? style-system solves this by: 1. **Enforcing brand tokens** - Agent uses only approved colors, spacing, and typography from your theme 2. **Preventing design drift** - Agent discovers existing components instead of creating inconsistent duplicates 3. **Visual verification** - Agent can preview components to ensure brand alignment --- ## Quick Start ### 1. Requirements - Node.js >= 18 - MCP-compatible agent (Claude Code, Cursor, Gemini CLI) - Chrome browser (recommended) OR Playwright browsers for `get_component_visual` tool ### 2. Configure Your AI Agent Add to your MCP config (`.mcp.json`, `.cursor/mcp.json`, etc.): ```json { "mcpServers": { "style-system": { "command": "npx", "args": ["-y", "@agiflowai/style-system", "mcp-serve"] } } } ``` ### 3. Start Using Your AI agent now enforces your brand guidelines: ``` You: "Style this button component" Agent: 1. Calls get_css_classes to get your approved design tokens 2. Writes styles using only brand-approved colors, spacing, typography 3. Output is consistent with your style guide ``` --- ## Available Tools | Tool | Purpose | When to Use | |------|---------|-------------| | `list_themes` | List available brand themes | Understanding brand variations | | `get_css_classes` | Extract approved design tokens from theme | Before writing any styles | | `list_shared_components` | List brand-approved UI components | Before creating new components | | `list_app_components` | List app-specific components | Finding existing branded components | | `get_component_visual` | Render component preview screenshot | Verifying brand alignment | --- ## How It Works ``` ┌─────────────────────────────────────────────────────────────┐ │ Your AI Agent │ └─────────────────────────────────────────────────────────────┘ │ ┌────────────────────┼────────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Before │ │ Before │ │ Verifying │ │ Styling │ │ Creating │ │ Brand │ │ │ │ Components │ │ Alignment │ │ get_css_ │ │ list_shared_ │ │ get_ │ │ classes │ │ components │ │ component_ │ │ │ │ │ │ visual │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ Brand Tokens │ │ Component │ │ Visual │ │ │ │ Library │ │ Preview │ │ │ │ │ │ │ │ • Colors │ │ • Buttons │ │ • Screenshot │ │ • Spacing │ │ • Forms │ │ • Brand │ │ • Typography │ │ • Layout │ │ check │ └──────────────┘ └──────────────┘ └──────────────┘ ``` ### Workflow Examples **Enforcing Brand Tokens:** ``` User: "Add hover styles to the card" Agent: 1. get_css_classes → extracts approved design tokens 2. Sees brand colors: hover:bg-primary, hover:bg-secondary 3. Applies only brand-approved styles ``` **Reusing Brand Components:** ``` User: "I need a modal dialog" Agent: 1. list_shared_components tags:["ui"] 2. Finds: Dialog component at packages/ui/src/Dialog.tsx 3. Uses existing branded component instead of creating off-brand duplicate ``` **Verifying Brand Alignment:** ``` User: "Show me the Button variants" Agent: 1. get_component_visual componentName:"Button" appPath:"apps/web" 2. Returns: Screenshot showing branded button variants 3. Agent verifies output matches brand guidelines ``` --- ## Configuration Add `style-system` config to your app's `project.json`: ```json { "name": "my-app", "sourceRoot": "apps/my-app/src", "style-system": { "type": "tailwind", "themeProvider": "@your-org/web-ui", "themePath": "packages/web-theme/src/theme.css", "cssFiles": ["src/styles/globals.css"], "rootComponent": "src/providers/ThemeProvider.tsx", "sharedComponentTags": ["ui", "primitives"] } } ``` | Setup | project.json Location | |-------|----------------------| | Monorepo | `apps/my-app/project.json` | | Monolith | `./project.json` (project root) | ### Workspace Defaults (toolkit.yaml) Configure workspace-level defaults and custom service overrides in `toolkit.yaml`: ```yaml style-system: # Default tags for list_shared_components tool sharedComponentTags: - "ui" - "primitives" # Custom service for get_css_classes tool (optional) getCssClasses: customService: ./my-custom-css-service.ts # Custom bundler service for component rendering (optional) bundler: customService: ./my-custom-bundler.ts ``` | Option | Description | |--------|-------------| | `sharedComponentTags` | Default tags for `list_shared_components` tool | | `getCssClasses.customService` | Path to custom CSS extraction service (extends `BaseCSSClassesService`) | | `bundler.customService` | Path to custom bundler service (extends `BaseBundlerService`) | ### Configuration Options | Option | Required | Description | |--------|----------|-------------| | `type` | Yes | Style system type: `tailwind` or `shadcn` | | `themeProvider` | Yes | Package or path providing brand theme | | `themePath` | No | Path to brand token CSS file | | `cssFiles` | No | Additional brand CSS files for rendering | | `rootComponent` | No | Wrapper component for branded previews | | `tailwindConfig` | No | Path to tailwind.config.js (if non-standard) | | `sharedComponentTags` | No | Storybook tags for brand components (default: `['style-system']`) | | `componentLibrary` | No | Component library path (for shadcn type) | --- ## Browser Requirements The `get_component_visual` tool requires a browser to render and capture component screenshots. The tool automatically detects available browsers in this order: 1. **System Chrome** (recommended) - Uses your installed Chrome browser 2. **Playwright Chromium** - Playwright's bundled Chromium 3. **Playwright Firefox** - Playwright's bundled Firefox If no browser is found, you'll see an error with installation instructions: ```bash # Install Playwright browsers (if Chrome is not available) npx playwright install chromium ``` --- ## Custom CSS Classes Service For custom CSS extraction logic, extend `BaseCSSClassesService`: ```typescript // my-custom-css-service.ts import { BaseCSSClassesService } from '@agiflowai/style-system'; export default class MyCustomCSSService extends BaseCSSClassesService { getFrameworkId(): string { return 'my-framework'; } // Key method to override: async extractClasses(category, themePath) { // Parse your CSS/theme file and return classes by category return { colors: [{ name: 'primary', value: '#007bff' }], typography: [], spacing: [], effects: [], }; } } ``` Configure in `toolkit.yaml`: ```yaml style-system: getCssClasses: customService: packages/my-app/src/my-custom-css-service.ts ``` --- ## Custom Bundler Service For advanced use cases, extend `BaseBundlerService` to customize component rendering: ```typescript // my-custom-bundler.ts import { BaseBundlerService } from '@agiflowai/style-system'; export default class MyCustomBundlerService extends BaseBundlerService { // Key methods to override: async startDevServer(appPath: string) { /* Start dev server */ } async serveComponent(options) { /* Serve component via dev server */ } async prerenderComponent(options) { /* Build static HTML */ } async cleanup() { /* Cleanup resources */ } } ``` Configure in `toolkit.yaml`: ```yaml style-system: bundler: customService: packages/my-app/src/my-custom-bundler.ts ``` --- ## Server Options ```bash # stdio transport (default) npx @agiflowai/style-system mcp-serve # HTTP transport npx @agiflowai/style-system mcp-serve --type http --port 3000 # SSE transport npx @agiflowai/style-system mcp-serve --type sse --port 3000 ``` | Option | Description | Default | |--------|-------------|---------| | `-t, --type` | Transport: `stdio`, `http`, `sse` | `stdio` | | `-p, --port` | Port for HTTP/SSE | `3000` | --- ## Development ```bash # Install dependencies pnpm install # Build pnpm build # Test pnpm test # Type check pnpm typecheck ``` --- ## License [AGPL-3.0](../../LICENSE)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AgiFlow/aicode-toolkit'

If you have feedback or need assistance with the MCP directory API, please join our Discord server