Public leaderboard

Public assessment

vornicx/Midas (midas-memory-mcp)

midas-memory-mcp · v1.0.0 · scanned

What changed in the harness

Selection accuracy 98→98, token cost up 9%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

20.3 / 30

20.3 out of 30
03Economics

19.2 / 20

19.2 out of 20
04Discoverability

13.5 / 20

13.5 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

16 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
remember
params_unexplained no_return_description
Persist a memory (content) for later recall. kind: note | chat | fact | preference | constraint | mission; importance 1-5, where 0 = auto-derive from content with no LLM; provenance: planning | action | observation | user_confirmation (external actions may rely only on user_confirmation). session groups memories within a conversation, actor names the source, namespace scopes the store. Returns the stored memory including its assigned id and metadata.
capture
params_unexplained no_return_description
Submit a turn (content) to memory; Midas decides whether to keep it with no LLM: it scores importance, enforces the relevance floor, skips duplicates, and returns its decision with the reason. kind: note | chat | fact | preference | constraint | mission; provenance: planning | action | observation | user_confirmation. session groups turns within a conversation, actor names the source, namespace scopes the store.
recall
params_unexplained no_return_description
Search stored memories matching query and return the most relevant ones (up to limit) with deterministic, source-traceable evidence: the exact stored text plus provenance/source/timestamps and score components. kind and min_importance filter which memories are candidates; set hybrid=true for exact-identifier queries; namespace scopes the store.
inspect_memory
params_unexplained no_return_description
Return the full stored memory identified by memory_id, without search, mutation, or embedding exposure. memory_id is the id of an existing stored memory (as returned by recall or remember).
build_context
params_unexplained no_return_description
Assemble a budgeted, prompt-ready context block from memories matching query and return it as lean dated lines plus a "Today is" anchor, capped at token_budget tokens. limit caps the number of lines; set hybrid=true for exact-identifier queries; namespace scopes the store. Use recall/inspect_memory for full provenance.
check_memory_use
params_unexplained no_return_description
Decide whether recalled memories matching query may justify an intended_use and return the verdict. intended_use: planning | answer | external_action | destructive_action (the last two require user_confirmation provenance). limit caps how many memories are considered; acting_agent identifies who requests the use; namespace scopes the store.
forget
params_unexplained no_return_description
Delete the single stored memory identified by memory_id and return confirmation. Supersession chains are relinked, not orphaned. memory_id is the id of an existing stored memory (e.g. from recall).
forget_matching
params_unexplained
Topic-level erasure with a reviewable audit: find memories matching query, keep those meeting min_relevance (0-1), consider at most limit, and by default (dry_run=true) return what WOULD be deleted; repeat with dry_run=false to erase. Bypasses durability protections on purpose. namespace scopes the store.
forget_all
no_return_description
Clear all stored memories for a fresh start and return the number of memories deleted.
resume
params_unexplained no_return_description
START OF SESSION: return everything needed to pick up where the last session left off, in ONE call — pinned directives, forbidden rules, what changed in the last hours (default 168 = a week), current state, open commitments, and unresolved conflicts. project and namespace filter the store; token_budget caps the returned prompt-ready context.
memory_conflicts
params_unexplained no_return_description
Return live beliefs that CONTRADICT each other with neither superseding the other — the multi-agent failure mode — as ranked candidate pairs using the same-slot heuristic (value swap / numbers disagree / one side negates). namespace scopes the store; limit caps the number of pairs returned. Verify with the user, then forget the wrong one or capture the corrected value.
open_loops
params_unexplained no_return_description
Return unresolved commitments — work someone said WOULD be done but never closed — oldest (most overdue) first, up to limit. project and namespace filter the store. Record one with remember_commitment; close it with close_loop.
remember_commitment
params_unexplained no_return_description
Record a commitment (an OPEN LOOP) with content text so promised work stays visible in open_loops/resume until closed with close_loop, surviving across sessions; returns the stored loop. project tags the related project; due is an optional due date; session groups it within a conversation; namespace scopes the store.
close_loop
params_unexplained no_return_description
Close an open commitment identified by loop_id, recording resolution text and superseding the open loop while keeping the promise -> resolution history auditable; returns confirmation. loop_id comes from open_loops; resolution describes what actually happened.
maintain
params_unexplained
Run a no-LLM memory-maintenance pass — bound to max_records and/or a drop below min_value, optionally applying ttl — and return the deletion audit. Durable kinds and supersession chains are protected.
stats
name_restates_behavior params_unexplained no_return_description
Report memory statistics: the total count, broken down by kind, provenance, and namespace, and across short/medium/long temporal tiers. namespace optionally restricts the report to a single namespace.

Selection evidence

Confusable tool pairs.

6 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
forget forget_matching high Natural deletion requests reference content ('forget what I said about X'), not ids; forget requires a memory_id while forget_matching queries by text, so an agent commonly picks the wrong one.
remember remember_commitment high Tasks like 'remember to finish the report by Friday' are the canonical open-loop trigger; an agent may store via remember as a note instead of creating a tracked commitment, since both 'store this' intents overlap.
forget forget_all medium A request like 'forget all that stuff I told you' is ambiguous about scope; an agent may pick forget_all (nukes everything) when the user meant a single memory, or pick forget before knowing the id.
forget_matching forget_all medium 'Delete everything about topic X' sits on the boundary between topic-scoped erasure (forget_matching) and full clear (forget_all); the agent may over-select the destructive all-memories wipe.
open_loops close_loop medium Tasks like 'close out my open commitments' couple the two: close_loop needs a loop_id retrieved via open_loops, so an agent may pick the listing tool instead of the closing tool or vice versa.
check_memory_use memory_conflicts low 'Check my memory for problems' is weakly ambiguous between validating a memory's permitted use (check_memory_use) and surfacing contradictory beliefs (memory_conflicts); usually disambiguated by the query shape.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard