A tiny local MCP server that learns conversational style without storing private memories.
Server has 25 tools with explicit schemas and descriptions. Naming follows verb_noun convention (bootstrap_, observe_, get_, list_, review_, pin_, forget_, distill_, confirm_, archive_, add_). Descriptions are present but vary in quality (10-200 chars). Input schemas use Zod with type constraints, enums, and length limits. However, many parameter descriptions are minimal (e.g., 'Habit ID', 'Preference ID'), and output schemas are not documented. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Risk classification is present but not integrated into tool metadata.
Add a failure rule to prevent certain style patterns in specific contexts.
Archive an address.
Start a session and return the compact style capsule. On a fresh store it requests one-time initialization from sanitized host-local session aggregates.
Confirm an address as correct.
Distill interaction profile preferences from qualitative candidates.
Session-end distillation: submit a few qualitative style habit candidates to be learned as low-weight observations.
Forget an address by ID.
Minimal parameter descriptions on 10 tools (pin_*, forget_*, confirm_*, archive_address). Single-word descriptions like 'Habit ID' or 'Address ID' do not explain purpose, constraints, or format. LLMs cannot infer whether an ID is a UUID, integer, or opaque string.
No output schemas documented. Tools return structured data (capsules, lists, scores) but LLMs cannot see the response field names, types, or nesting. This forces agents to guess at downstream field names and risks broken tool chains.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Forget a failure rule by ID.
Forget an interaction preference by ID.
Forget a style habit by ID.
Return a capsule on first use, a compact delta after a revision change, or an ack when unchanged.
Return full structured memory for administration and diagnostics.
Get a diagnostic score of the style memory store (habit count, confidence distribution, etc.).
Get runtime status: server version, store version, store path, and revision.
List all learned addresses (user→assistant or assistant→user).
List all learned failure rules.
List all interaction preferences in the profile.
List all active and candidate style habits, optionally filtered by kind.
Submit only the latest user message and compact semantic hints; normal success returns an ack, not the store.
Compatibility/admin form of observe_style_event; returns the complete observation result.
Pin an address to prevent it from being archived or deleted.
Pin an interaction preference to prevent it from being modified.
Pin a style habit to prevent it from being archived or deleted.
Review interaction preferences for a given context.
Review and score style habits for a given context, with optional filtering.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk classification exists in metadata (READ_ONLY vs WRITE) but is not exposed via MCP tool annotations. LLMs cannot determine which tools are safe to retry or have side effects.
Error handling lacks recovery guidance. Code catches errors and returns them, but error messages do not suggest next steps (e.g., 'Session not found. Call bootstrap_style_memory first.' or 'Invalid habit ID. Call list_style_habits to see available IDs.').
Pagination not implemented. list_* tools return all results without limit, offset, or cursor parameters. Large result sets will blow context windows and degrade LLM reasoning.