Unified Hermes memory MCP: hermes-lcm + mnemosyne merged
Server has 13 tools with explicit schemas and descriptions. Naming follows verb_noun pattern (mem_*) consistently. Most tools have parameter descriptions and type definitions. However, descriptions are often terse (10-50 chars) and lack actionable context for LLM selection. Output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance. Tool composition is reasonable but some tools conflate concerns (mem_batch, mem_evidence). Security annotations present (read_only_hint, destructive_hint, idempotent_hint) but no permission gates or audit trail guidance.
Batch operations: remember multiple messages/facts in one call. Bounded by UM_BATCH_MAX_OPS and UM_BATCH_MAX_CHARS.
Manually trigger compaction of session messages into summaries.
Diagnostic checks: schema version, archive audit, vector dimension consistency.
Evidence operations: cite (check claim support), compute (aggregate numbers), conflicts (detect contradictions).
Verbatim fetch. kind: message | fact | summary | edge. Uniform schema.
Export store to JSONL file (streaming, lossless). Includes all content tables and vectors (base64).
Save a long-term fact, optionally with a graph triple. Returns its id.
Output schemas not documented. LLMs cannot predict response structure for any tool. mem_remember, mem_fact, mem_recall, mem_expand return JSON but structure is undocumented.
Descriptions too terse (10-50 chars). mem_status, mem_doctor, mem_compact, mem_export lack context for LLM selection. Baseline is 194 chars; these are 30-40 chars.
mem_batch and mem_evidence conflate multiple concerns. mem_batch handles remember+fact operations; mem_evidence handles cite+compute+conflicts. Split into single-responsibility tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Delete a message or fact by kind and id. Permanent deletion.
Typed memory link (ADR-001). src/dst like 'fact:3' | 'message:12' | 'summary:2' | 'edge:5'. rel: supports | contradicts | supersedes | derives_from. Both endpoints must exist and belong to `owner`. Re-linking a live (src,dst,rel,owner) is a no-op returning the existing id (created=false).
Unified search: FTS + vectors + RRF. Scope: all | session | facts. Истёкшие (valid_until) прячутся (include_expired=True — аудит истории). as_of (ISO-date) — срез графа на дату: valid_from <= as_of < valid_until. hops>1 — BFS по типизированным связям и entity-графу (ADR-001); rel фильтрует связи (`supports`/`contradicts`/`supersedes`/`derives_from`; на рёбрах — predicate). diagnostics=true → {"hits": [...], "diagnostics": {arms/contrib/timings/bfs/degraded}}; false — ровно прежний список (аддитивность).
Rebuild vector index and FTS index. Use after embedding model change or corruption.
Save a session message. Auto-compacts past the pressure threshold.
Server status: store size, message/fact/summary counts, backend health, maintenance errors.
No error handling guidance. Tools return JSON but do not document error cases, recovery steps, or actionable messages. LLMs cannot self-correct on failures.
mem_recall parameter 'rel' lacks enum constraint. Accepts 'supports|contradicts|supersedes|derives_from' but no formal enum in schema, LLMs may hallucinate invalid values.