# Plone MCP

> Plone MCP Server lets your AI agent manage Plone CMS content, users, and workflows directly from natural language prompts. You can search for articles by metadata, update published pages, create new user accounts, or move content through its entire publication lifecycle—all without opening the web interface.

## Overview
- **Category:** document-management
- **Price:** Free
- **Tags:** cms, plone, enterprise-content, workflow-automation, user-management

## Description

You've got a Plone CMS instance that needs managing, but you don't wanna open up the web interface and click through ten menus just to change one thing. This server lets your AI agent take full control of everything—the content, the users, the permissions, even where a piece of article sits in its publishing cycle. You treat the whole CMS like a set of direct commands you give to your agent.

### **Content Lifecycle Management**

You can't just find stuff; you gotta target it precisely. If you know a content object's unique path, you use `get_content` to grab all its data immediately. Need to start something new? You run `create_content` to generate an entire article or page from scratch. If the article needs tweaking—say, you changed some facts and need to modify the body copy—you use `update_content`, which handles partial updates so you only change what's necessary. When that piece is stale junk, you just run `delete_content` to remove it completely.

For finding content when you don't know the path, you've got two options: You can hit up **advanced searching** by running `search_content`, which lets you look across the entire CMS structure using keywords, paths, or filters. Or, if you need to retrieve everything about a specific item using its known metadata, you use `get_content` again.

### **Workflow State Control**

Content moves through stages—Draft, Review, Published—and your agent handles that movement like a pro. First, check where the piece stands by running `get_workflow`; this gives you the current status and history of any content object. Once you confirm it's ready for the next step, you don't manually submit it; you force the change using `transition_workflow`, moving it from Draft to Review or Review straight to Published.

### **User Accounts & Administration**

