Builder.io MCP server for AI agents

Live

BEARER TOKEN

HEADLESS CMS

Developer Tools

Builder.io gives your agent headless CMS access to your Builder space: read published content by model or URL, create, update, and replace entries, manage models and content folders, and list and organize media assets.

  • Per-user credentials: each call uses the actual user's access token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Builder.io
agent · Acme Q3
Run
What's published at /pricing right now?
S
builderio_content_get_by_url
103ms
Content agent
The /pricing page entry was last updated 4 days ago. It lists 3 plans and the hero headline reads Plans for every team.
Sources: Builder page model, 1 entry
builderio
1 entry
18:29
Message Claude...

Tools your content agent reaches for on Builder.io, scoped per user.

CALL ANY TOOL
22 tools for your headless CMS in Builder.io: read published content by model or URL, create, update, replace, and delete entries, manage models and content folders, and list and organize media assets.
builderio_asset_delete
Delete asset
Delete a media asset from the Builder space through the Admin API. Returns true when the asset is removed. Use this only when the file is no longer referenced by any content. Use builderio_assets_list to find the asset ID.
Parameters
Name
Type
Required
Description
asset_id
string
Required
ID of the asset to delete.
builderio_asset_folder_create
Create asset folder
builderio_assets_list
List assets
builderio_content_get
Get content
builderio_content_get_by_url
Content get by url
builderio_content_list
List content
builderio_entry_create
Create entry
builderio_entry_delete
Delete entry
builderio_entry_replace
Entry replace
builderio_entry_update
Update entry
builderio_folder_create
Create folder
builderio_folder_delete
Delete folder
builderio_folder_get
Get folder
builderio_folder_update
Update folder
builderio_folders_list
List folders
builderio_model_create
Create model
builderio_model_delete
Delete model
builderio_model_get
Get model
builderio_model_update
Update model
builderio_models_list
List models
builderio_settings_get
Get settings
builderio_users_list
List users
Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Builder.io tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["builderio"], toolNames: [
    "builderio_content_get_by_url",
    "builderio_content_list",
    "builderio_entry_update"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Update the hero headline on the pricing page entry" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["builderio"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Update the hero headline on the pricing page entry" }],
  tools,
});

// Execute the tool call with the user's vaulted Builder.io access token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["builderio"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Update the hero headline on the pricing page entry" }],
  tools,
});

// Tool call runs with the user's vaulted Builder.io access token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["builderio"] }, pageSize: 100,
});

const agent = new Agent({
  name: "content_agent",
  model: "gemini-2.5-pro",
  instruction: "Builder.io tools scoped to this user",
  tools,
});

await agent.run("Update the hero headline on the pricing page entry");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Builder.io tool. Click to copy, paste into your agent, done.
Content
Copy the prompt
Copied
What content is published at /pricing?
Copy the prompt
Copied
List the latest 10 entries in the blog-article model.
Copy the prompt
Copied
Update the hero headline on the homepage entry to Plans for every team.
Models
Copy the prompt
Copied
List every model in our Builder space.
Copy the prompt
Copied
Show the fields on the blog-article model.
Copy the prompt
Copied
Create a data model called announcement with title and body fields.
Folders and assets
Copy the prompt
Copied
List the content folders in our space.
Copy the prompt
Copied
Create a folder called Q4 Campaigns.
Copy the prompt
Copied
List media assets uploaded this month.
SEE HOW AUTH WORKS
Each user connects their own Builder.io access token once, and Scalekit sends it with every call. Access tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Builder.io
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Builder.io
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Builder.io
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Builder.io
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other developer and design connectors.
Engineering Teams
Auto release notes agent
Reads merged GitHub PRs, groups them into structured release notes, publishes the page to Notion, and announces the release in Slack. Every call runs on the engineer's own delegated OAuth.
Engineering Teams
DevOps assistant agent
Polls GitHub for failing checks and stale PRs, opens Linear issues for the ones that need work, and posts a daily digest to Slack. It acts as the engineer, not a shared service account.
Test other agents
See the same per-user auth pattern across other developer and design connectors.
ENGINEERING
Auto-release notes agent
Group merged GitHub PRs into structured release notes, publish the page to Notion, and announce the release in Slack.
ENGINEERING
DevOps assistant agent
Poll GitHub for failing checks and stale pull requests, open Linear issues for the ones that need work, and digest to Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Builder.io access token looks fine in a demo. In production every entry and model change looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Builder.io today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Builder.io as the user or through a shared access token?
As the user. Each user connects their own Builder.io access token once, and Scalekit sends it with every call. Audit logs attribute every entry and model change to that user, not a shared service account.
Where is the Builder.io access token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new access token. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Builder.io?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the content read tools without builderio_entry_delete or builderio_model_delete. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Builder.io access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Does the agent see drafts or only published content?
The content read tools, such as builderio_content_list and builderio_content_get_by_url, return published entries through the Builder Content API. Writes such as builderio_entry_create and builderio_entry_update go through the Write API, and models, folders, and assets go through the Admin API.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""builderio"": {
""url"": ""https://mcp.scalekit.com/builderio"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.builderio]
url = ""https://mcp.scalekit.com/builderio""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""builderio"": {
""url"": ""https://mcp.scalekit.com/builderio"",
""type"": ""http""
}
}
}