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 "Deploy 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 |
|
| Check out content into a working copy |
|
| Show working copy relationship and lock |
|
| Check in a working copy |
|
| Discard a working copy |
|
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
Available Tools
22 toolsplone_add_single_blockAdd Single BlockA
Adds a single new block to an existing content item without replacing other blocks. Specify the block type, data, and optional position. Example: plone_add_single_block({path: '/my-page', blockType: 'text', blockData: {text: 'New paragraph'}})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the content | |
| blockType | Yes | Type of block to add | |
| blockData | Yes | Block-specific data | |
| position | No | Position to insert the block (optional, defaults to end) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully bears responsibility for transparency. It explains non-destructive behavior ('without replacing other blocks'), but does not disclose what happens on failure (e.g., invalid path or blockType) or return value. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences and an example. Every part adds value, with the example serving as a quick reference. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core action and parameters, but lacks information about the return value (since no output schema exists). For a tool with 4 parameters and no output schema, additional context about what the tool returns or side effects would be beneficial. Adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing a baseline of 3. The description adds clarity by listing the key parameters ('block type, data, and optional position') and providing a concrete example that illustrates usage, which helps the agent understand how to structure the input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it adds a single new block without replacing others, using specific verb 'adds' and resource 'block'. It distinguishes from siblings like 'plone_update_single_block' and 'plone_remove_single_block' by emphasizing it adds rather than updates or removes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to use ('adds a single new block') and provides an example, but does not explicitly mention when not to use or list alternatives. However, the sibling tools context and the nature of the description make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_configureConfigure Plone ConnectionA
Establishes and authenticates the connection to a Plone CMS. Must be called once per session before other tools can be used. Configuration can be provided via arguments or environment variables (PLONE_BASE_URL, PLONE_USERNAME, PLONE_PASSWORD, PLONE_TOKEN). Arguments take precedence over environment variables. To use environment variables only, call with an empty object: plone_configure({}). Example with arguments: plone_configure({baseUrl: 'https://demo.plone.org', username: 'admin', password: 'secret'}).
| Name | Required | Description | Default |
|---|---|---|---|
| baseUrl | No | Base URL of the Plone site. Can be set via PLONE_BASE_URL environment variable. | |
| username | No | Username for authentication. Can be set via PLONE_USERNAME environment variable. | |
| password | No | Password for authentication. Can be set via PLONE_PASSWORD environment variable. | |
| token | No | JWT token for authentication (alternative to username/password). Can be set via PLONE_TOKEN environment variable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses authentication, session requirement, precedence, and env var fallback. Could mention error behavior but adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise: 3 sentences plus example. Front-loaded with core purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description adequately covers configuration, authentication, and ordering relative to siblings. Complete for a setup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have schema descriptions (100% coverage). Description adds meaning: explains alternative auth methods, precedence, env var fallback, and example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it establishes and authenticates connection to Plone CMS, must be called once per session. Specific verb+resource and distinguishes from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Must be called once per session before other tools' and gives configuration options (args vs env vars) with precedence and example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_create_blocks_layoutPrepare Blocks LayoutA
Prepares a complete block structure in memory (valid for 60 seconds). This structure is then used by the next immediate call to plone_create_content or plone_update_content. Use plone_get_block_schemas to learn what data each block type needs. The text displayed by the Title block is automatically managed by Plone, DO NOT add it in the block's data. Example: plone_create_blocks_layout({blocks: [{type: 'title'},{type: 'slate', data: {text: 'Hello World'}}]})
| Name | Required | Description | Default |
|---|---|---|---|
| blocks | Yes | Array of block specifications to process. You MUST call plone_get_block_schemas first to see available block types and their required fields. You MUST follow the block specifications EXACTLY, DO NOT invent your own fields. DO NOT add the content object's title in a text block. To set the page title, use the 'title' field of the content object itself when calling plone_create_content or plone_update_content. A Title block will be automatically created by Plone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the structure is valid for only 60 seconds, is held in memory, and that the title block is auto-managed. This adds transparency beyond no annotations, though it doesn't explicitly state what happens if not used within 60 seconds (implied by 'valid for 60 seconds').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise with three sentences and an example. It front-loads the core purpose and usage, but the example and last sentence could be slightly condensed without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter and no output schema, the description fully covers what the tool does, how to use it, prerequisites, and limitations. It references sibling tools for deeper context, making it complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers all parameters (100% coverage), the description adds significant meaning: it explains the blocks array purpose, references plone_get_block_schemas for required fields, and includes warnings and an example. This goes well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool prepares a block structure in memory for use by plone_create_content or plone_update_content. It distinguishes from siblings like plone_add_single_block by specifying this is for a complete layout, not a single block.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It advises to call plone_get_block_schemas first for block data requirements, and warns against adding the title in block data. It also indicates that the structure must be used in the next immediate call, providing clear when-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_create_contentCreate Plone ContentA
Creates a new content item (e.g., a page or news article) in Plone. To add complex block-based content, first prepare the structure with plone_create_blocks_layout, then call this tool. Example: plone_create_content({parentPath: '/', type: 'Document', title: 'My Page', description: 'A sample page'})
| Name | Required | Description | Default |
|---|---|---|---|
| parentPath | Yes | Path where to create the content (e.g., '/parentDocument' or '/' for root) | |
| type | Yes | Content type to create (e.g., 'Document', 'Event', 'News Item') | |
| title | Yes | Title of the new content | |
| description | No | Description of the new content | |
| id | No | ID for the new content (optional, will be auto-generated if not provided) | |
| blocks | No | Volto blocks structure for the content, it specifies the blocks data and content | |
| blocks_layout | No | Volto blocks layout configuration, it specifies the order of blocks | |
| additionalFields | No | Additional fields to update. For preview images, include preview_image_link: { '@id': 'image-url' } in this object (if you get a 400 error, make sure the image URL is accessible). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It identifies the tool as creating content (mutation) but fails to disclose permissions, side effects, error handling, or return value. The note about block preparation is the only behavioral hint beyond basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a clear example. No redundant text; every sentence adds value. Front-loaded with action and examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 8 parameters including nested objects, the description provides basic context but lacks guidance on block structure, error scenarios, or return values. Leaves gaps for complex usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minimal parameter semantics beyond the schema, only showing an example of typical usage. It does not explain relationships between blocks, blocks_layout, and additionalFields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates new content in Plone, provides examples ('page or news article'), and distinguishes from sibling tools by referencing plone_create_blocks_layout for block-based content. The example further clarifies usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends using plone_create_blocks_layout before this tool for complex block-based content, guiding when not to use this tool directly. Does not list all alternatives but provides relevant context for common scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_create_userCreate Plone UserA
Creates a new user in the Plone site. Requires Manager role or self-registration to be enabled. Example: plone_create_user({username: 'jdoe', password: 'secret', email: 'jdoe@example.com', fullname: 'John Doe', roles: ['Contributor']})
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Username for the new user | |
| password | Yes | Password for the new user, it must be 8 characters or longer. Unless specified otherwise, use 12345678 as the default password for created users. | |
| No | Email address of the user | ||
| fullname | No | Full name of the user | |
| description | No | Short biography or description of the user | |
| home_page | No | URL of the user's home page | |
| location | No | Location of the user | |
| roles | No | Roles to assign to the user (e.g., ['Contributor', 'Editor']) | |
| sendPasswordReset | No | If true, send a password reset email to the user instead of setting the password directly |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the requirement and gives an example, but does not detail return behavior, side effects, or error handling. It is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences plus an example, front-loaded with the core purpose. Every sentence adds necessary information without any waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with no output schema and minimal complexity, the description covers the essential aspects: purpose, requirements, and usage example. It could mention the expected return value but is complete enough for an agent to use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds value beyond the schema by providing an example call and noting the default password behavior, which clarifies usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Creates a new user in the Plone site', using a specific verb and resource. It differentiates from sibling tools like plone_update_user and plone_delete_content by its clear focus on user creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the prerequisite 'Requires Manager role or self-registration to be enabled', which provides clear context for when the tool can be used. However, it does not explicitly state when not to use it or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_delete_contentDelete Plone ContentA
Permanently deletes a content item from Plone using its path. Example: plone_delete_content({path: '/old-content'})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the content to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
States 'permanently deletes', which is the key behavioral trait, but lacks details on side effects (e.g., recursive deletion for folders), permission requirements, or undo capabilities. No annotations were provided to supplement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first explains action and resource, second provides a concrete example. No redundant information; each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema, the description is mostly complete. However, explicitly stating that deletion is irreversible would improve completeness, especially given the destructive nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with path described. Description adds an example showing exact usage format, which clarifies the parameter expectation beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'permanently deletes', the resource 'content item', and the method 'using its path'. This distinguishes it from sibling tools like plone_get_content or plone_update_content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use versus alternatives (e.g., workflow transitions instead of deletion) or when not to use. For a destructive operation, prerequisites or cautionary notes are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_get_block_schemasGet Block SchemasA
Lists all available Volto block types (e.g., 'slate', 'teaser', 'button') and their required data schemas. If no block type specified, the tool returns all blocks schemas. Essential for understanding how to construct blocks. Example: plone_get_block_schemas({blockType: 'teaser'})
| Name | Required | Description | Default |
|---|---|---|---|
| blockType | No | Specific block type to get schema for (optional, returns all if not specified). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description correctly implies a read-only operation (lists schemas). However, since no annotations are present, the description carries full burden. It does not specify the return format or structure, which is a gap for an agent expecting to use the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences and an example, front-loaded with the main action. No extraneous information. The bold emphasis on essentiality is helpful and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional param, no output schema), the description covers purpose, usage, and importance. It lacks a description of the return format, which would be beneficial but not critical for a straightforward listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (one parameter with enum and description). The description adds minimal value: it restates the optional nature and provides an example usage. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Lists all available Volto block types and their required data schemas.' This is a specific verb+resource combination. It distinguishes itself from sibling tools like plone_add_single_block by focusing on schema discovery rather than block manipulation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly positions the tool as 'Essential for understanding how to construct blocks.' It also explains an optional parameter behavior. While it doesn't provide explicit when-not-to-use or alternative comparisons, the context is clear for its intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_get_contentGet Plone ContentA
Retrieves the full JSON data for a single content item from Plone using its path. Example: plone_get_content({path: '/news/latest-update'})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to content (e.g., '/parentDocument/document' or just '/' for root level) | |
| expand | No | Components to expand (e.g., ['breadcrumbs', 'actions', 'workflow']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosure. It correctly implies a read-only operation ('Retrieves') and uses 'full JSON data' to convey the response format. However, it does not mention error behavior (e.g., missing path) or permission requirements, but for a simple retrieval, the information is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus an example are extremely concise and front-loaded with the primary purpose. Every word is necessary. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should offer more detail about the return structure. 'Full JSON data' is vague; agents may need to infer fields. Given the context signals (no output schema, no nested objects), the description is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description's param info is additive but not critical. The description provides an example call and clarifies that path can be '/' for root, which adds minor value beyond the schema's 'e.g.' examples. Meets baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Retrieves', the resource 'full JSON data for a single content item', and the mechanism 'using its path'. An example call is provided, making the purpose unmistakable. It effectively distinguishes from sibling tools like plone_search which handles multiple items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a single content item by path, but it does not explicitly specify when to use it versus alternatives like plone_search or plone_get_site_info. Lacks guidance on exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_get_site_infoGet Site InformationA
Retrieves top-level information and metadata about the connected Plone site, such as available languages and Plone version.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description implies read-only behavior but does not disclose any additional behavioral traits (e.g., caching, performance). Adequate for a simple retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action, no extraneous words. Efficiently states purpose and examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks output schema but description gives examples of returned data (languages, version). Sufficient for basic understanding, though structure could be hinted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so description adds no parameter info. Baseline 4 for zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves top-level site info, with specific examples (languages, version). It distinguishes from siblings which handle CRUD on content, blocks, users, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use, but the tool has no parameters and is the only one for site metadata. Usage is implicitly clear given sibling tool diversity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_get_translationGet Translations of a Content ItemB
Retrieves all available translations for a content item , identified by its '@id' (URL). Example: plone_get_translation({path: '/en/my-page'})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the content item (e.g., '/en/my-page') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must compensate. It states it 'retrieves' translations, implying a read operation without destructive side effects, but it does not disclose required permissions, potential errors, or the format of the returned data (e.g., list of paths, objects).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence plus an example, no wasted words. It front-loads the action and identification method. Very concise, though it could be slightly more informative without length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one parameter and no output schema, the description covers the essential purpose and parameter. However, it lacks information about the return format or structure, which would help the agent understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the single parameter 'path' with an example. The description adds a functional example call, but this largely duplicates the schema's example. The additional value is minimal, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieves' and the resource 'all available translations for a content item', with an explicit identification method (by '@id'/path). It distinguishes from sibling tools like plone_link_translation and plone_unlink_translation by focusing on retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the purpose is clear, there is no explicit guidance on when to use this tool versus alternatives (e.g., when to get translations vs link or unlink). The example shows usage but lacks when-not or context for optimal use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_get_typesGet Content TypesA
Lists all available content types that can be created in the Plone site (e.g., 'Document', 'Event').
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Describes the output but does not disclose whether authentication is needed, side effects, or that it is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with example, front-loaded with action verb, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with no parameters or output schema; description adequately states what is returned, though could mention output format or lack of side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema coverage is 100%. Description adds no param info, but baseline 4 applies due to zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists all available content types for creation, with examples ('Document', 'Event'). Distinct from sibling tools like plone_get_type_schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage context (when needing to know creatable types) but does not explicitly exclude alternatives or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_get_type_schemaGet Content Type SchemaA
Gets the full JSON schema for a specific content type, including all fields, their types, required status, and validation rules. Use this to understand what fields are available when creating or updating content. Example: plone_get_type_schema({contentType: 'Document'})
| Name | Required | Description | Default |
|---|---|---|---|
| contentType | Yes | The content type name to get the schema for (e.g., 'Document', 'Event', 'News Item') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description sufficiently discloses that the tool retrieves schema data without side effects. It describes what the schema contains and presents an example call, though it could mention idempotence or error handling for missing types.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences plus an example, front-loading the purpose and key detail. Every part adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return value (full JSON schema with fields, types, etc.). It is complete for a simple read-only tool, though it could specify that unknown types return an error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 100% for the single 'contentType' parameter, and the description repeats the exact schema description. The example adds minimal extra clarity, so the parameter semantics meet but do not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the full JSON schema for a content type, including details like fields, types, and validation rules. It distinguishes itself from sibling tools like plone_get_types or CRUD operations by specifying its schema-getting purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using the tool to understand available fields when creating or updating content, providing a concrete example. While it doesn't explicitly contrast with all sibling tools, the guidance is clear and helpful for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_get_vocabulariesGet Vocabulary ValuesA
Fetches the allowed values for a specific field, such as a list of categories or tags. Useful for finding valid inputs for content fields. Example: plone_get_vocabularies({vocabulary: 'plone.app.vocabularies.Keywords'})
| Name | Required | Description | Default |
|---|---|---|---|
| vocabulary | Yes | Vocabulary name | |
| title | No | Filter by title | |
| token | No | Filter by token |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read operation (fetch) with no side effects. No annotations are provided, so the description carries the burden. It does not disclose auth requirements or rate limits, but for this tool it is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences and an example. No redundant information, front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and full schema coverage, the description is complete. It does not describe return format, but that is not critical for this tool's usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema describes all parameters. The description adds an example usage, but does not add significant new semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches allowed values for a specific field, using specific verb 'Fetches' and resource 'vocabulary values'. It distinguishes from sibling tools which focus on content operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: 'Useful for finding valid inputs for content fields'. It does not explicitly mention when not to use or alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_get_workflow_infoGet Workflow InformationA
Shows the current workflow state (e.g., 'Published', 'Private') and available transitions for a content item. Example: plone_get_workflow_info({path: '/my-document'})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It correctly describes a read operation (shows state, transitions) but does not mention permissions, error cases, or side effects. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus an example, highly concise with no redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does not specify the return format beyond mentioning workflow state and transitions. It is somewhat complete for a simple read tool but could elaborate on the structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter 'path' is described adequately. The description adds an example usage but does not elaborate on the format or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'Shows the current workflow state and available transitions for a content item.' It distinguishes from sibling tools like plone_transition_workflow (which transitions) and plone_get_content (which gets content, not workflow).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking workflow info but does not explicitly state when to use this tool vs alternatives like plone_transition_workflow or plone_get_content. No guidance on prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_link_translationLink multilingual content itemsA
Links an existing content item as a translation of another. Both items must already exist. Passing the '@id' (full URL) of the existing content item. Example: plone_link_translation({path: '/en/my-page', id: 'https://example.com/de/meine-seite'})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the source content item | |
| id | Yes | The path of the content item to link as a translation (e.g., '/es/test-document'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions prerequisite of existing items but lacks details on effects (e.g., whether linking is bidirectional, impact on existing translations). Adequate but basic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a clear example. Information is front-loaded and no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, output schema, or complex parameters, the description is sufficiently complete. Includes purpose, prerequisites, and example. Minor gap: could clarify if tool is additive (does not replace existing translations).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions, but description adds clarification that 'id' is a full URL (example shows URL, schema says path). This resolves potential ambiguity and adds practical guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool links an existing content item as a translation of another. Distinguishes from sibling tools like plone_unlink_translation by using specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides prerequisite that both items must exist. Includes an example for clarity. Does not explicitly state when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_remove_single_blockRemove Single BlockB
Deletes a single block from a content item, identified by its block ID. Example: plone_remove_single_block({path: '/my-page', blockId: 'abc123'})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the content | |
| blockId | Yes | ID of the block to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It states 'Deletes' but does not disclose consequences (e.g., permanent removal, permission requirements, or impact on layout). While the verb is clear, additional behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with example, no wasted words. Information is front-loaded: 'Deletes a single block...' immediately conveys purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool with no output schema, the description is fairly complete: it explains purpose, identifies parameters via schema, and provides an example. Missing only minor behavioral details like permanence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage for both parameters, so the description adds little beyond schema. Example provides a concrete usage but no additional semantics. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Deletes a single block from a content item' with verb 'deletes' and resource 'single block'. It distinguishes from sibling tools like 'plone_add_single_block' and 'plone_update_single_block' by specifying deletion behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like deleting entire content or other block operations. Example shows syntax but does not explain context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_searchSearch Plone ContentB
Performs a detailed search for content items, allowing filters by text, content type, path, and workflow state. Example: plone_search({query: 'annual report', portal_type: ['Document'], review_state: ['published']})
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search query text | |
| portal_type | No | Content types to search for | |
| path | No | Path to search within | |
| review_state | No | Workflow states to filter by | |
| sort_on | No | Field to sort by (e.g., 'modified', 'created', 'sortable_title') | |
| sort_order | No | Sort order | |
| b_size | No | Batch size (number of results per page) | |
| b_start | No | Batch start (for pagination) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden but only mentions filters. Fails to disclose pagination (b_size, b_start), sorting behavior, or the fact that results are returned. Limited to 'detailed search' without specifying output or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence plus example is concise and efficient. However, lacks front-loading of key information (purpose first, example later) but overall no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema; description does not explain return values or pagination. Given 8 parameters and complex filtering, missing details on result structure, sorting, and batch handling leaves gaps for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. Example usage adds practical context (e.g., 'annual report', Document type, published state) beyond schema, aiding understanding of typical combinations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool performs a detailed search for content items and lists filters (text, content type, path, workflow state). This distinguishes it from sibling tools like plone_get_content (single item retrieval) and other non-search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., when to use plone_search vs plone_get_content). Does not mention when not to use or provide context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_transition_workflowExecute Workflow TransitionA
Changes the workflow state of a content item by executing a specific transition, like 'publish' or 'submit'. Example: plone_transition_workflow({path: '/my-document', transition: 'publish'})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the content | |
| transition | Yes | Workflow transition to execute | |
| comment | No | Comment for the transition |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It mentions 'changes' but does not explain side effects, error handling (e.g., invalid transition), permission requirements, or whether the operation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with a clear example; no filler words. Efficiently conveys purpose and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and three parameters, the description covers basic purpose but lacks details on return value, errors, or constraints. For a mutation tool, more completeness is warranted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so schema already describes all parameters. The description adds a usage example but no new semantic meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool changes workflow state by executing a transition, with examples like 'publish' or 'submit'. It distinguishes from siblings like plone_get_workflow_info (read) and plone_update_content (direct edit).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example usage but lacks explicit guidance on when to use this versus alternatives, nor does it mention prerequisites like permissions. Implied usage is clear for workflow transitions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_unlink_translationUnlink TranslationA
Removes the translation link between a content item and one of its translations, identified by language code. Example: plone_unlink_translation({path: '/en/my-page', language: 'de'})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the content item to unlink a translation from | |
| language | Yes | Language code of the translation to unlink (e.g., 'de', 'fr') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It states the action but does not explain effects on the translation content (whether it remains as standalone content), permission requirements, or reversibility. The example is helpful but insufficient for a full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with two sentences: one defining the action and one providing an example. Every word is purposeful, no fluff, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with two parameters and no output schema, the description covers the core purpose and usage. However, it could be more complete by mentioning what happens to the unlinked translation item, as this is a common source of confusion.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema descriptions provide 100% coverage, the tool description adds value by showing an example with concrete values, clarifying how the parameters (path and language) are used together. This goes beyond the schema's individual definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'removes' and the resource 'translation link', specifying the scope between a content item and one of its translations by language code. It effectively distinguishes from the sibling tool 'plone_link_translation' which performs the opposite action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example but lacks explicit guidance on when to use this tool versus alternatives like 'plone_link_translation'. No mention of when not to use it or prerequisites, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_update_contentUpdate Plone ContentA
Modifies an existing content item in Plone. Can update metadata (like title) and/or replace the entire block structure. Use plone_create_blocks_layout to prepare complex block updates or use the plone_add_single_block and plone_update_single_block tools for smaller changes. DO NOT edit the block structure directly. Example: plone_update_content({path: '/my-page', title: 'Updated Title'})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the content to update | |
| title | No | New title | |
| description | No | New description | |
| blocks | No | Volto blocks structure for the content | |
| blocks_layout | No | Volto blocks layout configuration | |
| additionalFields | No | Additional fields to update. For preview images, include preview_image_link: { '@id': 'image-url' } in this object (if you get a 400 error, make sure the image URL is accessible). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description must disclose behavior. It notes the ability to update metadata or block structure and mentions a potential 400 error for preview images. However, it omits authentication requirements, reversibility, or side effects of block replacement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus an example, no fluff. Front-loaded with purpose. Every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters and no output schema, the description covers main use cases and references sibling tools for complex operations. Lacks details on return values but is adequate for an agent with complementary tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds context: the dual capability of updating metadata or block structure, and a specific example. AdditionalFields gets extra guidance on preview image errors. Adds moderate value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Modifies an existing content item in Plone,' specifying a verb and resource. It distinguishes from siblings by recommending alternative tools for different tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use other tools (e.g., plone_create_blocks_layout for complex block updates, plone_add_single_block and plone_update_single_block for smaller changes) and instructs not to edit block structure directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_update_single_blockUpdate Single BlockB
Modifies the data of a single, existing block within a content item, identified by its block ID. Example: plone_update_single_block({path: '/my-page', blockId: 'abc123', blockData: {text: 'Updated text'}})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the content | |
| blockId | Yes | ID of the block to update | |
| blockData | Yes | New block data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description must carry the full burden of behavioral disclosure. It states that the tool modifies data (write operation) but does not disclose potential side effects, permissions required, or whether the operation is reversible. The example shows the input but not the response or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: a single sentence stating the purpose immediately followed by a clear example. Every word contributes to understanding. There is no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the absence of an output schema, the description is moderately complete. It explains what the tool does and provides an example. However, it does not describe the return value or confirm that the tool returns the updated block. With 3 required parameters and a nested object, additional context about the expected format of blockData would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all three parameters (path, blockId, blockData). The description provides an example that clarifies the structure, but it does not add significant meaning beyond the schema definitions. The schema already explains each parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('modifies the data of a single, existing block') and specifies the resource ('within a content item, identified by its block ID'). This distinguishes it from sibling tools like plone_add_single_block and plone_remove_single_block. The example provides concrete parameter usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as plone_update_content or plone_add_single_block. The description does not mention prerequisites or conditions for use. While the purpose is clear, the lack of when-to-use or when-not-to-use information limits its helpfulness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plone_update_userUpdate Plone UserA
Updates an existing user's properties in Plone. Requires Manager role or the user updating their own account. Roles are specified as an object mapping role names to booleans to add or remove them. Example: plone_update_user({userid: 'jdoe', fullname: 'Jane Doe', roles: {Editor: true, Contributor: false}})
| Name | Required | Description | Default |
|---|---|---|---|
| userid | Yes | The ID of the user to update | |
| No | New email address | ||
| fullname | No | New full name | |
| description | No | New biography or description | |
| home_page | No | New home page URL | |
| location | No | New location | |
| roles | No | Roles to add or remove, as an object mapping role names to booleans (e.g., {Contributor: true, Editor: false}) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It explains role permissions and roles format, but doesn't disclose if updates are partial or full replacements, success/error behavior, or if any existing properties are overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences plus an example, no wasted words. Front-loaded with purpose and immediately actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description could cover return values, error conditions, or behavior for missing optional fields. It's adequate but not complete for a mutation tool with 7 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds an example and clarifies the roles object format, which adds marginal value beyond the schema's description of the same parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'updates' and the resource 'existing user's properties' clearly. It distinguishes from sibling tools like plone_create_user (creation) and plone_delete_content (deletion).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states role requirements (Manager or self-update) and provides an example, offering clear context. However, it doesn't explicitly mention when not to use this tool versus other user management tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
22 tool updates
v1.0.0- First observed
plone_add_single_block - First observed
plone_configure - First observed
plone_create_blocks_layout - First observed
plone_create_content - First observed
plone_create_user - First observed
plone_delete_content - First observed
plone_get_block_schemas - First observed
plone_get_content - First observed
plone_get_site_info - First observed
plone_get_translation - First observed
plone_get_type_schema - First observed
plone_get_types - First observed
plone_get_vocabularies - First observed
plone_get_workflow_info - First observed
plone_link_translation - First observed
plone_remove_single_block - First observed
plone_search - First observed
plone_transition_workflow - First observed
plone_unlink_translation - First observed
plone_update_content - First observed
plone_update_single_block - First observed
plone_update_user
TDQS
Scored across 22 tools
Each tool has a clearly distinct purpose, from authentication to content creation, block manipulation, workflow, translations, and user management. No two tools overlap in function; even block-related tools (create_blocks_layout vs add_single_block) are clearly differentiated.
All tools follow a consistent 'plone_' prefix with underscore-separated verb-noun patterns (e.g., plone_get_content, plone_create_user, plone_transition_workflow). The naming is predictable and logical throughout the set.
With 22 tools, the server covers a broad range of Plone CMS operations without being excessive. The count is appropriate for the complexity of the system, though a few tools (e.g., plone_configure and plone_get_site_info) could potentially be merged.
The toolset provides comprehensive coverage for core workflows: content CRUD, block management, user creation/update, workflow transitions, translations, search, and schema exploration. Notable gaps include user deletion and folder manipulation (move/rename), but these are minor given the overall robustness.
Maintenance
Related MCP Connectors
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
Connect AI agents to ProductNow's context engine to search, create, review, and act.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
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.9MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Optimizely CMS via its GraphQL and Content Management APIs, supporting dynamic content discovery, retrieval, and management.7 npm6MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access and manage CiviCRM data, including contacts, activities, contributions, events, and memberships, with full custom field support.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage WordPress content (create, retrieve, update posts) via the WordPress REST API with secure authentication.14 npmMIT