A Model Context Protocol server to access Apache Unomi data
Server defines 8 tools with basic schemas and descriptions. All tools have input schemas with type definitions and descriptions present. However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool or what distinguishes similar operations. Output schemas are not documented. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Parameter descriptions are minimal (avg ~40 chars vs baseline 72). Missing dependency hints and chaining IDs in responses.
Create a new scope in Unomi
Get a specific consent record by ID
Get the current user's profile with optional segments and scores
Get a specific profile by profile ID
List consent records with optional filtering by profile ID, status, or scope
Search for profiles using a query string
Update a consent record with a new status
Output schemas not documented. LLMs cannot infer what fields are returned or plan downstream tool calls. E.g., get_profile returns UnomiProfile but structure is not visible in tool definition.
Descriptions lack LLM-optimized guidance. Generic descriptions (avg 40-55 chars) do not explain WHEN to use each tool or how it differs from similar tools. E.g., get_profile vs get_my_profile distinction unclear.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot determine which tools are safe to retry or have side effects. Critical for write operations like update_my_profile and update_consent.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Update the current user's profile properties
Parameter descriptions are minimal and lack format/constraint guidance. E.g., 'query' in search_profiles has no guidance on format, length, or example patterns. 'limit' and 'offset' lack min/max bounds.
Error handling in code (src/index.ts) lacks recovery guidance. Errors are logged but do not tell LLM what to do next or suggest alternatives. E.g., 'Profile not found' should suggest search_profiles().