Managing who gets to see what is critical. You can list every registered user by calling `list_users` (you'll need Manager rights for that). Need a new employee set up? Run `create_user` to add their account, and if they leave, you use `delete_user` to scrub the record.

When an existing profile needs tweaking—say, their email changed or they got a new title—you run `update_user`. For accessing specific user data, simply call `get_user` with their identifier. This whole system lets your agent manage credentials directly.

### **Permissions and Group Control**

You control who sees what using groups. You can pull a master list of every group defined in the CMS by running `list_groups`. If you need to check out the details of one specific permission level, use `get_group`. To make changes, you've got two tools: You run `update_group` if you need to change membership or modify the details of an existing access group. If that whole group is obsolete, running `delete_group` takes it right out of the system.

This setup means your agent handles everything—from creating a new user and assigning them to a specific permission group (`create_group`) to writing a full article, moving it through its entire publication cycle, and updating a profile field—all based only on what you tell it in plain language.

## Tools

### create_content
Generates a brand new content object within Plone.

### create_group
Creates a new access group for the CMS.

### create_user
Adds a new user account to Plone.

### delete_content
Removes an existing content object from Plone.

### delete_group
Deletes an access group in the CMS.

### delete_user
Removes a user account from Plone.

### get_content
Retrieves all data for a specific content object using its unique path.

### get_group
Pulls detailed information about a specified access group.

### get_user
Retrieves details for a specific user account in Plone.

### get_workflow
Checks the current status and history of a content object's workflow state.

### list_groups
Returns a list of all available groups defined in Plone.

### list_users
Lists every user account currently registered with the CMS (requires Manager role).

### search_content
Searches for content objects across Plone based on keywords, filters, and paths.

### transition_workflow
Forces a change in a content object's workflow state (e.g., Draft to Published).

### update_content
Modifies existing content objects, supporting partial field updates.

### update_group
Changes the details or membership of an existing access group.

### update_user
Updates specific profile fields for a user account, like email or name.

## Prompt Examples

**Prompt:** 
```
Search for all Documents containing 'roadmap' in the /news folder.
```

**Response:** 
```
I've searched the /news path. I found 2 documents: 'Product Roadmap 2024' and 'Q3 Engineering Roadmap'. Would you like to see the details of either one?
```

**Prompt:** 
```
Create a new Folder titled 'Marketing 2025' at the root path.
```

**Response:** 
```
Successfully created the folder 'Marketing 2025' at path /marketing-2025. You can now start adding content to it.
```

**Prompt:** 
```
Get the content of the page at /about-us and show its current workflow state.
```

**Response:** 
```
I've retrieved the page. The title is 'About Our Company' and its current workflow state is 'private'. Would you like to transition it to 'published'?
```

## Capabilities

### Content Lifecycle Management
Search for, retrieve, create, update, and delete content objects using specific paths or filtering metadata.

### Workflow State Control
Check a piece of content's current publication status and trigger formal transitions (e.g., Draft to Review, Review to Published).

### User Account Administration
Manage user credentials by listing accounts, creating new users, or updating existing profile details.

### Group and Permissions Control
List available groups and update group membership records to control site access permissions.

### Advanced Content Search
Perform complex full-text searches across the entire CMS structure, filtering by type or path for targeted results.

## Use Cases

### Publishing a Quarterly Report
The Content Manager wrote the Q4 report but it sits in 'Draft' status. They ask their agent to publish it. The agent runs `get_workflow` first, sees it's stuck on 'Review', and then uses `transition_workflow` to push it straight to 'Published'. Problem solved: the content goes live instantly.

### Auditing Old Content
The Site Admin needs to find every document mentioning 'legacy API' that was written before 2023. They ask their agent, which runs `search_content` with specific metadata and keywords. The agent returns a precise list of paths needing review.

### Onboarding New Staff
A new employee starts. Instead of logging into three different dashboards, the manager tells their agent to 'Create user Jane Doe and add her to the Marketing group.' The agent runs `create_user` and `update_group` in sequence.

### Updating Global Metadata
A core legal policy changes. Instead of finding every related page, the team uses their agent to run targeted updates via `update_content`, changing the 'Legal Notice' field across twenty pages simultaneously by path.

## Benefits

- Find content instantly. Instead of browsing folders, use `search_content` to find all documents containing 'roadmap' in the /news folder and get a list right away.
- No more manual drafts. Use `transition_workflow` to move articles directly from 'Draft' to 'Published' just by telling your agent what needs doing.
- Manage users on the fly. Need to onboard someone? Your agent uses `create_user` or updates permissions with `update_group`, saving you dozens of clicks in the backend UI.
- Partial field edits are a thing. Never manually edit content again; use `update_content` to change just the title and date without touching the body text.
- Full visibility into site structure. You can audit an entire article's history—who changed what, when, and why—with `get_workflow`.

## How It Works

The bottom line is you get to control your CMS backend directly from natural conversation, without needing manual navigation through the web interface.

1. Subscribe to this server on Vinkius and provide your Plone Instance URL and Personal Access Token.
2. Your AI client sends a request (e.g., 'Publish the article at /q3-report').
3. The agent translates that into tool calls (like `transition_workflow`), executes the action against Plone, and reports the final status.

## Frequently Asked Questions

**How do I search content using the search_content tool?**
You prompt the agent with keywords and filters (e.g., 'Documents about X in /folder/'). The `search_content` tool runs a full-text query, returning a list of matching paths and titles.

**Can I publish an article using transition_workflow?**
Yes. If the content exists at a path, you ask your agent to 'Publish this.' The tool uses `transition_workflow` to move the status from its current state (e.g., Draft) to Published.

**Which tool should I use to update a user's email?**
Use the `update_user` tool. It specifically handles updating profile details for an account, so you just need to provide the user ID and the new email address.

**What if I only want to see content by its path?**
You run `get_content`. This tool fetches every piece of metadata and content associated with a specific, known URL or path. It's best for auditing single pages.

**When calling `list_users`, what permissions are required to view all user records?**
The tool requires a Manager role for execution. You must ensure your Personal Access Token belongs to an account with administrative privileges, or the call will fail.

**If I use `get_content` but provide an incorrect content path, how does the system report the error?**
It returns a specific 404 status code indicating that the resource was not found. You'll need to verify the absolute content path before attempting retrieval.

**Does `search_content` perform well when searching across thousands of pages?**
Yes, the search function is built for scale and uses full-text indexing. It processes large datasets efficiently by filtering results on both metadata and content paths.

**What happens to associated data if I use `delete_group`?**
The tool only deletes the group record itself; it doesn't touch existing content. You must manually reassign or delete any content tied to that group before running the command.

**Can I search for specific content types like Folders or Documents?**
Yes! Use the `search_content` tool and provide the `portal_type` parameter (e.g., 'Folder' or 'Document') to filter your results.

**How do I update the title or description of an existing page?**
Use the `update_content` tool. Provide the `path` to the content and a `json_body` containing the fields you want to change, such as `{"title": "New Title"}`.

**Is it possible to manage user accounts through this server?**
Yes, if your credentials have sufficient permissions, you can use `list_users`, `get_user`, and `create_user` to manage the site's membership.