Skip to main content
Glama

audit

Read-only

Inspect the health of the knowledge graph. mode=stale: surface drift candidates (contradictions, superseded labels, duplicates, stale open questions, old transient memories, and shadow rows — memories stored under an alternate domain name rather than the canonical domain, making them unreachable by domain-scoped reads). mode=orphans: return memories with no connections. mode=archived: list archived memories — only call forget(restore=true) on any listed memory after explicit unambiguous user confirmation; never on implication or casual mention. mode=conflicts: domain-wide sweep for semantically close memory pairs, ranked by authority severity (STORY-135) — candidate-surfacing only, same aboutness-not-agreement caveat as remember()'s possible_contradicts: the server never asserts these pairs actually conflict, only that they are worth your review. Connecting a flagged pair with any relationship (in either direction) suppresses it from future conflicts sweeps; a later substantive revision to either memory lifts the suppression and the pair resurfaces. Returns lean results only — id, label, and a truncated why_matters excerpt; call recall(id) for full content. When a list or section has 2 or more results, each is rendered as a single compact text line — "[id] label — excerpt (domain, node_kind)" — instead of a JSON object; exactly one result is returned as a full object.stale digest lines also carry reason= and conflicts_with= when present, and state= when set. Optional domain, limit, tags, node_kind, and state filters. tags (space-separated) filters results to memories carrying any of those tags — applies to stale, orphans, and archived modes. node_kind (space-separated union) filters results to matching kinds — applies to all modes. Negation and wildcards are not supported. state (space-separated union) post-filters results to memories with any of the given lifecycle states: none | resolved | superseded | contested — applies to stale, orphans, and archived modes. memory_id (stale mode only) restricts drift results to the depth-2 neighbourhood of that memory; silently ignored in other modes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNo
tagsNo
limitNo
stateNo
domainNo
memory_idNo
node_kindNoOptional filter: space-separated node kinds (union match, same convention as tags). E.g. 'option standing' returns memories whose node_kind is option OR standing. Negation and wildcards are not supported.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool readOnly and non-destructive, and the description adds substantial behavioral context beyond that: lean result shape, compact text-line rendering vs full object, suppression of conflict pairs, memory_id being silently ignored in other modes, and which filters apply to which modes. This gives the agent a realistic model of how the tool behaves at call time.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense, with the core purpose front-loaded and each mode and filter earning its place. Some parenthetical asides, such as the shadow-rows explanation, add necessary context. It is structured effectively, though it could be tightened without losing key details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given seven optional parameters, no output schema, and multiple modes, the description covers most of what an agent needs: mode semantics, filter behavior, output format variations, suppression behavior, and cross-tool safety guidance. Minor gaps remain, such as domain/limit semantics and definitive mode enum values, but overall it is nearly complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 14%, so the description carries most of the burden, and it largely succeeds: tags, node_kind, state, and memory_id all receive semantic explanations. However, domain and limit are named but not given semantics such as allowed domain values or default/maximum limits, so compensation is strong but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Inspect the health of the knowledge graph,' then enumerates four distinct modes (stale, orphans, archived, conflicts) that make the tool's scope concrete. This clearly separates audit from sibling retrieval tools like recall and search, even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each mode is tied to a specific use case, e.g., stale surfaces drift candidates, orphans returns memories with no connections, and conflicts surfaces semantically close pairs. It also gives an explicit safety rule for archived mode ('only call forget(restore=true) ... after explicit unambiguous user confirmation') and points to recall(id) for full content. However, it does not explicitly say when to prefer a sibling tool over audit, so it stops short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.2/5.0
Disambiguation4/5

Each tool targets a distinct operation—lifecycle (remember/revise/forget), graph edges (connect/disconnect/why_connected), retrieval (recall/search/recent/history/orient/significance)—and the descriptions carefully disambiguate overlaps. However, the read/analysis cluster (recent, history, orient.recent, significance) could still cause initial misselection before reading the detailed descriptions.

Naming Consistency3/5

Names are readable and consistently lowercase, but they do not follow a single convention: most are bare verbs (connect, remember, revise, search, visualise) while others are nouns (domains, history, recent, significance) and two are multiword phrases (suggest_connections, why_connected). This mix is still predictable enough to navigate, but less coherent than a uniform verb_noun surface.

Tool Count4/5

16 tools is slightly above the typical 3–15 band, but the scope of a knowledge-graph memory server justifies the breadth: CRUD, connections, domain admin, and multiple query/analysis tools are all represented. No tool feels redundant enough to cut, though the set is at the heavy end.

Completeness4/5

Core lifecycle is well covered: create/read/update/archive/purge, connection creation/removal, domain admin, and multiple query/analysis modes. The main gap is that bulk domain merge (merge_domains) is referenced in tool descriptions but not exposed as an MCP tool, so agents must direct users to an external admin interface for that operation.

Resources