Vercel v0
Generate beautiful UI components using Vercel's v0 generative UI system.
v0-mcp
Vercel v0 MCP Server for Claude Code - Generate beautiful UI components using AI through the Model Context Protocol.
✨ Collaborative Development: This project was built through innovative collaboration between Claude Code and Gemini CLI using Vibe Coding methodology - demonstrating the power of AI-assisted development workflows.
🎯 Features
- Generate UI Components: Create React components from natural language descriptions
- Image to UI: Convert design images into working React code
- Chat-based Iteration: Iteratively refine components through conversation
- Multiple Models: Support for v0-1.5-md, v0-1.5-lg, and v0-1.0-md
- TypeScript Support: Full type safety with Zod schema validation
- Streaming Support: Real-time generation progress
🚀 Quick Start
# 1. Clone and enter the project
git clone <repository-url> && cd v0-mcp
# 2. Install dependencies
npm install
# 3. Create .env file and add your v0 API key
npm run setup
# Edit .env file with your V0_API_KEY
# 4. Build the project
npm run build
# 5. Add to Claude Code (ensure you are in the project root)
claude mcp add v0-mcp --env V0_API_KEY=$(grep V0_API_KEY .env | cut -d '=' -f2) -- node $(pwd)/dist/main.js
# 6. Start using it in Claude Code!
# Try: "Hey v0-mcp, create a login form with email and password fields"
🛠 Installation
1. Clone or Download
git clone <repository-url>
cd v0-mcp
2. Install Dependencies
npm install
3. Setup Environment
npm run setup
# Edit .env file with your v0 API key
4. Build Project
npm run build
⚙️ Configuration
🔑 Getting Your v0 API Key
Before configuring v0-mcp, you'll need a v0 API key:
- Visit the v0 Model API documentation
- Sign in to your Vercel account
- Navigate to the API Keys section
- Generate a new API key
- Copy and save your key securely
Claude Code Integration
📖 Quick setup guide - choose the method that works best for you
Method 1: CLI Configuration (Recommended)
-
Add v0-mcp using the Claude Code CLI:
# Navigate to your v0-mcp directory first cd /path/to/your/v0-mcp # Add the MCP server using current directory claude mcp add v0-mcp -- node $(pwd)/dist/main.js -
Set your v0 API key:
Option A: Add key during CLI setup
# When adding the server, include the API key (run from v0-mcp directory) claude mcp add v0-mcp --env V0_API_KEY=your_v0_api_key_here -- node $(pwd)/dist/main.jsOption B: Edit
.claude.jsonfile after setupAfter running the
claude mcp addcommand, edit the generated.claude.jsonfile:{ "mcpServers": { "v0-mcp": { "type": "stdio", "command": "node", "args": ["/absolute/path/to/your/v0-mcp/dist/main.js"], "env": { "V0_API_KEY": "your_v0_api_key_here" } } } }Option C: System environment variable (Most secure)
# Add to your shell profile (.bashrc, .zshrc, etc.) echo 'export V0_API_KEY="your_v0_api_key_here"' >> ~/.zshrc # Reload your shell configuration source ~/.zshrc -
Verify your setup:
claude mcp list node scripts/verify-claude-code-setup.js✅ Expected Output:
Verifying v0 API connection... ✓ v0-mcp server found in Claude configuration ✓ API key is configured ✓ Successfully connected to v0 API Setup is complete! You can now use v0-mcp in Claude Code.
Method 2: Manual Configuration (Advanced)
-
Create or edit the Claude Code configuration file:
- macOS/Linux:
~/.claude.json - Windows:
%USERPROFILE%\.claude.json
- macOS/Linux:
-
Add the v0-mcp server configuration:
{
"mcpServers": {
"v0-mcp": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/v0-mcp/dist/main.js"],
"env": {
"V0_API_KEY": "your_v0_api_key_here"
}
}
}
}
- Restart Claude Code for the changes to take effect.
Verification
After configuration, you should see v0-mcp tools available in Claude Code:
- ✅
v0_generate_ui- Generate UI components from text - ✅
v0_generate_from_image- Generate UI from image references - ✅
v0_chat_complete- Iterative UI development chat - ✅
v0_setup_check- Verify API connectivity
🔗 Why Use MCP (Model Context Protocol)?
MCP Benefits:
- Seamless Integration: Tools appear natively in Claude without API juggling
- Enhanced Context: Claude understands your v0 workflow and provides better assistance
- Real-time Availability: Tools are always accessible during your coding sessions
- Type Safety: Full parameter validation and error handling built-in
- Persistent State: Maintains conversation context across tool calls
How It Works: When you mention v0-mcp or UI generation in Claude, the tools automatically become available. Claude can intelligently choose the right tool based on your request, making the development process feel natural and integrated.
Claude Desktop Integration
Add to your claude_desktop_config.json:
{
"mcpServers": {
"v0-mcp": {
"command": "node",
"args": ["/path/to/v0-mcp/dist/main.js"],
"env": {
"V0_API_KEY": "your_v0_api_key_here"
}
}
}
}
Cursor Integration
Add to your Cursor MCP configuration:
{
"mcpServers": {
"v0-mcp": {
"command": "node",
"args": ["/path/to/v0-mcp/dist/main.js"],
"env": {
"V0_API_KEY": "your_v0_api_key_here"
}
}
}
}
🔧 Available Tools
v0_generate_ui
Generate UI components from text descriptions.
Parameters:
prompt(required): Description of the UI componentmodel: v0 model to use (default: v0-1.5-md)stream: Enable streaming response (default: false)context: Optional existing code context
v0_generate_from_image
Generate UI components from image references.
Parameters:
imageUrl(required): URL of the reference imageprompt: Additional instructionsmodel: v0 model to use (default: v0-1.5-md)
v0_chat_complete
Chat-based UI development with conversation context.
Parameters:
messages(required): Array of conversation messagesmodel: v0 model to use (default: v0-1.5-md)stream: Enable streaming response (default: false)
v0_setup_check
Validate v0 API configuration and connectivity.
🔑 Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
V0_API_KEY | ✅ | - | Your v0 API key |
V0_BASE_URL | ❌ | https://api.v0.dev/v1 | v0 API base URL |
V0_DEFAULT_MODEL | ❌ | v0-1.5-md | Default model to use |
V0_TIMEOUT | ❌ | 60000 | API timeout (ms) |
MCP_SERVER_NAME | ❌ | v0-mcp | MCP server name |
LOG_LEVEL | ❌ | info | Logging level |
🚀 Usage Examples
In Claude Code
Once configured, you can use v0-mcp in multiple ways:
Direct v0-mcp Usage
Simply mention v0-mcp in your request, and Claude will automatically select the appropriate tool:
Hey v0-mcp, create a modern login form with email and password fields
v0-mcp: Generate a dashboard component with charts and KPI cards
@v0-mcp convert this wireframe to a React component: [image URL]
Specific Tool Usage
Generate a Login Form
Use v0_generate_ui to create a modern login form with email, password fields, and a blue submit button with rounded corners.
Convert Design to Code
Use v0_generate_from_image with this Figma design URL: https://example.com/design.png
Iterative Development
Use v0_chat_complete to refine the previous login form by adding a "Remember me" checkbox and "Forgot password" link.
Check API Setup
Use v0_setup_check to verify your v0 API connection and configuration.
Advanced Usage Examples
Creating a Dashboard Component
Use v0_generate_ui with the following prompt:
"Create a modern dashboard component with a sidebar navigation, header with user profile dropdown, and a main content area with grid layout for cards. Include metrics cards showing KPIs with charts. Use shadcn/ui components and Tailwind CSS."
Building from a Wireframe
Use v0_generate_from_image with your wireframe image URL and add:
"Convert this wireframe into a fully functional React component. Add proper spacing, modern styling, and make it responsive for mobile devices."
Iterative Refinement
Use v0_chat_complete with conversation history:
[
{"role": "user", "content": "Create a pricing table component"},
{"role": "assistant", "content": "[Previous pricing table code]"},
{"role": "user", "content": "Add a popular plan highlight and annual/monthly toggle"}
]
🧪 Development
# Development mode with hot reload
npm run dev
# Type checking
npm run lint
# Run tests
npm test
# Test with coverage
npm run test:coverage
# Test in CI mode
npm run test:ci
# Clean build artifacts
npm run clean
# Test configuration
npm run test:config
# Test basic functionality
npm run test:basic
# Verify Claude Code setup
npm run verify:claude-code
🛡️ Enhanced Features
Structured Logging
- Winston-based logging with JSON format
- Contextual information for API calls and tool usage
- Error tracking with stack traces and metadata
- Configurable log levels via
LOG_LEVELenvironment variable
Advanced Error Handling
- Categorized error types (API, Network, Timeout, Rate Limit, etc.)
- Retry logic with exponential backoff for transient errors
- User-friendly error messages with actionable guidance
- Comprehensive error metadata for debugging
Testing Infrastructure
- Jest testing framework with TypeScript support
- Comprehensive unit tests for all core components
- Test coverage reporting with configurable thresholds
- Mock implementations for external dependencies
Improved Reliability
- Input validation using Zod schemas
- Graceful error handling for all failure modes
- Performance monitoring with request timing
- Health checks for API connectivity
💖 Support This Project
If you find this project helpful, please consider supporting it:
Your support helps maintain and improve v0-mcp!
📄 License
MIT
Servidores relacionados
Alpha Vantage MCP Server
patrocinadorAccess financial market data: realtime & historical stock, ETF, options, forex, crypto, commodities, fundamentals, technical indicators, & more
MCP Orchestrator
Aggregates tools from multiple MCP servers with unified BM25/regex search and deferred loading
Blockchain MCP Server
A server for blockchain interactions, offering Ethereum vanity address generation, 4byte lookup, ABI encoding, and multi-chain RPC calls.
Starknet MCP
An MCP server providing access to various Starknet RPC methods.
BCMS MCP
Give me a one - two sentence description of the BCMS MCP # MCP The BCMS Model Context Protocol (MCP) integration enables AI assistants like Claude, Cursor, and other MCP-compatible tools to interact directly with your BCMS content. This allows you to create, read, and update content entries, manage media files, and explore your content structure—all through natural language conversations with AI. ## What is MCP? The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open standard developed by Anthropic that allows AI applications to securely connect to external data sources and tools. With BCMS MCP support, you can leverage AI assistants to: - Query and explore your content structure - Create new content entries with AI-generated content - Update existing entries - Manage your media library - Get intelligent suggestions based on your content model --- ## Getting Started ### Prerequisites 1. A BCMS account with an active instance 2. An MCP key with appropriate permissions 3. An MCP-compatible client (Claude Desktop, Cursor, or any MCP client) ### Step 1: Create an MCP Key 1. Navigate to your BCMS dashboard 2. Go to Settings → MCP 3. Click Create MCP Key 4. Configure the permissions for templates you want the AI to access:GET: Read entries 5. POST: Create entries 6. PUT: Update entries 7. DELETE: Delete entries Note: Right now, MCP only supports creating, reading and updating content. ### Step 2: Configure Your MCP Client You can find full instructions for integrating BCMS with your AI tools right inside BCMS, on the MCP page. But in general, installing BCMS MCP works in a standard way: ``` { "mcpServers": { "bcms": { "url": "https://app.thebcms.com/api/v3/mcp?mcpKey=YOUR_MCP_KEY" } } } ``` ## Available Tools Once connected, your AI assistant will have access to the following tools based on your MCP key permissions: ### Content Discovery #### list_templates_and_entries Lists all templates and their entries that you have access to. This is typically the first tool to call when exploring your BCMS content. Returns: - Template IDs, names, and slugs - Entry IDs with titles and slugs for each language Example prompt: "Show me all the templates and entries in my BCMS" --- ### Entry Management #### list_entries_for_{templateId} Retrieves all entries for a specific template with full content data. A separate tool is generated for each template you have access to. Returns: - Complete entry data including all meta fields - Content in all configured languages - Entry statuses Example prompt: "List all blog posts from my Blog template" --- #### create_entry_for_{templateId} Creates a new entry for a specific template. The input schema is dynamically generated based on your template's field structure. Input: - statuses: Array of status assignments per language - meta: Array of metadata for each language (title, slug, custom fields) - content: Array of content nodes for each language Example prompt: "Create a new blog post titled 'Getting Started with BCMS' with a brief introduction paragraph" --- #### update_entry_for_{templateId} Updates an existing entry for a specific language. Input: - entryId: The ID of the entry to update - lng: Language code (e.g., "en") - status: Optional status ID - meta: Updated metadata - content: Updated content nodes Example prompt: "Update the introduction paragraph of my 'Getting Started' blog post" --- ### Media Management #### list_all_media Lists all media files in your media library. Returns: - Media IDs, names, and types - File metadata (size, dimensions for images) - Parent directory information Example prompt: "Show me all images in my media library" --- #### list_media_dirs Lists the directory structure of your media library. Returns: - Hierarchical directory structure - Directory IDs and names Example prompt: "Show me the folder structure of my media library" --- #### create-media-directory Creates a new directory in your media library. Input: - name: Name of the directory - parentId: Optional parent directory ID (root if not specified) Example prompt: "Create a new folder called 'Blog Images' in my media library" --- #### request-upload-media-url Returns a URL you use to upload a file (for example via POST with multipart form data), which avoids pushing large binaries through the MCP tool payload. You still need a valid file name and MIME type when uploading, as described in the tool response. Availability: Only when the MCP key has Can mutate media enabled. Example prompt: “Give me an upload URL for a new hero image, then tell me how to upload it.” Input: - fileName: Name of the file with extension - fileData: Base64-encoded file data (with data URI prefix) - parentId: Optional parent directory ID Example prompt: "Upload this image to my Blog Images folder" --- ### Linking Tools #### get_entry_pointer_link Generates an internal BCMS link to an entry for use in content. Input: - entryId: The ID of the entry to link to Returns: - Internal link format: entry:{entryId}@*_{templateId}:entry Example prompt: "Get me the internal link for the 'About Us' page entry" --- #### get_media_pointer_link Generates an internal BCMS link to a media item for use in content. Input: - mediaId: The ID of the media item Returns: - Internal link format: media:{mediaId}@*_@*_:entry Example prompt: "Get the link for the hero image so I can use it in my blog post" --- ## Content Structure ### Entry Content Nodes When creating or updating entries, content is structured as an array of nodes. Supported node types include: Type Description paragraph Standard text paragraph heading Heading (h1-h6) bulletList Unordered list orderedList Numbered list listItem List item codeBlock Code block with syntax highlighting blockquote Quote block image Image node widget Custom widget with props ### Example Content Structure ``` { "content": [ { "lng": "en", "nodes": [ { "type": "heading", "attrs": { "level": 1 }, "content": [ { "type": "text", "text": "Welcome to BCMS" } ] }, { "type": "paragraph", "content": [ { "type": "text", "text": "This is your first paragraph." } ] } ] } ] } ``` ## Security & Permissions ### MCP Key Scopes Your MCP key controls what the AI can access: - Template Access: Only templates explicitly granted in the MCP key are visible - Operation Permissions: Each template can have independent GET/POST/PUT/DELETE permissions - Media Access: Media operations are controlled separately ### Best Practices 1. Principle of Least Privilege: Only grant the permissions needed for your use case 2. Separate Keys: Create different MCP keys for different purposes or team members 3. Regular Rotation: Periodically rotate your MCP keys ## Use Cases ### Content Creation Workflows Blog Post Creation "Create a new blog post about the benefits of headless CMS. Include an introduction, three main benefits with explanations, and a conclusion. Use the Blog template." Product Updates "Update the price field for all products in the Electronics category to apply a 10% discount" ### Content Exploration Content Audit "List all blog posts that don't have a featured image set" Translation Status "Show me which entries are missing German translations" ### Media Organization Library Cleanup "Show me all unused images in the media library" Folder Setup "Create folder structure for: Products > Categories > Electronics, Clothing, Home" ## Troubleshooting ### Common Issues #### "MCP key not found" - Verify your MCP key format: keyId.keySecret.instanceId - Ensure the MCP key hasn't been deleted or deactivated - Check that you're using the correct instance #### "MCP key does not have access to template" - Review your MCP key permissions in the dashboard - Ensure the required operation (GET/POST/PUT/DELETE) is enabled for the template #### Session Expired - MCP sessions may timeout after periods of inactivity - Simply start a new conversation to establish a fresh session ### Getting Help - Documentation: [thebcms.com/docs](https://thebcms.com/docs) - Support: [[email protected]](mailto:[email protected]) - Community: [Join BCMS Discord](https://discord.com/invite/SYBY89ccaR) for community support ## Technical Reference ### Endpoint POST https://app.thebcms.com/api/v3/mcp?mcpKey={MCP_KEY} ### Transport BCMS MCP uses the Streamable HTTP transport with session management. Sessions are maintained via the mcp-session-id header. ### Response Format All tools return structured JSON responses conforming to the MCP specification with: - content: Array of content blocks - structuredContent: Typed response data ## Rate Limits MCP requests are subject to the same rate limits as API requests: - Requests are tracked per MCP key - Contact support if you need higher limits for production workloads
Fossick
Search all of GitHub from your AI agent — find libraries, drill into repos, find code patterns.
Runway API
Generate images and videos using the Runway API.
PostHog MCP
Integrates with PostHog for feature flag management and error tracking.
E2B
Run code in secure sandboxes hosted by E2B
Command Executor
Execute pre-approved shell commands securely on a server.
Unreal-Blender MCP
A unified server to control Blender and Unreal Engine via AI agents.