100+ integrations are ready to connect to your AI.Connect your first MCP

Framer MCP server for your AI

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

What has changed on my site since the last publish, and what is live right now?

Supported Framer tools

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_changes

Build or change a page with Framer's command language: add, update, move, duplicate or remove layers.

framer_get_agent_instructions

Read 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_context

Read this project's fonts, color tokens, text style presets and icon sets, as text.

framer_query_analytics

Run a read-only analytics query on this site's visitors.

framer_read_project

Read project state with one or more queries, answered in order.

framer_replace_text

Find and replace words inside one text node.

framer_screenshot_node

Take a picture of a canvas node or page, returned as an image you can look at.

framer_add_collection_fields

Add fields to a collection.

framer_create_collection

Create an empty CMS collection.

framer_get_collection_item

Read one collection item by id or slug, with its fields by name.

framer_list_collection_fields

List a collection's fields with id, name, type, whether required, enum cases and allowed file types.

framer_list_collection_items

Read a collection's items.

framer_list_collections

List the CMS collections with id, name, slug field, whether they are read-only and who manages them.

framer_remove_collection_items

Delete collection items by id or slug.

framer_update_collection_item

Update one collection item by id or slug.

framer_upsert_collection_items

Create or update collection items.

framer_create_branch

Create a branch to try changes on without touching main.

framer_list_branches

List the project's branches with id, title, URL and last edit.

framer_create_code_file

Create a code file, such as a React component or override.

framer_deploy_to_production

Make a published deployment the live site, visible to every visitor.

framer_get_code_file

Read a code file's source, by id or path.

framer_get_publish_info

Get the live production and staging URLs, when each was last deployed, and image optimization status.

framer_list_code_files

List the project's code files with id, name, path, version and exports.

framer_list_deployment_issues

List the warnings and errors found in a deployment, each with its severity, message and node id when known.

framer_list_deployments

List recent deployments, newest first, with status (pending, optimizing, ready, failed), who made each and when.

framer_list_unpublished_changes

List the pages changed since the last publish, each with its path, node id and whether it was added, modified or removed.

framer_publish_and_deploy

Publish the current project and make it the live site in one step, visible to every visitor.

framer_publish_preview

Publish the current project state to a new preview deployment.

framer_update_code_file

Replace a code file's whole source.

framer_create_web_page

Create an empty web page at a path, such as /about.

framer_list_managed_collections

List collections synced from outside Framer, which this API or a plugin owns.

framer_list_pages

List the site's web pages with node id and path.

framer_upsert_managed_collection_items

Create or update managed collection items.

framer_upload_file

Upload a file, such as a PDF, to the project from a URL or base64, and get an asset back.

framer_upload_image

Upload an image to the project from a URL or base64 and get an asset back.

framer_add_redirects

Add redirects.

framer_list_redirects

List the site's redirects with id, from, to and whether each covers all languages.

framer_remove_redirects

Delete redirects by id.

framer_get_project_info

Get this Framer project's name and id.

framer_get_site_overview

Start here.

framer_get_custom_code

Read the site-wide custom code at each location: headStart, headEnd, bodyStart and bodyEnd.

framer_set_custom_code

Set the site-wide custom code at one location, replacing what is there.

framer_flatten_component_instance

Turn a local component instance into plain editable layers.

framer_get_page_ancestors

List every node above a node on a page, up to the root.

framer_get_page_descendant_references

List just the ids and types of nodes under one node on a page.

framer_get_page_descendants_of_types

Find nodes of the given types under one node on a page.

framer_get_page_ground_node

Get the top-level frame that contains a node.

framer_get_page_node

Read one node on a page in the compact form used by framer_apply_canvas_changes.

framer_get_page_node_rect

Get a node's position and size on a page, in pixels.

framer_get_page_nodes

Read several nodes on a page in the compact form used by framer_apply_canvas_changes.

framer_get_page_nodes_of_types

Find every node of the given types on a page, such as every text node.

framer_get_page_parent_node

Get a node's parent on a page, in the compact form.

framer_get_page_scope_node

Get the page or component that contains a node.

framer_list_icon_sets

List the icon sets available to use, by id and name.

framer_list_project_components

List the components available to use: the project's canvas and code components, and others from Framer, by id and name.

framer_make_external_component_local

Copy an external component into the project so it can be edited.

framer_read_component_controls

Read what can be set on components, by id.

framer_read_icon_set_controls

Read what can be set on icon sets, by id.

framer_read_icons

List the icon names in one icon set.

framer_read_layout_template_controls

Read what can be set on layout templates, by id.

framer_read_shader_controls

Read what can be set on shaders, by name.

framer_search_stock_images

Search stock images for use on the canvas, with thumbnails and an url for each.

framer_serialize_page_node

