Local-first personal context service with MCP server, FastAPI control plane, vault, policy, memory, retrieval, and audit capabilities
Personal Context Hub exposes 11 tools with complete JSON Schema input definitions and descriptions. However, definitions lack depth and LLM-optimization. Tool names are verb-prefixed (search_, get_, propose_, set_, request_, check_) but descriptions are terse (avg ~60 chars, well below the 194-char baseline). No output schemas are documented. Parameters have types but many lack actionable constraints (enums, ranges, formats). Error handling is absent, no recovery guidance, no categorization of retryable vs fatal errors. The server implements HTTP transport (good) but lacks tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite having 6 WRITE tools that would benefit from them. No evidence of pagination support, rate limiting, or secret injection patterns.
Check the status of a proposed action by intent ID
Get context contract with optional purpose, subject reference, max items, and as-of timestamp
Get context manifest with requested capabilities, selectors, and TTL
Get shared state by key
Propose an action with kind, summary, payload, basis references, and idempotency key
Propose a memory with evidence references and optional retention policy
Descriptions are terse (avg 60 chars vs 194-char baseline). Examples: 'Get shared state by key' (24 chars), 'Propose a memory with evidence references and optional retention policy' (71 chars). Lack actionable context for LLM tool selection, no WHEN to use, no prerequisites, no downstream dependencies.
No output schemas documented. LLMs cannot infer what fields to expect from responses, forcing them to guess at downstream tool parameters. E.g., search_personal_context returns unknown structure, does it include IDs for chaining to propose_action?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Propose operational state for a target with phase, step, and situation intent
Propose a relation between two objects with a relation type
Request approval for an action with intent summary, rationale, and impact
Search personal context with query, purpose, and optional scope filters
Set shared state with key, value, TTL, and visibility
Six WRITE tools (propose_memory, set_shared_state, request_approval, propose_action, propose_operational_state, propose_relation) lack tool annotations. No destructiveHint or idempotentHint to signal to LLMs which operations are safe to retry. Agents cannot distinguish between idempotent proposals and irreversible state changes.
Parameters lack actionable constraints. 'visibility' in set_shared_state has no enum; 'operational_phase' in propose_operational_state has no valid values documented. LLMs will hallucinate invalid values. No ranges on numeric params (ttl_seconds, max_items).
No error handling guidance. Tools provide no recovery hints, error categorization, or actionable messages. An LLM receiving a failure from propose_action has no guidance on whether to retry, ask the user, or abort.