Four tools with clear verb-noun naming (list_*, get_*) and well-structured schemas. All tools have descriptions (10 - 200 chars, within baseline 34 - 392 range) and documented input parameters with types. Pagination support in list_diagrams (offset, limit, max 100). However, output schemas are not explicitly documented in the source, only inferred from API responses. Parameter descriptions are functional but lack dependency hints (e.g., 'Call get_diagram_sheets first if sheetCount > 3' is mentioned in get_diagram_image description but not reciprocally in get_diagram_sheets). No tool annotations (readOnlyHint, etc.) despite all being read-only. Error handling present but generic (ApiError type with kind/message/cause), no recovery guidance in tool descriptions.
Fetch PNG image(s) of a Cacoo diagram. If sheetId is omitted, fetches ALL sheets. When the diagram has many sheets (sheetCount > 3), use get_diagram_sheets first to identify the target sheet.
Get the list of sheets in a Cacoo diagram, including sheet IDs and names. Use this before get_diagram_image when a diagram has many sheets (sheetCount > 3).
List Cacoo diagrams. Use this to find a diagram ID by title or keyword before fetching sheets or images. organizationKey should be the organization key from list_organizations, for example `hEkx29Hj9h`.
List Cacoo organizations available to the configured API key. Use this when CACOO_ORGANIZATION_KEY is not set and you need an organization key.
Output schemas not documented in tool definitions. API responses are parsed via Zod schemas (Organization, Diagram, DiagramDetail, Sheet) but tool descriptions do not specify what fields are returned. LLMs cannot plan downstream calls or extract required data without knowing response structure.
No tool annotations despite all tools being read-only. MCP spec supports readOnlyHint to signal safe tools. Agents cannot distinguish safe discovery calls from destructive operations without explicit hints.
Error handling lacks recovery guidance. ApiError type includes kind (config|network|http|decode) but tool descriptions do not explain what to do on failure. E.g., 'If organizationKey is invalid, call list_organizations() first' is missing.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Parameter descriptions lack format constraints. 'organizationKey' is described as 'Cacoo organization key from list_organizations, for example `hEkx29Hj9h`', the example is helpful but format/length rules are not stated. 'diagramId' and 'sheetId' similarly lack format guidance.
get_diagram_image width/height parameters lack bounds. Numeric parameters should specify min/max (e.g., 'width: 100 - 4000 pixels'). Unbounded dimensions could cause memory exhaustion or API errors.