Read a node and what is inside it, to the depth you choose, in the form framer_apply_canvas_changes understands.

framer_serialize_page_nodes

Read several nodes and what is inside them, in the form framer_apply_canvas_changes understands.

framer_add_svg

Add an SVG graphic to the canvas from its source.

framer_add_text

Add a new text layer to the canvas with the given words.

framer_clone_node

Duplicate a canvas node and everything inside it.

framer_create_component_node

Create an empty canvas component.

framer_create_frame_node

Create a frame on the canvas, optionally inside a parent.

framer_create_text_node

Create an empty text node on the canvas, optionally inside a parent.

framer_export_node_svg

Export any canvas node as SVG source.

framer_get_canvas_root

Get the root node of the page this session opened on.

framer_get_node

Get one canvas node and its attributes by id.

framer_get_node_children

List a node's direct children.

framer_get_node_parent

Get a node's parent.

framer_get_node_plugin_data

Read a piece of hidden data stored on a node, collection or item under a key.

framer_get_node_rect

Get a node's position and size in canvas pixels.

framer_get_node_svg

Read the SVG source of an SVG node.

framer_get_node_text

Read a text node's words.

framer_list_node_plugin_data_keys

List the keys of hidden data stored on a node, collection or item.

framer_list_nodes_by_type

List every node of one type in the project, or under one node.

framer_list_nodes_with_attribute

List nodes that support an attribute, such as backgroundImage or link, set or not.

framer_list_nodes_with_attribute_set

List nodes where an attribute has a value, such as every node with a link.

framer_move_node

Move a node into another parent, optionally at a position among its children.

framer_remove_nodes

Delete canvas nodes and everything inside them.

framer_set_node_plugin_data

Store 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_text

Replace a text node's words.

framer_update_node_attributes

Change a node's attributes, such as name, visible, width, opacity, backgroundColor or link.

framer_add_component_gesture_variant

Add a hover or pressed state to a variant of a canvas component.

framer_add_component_instance

Place a component on the canvas from its module URL.

framer_add_component_placeholder

Add 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_variables

Add variables to a component.

framer_add_component_variant

Add a variant to a canvas component, based on an existing variant.

framer_add_detached_component_layers

Place a component on the canvas as plain editable layers instead of a linked instance.

framer_add_variable_enum_case

Add an option to a component's enum variable.

framer_get_code_component_runtime_error

Get the error a code component instance is showing on the canvas, or null if it works.

framer_get_vector_set_item_variables

List an icon's editable variables.

framer_list_component_variables

List a component's variables, the properties shown when it is used, with id, name, type and default.

framer_list_vector_set_items

List the icons in a vector set with id, name and URL for placing them.

framer_list_vector_sets

List the project's vector sets, its shared icon collections.

framer_remove_component_placeholder

Delete a component placeholder.

framer_remove_component_variables

Delete component variables by id.

framer_remove_variable_enum_case

Remove an option from a component's enum variable.

framer_replace_component_placeholder

Swap a placeholder for a real component instance from its module URL.

framer_set_component_variable_order

Set the order of a component's variables.

framer_set_variable_enum_case_order

Set the order of a component's enum options.

framer_update_component_placeholder

Change a component placeholder's title, preview or size.

framer_update_component_variable

Change a component variable.

framer_update_variable_enum_case

Rename an option of a component's enum variable.

framer_add_enum_case

Add an option to an enum field in a collection.

framer_get_collection

Get one CMS collection by id or exact name.

framer_remove_array_item_fields

Delete fields inside an array field, and the values stored in them.

framer_remove_collection_fields

Delete fields from a collection, and the values stored in them on every item.

framer_remove_enum_case

Remove an option from an enum field.

framer_set_collection_field_order

Set the order fields appear in for a collection.

framer_set_collection_item_order

Set the order of a collection's items.

framer_set_enum_case_order

Set the order of an enum field's options.

framer_update_array_item_field

Change a field inside an array field, such as renaming it.

framer_update_collection_field

Rename a collection field or change its settings, such as required.

framer_update_enum_case

Rename an option of an enum field.

framer_create_color_style

Create a shared color style.

framer_create_text_style

Create a shared text style.

framer_get_color_style

Get one color style.

framer_get_font

Find one font by family name, optionally with a weight and style.

framer_get_text_style

Get one text style.

framer_list_color_styles

List the project's shared color styles with id, name and colors.

framer_list_fonts

List the fonts available to the project.

framer_list_text_styles

List the project's shared text styles with id, name, font, size and spacing.

framer_remove_color_style

Delete a color style.

framer_remove_text_style

Delete a text style.

framer_update_color_style

Change a color style.

framer_update_text_style

Change a text style.

framer_delete_branch

Delete a branch and its unmerged work.

framer_get_active_branch

