MCP server for a headless CMS providing tools to manage sites, collections, entries, singletons, files, and webhooks
21 tools with consistent verb-noun naming (list_, get_, create_, update_, delete_, publish_). All tools have descriptions (avg ~80 chars, baseline 194). Input schemas present with type definitions for all parameters. However, descriptions are terse and lack LLM-optimized guidance on WHEN to use each tool, dependencies, or error recovery. Parameter descriptions are minimal (e.g., 'The site ID' without format/constraint hints). Output schemas are not documented, LLMs cannot predict response structure for chaining. No enum constraints on status/slug parameters. Error handling guidance absent. Composition is sound (single responsibility per tool), but parameter naming could be more explicit (e.g., 'status' lacks enum values).
Create a new collection
Create a new entry
Create a single-use signed upload URL. To upload: send an HTTP PUT to upload_url with the raw file bytes as the request body and a Content-Type header equal to content_type. The URL expires at expires_at and can be used exactly once. The PUT response body is the created file record (JSON, includes the file id and url).
Delete a collection
Delete an entry
Get a collection by slug
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects) for downstream tool chaining. Forces agents to guess or fail mid-chain.
Parameter descriptions lack format/constraint hints. E.g., 'status' in list_entries has no enum values (draft|published|archived?). 'slug' has no pattern (alphanumeric-dash only?). LLMs hallucinate invalid values.
Descriptions are terse (avg 50 chars vs baseline 194). Missing WHEN to use, dependencies, and error recovery guidance. E.g., 'Update a site's name' does not explain what fields can be updated or what happens on conflict.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Get an entry by ID
Get file details by ID
Get a singleton by slug
Get details of a specific site by ID
List collections in a site
List entries in a site, optionally filtered by collection and status
List files in a site
List singletons in a site
List sites accessible to the authenticated user
Publish an entry
Unpublish an entry
Update a collection's definition
Update an entry
Update a singleton's data
Update a site's name
No error handling guidance. Destructive tools (delete_collection, delete_entry) lack confirmation/dry-run pattern. No recovery hints (e.g., 'If entry not found, try list_entries first').
create_entry and update_entry accept generic 'data' object (type: object, no schema). LLMs cannot validate field names or types. Should document required/optional fields and their types.