Note: All code snippets below already include your user session ID and secret. Do not share these URLs with others.
Important: Using Framer MCP requires that the Framer MCP plugin is open inside the Framer app. Only one MCP plugin can be open at any time; the server will control whichever Framer project currently has the plugin open.
npx -y @playwriter/install-mcp --oauth no "https://mcp.unframer.co/mcp?id=xxx&secret=xxx"{
"mcpServers": {
"framer": {
"type": "streamableHttp",
"url": "https://mcp.unframer.co/mcp?id=xxx&secret=xxx"
}
}
}~/.cursor/mcp.json.Important: You must keep the quotes around the URL or Claude can drop some query params.
claude mcp add --transport http --scope project framer "https://mcp.unframer.co/mcp?id=xxx&secret=xxx"{
"mcpServers": {
"framer": {
"type": "http",
"url": "https://mcp.unframer.co/mcp?id=xxx&secret=xxx"
}
}
}Important: The config above only makes Framer MCP available when you callclaudefrom the same directory as.mcp.json. Omit--scope projectonly if you want the MCP globally available.
Framer.https://mcp.unframer.co/mcp?id=xxx&secret=xxxmcp-remote instead by editing claude_desktop_config.json:{
"mcpServers": {
"framer": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.unframer.co/mcp?id=xxx&secret=xxx"
]
}
}
}opencode.json in your project root, or use ~/.config/opencode/opencode.json globally:{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"framer": {
"type": "remote",
"url": "https://mcp.unframer.co/mcp?id=xxx&secret=xxx",
"enabled": true
}
}
}~/.config/zed/settings.json:{
"context_servers": {
"framer": {
"url": "https://mcp.unframer.co/mcp?id=xxx&secret=xxx"
}
}
}MCP: Add Server.{
"servers": {
"framer": {
"type": "http",
"url": "https://mcp.unframer.co/mcp?id=xxx&secret=xxx"
}
}
}import { Agent, hostedMcpTool, run } from "@openai/agents"
const agent = new Agent({
name: "Framer assistant",
model: "gpt-4.1",
tools: [
hostedMcpTool({
serverLabel: "framer",
serverUrl: `https://mcp.unframer.co/mcp?id=${process.env.USER_ID}&secret=${process.env.SECRET}`,
}),
],
})
const result = await run(agent, "Publish the current page to production")
console.log(result.finalOutput)~/.codex/config.toml:[mcp_servers.framer]
url = "https://mcp.unframer.co/mcp?id=xxx&secret=xxx"~/.codex/config.toml.~/.codex/config.toml:[mcp_servers.framer]
url = "https://mcp.unframer.co/mcp?id=xxx&secret=xxx"~/.codex/config.toml.mcp-remote to bridge remote HTTP:mcp-remote "https://mcp.unframer.co/mcp?id=xxx&secret=xxx"Do you have access to the Framer MCP tool?
Rewrite the current page text.
| Symptom | Quick fix |
| Timeouts or very slow calls | Ensure the Framer MCP plugin is open. If it is hung, close and reopen it. |
| App does not see Framer MCP | Open the Framer MCP plugin before opening Cursor or Claude. |
| MCP loading fails in Claude Code | Make sure you used quotes around the URL in the claude mcp add command. |
| Switching projects | Close the MCP plugin in the current project and open it in the target project. |
| Cursor cannot see server | Ensure Agent mode is enabled and Pro subscription is active. |
| Copilot does not list server | Update to VS Code 1.102 or newer and enable MCP support. |
unframer CLI to interact with Framer MCP directly from your terminal, without needing an AI assistant.npx -y unframer mcp login "https://mcp.unframer.co/mcp?id=xxx&secret=xxx"npx unframer --help to see the full list.1234567891011121314151617181920212223# Get project structure as XML npx unframer mcp getProjectXml # Get a specific node by ID npx unframer mcp getNodeXml --nodeId "abc123" # Update a node's text or attributes npx unframer mcp updateXmlForNode --nodeId "abc123" --xml '<Text nodeId="abc123">New text</Text>' # Search for available fonts npx unframer mcp searchFonts --query "Inter" # List all CMS collections npx unframer mcp getCMSCollections # Get items from a CMS collection npx unframer mcp getCMSItems --collectionId "col123" # Export React components npx unframer mcp exportReactComponents # Run any command with --help for detailed options npx unframer mcp updateXmlForNode --help