Get the branch a call works on when it does not name one: normally main.

framer_get_branch

Get one branch by id.

framer_join_branch

Join a branch as a contributor, so this user can edit it.

framer_leave_branch

Leave a branch as a contributor.

framer_list_branch_changes

List what changed on a branch: pages, collections, styles, code files and so on.

framer_merge_branch

Merge a branch into its base, or into the branch you name.

framer_rename_branch

Rename a branch.

framer_get_code_file_version_content

Read the source of one saved version of a code file.

framer_get_deployment

Get one deployment's status and URLs.

framer_list_change_contributors

List the people who made changes between two versions of the project.

framer_list_code_file_versions

List a code file's saved versions with id, name, author and date, by file id or path.

framer_remove_code_file

Delete a code file, by id or path.

framer_rename_code_file

Rename a code file, by id or path.

framer_typecheck_code

Check TypeScript source for type errors without saving it.

framer_add_page_breakpoint

Add a breakpoint to a web page, based on one of its existing frames.

framer_clone_design_page

Copy a design page under a new name.

framer_clone_web_page

Copy a web page to a new path.

framer_create_design_page

Create a design page, a canvas for drafts that is not published to the site.

framer_create_managed_collection

Create a collection owned by this API, for syncing data from another system.

framer_get_breakpoint_suggestions

List suggested breakpoints to add to a web page.

framer_get_page_collection_item

For a CMS detail page, get the collection item it is showing in the editor.

framer_list_managed_collection_fields

List a managed collection's fields.

framer_list_managed_collection_item_ids

List the ids of a managed collection's items.

framer_remove_managed_collection_items

Delete managed collection items by id.

framer_set_managed_collection_fields

Replace a managed collection's whole field list.

framer_set_managed_collection_item_order

Set the order of a managed collection's items.

framer_add_image

Upload an image and place it on the canvas.

framer_add_images

Upload several images and place them on the canvas.

framer_create_locale

Add a language to the site.

framer_get_default_locale

Get the site's main language.

framer_get_image_data

Get an image asset's picture, returned as an image you can look at.

framer_list_locale_languages

List the language codes Framer supports, for framer_create_locale.

framer_list_locale_regions

List the region codes available for a language, for framer_create_locale.

framer_list_locales

List the site's languages with id, code, name and slug.

framer_list_localization_groups

List translatable content, grouped by page, collection item and so on, with each source text and its translations.

framer_set_localization_data

Save translations and translation status.

framer_upload_files

Upload several files to the project in one call.

framer_upload_images

Upload several images to the project in one call.

framer_set_redirect_order

Set the order redirects are checked in.

framer_update_redirect

Change a redirect.

framer_get_current_user

Get the Framer user this connection acts as.

Connect Framer to Claude, ChatGPT and Claude Code

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.

Project URLhttps://framer.com/projects/My-Site--abc123
API key••••••••••••3f7a
ConnectionVerified

Then just ask for the work

  • “What has changed on my site since the last publish, and what is live right now?”

    • get_site_overview
    • list_unpublished_changes
  • “Add these three posts to my Blog collection as drafts”

    • list_collection_fields
    • upsert_collection_items
  • “Publish the site and make it live, once I have seen what changed”

    • list_unpublished_changes
    • publish_and_deploy
  • “Redirect /old-pricing to /pricing and check nothing else points there”

    • list_redirects
    • add_redirects
  • “Change the hero headline on the homepage and show me a screenshot”

    • get_agent_instructions
    • read_project
    • apply_canvas_changes
    • screenshot_node
  • “Which pages got the most visitors last month?”

    • get_agent_instructions
    • query_analytics

Use Framer from the assistant you already open

One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.

Claude DesktopCustom connector

Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.

Claude WebCustom connector

The same endpoint, registered in the browser. Nothing to install on the machine you are working from.

ChatGPTCustom connector

Register PopMCP as a custom connector, then let ChatGPT read and update the account.

CodexDesktop & CLI

Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.

OpenCodeCoding agent

Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.

ZCodeDesktop app

Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.

Framer MCP server questions

What teams ask before putting Framer behind an AI client.

Do I need a developer app?

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.

Does a key reach all my Framer sites?

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.

Will my changes go live straight away?

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.

Can it work on a branch instead of the main site?

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.

Does it cost extra on the Framer side?

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.

What can it not do?

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.

Do I have to run or host the Framer MCP server myself?

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.

Which AI clients can use this MCP server?

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.

How do I connect Framer to Claude Code?

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.

Why do only 42 of the 174 tools load by default?

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.

What is the difference between a tool and a trigger?

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.

Connect Framer to your AI in minutes

Launch a hosted MCP endpoint for Framer, keep tool access under control, and start testing real workflow prompts right away.

Connect your first MCP