Connect an assistant through the MCP server#
This guide shows you how to give an MCP client, such as Claude Desktop or Claude Code, access to a Plone site through the plone-client MCP server.
Install the server#
Install plone-client as a tool with the mcp extra.
Add the markdown extra too, on Python 3.12 or later, so the assistant can write pages in Markdown.
uv tool install "plone-client[mcp,markdown]"
pipx install "plone-client[mcp,markdown]"
Add a profile for the site#
The server connects with a profile, so the password stays in the keyring and never reaches the assistant.
plone-client profile add blog --url https://example.org --username editor
plone-client profile test blog
To keep the assistant from changing anything, make the profile read-only.
plone-client profile add blog-ro --url https://example.org --username editor --read-only
If the profile’s URL is the backend rather than the Volto frontend, add the URL of the frontend, so the assistant can learn the site’s blocks.
plone-client profile add local --url http://localhost:8080/Plone --username admin --frontend-url http://localhost:3000
Refer to Manage profiles for the other ways to keep a secret.
Register the server with your assistant#
Add the server to the current project.
claude mcp add plone-blog -- plone-client mcp --profile blog
Pass --scope user to make it available in every project, or --scope project to share it with the project’s other contributors in .mcp.json.
Add the server to claude_desktop_config.json, in , then restart Claude Desktop.
{
"mcpServers": {
"plone-blog": {
"command": "plone-client",
"args": ["mcp", "--profile", "blog"]
}
}
}
If Claude Desktop cannot find plone-client, write its full path in command, which which plone-client prints.
Configure a server that runs this command over standard input and output.
plone-client mcp --profile blog
Serve several sites from one server#
If you work with several sites, register one server for all of them rather than one server per site. Add a profile for each site first, with a description that says what the site is, because the assistant reads it to pick the site.
plone-client profile add docs --url https://docs.example.org --username editor --description "Documentation, production"
Name the profiles with --site, or serve every profile with --all.
claude mcp add --scope user plone -- plone-client mcp --site blog --site docs
To serve the same set of sites from several places, save them as a group, and serve the group.
plone-client profile group-set customer blog docs
claude mcp add --scope user plone -- plone-client mcp --group customer
A site added to the group later is served the next time the assistant starts the server.
Each tool then takes a site argument, and the list_sites tool describes the sites.
A read-only profile stays read-only: the server refuses to change that site, and still changes the others.
Preview changes first#
To see what the assistant would change without changing anything, start the server in a dry run.
claude mcp add plone-blog-preview -- plone-client mcp --profile blog --dry-run
Each tool that changes the site then returns the requests it would send.
Check the connection#
Ask the assistant to call the site_info tool.
It reports the site, the user the server is logged in as, and whether it is read-only or in a dry run.