/ Directory / Playground / Webiny MCP
● Official webiny 🔑 Needs your key

Webiny MCP

by webiny · webiny/webiny-js

Talk to your Webiny headless CMS from Claude — generate content models, bulk-edit entries, scaffold pages without clicking through the admin UI.

Webiny is a serverless headless CMS on AWS, and its MCP server exposes the GraphQL admin API as agent tools. Instead of teaching Claude to write Webiny GraphQL by hand, you get typed tools for content models, entries, page builder pages, file manager, and APW publishing workflows — all backed by your own auth tokens.

Why use it

Key features

Live Demo

What it looks like in practice

webiny-mcp.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "webiny-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@webiny/mcp-server",
        "--api-url",
        "https://your-project.cloudfront.net/cms/manage/en-US",
        "--token",
        "${WEBINY_TOKEN}"
      ]
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "webiny-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@webiny/mcp-server",
        "--api-url",
        "https://your-project.cloudfront.net/cms/manage/en-US",
        "--token",
        "${WEBINY_TOKEN}"
      ]
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "webiny-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@webiny/mcp-server",
        "--api-url",
        "https://your-project.cloudfront.net/cms/manage/en-US",
        "--token",
        "${WEBINY_TOKEN}"
      ]
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "webiny-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@webiny/mcp-server",
        "--api-url",
        "https://your-project.cloudfront.net/cms/manage/en-US",
        "--token",
        "${WEBINY_TOKEN}"
      ]
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "webiny-mcp",
      "command": "npx",
      "args": [
        "-y",
        "@webiny/mcp-server",
        "--api-url",
        "https://your-project.cloudfront.net/cms/manage/en-US",
        "--token",
        "${WEBINY_TOKEN}"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "webiny-mcp": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@webiny/mcp-server",
          "--api-url",
          "https://your-project.cloudfront.net/cms/manage/en-US",
          "--token",
          "${WEBINY_TOKEN}"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add webiny-mcp -- npx -y @webiny/mcp-server --api-url https://your-project.cloudfront.net/cms/manage/en-US --token ${WEBINY_TOKEN}

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use Webiny MCP

Scaffold a new content model from a description

👤 Webiny developers / content engineers ⏱ ~25 min intermediate

When to use: PM says 'we need a Case Studies section with these fields'. You want Claude to translate that to a Webiny model.

Prerequisites
  • Webiny project runningnpx create-webiny-project deployed to AWS
  • Personal access token — Create one in Admin → Settings → Personal Access Tokens
Flow
  1. Connect MCP
    Add Webiny MCP using the manage API URL for dev environment. Verify it can list existing models.✓ Copied
    → list_models returns at least the built-in models
  2. Scaffold the model
    Create a CaseStudy content model with fields: title (text, required), client (text), summary (rich text), heroImage (file ref), publishedAt (datetime), tags (text, multi). Singular Case Study, plural Case Studies.✓ Copied
    → create_content_model called once; field IDs use camelCase consistently
  3. Seed sample entries
    Now add 3 placeholder entries so the editorial team has something to look at.✓ Copied
    → 3 entries created via create_entry with realistic placeholder content

Outcome: A working model + sample data, ready for the editorial team in minutes instead of clicking through the admin UI.

Pitfalls
  • Field IDs accidentally use spaces — Webiny rejects them; the MCP normalizes but always preview before commit
  • Wrong locale in URL — URL carries /en-US/ — match your default locale
Combine with: filesystem

Bulk-update entries to fix a typo across 200 case studies

👤 Content ops ⏱ ~30 min intermediate

When to use: Legal flagged the wrong company name in old entries; you don't want to click 200 times.

Flow
  1. Search affected entries
    Webiny: search CaseStudy entries containing 'Acme Corp' in summary. List IDs.✓ Copied
    → search_entries returns all matching IDs
  2. Dry-run replace
    For each, propose the new summary replacing 'Acme Corp' with 'Acme Inc.' Show me 3 examples first.✓ Copied
    → 3 diffs shown before any write
  3. Apply
    Looks right. Apply the change to all matching entries and republish.✓ Copied
    → update_entry + publish_entry called for each, with progress count

Outcome: Hundreds of entries fixed and republished in a single conversation, with audit trail.

Pitfalls
  • Auto-publish skips review — Use draft + APW workflow — don't auto-publish bulk edits to prod

Generate a Page Builder landing page from a brief

👤 Marketing devs ⏱ ~20 min intermediate

When to use: You have copy and want to wire it into Webiny's Page Builder without dragging blocks.

Prerequisites
  • Existing block templates — Have at least Hero, Features, CTA blocks defined
Flow
  1. Compose page
    Create a Page Builder page titled 'Q2 Launch' using Hero + 3 Features + CTA blocks. Fill content from /briefs/q2.md.✓ Copied
    → create_page returns a draft URL
  2. Preview and publish
    Open the draft URL. Once approved, publish it.✓ Copied
    → publish_page succeeds; page is live

Outcome: Marketing landing page assembled and live in ~10 min.

Pitfalls
  • Block schema drift — Always run list_block_templates first to confirm the available variants
Combine with: filesystem

Combinations

Pair with other MCPs for X10 leverage

webiny-mcp + filesystem

Pull a brief from local Markdown, push it into Webiny as page copy

Read /briefs/q2.md, then create a Webiny Page using Hero + Features + CTA with content from the brief.✓ Copied
webiny-mcp + github

Open a PR with model changes after Claude designs them

Webiny: create CaseStudy model. GitHub: open a PR adding the model to the seed config.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
list_content_models (none) Discovery 1 GraphQL call
create_content_model name, fields[] Scaffolding new section 1 call
search_entries model, query, filter? Find affected items 1 call
create_entry model, data Single-item write 1 call
update_entry id, data Edit existing 1 call
publish_entry id Promote draft to live 1 call
list_block_templates (none) Before composing pages 1 call
create_page title, blocks[] Page Builder authoring 1 call

Cost & Limits

What this costs to run

API quota
Bound by your AWS account limits (Lambda concurrency, DynamoDB throughput)
Tokens per call
200–3000 depending on entry size
Monetary
Webiny is free OSS; your AWS bill applies
Tip
Bulk operations fan out — set Lambda concurrency caps if you don't want to spike costs

Security

Permissions, secrets, blast radius

Minimum scopes: personal-access-token with content read/write
Credential storage: Token in env var; rotate via Admin UI
Data egress: Only your AWS CloudFront/API Gateway endpoint
Never grant: delete-environment tenant-admin

Troubleshooting

Common errors and fixes

401 Unauthorized

Token expired or wrong env. Generate new PAT in admin

Verify: curl -H 'Authorization: Bearer $TOKEN' $URL
Field validation failed

Field types must match exactly — text vs rich-text vs long-text. Use list_content_models to inspect schema

Lambda timeout on bulk operation

Batch in groups of 50; the MCP doesn't auto-paginate writes

Alternatives

Webiny MCP vs others

AlternativeWhen to use it insteadTradeoff
Strapi MCPYou're on Strapi, not WebinyDifferent CMS; different deploy story (containers vs serverless)
Contentful MCPSaaS CMS instead of self-hostVendor lock-in; not OSS

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills