Skip to main content
Glama

Server Details

Give your agents your team's real data — read the shared graph, propose actions your team approves.

Ownership verified
Status
Healthy
Uptime
94.9% over 42 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.2/5.0

Scored across 16 tools

Disambiguation5/5

Each tool has a clearly distinct role: search vs enumerate vs briefing, object details vs paths vs change impact, create vs merge vs delete, extraction steps vs direct remember. Descriptions explicitly contrast overlapping tools (e.g. recall vs semantic_search vs list_objects) and define when not to use them.

Naming Consistency4/5

Snake_case throughout with mostly verb_noun names, but a few bare verbs (forget, recall, remember) and one noun phrase (semantic_search) break the strict pattern. Still readable and consistent within conventions.

Tool Count4/5

16 tools for a knowledge-graph memory server with extraction, retrieval, maintenance, and action workflows. Slightly above the typical 3-15 range but each tool appears to cover a distinct capability.

Completeness4/5

Core object lifecycle is covered: create/update (remember), read (get_object/list/search), delete (forget), merge duplicates, and search/lineage. Gaps exist around class schema management (no class update/delete) and approval/action queue inspection, but these are largely handled by the human review UI.

Available Tools

16 tools
embed_memoryBuild semantic search indexA
Idempotent
Inspect

Build (or top up) the vector index a graph's semantic_search reads.

`semantic_search` matches against stored embeddings, so a graph that has
never been embedded answers every query with ZERO results — indistinguishable
from "nothing matches". Run this once per graph, and again after a large
ingestion, to make newly added objects findable by meaning.

Idempotent: entities already embedded for the current model are skipped
unless `force`. `kinds` defaults to ['object', 'class']. Requires write
scope.

RETURNS QUICKLY, and usually unfinished. Embedding is CPU-bound, so one
call spends a fixed wall-clock budget (~25s) and then reports what is
left in `objects_remaining` / `classes_remaining`. It is safe to call
again immediately to push it along; you do not have to loop it to zero,
because a background worker drains the same backlog on the server.
ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
kindsNo
memoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare write/idempotent/non-destructive. The description adds the operational details an agent actually needs: the ~25s wall-clock budget, the fact that the call usually returns unfinished with objects_remaining/classes_remaining counters, the safety of immediate re-invocation, the background worker, and the write-scope requirement.

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?

Four tight paragraphs with parameter names in code font, front-loaded with the purpose and ending with the practical loop-control advice. The all-caps emphasis and slight repetition of the backlog idea cost a little, but every sentence carries usable information.

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

Completeness5/5

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

An output schema exists, so return-shape explanation is optional, yet the description still names the counter fields an agent must read to decide whether to call again. Combined with the write-scope note and the sibling relationship to semantic_search, nothing needed to invoke this correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden. It documents two of three parameters concretely — force (skip already-embedded entities for the current model) and kinds (default ['object','class']). The 'memory' parameter is only implied as the graph target and is never named or explained, leaving a real gap.

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?

States a specific verb+resource ('build (or top up) the vector index') and ties it directly to the consuming sibling tool, semantic_search. An agent can immediately tell this apart from recall, remember, and semantic_search itself.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('Run this once per graph, and again after a large ingestion') plus the consequence of skipping it (every query returns ZERO results). It also gives an explicit when-not-to-loop: you do not have to drive the counter to zero because a background worker drains the backlog.

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

forgetForget an objectA
Destructive
Inspect

Delete one object and everything hanging off it. IRREVERSIBLE.

Its properties, the relationships and actions it takes part in, its
mentions and its ownership rows go with it. There is no undo and no
tombstone, so confirm with the user before calling — get_object first and
say what will go, and prefer get_change_impact when anything might depend
on it.

Use this for what should never have been recorded: a wrong fact, a test
row, something a person asked to have removed. Do NOT use it to tidy a
DUPLICATE — merge_objects folds the duplicate's properties and edges onto
the object you are keeping first, which forget cannot do.

`reason` is optional and is written to the audit log. Refuses graph
plumbing (relationship/action occurrences, vocabulary templates, the
`_system.*` namespace): delete the domain object and its edges follow.
Requires write access to the graph.
ParametersJSON Schema
NameRequiredDescriptionDefault
memoryYes
reasonNo
object_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description goes well beyond: it enumerates exactly what is cascaded (properties, relationships, actions, mentions, ownership rows), states there is no undo and no tombstone, notes `reason` is written to the audit log, lists refused target classes (graph plumbing, `_system.*`), and requires write access.

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?

Front-loaded with the action and IRREVERSIBLE warning in the first two lines, then organized into usage, exclusion, and mechanics. Dense but nearly every sentence adds actionable information; slightly longer than strictly necessary.

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?

An output schema exists so return values need no explanation, and the description covers safety, cascade behavior, alternatives, refusals, and permissions. The only omission is the meaning of the required `memory` parameter.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It explains `reason` (optional, written to audit log) and implies `object_id` via 'delete one object', but the required `memory` parameter is never explained, leaving a meaningful gap for a required field.

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?

States a specific verb and resource with cascade scope ('Delete one object and everything hanging off it'), and explicitly distinguishes itself from the merge_objects sibling. An agent can tell exactly what this does without opening the schema.

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

Usage Guidelines5/5

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

Explicit when-to-use cases ('what should never have been recorded: a wrong fact, a test row, something a person asked to have removed'), an explicit when-NOT case (duplicates belong to merge_objects), and prerequisite workflow (confirm with user, get_object first, prefer get_change_impact).

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

get_change_impactGet change impactA
Read-onlyIdempotent
Inspect

"What should I watch out for if I change this object?" — event-class neighbours, actions touching it, property conflicts, top related objects, and provenance. One composite call. memory is the graph's slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
memoryYes
object_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered elsewhere. The description adds real behavioral context by telling the agent this is 'one composite call' that bundles several analyses, which affects cost and result shape. It stops short of describing result size, latency, or whether missing objects error out.

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?

Extremely tight: one framing question, a compact enumeration of outputs, and one clarifying note on `memory`. The purpose is front-loaded and no sentence is filler, though the em-dash list reads slightly telegraphic.

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?

An output schema exists, so return values need not be explained, yet the description still sketches the payload categories — helpful for tool selection. Combined with the `memory` clarification and the composite-call note, an agent has enough to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description has to carry the burden. It clarifies that `memory` is the graph's slug, which is genuinely useful for a string param that would otherwise be ambiguous, but `object_id` is left entirely undocumented beyond its self-evident name.

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

Purpose4/5

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

States a specific composite read operation ('change impact') and enumerates what it aggregates: event-class neighbours, actions touching the object, property conflicts, related objects, provenance. That is far more than a restatement of the name and clearly distinguishes it from narrow siblings like get_object or get_paths, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

The framing question ('What should I watch out for if I change this object?') implies the pre-change analysis use case, so intended usage is inferable. But there is no explicit when-to-use statement, no exclusion, and no pointer to alternative tools such as get_object or get_paths for simpler lookups.

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

get_extraction_promptGet extraction promptA
Read-onlyIdempotent
Inspect

Add a document to the knowledge graph by extracting it YOURSELF, in this chat.

STEP 1 of 4. Use whenever the user shares a document/notes/transcript and
wants it captured in the graph, and you (this assistant) should do the
extraction. `memory` is the graph's slug from list_my_memories.

Returns a `passes` list. The flow: (1) run the `classes` pass prompt over
the document you already have; (2) run the `objects` pass prompt and draft
candidate objects/events; (3) call resolve_names ONCE with every candidate
name and reuse each returned canonical name + class; (4) call
submit_extraction_from_llm(memory, results). The document is NOT sent to
the server, and no object list is embedded in the prompts — resolve_names
is how you see what already exists.
ParametersJSON Schema
NameRequiredDescriptionDefault
memoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), but the description adds meaningful context beyond them: the document is NOT sent to the server, no object list is embedded, and resolve_names must be called ONCE. These are real behavioral facts an agent could not derive from annotations alone. Minor gap: it doesn't describe the return/pass format in detail, though an output schema exists.

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 opening line and the STEP-framing are front-loaded and each step earns its place, giving a usable workflow. It is dense but not padded; the only cost is length from enumerating all four flow stages, which is close to justified for a multi-tool orchestration.

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

Completeness5/5

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

Given a single parameter, an output schema (so return values need no prose) and a read-only annotation set, the description is complete: it covers when to use, the data-flow contract (nothing sent to server), and the required downstream calls. Nothing an agent needs to invoke it correctly is missing.

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 coverage is 0% for the single `memory` parameter, so the description carries the burden — and it does: '`memory` is the graph's slug from list_my_memories.' This gives both meaning and provenance for the value, which the bare schema property does not. Not a full 5 only because it doesn't state the slug format or a concrete example.

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 gives a specific verb+resource ('Add a document to the knowledge graph by extracting it YOURSELF') and explicitly positions the tool as 'STEP 1 of 4' in a named flow. It distinguishes itself from siblings like resolve_names and submit_extraction_from_llm by describing exactly what each does. An agent can tell this apart from the rest of the toolset without opening a schema.

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

Usage Guidelines5/5

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

It states the precise trigger: 'Use whenever the user shares a document/notes/transcript and wants it captured in the graph, and you (this assistant) should do the extraction.' The 'YOURSELF, in this chat' phrasing implicitly excludes the server-side alternative, and the workflow tells the agent what to do next rather than leaving it to inference.

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

get_objectGet objectA
Read-onlyIdempotent
Inspect

Everything the graph knows about ONE object: its properties, its incoming AND outgoing relationships grouped by type, the actions that touch it, and its APPROVED owners.

`memory` is the graph's slug from list_my_memories; `object_id` comes from
semantic_search, list_objects or recall. An id that
belongs to a different graph 404s rather than resolving — ids are not
portable between graphs, so re-resolve a name instead of reusing an id
you saw elsewhere.

Reach for something else when: you want the first ring around several
hits at once (semantic_search with expand=1 — one call, not one per hit);
you want how two objects connect (get_paths); you want what a change here
would disturb (get_change_impact).
ParametersJSON Schema
NameRequiredDescriptionDefault
memoryYes
object_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds a genuinely useful trait beyond that: an id belonging to a different graph 404s rather than resolving, and ids are not portable between graphs. It stops short of describing pagination or output volume, but the annotations carry most of the load.

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?

Three short paragraphs, each front-loaded: return contents first, then parameter provenance and the 404 caveat, then routing to alternatives. Every sentence earns its place, though the block is slightly longer than strictly necessary for a two-parameter read tool.

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

Completeness5/5

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

With an output schema present, the description needn't enumerate return values, yet it still signals what comes back. Parameter provenance, the cross-graph 404 behavior, and sibling routing are all covered, leaving no material gap for correct invocation.

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 0%, so the description must carry the burden, and it does: it states that `memory` is the graph slug from list_my_memories and that `object_id` comes from semantic_search, list_objects or recall. It also warns that ids cannot be reused across graphs. Only the integer type/format detail is left to the schema.

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?

States a specific verb and resource plus the exact payload returned: properties, incoming and outgoing relationships grouped by type, actions that touch it, and approved owners. This is precise enough to distinguish it from siblings like get_paths and get_change_impact without opening any schema.

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

Usage Guidelines5/5

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

Dedicated 'Reach for something else when' block names three alternatives and the condition selecting each: semantic_search expand=1 for the first ring around many hits, get_paths for how two objects connect, get_change_impact for blast radius. Explicit when-not guidance with named alternatives.

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

get_pathsFind paths between two objectsA
Read-onlyIdempotent
Inspect

Shortest relationship paths between two objects in a graph — the one-call answer to "how are A and B connected?". start and target accept an object id or an exact name/display name. Each returned path is a list of steps {from, rel, direction, to}; paths are all of minimal length. found: false with frontier_truncated: true means the search hit its breadth cap, NOT proof the objects are disconnected. Use this instead of chaining get_object calls hop by hop.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
startYes
memoryYes
targetYes
max_depthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already cover safety (readOnly/idempotent/non-destructive), yet the description adds real behavioral context: the returned step shape {from, rel, direction, to}, the guarantee that paths are minimal length, and the crucial caveat that 'found: false' with 'frontier_truncated: true' is a breadth-cap artifact rather than proof of disconnection. That last detail materially changes how an agent interprets results.

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

Conciseness5/5

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

Front-loads the core purpose, then packs the input formats, output shape, and the frontier_truncated caveat into tight sentences with no filler. Every clause earns its place.

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

Completeness5/5

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

An output schema exists so return values need not be restated, yet the description still flags the interpretation trap in the results, which is the most likely source of agent error. Combined with the named alternative, an agent has everything needed to call and interpret this tool.

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

Parameters3/5

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

Schema description coverage is 0% across 5 parameters, so the description must compensate. It does explain start/target semantics ('accept an object id or an exact name/display name') but leaves memory, limit, and max_depth entirely undocumented — including the max_depth that drives the frontier_truncated behavior it describes.

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?

States a specific verb+resource ('Shortest relationship paths between two objects in a graph') and adds a plain-language framing ('how are A and B connected?'). It clearly distinguishes itself from hop-by-hop get_object chaining and from unrelated siblings like list_objects or recall.

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?

Explicitly routes the agent: 'Use this instead of chaining get_object calls hop by hop,' naming the alternative and the reason. It lacks any when-not guidance (e.g., cases where resolve_names or semantic_search should be tried first), so it falls just short of fully prescriptive.

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

list_classesList classesB
Read-onlyIdempotent
Inspect

List the classes (schema) in a graph (slug from list_my_memories).

ParametersJSON Schema
NameRequiredDescriptionDefault
memoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description adds only the notion that the result is a schema/class listing scoped to a single graph, which is mild added value rather than rich behavioral context.

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?

A single compact sentence with the action front-loaded and no padding. It is efficient, though the parenthetical is doing double duty and could be slightly clearer without adding length.

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

Completeness3/5

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

An output schema exists, so return values need not be described, and annotations cover the safety profile. What remains thin is the identifier semantics and the absence of any routing guidance among the many sibling list/get tools, making the definition minimally adequate rather than complete.

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

Parameters3/5

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

Schema coverage is 0% with one required parameter named 'memory', so the description must carry the load and does partially: it says the value is a graph slug obtained from list_my_memories. However, this contradicts the schema's naming ('memory' vs 'slug'/'graph'), leaving the identifier's exact form somewhat ambiguous.

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

Purpose4/5

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

States a specific verb+resource: listing the classes (schema) within a graph. It also ties itself to the ecosystem by pointing at list_my_memories as the source of the graph identifier, which helps distinguish it from siblings like list_objects. It stops short of explicitly contrasting its scope with those siblings.

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

Usage Guidelines3/5

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

Usage is only implied: the parenthetical reveals a prerequisite (obtain the slug via list_my_memories), which is useful context for invocation. There is no explicit statement of when this tool should be chosen over list_objects or get_object, nor any exclusion guidance.

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

list_my_memoriesList my graphsA
Read-onlyIdempotent
Inspect

List the graphs YOU can read and ingest into. Call this first, then pass the chosen slug as the memory argument to every other tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world scope, so safety is covered. The description adds genuine value beyond that: it discloses the access-scoping behavior ('graphs YOU can read and ingest into') and the bootstrap role in the toolchain. It does not discuss pagination or result size, which keeps it short of a 5.

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

Conciseness5/5

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

Two short sentences, no filler. The identity/scope statement comes first and the workflow instruction second, so the most important framing is front-loaded.

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

Completeness5/5

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

An output schema exists, so return values need no further explanation, yet the description still highlights the one output field that matters for chaining (`slug`). For a zero-parameter discovery tool with full annotation coverage, nothing an agent needs to call it correctly is missing.

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?

The tool takes zero input parameters, so the baseline is 4. The description adds cross-tool semantics by explaining that the returned `slug` is fed into the `memory` argument of every other tool, clarifying the intended use of the output field even though it is not an input.

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?

States a specific verb and resource ('List the graphs') and immediately disambiguates the naming mismatch by making clear that 'memories' are graphs the caller can access. The permission scope ('YOU can read and ingest into') tells the agent this is a scoped, personalized listing, distinct from any sibling operation.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'Call this first, then pass the chosen `slug` as the `memory` argument to every other tool.' This gives both the sequencing (first) and the follow-up action, which is exactly the guidance a discovery tool needs. No competing sibling performs this function, so no exclusion is required.

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

list_objectsList objectsA
Read-onlyIdempotent
Inspect

ENUMERATE objects in a graph — the population, not the best matches.

`memory` is the graph's slug from list_my_memories. Narrow it three ways, all
optional: `class_name` to ONE exact class by canonical snake_case name
(from list_classes — descendants NOT included), `class_id` for the same
filter when you already hold the id, or `owned_by` to list what one
PERSON object owns (approved ownerships only). Omit all three to walk
every class. `limit` defaults to 50. Each row carries `status` — defer on
'unapproved'; `recall` reports how much is waiting for review.

This walks the graph in storage order; it does not rank by meaning. When
the question is "what do we know about X?" use semantic_search — it
matches on meaning and keywords and can inline each hit's first ring with
expand=1. Use list_objects when you want the population itself:
everything of one class, a count, a sweep, one person's responsibilities.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
memoryYes
class_idNo
owned_byNo
class_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. Beyond that, the description discloses storage-order traversal (not ranked by meaning), that each row carries a status field, that unapproved rows should be deferred, that recall shows pending review volume, and that class_name excludes descendants and owned_by returns approved ownerships only — rich behavioral context the annotations cannot provide.

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

