Plone MCP Server
OfficialThe Plone MCP Server lets AI assistants interact with a Plone CMS through natural language, exposing Plone's REST API as structured tools for content management, search, workflow control, and more.
Connection & Configuration
Authenticate to a Plone site using username/password or JWT token
Supports environment variables (
PLONE_BASE_URL,PLONE_USERNAME,PLONE_PASSWORD,PLONE_TOKEN) for credentials
Content Management (CRUD)
Create, Read, Update, and Delete content items (Documents, News Items, Events, etc.)
Search
Full-text search filtered by content type, workflow state, and path, with sorting and pagination
Block System (Volto)
Prepare complex block layouts (text/slate, teaser, button, separator, image, grid, listing)
Add, update, or remove individual blocks within content
Inspect block schemas to understand available types and fields
Workflow Management
Get workflow info (current state and available transitions) for any content item
Execute transitions (e.g., publish, submit, retract)
Site & Schema Introspection
Retrieve site info, available content types, full JSON schemas, vocabulary values, and navigation tree
Translation Management
List, link, and unlink multilingual translations of content items
User Management
Create and update user accounts, including roles and profile information
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Plone MCP Servercreate a new document with blocks and publish it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Plone MCP Server
Talk to your Plone website instead of clicking through it. Plone MCP lets AI assistants like Claude create and edit pages, publish content, search the site, and manage translations on your behalf, in plain language - no coding required to use it, and nothing to change on your Plone site to enable it.
It's built on the Model Context Protocol (MCP), an open standard that lets AI assistants safely connect to external tools and data. Plone MCP exposes Plone's REST API as a set of MCP tools, so any MCP-compatible client - Claude Desktop, Claude Code, and others - can drive your site, and developers can script, automate, or build on top of the same tools.
Quickstart
Requires Node.js 22+. Add this to Claude Desktop's config file, then restart Claude Desktop:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"plone": {
"command": "npx",
"args": ["-y", "@plone/mcp"]
}
}
}Now ask Claude to connect to your Plone site, e.g. "Connect to https://demo.plone.org as admin/admin".
Related MCP server: optimizely-cms-mcp
Prerequisites
Node.js 22+ - Required to run the server (
^20.19.0 || >=22.12.0; install:brew install nodeon macOS or from nodejs.org)Plone 6.0+ site with REST API - The CMS you'll be connecting to
pnpmis only needed if you want to clone the repo and develop locally (see Local Development). The recommended setup below usesnpxand doesn't require cloning anything.
Transports
The server ships two entry points:
STDIO (
plone-mcpbin /dist/stdio-server.js) - for local MCP clients such as Claude Desktop.HTTP (
dist/http-server.js) - a streamable-HTTP server with per-session state, listening onPORT(default3001) at/mcp. Start it withmake start.
Quick Start using Claude Desktop as an example
The @plone/mcp package is published on npm, so there's nothing to install or build - npx fetches and runs it on demand.
Configure Claude Desktop
Add to Claude's configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
With environment variables (optional):
{
"mcpServers": {
"plone": {
"command": "npx",
"args": ["-y", "@plone/mcp"],
"env": {
"PLONE_BASE_URL": "https://demo.plone.org",
"PLONE_USERNAME": "admin",
"PLONE_PASSWORD": "admin"
}
}
}
}Without environment variables (useful if you connect to different Plone sites and prefer to pass credentials per session via plone_configure):
{
"mcpServers": {
"plone": {
"command": "npx",
"args": ["-y", "@plone/mcp"]
}
}
}Restart Claude Desktop
Connect to Plone
Call plone_configure once per session:
// Using environment variables
plone_configure({});
// OR providing credentials/token directly to the LLM
plone_configure({
baseUrl: "https://demo.plone.org",
username: "admin",
password: "admin",
});
plone_configure({
baseUrl: "https://demo.plone.org",
token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
});Note: Arguments take precedence over environment variables.
Local Development
Clone the repo if you want to modify the server, debug it, or run it with the MCP Inspector:
git clone https://github.com/plone/plone-mcp.git
cd plone-mcp
make install
make buildPoint Claude Desktop at your local build instead of the npx command:
{
"mcpServers": {
"plone": {
"command": "node",
"args": ["/absolute/path/to/plone-mcp/dist/index.js"]
}
}
}Development commands:
# Install the dependencies
make install
# Build for production (compiles TypeScript and copies blocks.json)
make build
# Run the HTTP server / the STDIO server from the build
make start
make stdio
# Debug with the MCP Inspector
make inspector
# Tests (Vitest)
make test-all # everything
make test # unit tests only
make test-coverage # with coverage
# Static checks
make lint # ESLint over src/ and __tests__/
make format # ESLint with --fix
make type-check # tsc over sources and testsRun make help to list every available target.
Core Features
Content Management: CRUD operations on all Plone content types
Block System: Create and manage Volto blocks
Search: Full-text search with filtering and sorting
Workflow: Manage publication states and transitions
Site Info: Access content types, vocabularies, and site configuration
Essential Tools
Tool | Description | Example |
| Connect to Plone (call once per session) |
|
| Get content by path |
|
| Create new content |
|
| Update existing content |
|
| Delete content |
|
| Search content |
|
| Change workflow state |
|
| Get hierarchical site structure |
|
| List translations of a content item |
|
| Link existing content as a translation |
|
| Remove a translation link |
|
Block Management
Creating Content with Blocks
// 1. Prepare blocks (60-second TTL - meant to be used inmediatly before content creation/editing)
plone_create_blocks_layout({
blocks: [
{
type: "text",
data: { text: "Welcome to our site!" },
},
{
type: "teaser",
data: {
href: "/about",
title: "Learn More",
description: "Discover what we do",
},
},
],
});
// 2. Create content (within 60 seconds), the previously prepared blocks will automatically be included in the request
plone_create_content({
parentPath: "/",
type: "Document",
title: "Homepage",
});Managing Individual Blocks
// Add a single block
plone_add_single_block({
path: "/homepage",
blockType: "text",
blockData: { text: "New paragraph" },
position: 1,
});
// Update a block
plone_update_single_block({
path: "/homepage",
blockId: "51176ead-7b59-402d-9412-baed46821b36", // Get ID from plone_get_content
blockData: { text: "Updated text" },
});
// Remove a block
plone_remove_single_block({
path: "/homepage",
blockId: "51176ead-7b59-402d-9412-baed46821b36",
});Available Block Types
text: Rich text content
teaser: Link preview card with image
__button: Call-to-action button
separator: Visual divider line
Use plone_get_block_schemas() to see all block types and their properties.
Common Workflows
Create and Publish a Page
// Configure connection
plone_configure({
baseUrl: "https://mysite.com",
username: "editor",
password: "secret",
});
// Create with blocks
plone_create_blocks_layout({
blocks: [{ type: "text", data: { text: "Article content..." } }],
});
plone_create_content({
parentPath: "/news",
type: "News Item",
title: "Breaking News",
});
// Publish
plone_transition_workflow({
path: "/news/breaking-news",
transition: "publish",
});Search and Filter
plone_search({
query: "annual report",
portal_type: ["Document", "File"],
review_state: ["published"],
sort_on: "modified",
sort_order: "descending",
b_size: 10,
});Important Notes
⚠️ Prepared blocks expire after 60 seconds - Always call plone_create_blocks_layout immediately before creating/updating content.
⚠️ Configure once per session - Run plone_configure once at the start of each session before using other tools. Once configured, you can use all other tools without reconfiguring.
Troubleshooting
Issue | Solution |
| Make sure the |
"Plone client not configured" | Run |
"Block not found" | Use |
Connection errors | Verify Plone URL and credentials are correct |
Blocks not applied | Call |
TypeScript errors during local build | Run |
Resources
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to manage WordPress sites through natural conversation, supporting post creation, content updates, site queries, and draft-to-publish workflows via the WordPress REST API.Last updated9MIT
- Alicense-qualityDmaintenanceEnables AI assistants to interact with Optimizely CMS via its GraphQL and Content Management APIs, supporting dynamic content discovery, retrieval, and management.Last updated276MIT
- Alicense-qualityDmaintenanceEnables AI assistants to access and manage CiviCRM data, including contacts, activities, contributions, events, and memberships, with full custom field support.Last updated4MIT
- Alicense-qualityDmaintenanceEnables AI assistants to manage WordPress content (create, retrieve, update posts) via the WordPress REST API with secure authentication.Last updated3MIT
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Security-first WordPress MCP server. 129 tools for Claude, ChatGPT, Gemini. Free on wp.org.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/plone/plone-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server