Model Context Protocol server that lets any AI agent operate a real CKEditor 5 instance — get/set content, run editor commands, export, and drive premium features over MCP.
CKEditor MCP has well-structured tool definitions with consistent naming (verb_noun pattern), clear descriptions (avg 180 chars, within 10-1024 baseline), and explicit Zod schemas. All 8 tools are properly registered with inputSchema. However, several parameters lack descriptions (e.g., 'value' in ckeditor-execute-command is vague about shape), and output schemas are not formally documented. Error handling uses a guard wrapper but provides minimal recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications in metadata.
Execute any CKEditor command against the current selection, e.g. "bold", "heading" (value {"value":"heading2"}), "insertTable" (value {"rows":2,"columns":3}), "link" (value "https://..."). Use ckeditor-list-commands to discover available commands and their enabled state.
Return the full HTML content of the CKEditor document. Use this to read the current state before editing.
Return the word and character count of the current document.
Report the loaded CKEditor version, whether a commercial/trial license is active, and which premium features are available.
Parse an HTML fragment and insert it into the document without clearing existing content. Position controls where: at the current selection, the start, or the end of the document.
List every command the editor exposes, with its current enabled state and value. Use this to discover what operations are possible before calling ckeditor-execute-command.
ckeditor-execute-command 'value' parameter lacks type constraint and shape documentation. Description says 'Shape depends on the command' but provides no guidance on how LLM should determine correct shape for each command type.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications. ckeditor-set-content and ckeditor-insert-html are WRITE operations that should be marked destructiveHint=true to guide agent planning.
Output schemas not formally documented. Tools return JSON strings (ckeditor-list-commands, ckeditor-execute-command, ckeditor-get-stats, ckeditor-info) but LLM cannot know field structure without seeing actual response schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Render the current editor content to a PNG image so the agent can visually inspect the document layout.
Replace the entire document with the provided HTML. Returns the normalized HTML as stored by the editor. Overwrites everything — use ckeditor-insert-html to add content instead.
Error handling via guard() wrapper returns generic 'Error: <message>' text. No recovery guidance (e.g., 'Try ckeditor-list-commands to verify command exists'). LLM cannot determine if error is retryable or user-fixable.
ckeditor-insert-html 'position' parameter has default='end' but no validation that position is one of the enum values. If LLM passes invalid position, error message will not guide correction.