Vev MCP Server
Vev ships a Model Context Protocol server, so AI assistants and agents — Claude, ChatGPT, Claude Code, or anything else that speaks MCP — can find your Vev projects, generate embed code, export project content section by section, and create new projects and pages — optionally generated with AI from your section libraries.
https://api.vev.design/v2/mcpThe server is stateless Streamable HTTP: JSON-RPC 2.0 over POST, one JSON response per request. Every tool requires the list:project scope; create_project and create_page also require create:project.
Connecting
Claude (claude.ai and Claude Desktop)
Go to Settings → Connectors → Add custom connector and paste the server URL. Claude discovers the OAuth endpoints automatically and opens the Vev consent screen — log in, review the access, and click Allow access.
Claude Code
claude mcp add --transport http vev https://api.vev.design/v2/mcpThe OAuth flow starts automatically on first use. Alternatively, skip OAuth entirely with an API key:
claude mcp add --transport http vev https://api.vev.design/v2/mcp \
--header "x-vev-key: [your-key]"Any other client
Two authentication options:
- OAuth 2.1 — authorization code + PKCE (S256), with dynamic client registration. Discovery documents are at
https://api.vev.design/.well-known/oauth-authorization-serverandhttps://api.vev.design/.well-known/oauth-protected-resource/v2/mcp. The access token you receive is a Vev API key — it stays valid until revoked from your user profile. - API key — create a key with the
list:projectscope, pluscreate:projectto create projects and pages (see Authentication), and send it as anx-vev-keyheader or asAuthorization: Bearer [your-key].
Connections authorized before the create tools existed only hold list:project: the create tools answer with an error naming the missing scope. Remove and re-add the connector to grant it.
Test the connection:
curl -X POST https://api.vev.design/v2/mcp \
--header "x-vev-key: [your-key]" \
--header "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Tools
| Tool | What it does |
|---|---|
find_projects | Find projects by key, free-text search, or URL |
get_embed_code | Build the embed snippet for a project page, with every embed parameter documented |
get_project_sections | Export a project section by section, for rebuilding its content in another system |
list_libraries | List the section libraries AI pages can be built from |
create_project | Create a project, optionally with its home page generated by AI |
create_page | Add a page to a project, optionally generated by AI |
Only projects the authenticated user can access are ever returned, and pages can only be added to projects the user can edit.
find_projects
Look up projects three ways, combinable in one call:
ids— project keys to fetch directly (max 20)search— free-text search across titles, descriptions, tags, and page texturl— a published site URL, an editor URL, or an embed URL, resolved to its projectaccountKey— restrict search to an account (defaults to your own),limit— max results (default 10)
Each result includes the project key, title, publish state, a thumbnail URL, and an editor link.
get_embed_code
Takes a projectKey (and optionally pageKey — defaults to the index page) plus the embed options fill, shadowdom, containerMode, target, and templateVariables. Returns the ready-to-paste script tag, the embed URL, the project's page list, and a readiness check: the project must be published to an embed destination (enable Get embed code in the editor's publish dialog) before the embed resolves.
Tip: containerMode: true rewrites the design's media queries to container queries, so the embed responds to the width of its slot instead of the viewport — the right choice when embedding a Vev page as a section inside another layout.
get_project_sections
Exports everything needed to rebuild a project's content elsewhere. For every section of every page (filter with pageKey or sectionKeys):
- a screenshot URL (1200px wide, generated when a project version is saved)
- the element tree with text content as HTML
- the section's real per-breakpoint CSS (
includeCss, default on) - every image, video, shape (inline SVG), and font the section uses, with URLs and dimensions
- interactions and animation keyframes (
includeInteractions, default on) — animations are CSS-property keyframes with WAAPI-style timing, and triggers reference elements by their key, which is also the element's DOM id - captured rendered HTML where available (
includeHtml), and the raw Vev content models for full fidelity (includeModels)
Project-level, the export carries the resolved design theme (colors, text styles, spacing, radii), the breakpoint definitions, and the project color swatches.
Calls are capped at 40 sections — narrow with pageKey or sectionKeys for larger projects.
list_libraries
Lists the libraries AI page generation can build from: your account's own libraries plus public Vev libraries, limited to AI-enabled ones (a library admin turns on AI for a library in the editor, which analyzes its sections). Scope the list to where the page will go — projectKey for an existing project, or accountKey / workspace for a new one — since team-limited libraries are only available inside their teams. Each result has the library key, title, description, and whether it is public or your own.
create_project
Creates a project with an empty Home page. Takes a title, and optionally accountKey (defaults to your own), workspace (the folder to create it in), and preset (desktop or mobile first). Returns the project key, the home page key, and an editor link.
Pass ai to fill the home page with AI — the same library page AI as the editor's AI page draft:
libraries— library keys fromlist_libraries(1–5)prompt— what the page is for: audience, purpose, tone, sections you wanttext— source copy or facts to use (optional)images—{ url, description }pairs to place on the page; URLs must be publichttps(optional)imageStyle— a style prefix for generated images, e.g.flat pastel illustration(optional)useOnlyProvidedAssets— never generate images, only use the ones provided (optional)
The AI picks sections from the libraries and writes their copy, images, and icons. It spends AI credits from the project's account (and team), and the call is refused up front if the balance can't cover a page. Generation takes up to about a minute; images the AI asks for keep rendering in the background for a minute or two after the call returns. The result's ai.status is generated (with the number of sections written) or failed with a message — the project is created either way.
create_page
Adds a page to an existing project you can edit. Takes projectKey, an optional title (default Untitled; a title already used in the project gets a number appended), and the same optional ai object as create_project. Returns the page key and an editor link.