Conciseness5/5

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

Front-loaded with the key distinction, then organized by filter, then by sibling routing. Despite being longer than average, every sentence earns its place given five parameters at 0% schema coverage and the need to route against semantic_search.

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

Completeness5/5

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

An output schema exists, yet the description still gives the minimum return context an agent needs (status field, unapproved deferral, recall count). Combined with the exhaustive parameter guidance and sibling routing, nothing required to call this tool correctly is missing.

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

Parameters5/5

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

With 0% schema description coverage, the description carries the full burden and does so: memory is the slug from list_my_memories, class_name is one exact canonical snake_case name from list_classes (descendants NOT included), class_id is the same filter by id, owned_by lists approved ownerships for one PERSON, and limit defaults to 50. All five parameters are explained with format and semantics.

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?

States a specific verb and resource ('ENUMERATE objects in a graph') and immediately distinguishes the result from ranked semantic search ('the population, not the best matches'). An agent can tell this apart from semantic_search and list_classes without opening any schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative (semantic_search) and the condition that selects it ('what do we know about X?' vs 'the population itself: everything of one class, a count, a sweep, one person's responsibilities'). It also tells the agent when to defer ('defer on unapproved') and how to narrow filters.

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

merge_objectsMerge duplicate objectsA
Destructive
Inspect

Fold a DUPLICATE object into the object it duplicates, then delete it.

Extraction coins near-duplicates (`turkey` beside `country_tur`) because the
known-objects hint it sees is capped at the newest rows. Use this when two
objects of the SAME class denote one real thing: `winner_id` is the one to
keep, and the loser's properties, edges, mentions and ownership move onto it
before it goes. Edges the move turns into self-loops or exact duplicates are
dropped. Identify the loser by `loser_id` or by `loser_name` (its canonical
snake_case name, resolved within the winner's class).

Irreversible, and the loser id stops resolving afterwards — confirm the two
really are one thing (get_object on both) before calling. Refuses a
cross-class pair. Requires write access to the graph.
ParametersJSON Schema
NameRequiredDescriptionDefault
memoryYes
loser_idNo
winner_idYes
loser_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare destructive=true and idempotent=false, but the description goes well beyond: irreversibility, the loser id ceasing to resolve, movement of properties/edges/mentions/ownership, dropping of resulting self-loops/exact duplicates, cross-class refusal, and the write-access requirement. This is rich behavioral context an agent could not infer from annotations alone.

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

Conciseness5/5

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

Front-loads the core action in the first sentence, then layers mechanism, identification, and warnings in a logical order. Length is justified by the operation's dangerousness; no sentence is filler.

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

Completeness5/5

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

For a destructive mutation with an output schema present, the description covers everything an agent needs before calling: direction, irreversibility, identifier resolution, refusals, and access requirements. Only the 'memory' parameter is left to the schema.

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?

With 0% schema description coverage the description must compensate, and it largely does: it explains winner_id as the keeper, and loser_id / loser_name as mutually-candidate identifiers, including that loser_name is a canonical snake_case name resolved within the winner's class. The 'memory' parameter, however, is never explained.

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?

States a specific verb+resource (fold a duplicate object into the object it duplicates, then delete it) and precisely names the direction of the operation (winner vs loser). An agent can distinguish it from siblings like forget or remember without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use condition ('when two objects of the SAME class denote one real thing'), names the prerequisite action (confirm with get_object on both before calling), and states a hard exclusion (refuses a cross-class pair). Routing and preconditions are fully specified.

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

propose_actionPropose an action for approvalAInspect

Queue ONE action for HUMAN APPROVAL — nothing is sent or written until a graph owner approves it in the graph's approval queue.

The kind that makes this powerful from an AI client: `workspace_write`
creates a record in the graph's own apps once approved — an issue on
the Agile board, a support ticket, a CRM deal, a note. Fields:
target=record title, body=record body, extra.class_name=the app class
(issue/ticket/deal/note/…), extra.properties=a {property: value}
object, extra.relationships=[{type, target_name}].

Outbound kinds (jira_comment, slack_message, gmail_send, …) address
connected external tools; see the API's action registry for their
fields. `memory` is the graph's slug. Requires write scope.
ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
kindYes
extraNo
memoryYes
targetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnly=false, idempotent=false, destructive=false, and the description adds substantive context beyond them: the action is queued, not executed, until an owner approves, and it requires write scope. The 'Queue ONE action' phrasing also implies each call creates a distinct pending proposal, consistent with non-idempotency.

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 approval-gating behavior is front-loaded and every sentence carries parameter or behavioral information. The framing phrase 'The kind that makes this powerful from an AI client' is a bit of unearned filler, but the rest is dense and useful.

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?

For a mutation tool with annotations and an output schema, the description covers the approval workflow, scope requirement, and per-field semantics of the primary kind well enough for correct invocation. It leaves outbound kind fields to the API registry, which is a documented gap but not a blocking one.

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 0%, so the description must carry the burden, and it does: it maps target=record title, body=record body, extra.class_name=app class, extra.properties={property:value}, extra.relationships=[{type,target_name}], and memory=graph slug. Only `kind` is left to an external registry rather than enumerated inline, which keeps it from a 5.

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?

States a specific verb+resource: 'Queue ONE action for HUMAN APPROVAL,' and immediately clarifies the scope ('nothing is sent or written until a graph owner approves it'). No sibling tool performs this staged-approval function, so it is readily distinguishable.

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?

Explains the operating context (actions are gated by human approval) and distinguishes the `workspace_write` kind from outbound kinds (jira_comment, slack_message, gmail_send) and `memory`. It notes the write-scope requirement. It stops short of explicit when-not-to-use guidance (e.g., when to call a direct write tool instead).

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

recallRecall — brief me on this graphA
Read-onlyIdempotent
Inspect

CALL THIS FIRST, before working in a graph — it is the briefing.

One composite read that answers what a cold agent actually needs: what
this graph holds (classes and counts), what landed recently, where the
graph contradicts itself, how much is waiting for a human's approval,
and the newest session checkpoint — where the last session stopped.

`memory` is the graph's slug from list_my_memories. `topic` additionally runs the
hybrid search and inlines the hits, so "brief me, and specifically about
pricing" is one call rather than two. `limit` bounds the recent list.

Read the `status` on everything it returns: 'unapproved' rows are
proposals a human has not accepted, and saying so is the difference
between reporting the team's record and inventing it — `review_queue`
counts how many are waiting, and a person clears them in the review UI. `conflicts` are
places the graph disagrees with itself — surface them, don't pick a side.

Reach for something else when you already know what you are looking for:
semantic_search for a topic, get_object for one thing, list_objects for a
population.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
topicNo
memoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them: it explains the 'status' semantics ('unapproved' rows are human proposals), that review_queue counts pending approvals, and that conflicts must be surfaced rather than resolved. That is exactly the interpretive context an agent needs to avoid inventing facts.

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

Conciseness5/5

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

Front-loaded with the imperative 'CALL THIS FIRST', then organized into return contents, parameter meanings, and exclusions. Every sentence carries load; length is justified by the breadth of the composite read.

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

Completeness5/5

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

The description covers trigger, contents, parameter semantics, and interpretation guidance for the returned fields. Although an output schema exists, the description still provides the interpretive layer (status handling, conflicts) that raw schema alone would not convey.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so for all three params: memory is the graph slug from list_my_memories, topic additionally runs hybrid search and inlines hits, and limit bounds the recent list. It even explains the design rationale for topic being a single call rather than two.

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?

States a specific verb and resource ('composite read that answers what a cold agent actually needs') and enumerates exactly what it returns: classes and counts, recent activity, conflicts, review queue, and session checkpoint. This clearly distinguishes it from the sibling reads an agent might otherwise pick.

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

Usage Guidelines5/5

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

Explicit 'CALL THIS FIRST, before working in a graph' sets the when, and the closing line names when not to use it plus the specific alternatives: semantic_search for a topic, get_object for one thing, list_objects for a population. Nothing is left to inference.

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

rememberRemember a factAInspect

Record ONE thing worth keeping, in a single call.

`text` is the fact in plain language — it becomes the object's
description and is indexed for search. `class_name` says what KIND of
thing it is (decision, risk, convention, person, session_checkpoint, …);
it defaults to 'note' and a class that does not exist yet is created.
`properties` are typed fields ({"status": "accepted", "decided_on":
"2026-09-11"}), and `relationships` are edges to other objects
([{"type": "decided_by", "target": "sarah_chen"}] — add "target_class"
to create a target that isn't here yet).

Writes land `status='unapproved'`: a proposal, flagged until a person
approves it — an agent proposes, a human decides. You cannot read an
unapproved row back yourself until then (a session_checkpoint is the
exception — see SESSION HANDOFF), so tell the user what you recorded
rather than treating it as settled.

Naming: omit `name` and the server derives a unique one from the text.
PASS a `name` that already exists in that class and you UPDATE that
object instead of creating a second one — that is how you revise a fact
rather than accumulate contradictions.

SESSION HANDOFF: before you run out of context, call this with
class_name="session_checkpoint" and a text saying what you did, what is
left and where you stopped. The next session's `recall` hands it straight
back.

For a whole document use the extraction pair (get_extraction_prompt →
submit_extraction_from_llm) instead — it produces many typed rows and
keeps the document on your side. Check `near_duplicates` in the response:
if what you wrote already existed, fold the pair with merge_objects.
ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
textYes
memoryYes
class_nameNonote
propertiesNo
source_docNo
display_nameNo
relationshipsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only give the generic safety profile (readOnlyHint=false, idempotentHint=false); the description goes far beyond by disclosing that writes land status='unapproved', that the agent cannot read the row back until a human approves, that session_checkpoint is the exception, and that reusing an existing name performs an UPDATE rather than a create. These are precisely the nontrivial behaviors an agent must know before calling.

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?

Front-loads the core action and then organizes the rest into labeled concerns (Naming, SESSION HANDOFF), so it is scannable. It is long for a tool description, but nearly every sentence carries operational information rather than filler.

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

Completeness5/5

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

For a complex 8-param mutation tool with an output schema, the description covers the mutation semantics, approval workflow, upsert dedup path, handoff use case, and even points at the near_duplicates field to check. Since an output schema exists, return-value detail is correctly omitted.

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 coverage is 0%, so the description carries the burden, and it does so well for text, class_name, properties, relationships and name (including the upsert semantics and the relationships target_class trick). However, `memory` is a required parameter and is never explained, and source_doc/display_name are also unaddressed, leaving clear gaps.

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?

States a specific verb+resource ('Record ONE thing worth keeping, in a single call') and explicitly scopes what belongs here versus the extraction pair (get_extraction_prompt → submit_extraction_from_llm). An agent can distinguish this from recall, merge_objects and semantic_search without opening a schema.

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

Usage Guidelines5/5

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

Names alternatives and the condition selecting them: whole documents go to the extraction pair, duplicates get folded with merge_objects, and the SESSION HANDOFF paragraph gives an explicit when-to-use trigger ('before you run out of context'). Exclusions are stated, not inferred.

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

resolve_namesResolve names in batchA
Read-onlyIdempotent
Inspect

Ask which of your candidate names already exist in the graph — call ONCE per document during extraction, after drafting candidate entities and before emitting the final JSON.

`items` = [{"kind": "object"|"class", "name": "...", "class_name": "..."?},
...] (max 200). Each result carries `exact` (case-insensitive name hits)
and `matches` (spelling/semantic look-alikes with scores). REUSE a
returned canonical `name` + its class instead of creating a duplicate;
only names with no hits should be created new. Read-only.
ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
top_kNo
memoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive hints. The description adds genuinely useful context beyond that: the batching behavior (max 200, call once per document), and the result fields described in prose. It doesn't detail, so a 4 fits.

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?

Front-loaded with the core question, then usage timing, then input/output shape, then action guidance. The structure is logical and mostly tight; it's a bit dense but every sentence carries instruction.

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?

An output schema exists, so return values needn't be fully explained, yet the description usefully pre-summarizes `exact` and `matches`. For a 3-param read-only tool this is nearly complete; only the `memory` and `top_k` params remain unexplained.

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 coverage is 0% (no field descriptions), so the description must compensate. It does well for the central `items` param, documenting exact/extraction consumers the description names: `memory`, `top_k`, and the envelope shape aren't described in prose, leaving a gap.

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?

States a specific verb+resource ('Ask which of your candidate names already exist in the graph') and distinguishes it from creation siblings like remember/merge_objects by emphasizing deduplication before emitting the final JSON.

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

Usage Guidelines5/5

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

Explicitly instructs 'call ONCE per document during extraction, after drafting candidate entities and before emitting the final JSON' and clarifies the create-new alternative ('only names with no hits should be created new'), giving clear when-to-use and when-to-create-instead guidance.

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

submit_extraction_from_llmSubmit extractionAInspect

Save the extraction you produced — the LAST step after get_extraction_prompt and your single resolve_names call.

`memory` is the graph's slug. `results` maps each pass `key` to that pass's JSON,
e.g. {"classes": {...}, "objects": {...}}. `source_doc` is an optional label
(filename/title) for provenance. New rows land status='unapproved' and wait
for a person in the graph's Review tab.

`approve=True` ONLY when the user explicitly asked for this document's facts
to go live without review ("load it as approved"). Never set it on your own
judgement: the load is then recorded under the user's name and this key, is
listed as "settled without review", and can be taken back with one click.
It is refused (403) unless the user may approve in this graph — an owner,
or someone an owner allowed to approve; then load without it.

The response may carry `validation_errors` (rows the server could not
place — report them to the user instead of ignoring them) and
`near_duplicates` (new objects that look like an existing one — review
with the user and fold confirmed pairs with merge_objects).
ParametersJSON Schema
NameRequiredDescriptionDefault
memoryYes
approveNo
resultsYes
source_docNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare the generic write profile (readOnlyHint=false, non-idempotent, non-destructive). The description adds substantial context the annotations cannot: new rows land status='unapproved' pending human review, approval is recorded under the user's name as "settled without review", is reversible in one click, and is refused with 403 unless the caller is an owner or owner-delegated approver. That is exactly the operational detail an agent needs before mutating graph state.

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?

Front-loaded with purpose and workflow position before the mechanics, and each paragraph covers a distinct concern (params, approve semantics, response handling). The approve paragraph is somewhat verbose and repeats the consequence framing, but the risk it mitigates justifies most of the length.

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

Completeness5/5

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

Despite a nested-object `results` parameter and no schema descriptions, the description covers inputs, workflow placement, approval authorization, and the two meaningful response fields (validation_errors, near_duplicates) even though an output schema exists. An agent has everything needed to call this correctly and handle its result.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does: `memory` is the graph's slug, `results` maps each pass `key` to that pass's JSON with a concrete example, `source_doc` is an optional provenance label, and `approve` has both a default (false) and a strict conditional trigger. Format and intent are supplied for every parameter.

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?

States a specific verb+resource ("Save the extraction you produced") and immediately positions it in the workflow as the LAST step after get_extraction_prompt and resolve_names, explicitly naming two siblings. An agent can place this tool in the pipeline without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit sequencing (after get_extraction_prompt and your single resolve_names call), an exclusion rule for approve ("ONLY when the user explicitly asked... Never set it on your own judgement"), and routing for response anomalies (report validation_errors, fold near_duplicates with merge_objects). Nothing is left to inference.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedsubmit_extraction_from_llm1 field changed
      • addedInput schema / properties / approve
        Added value: +{
        +  "default": false,
        +  "title": "Approve",
        +  "type": "boolean"
        +}
  2. 2 tool updates
    • Removedlist_unapproved
    • Removedmanage_owner
  3. 14 tool updates
    • Addedforget
    • Removedget_feed
    • Removedget_graph
    • Removedlist_class_objects
    • Changedlist_objects2 fields changed
      • addedInput schema / properties / class_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Class Id"
        +}
      • addedInput schema / properties / owned_by
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Owned By"
        +}
    • Removedlist_owned_objects
    • Changedlist_unapproved1 field changed
      • addedInput schema / properties / queue
        Added value: +{
        +  "default": "content",
        +  "title": "Queue",
        +  "type": "string"
        +}
    • Removedlist_unapproved_owners
    • Addedmanage_owner
    • Addedrecall
    • Addedremember
    • Removedremove_owner
    • Removedset_owner
    • Removedsuggest_owner
  4. 22 tool updates
    • First observedembed_memory
    • First observedget_change_impact
    • First observedget_extraction_prompt
    • First observedget_feed
    • First observedget_graph
    • First observedget_object
    • First observedget_paths
    • First observedlist_class_objects
    • First observedlist_classes
    • First observedlist_my_memories
    • First observedlist_objects
    • First observedlist_owned_objects
    • First observedlist_unapproved
    • First observedlist_unapproved_owners
    • First observedmerge_objects
    • First observedpropose_action
    • First observedremove_owner
    • First observedresolve_names
    • First observedsemantic_search
    • First observedset_owner
    • First observedsubmit_extraction_from_llm
    • First observedsuggest_owner

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables teams of AI coding agents (Claude Code, Cursor, Codex) to share persistent, time-aware graph memory and coordinate their work via MCP, so agents recall verified fixes at the moment of failure, learn procedures automatically, avoid file conflicts, claim tasks race-free, and hand off facts and decisions between sessions.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to read, search, and propose shared team knowledge as reviewable claims, while holding agent-proposed additions until a human approves them. Agents can also cite documents as evidence for existing claims, with no tools for reviewing, retracting, or unciting.
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources