framer_apply_ canvas_ changesBuild or change a page with Framer's command language: add, update, move, duplicate or remove layers.
Update your CMS, change pages and code, add redirects, read how the site is doing, and publish when you say so, all by asking.
PopMCPFramer
Every call Framer's Server API allows from a server is here: CMS collections, fields and items, publishing and deployments, pages and canvas layers, code files, redirects, styles, translations, branches and site analytics. The everyday tools load by default and the rest are one search away. Items can be written by field name, so the AI does not need Framer's internal ids, and a collection can be named instead of looked up.
174 tools in the full catalog: 86 read and 88 write. 42 load by default, and the rest are found with tool search.
framer_apply_ canvas_ changesBuild or change a page with Framer's command language: add, update, move, duplicate or remove layers.
framer_get_ agent_ instructionsRead Framer's own guide to editing the canvas: the command language for framer_apply_canvas_changes, design rules, examples, the query types for framer_read_project, and the inputs for analytics and stock images.
framer_get_ project_ design_ contextRead this project's fonts, color tokens, text style presets and icon sets, as text.
framer_query_ analyticsRun a read-only analytics query on this site's visitors.
framer_read_ projectRead project state with one or more queries, answered in order.
framer_replace_ textFind and replace words inside one text node.
framer_screenshot_ nodeTake a picture of a canvas node or page, returned as an image you can look at.
framer_add_ collection_ fieldsAdd fields to a collection.
framer_create_ collectionCreate an empty CMS collection.
framer_get_ collection_ itemRead one collection item by id or slug, with its fields by name.
framer_list_ collection_ fieldsList a collection's fields with id, name, type, whether required, enum cases and allowed file types.
framer_list_ collection_ itemsRead a collection's items.
framer_list_ collectionsList the CMS collections with id, name, slug field, whether they are read-only and who manages them.
framer_remove_ collection_ itemsDelete collection items by id or slug.
framer_update_ collection_ itemUpdate one collection item by id or slug.
framer_upsert_ collection_ itemsCreate or update collection items.
framer_create_ branchCreate a branch to try changes on without touching main.
framer_list_ branchesList the project's branches with id, title, URL and last edit.
framer_create_ code_ fileCreate a code file, such as a React component or override.
framer_deploy_ to_ productionMake a published deployment the live site, visible to every visitor.
framer_get_ code_ fileRead a code file's source, by id or path.
framer_get_ publish_ infoGet the live production and staging URLs, when each was last deployed, and image optimization status.
framer_list_ code_ filesList the project's code files with id, name, path, version and exports.
framer_list_ deployment_ issuesList the warnings and errors found in a deployment, each with its severity, message and node id when known.
framer_list_ deploymentsList recent deployments, newest first, with status (pending, optimizing, ready, failed), who made each and when.
framer_list_ unpublished_ changesList the pages changed since the last publish, each with its path, node id and whether it was added, modified or removed.
framer_publish_ and_ deployPublish the current project and make it the live site in one step, visible to every visitor.
framer_publish_ previewPublish the current project state to a new preview deployment.
framer_update_ code_ fileReplace a code file's whole source.
framer_create_ web_ pageCreate an empty web page at a path, such as /about.
framer_list_ managed_ collectionsList collections synced from outside Framer, which this API or a plugin owns.
framer_list_ pagesList the site's web pages with node id and path.
framer_upsert_ managed_ collection_ itemsCreate or update managed collection items.
framer_upload_ fileUpload a file, such as a PDF, to the project from a URL or base64, and get an asset back.
framer_upload_ imageUpload an image to the project from a URL or base64 and get an asset back.
framer_add_ redirectsAdd redirects.
framer_list_ redirectsList the site's redirects with id, from, to and whether each covers all languages.
framer_remove_ redirectsDelete redirects by id.
framer_get_ project_ infoGet this Framer project's name and id.
framer_get_ site_ overviewStart here.
framer_get_ custom_ codeRead the site-wide custom code at each location: headStart, headEnd, bodyStart and bodyEnd.
framer_set_ custom_ codeSet the site-wide custom code at one location, replacing what is there.
framer_flatten_ component_ instanceTurn a local component instance into plain editable layers.
framer_get_ page_ ancestorsList every node above a node on a page, up to the root.
framer_get_ page_ descendant_ referencesList just the ids and types of nodes under one node on a page.
framer_get_ page_ descendants_ of_ typesFind nodes of the given types under one node on a page.
framer_get_ page_ ground_ nodeGet the top-level frame that contains a node.
framer_get_ page_ nodeRead one node on a page in the compact form used by framer_apply_canvas_changes.
framer_get_ page_ node_ rectGet a node's position and size on a page, in pixels.
framer_get_ page_ nodesRead several nodes on a page in the compact form used by framer_apply_canvas_changes.
framer_get_ page_ nodes_ of_ typesFind every node of the given types on a page, such as every text node.
framer_get_ page_ parent_ nodeGet a node's parent on a page, in the compact form.
framer_get_ page_ scope_ nodeGet the page or component that contains a node.
framer_list_ icon_ setsList the icon sets available to use, by id and name.
framer_list_ project_ componentsList the components available to use: the project's canvas and code components, and others from Framer, by id and name.
framer_make_ external_ component_ localCopy an external component into the project so it can be edited.
framer_read_ component_ controlsRead what can be set on components, by id.
framer_read_ icon_ set_ controlsRead what can be set on icon sets, by id.
framer_read_ iconsList the icon names in one icon set.
framer_read_ layout_ template_ controlsRead what can be set on layout templates, by id.
framer_read_ shader_ controlsRead what can be set on shaders, by name.
framer_search_ stock_ imagesSearch stock images for use on the canvas, with thumbnails and an url for each.
framer_serialize_ page_ nodeRead a node and what is inside it, to the depth you choose, in the form framer_apply_canvas_changes understands.
framer_serialize_ page_ nodesRead several nodes and what is inside them, in the form framer_apply_canvas_changes understands.
framer_add_ svgAdd an SVG graphic to the canvas from its source.
framer_add_ textAdd a new text layer to the canvas with the given words.
framer_clone_ nodeDuplicate a canvas node and everything inside it.
framer_create_ component_ nodeCreate an empty canvas component.
framer_create_ frame_ nodeCreate a frame on the canvas, optionally inside a parent.
framer_create_ text_ nodeCreate an empty text node on the canvas, optionally inside a parent.
framer_export_ node_ svgExport any canvas node as SVG source.
framer_get_ canvas_ rootGet the root node of the page this session opened on.
framer_get_ nodeGet one canvas node and its attributes by id.
framer_get_ node_ childrenList a node's direct children.
framer_get_ node_ parentGet a node's parent.
framer_get_ node_ plugin_ dataRead a piece of hidden data stored on a node, collection or item under a key.
framer_get_ node_ rectGet a node's position and size in canvas pixels.
framer_get_ node_ svgRead the SVG source of an SVG node.
framer_get_ node_ textRead a text node's words.
framer_list_ node_ plugin_ data_ keysList the keys of hidden data stored on a node, collection or item.
framer_list_ nodes_ by_ typeList every node of one type in the project, or under one node.
framer_list_ nodes_ with_ attributeList nodes that support an attribute, such as backgroundImage or link, set or not.
framer_list_ nodes_ with_ attribute_ setList nodes where an attribute has a value, such as every node with a link.
framer_move_ nodeMove a node into another parent, optionally at a position among its children.
framer_remove_ nodesDelete canvas nodes and everything inside them.
framer_set_ node_ plugin_ dataStore a piece of hidden data on a node, collection or item under a key, such as the id of the matching record elsewhere.
framer_set_ node_ textReplace a text node's words.
framer_update_ node_ attributesChange a node's attributes, such as name, visible, width, opacity, backgroundColor or link.
framer_add_ component_ gesture_ variantAdd a hover or pressed state to a variant of a canvas component.
framer_add_ component_ instancePlace a component on the canvas from its module URL.
framer_add_ component_ placeholderAdd a placeholder for a component that does not exist yet, to swap for the real one later with framer_replace_component_placeholder.
framer_add_ component_ variablesAdd variables to a component.
framer_add_ component_ variantAdd a variant to a canvas component, based on an existing variant.
framer_add_ detached_ component_ layersPlace a component on the canvas as plain editable layers instead of a linked instance.
framer_add_ variable_ enum_ caseAdd an option to a component's enum variable.
framer_get_ code_ component_ runtime_ errorGet the error a code component instance is showing on the canvas, or null if it works.
framer_get_ vector_ set_ item_ variablesList an icon's editable variables.
framer_list_ component_ variablesList a component's variables, the properties shown when it is used, with id, name, type and default.
framer_list_ vector_ set_ itemsList the icons in a vector set with id, name and URL for placing them.
framer_list_ vector_ setsList the project's vector sets, its shared icon collections.
framer_remove_ component_ placeholderDelete a component placeholder.
framer_remove_ component_ variablesDelete component variables by id.
framer_remove_ variable_ enum_ caseRemove an option from a component's enum variable.
framer_replace_ component_ placeholderSwap a placeholder for a real component instance from its module URL.
framer_set_ component_ variable_ orderSet the order of a component's variables.
framer_set_ variable_ enum_ case_ orderSet the order of a component's enum options.
framer_update_ component_ placeholderChange a component placeholder's title, preview or size.
framer_update_ component_ variableChange a component variable.
framer_update_ variable_ enum_ caseRename an option of a component's enum variable.
framer_add_ enum_ caseAdd an option to an enum field in a collection.
framer_get_ collectionGet one CMS collection by id or exact name.
framer_remove_ array_ item_ fieldsDelete fields inside an array field, and the values stored in them.
framer_remove_ collection_ fieldsDelete fields from a collection, and the values stored in them on every item.
framer_remove_ enum_ caseRemove an option from an enum field.
framer_set_ collection_ field_ orderSet the order fields appear in for a collection.
framer_set_ collection_ item_ orderSet the order of a collection's items.
framer_set_ enum_ case_ orderSet the order of an enum field's options.
framer_update_ array_ item_ fieldChange a field inside an array field, such as renaming it.
framer_update_ collection_ fieldRename a collection field or change its settings, such as required.
framer_update_ enum_ caseRename an option of an enum field.
framer_create_ color_ styleCreate a shared color style.
framer_create_ text_ styleCreate a shared text style.
framer_get_ color_ styleGet one color style.
framer_get_ fontFind one font by family name, optionally with a weight and style.
framer_get_ text_ styleGet one text style.
framer_list_ color_ stylesList the project's shared color styles with id, name and colors.
framer_list_ fontsList the fonts available to the project.
framer_list_ text_ stylesList the project's shared text styles with id, name, font, size and spacing.
framer_remove_ color_ styleDelete a color style.
framer_remove_ text_ styleDelete a text style.
framer_update_ color_ styleChange a color style.
framer_update_ text_ styleChange a text style.
framer_delete_ branchDelete a branch and its unmerged work.
framer_get_ active_ branchGet the branch a call works on when it does not name one: normally main.
framer_get_ branchGet one branch by id.
framer_join_ branchJoin a branch as a contributor, so this user can edit it.
framer_leave_ branchLeave a branch as a contributor.
framer_list_ branch_ changesList what changed on a branch: pages, collections, styles, code files and so on.
framer_merge_ branchMerge a branch into its base, or into the branch you name.
framer_rename_ branchRename a branch.
framer_get_ code_ file_ version_ contentRead the source of one saved version of a code file.
framer_get_ deploymentGet one deployment's status and URLs.
framer_list_ change_ contributorsList the people who made changes between two versions of the project.
framer_list_ code_ file_ versionsList a code file's saved versions with id, name, author and date, by file id or path.
framer_remove_ code_ fileDelete a code file, by id or path.
framer_rename_ code_ fileRename a code file, by id or path.
framer_typecheck_ codeCheck TypeScript source for type errors without saving it.
framer_add_ page_ breakpointAdd a breakpoint to a web page, based on one of its existing frames.
framer_clone_ design_ pageCopy a design page under a new name.
framer_clone_ web_ pageCopy a web page to a new path.
framer_create_ design_ pageCreate a design page, a canvas for drafts that is not published to the site.
framer_create_ managed_ collectionCreate a collection owned by this API, for syncing data from another system.
framer_get_ breakpoint_ suggestionsList suggested breakpoints to add to a web page.
framer_get_ page_ collection_ itemFor a CMS detail page, get the collection item it is showing in the editor.
framer_list_ managed_ collection_ fieldsList a managed collection's fields.
framer_list_ managed_ collection_ item_ idsList the ids of a managed collection's items.
framer_remove_ managed_ collection_ itemsDelete managed collection items by id.
framer_set_ managed_ collection_ fieldsReplace a managed collection's whole field list.
framer_set_ managed_ collection_ item_ orderSet the order of a managed collection's items.
framer_add_ imageUpload an image and place it on the canvas.
framer_add_ imagesUpload several images and place them on the canvas.
framer_create_ localeAdd a language to the site.
framer_get_ default_ localeGet the site's main language.
framer_get_ image_ dataGet an image asset's picture, returned as an image you can look at.
framer_list_ locale_ languagesList the language codes Framer supports, for framer_create_locale.
framer_list_ locale_ regionsList the region codes available for a language, for framer_create_locale.
framer_list_ localesList the site's languages with id, code, name and slug.
framer_list_ localization_ groupsList translatable content, grouped by page, collection item and so on, with each source text and its translations.
framer_set_ localization_ dataSave translations and translation status.
framer_upload_ filesUpload several files to the project in one call.
framer_upload_ imagesUpload several images to the project in one call.
framer_set_ redirect_ orderSet the order redirects are checked in.
framer_update_ redirectChange a redirect.
framer_get_ current_ userGet the Framer user this connection acts as.
Credentials off one Framer screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.
Open your project in Framer and copy the address from your browser. In the project, open Site Settings, then General, find API Keys, and create a key. Open Framer in PopMCP, paste the project URL and the key, and connect. PopMCP opens the project to check them and names the connection after it.
https://framer.com/projects/My-Site--abc123••••••••••••3f7aEdits save to the project, but visitors see nothing until the site is published. A preview link is public to anyone who has it, and deploying changes the live site, so ask the AI to confirm first. A Framer key has no read-only setting and acts as the person who made it, so new connections start read-only until an owner or admin allows writes in PopMCP. Framer's API cannot create a new project, read form submissions or add domains.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Framer credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
What has changed on my site since the last publish, and what is live right now?
framer_get_site_overviewok
Then just ask for the work
“What has changed on my site since the last publish, and what is live right now?”
“Add these three posts to my Blog collection as drafts”
“Publish the site and make it live, once I have seen what changed”
“Redirect /old-pricing to /pricing and check nothing else points there”
“Change the hero headline on the homepage and show me a screenshot”
“Which pages got the most visitors last month?”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Framer behind an AI client.
No. You create an API key in the project's Site Settings, under General, and paste it into PopMCP with the project URL. There is no app to register.
No. A Framer key belongs to one project, so one connection reaches one site. To work on another site, create a key in that project and connect it too.
No. Edits save to the project and visitors see them only after a publish and a deploy. The AI can do both when you ask, and new connections start read-only so nothing changes until writes are allowed.
Yes. The AI can create a branch, make its changes there and merge it when you are happy. Each tool takes the branch to work on.
Framer says its Server API is free during the open beta, and it has not announced a price for after that. Check Framer's site for the current position.
Framer's API cannot create a new project, read form submissions or add domains. Anything that needs the editor open, such as working with what is selected on your screen, is not available either.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Connect Framer in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Framer on the consent screen. The Framer tools are then available in that session, and no Framer credential is stored on your machine.
Loading 174 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 42-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.
A tool is something your AI calls, and there are 174 here. A trigger is something PopMCP watches for you: 6 Framer events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Framer.
Launch a hosted MCP endpoint for Framer, keep tool access under control, and start testing real workflow prompts right away.