Skip to main content
Glama

🧠 SmartMemory

Give your LLM structured, verifiable memory β€” turn conversations into knowledge graphs your AI can reason over.

CAUTION

Proof of Concept. SmartMemory is an experimental implementation of a neuro-symbolic architecture, built to explore how LLMs can interact with knowledge graphs to learn and apply rules. It is not intended for production use β€” treat it as a research and learning playground.


Why SmartMemory?

LLMs are brilliant talkers with no real memory. Across a conversation they forget, they can't explain why they concluded something, and they happily state things that were never verified.

SmartMemory adds the missing half: a symbolic brain.

  • Facts you state are stored in an auditable knowledge graph (RDF), each with its provenance.

  • Logic is captured as explicit, inspectable rules (SPARQL/OWL) β€” not hidden in weights.

  • New conclusions are derived, traceable, and reversible β€” and ambiguous ones are sent back to you for validation.

The result is an assistant that doesn't just sound right β€” it can show its reasoning.


Related MCP server: dragon-brain

What it can do

SmartMemory turns your AI assistant into a domain expert that supports:

  • Asynchronous reasoning β€” deductions run in the background (InferenceManager) without slowing the conversation.

  • Uncertainty handling β€” ambiguous facts trigger a human-in-the-loop validation workflow.

  • Smart NLP extraction β€” handles complex sentences, coreferences, and direct Turtle notation.

  • Provenance & audit β€” every stored fact keeps its origin (UUID, source, timestamp).

  • Dynamic rule engine β€” learns and applies new SPARQL rules on the fly.


How it works

flowchart LR
    A["Natural-language<br/>conversation"] -->|LLM extraction| B["Facts"]
    B --> C[("Knowledge Graph<br/>RDF / Turtle")]
    C -->|SPARQL / OWL rules| D["Inference engine"]
    D -->|new deductions| C
    D -->|ambiguous?| E["Human-in-the-loop<br/>validation"]
    E -->|approve rule / fact| C
    C -->|provenance + audit| F["Verifiable answers"]

The LLM is the language cortex (understanding and extraction); the knowledge graph and rule engine are the symbolic memory (storage, logic, proof). Neither alone is enough β€” together they are neuro-symbolic.


Two ways to use it

πŸ’¬ Conversational Mode β€” the "Brain"

πŸ—οΈ Supervision Mode β€” the "Factory"

For

Individuals using an LLM client (Claude Desktop, etc.)

Teams, developers, heavy users

Goal

Let your assistant remember facts and learn logic as you chat

Extract thousands of rules from documents (PDFs) and visualize the graph

How

Configure it as an MCP server

Deploy the full dashboard via Docker

Setup

Jump to setup ↓

Jump to setup ↓


Quick start

I want to…

Go to

Get running in 5 minutes

Quick Start Guide

Try the advanced demo

Demo Procedure

Understand the internals

Architecture Β· Neuro-symbolic principles

Configure a provider

Configuration reference

Fix a problem

Troubleshooting

Browse all docs

Documentation index


Mode 1 β€” Conversational Setup (MCP)

Gives your LLM long-term memory and logical deduction.

No Python required. The image is published on GitHub Container Registry.

Claude Desktop β€” edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "smart-memory": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "ghcr.io/mauriceisrael/smart-memory:latest"]
    }
  }
}

The same block works for any MCP client (e.g. Cline) β€” just point it at your client's mcp_settings.json. Restart the client and you're done. βœ…

Option B β€” Local server (from source) πŸ”’

Best for developers and privacy-conscious users.

git clone https://github.com/MauriceIsrael/SmartMemory
cd SmartMemory
python3 -m venv venv
source venv/bin/activate
pip install -e .

Then point Claude Desktop at your local install:

{
  "mcpServers": {
    "smartmemory": {
      "command": "/absolute/path/to/SmartMemory/venv/bin/python",
      "args": ["-m", "smart_memory.server"]
    }
  }
}

Restart Claude and try: "I know Bob. He goes to work by car. Can he vote?" β€” see the demo below.


Mode 2 β€” Supervision Setup (Docker)

Runs the web dashboard and API server β€” ideal for visualizing the knowledge graph, extracting rules from PDFs, and hosting a shared memory for a team.

# Dashboard mode β€” example with Mistral
docker run -p 8080:8080 \
  -e LLM_PROVIDER=mistral \
  -e LLM_MODEL=mistral-large-latest \
  -e LLM_API_KEY=your-api-key \
  -v $(pwd)/brain:/app/data \
  ghcr.io/mauriceisrael/smart-memory:latest dashboard
# Dashboard mode β€” example with a local model (Ollama)
docker run -p 8080:8080 \
  -e LLM_PROVIDER=ollama \
  -e LLM_MODEL=llama3 \
  -e LLM_BASE_URL=http://172.17.0.1:11434 \
  -v $(pwd)/brain:/app/data \
  ghcr.io/mauriceisrael/smart-memory:latest dashboard

Add dashboard to start the web server; without it the container starts in MCP mode. The -v volume persists your knowledge graph and rules. Open the dashboard at http://localhost:8080.


LLM configuration

SmartMemory uses an LLM to extract facts and rules from natural language and documents. Configure it via the dashboard Admin page or via environment variables (-e LLM_PROVIDER=…).

Provider

Example models

Notes

Mistral

mistral-large-latest, mistral-small-latest

European, La Plateforme API

Ollama (local, free)

llama3, qwen2.5-coder, mistral

Runs offline

OpenAI

gpt-4, gpt-3.5-turbo

Anthropic

claude-3-5-sonnet

Google

gemini-1.5-pro

β†’ Full configuration guide

Extracting rules from documents

  1. Upload a PDF (e.g. Company_Policy.pdf).

  2. Pick a provider β€” the server needs an API key (or a local Ollama) to read the document.

  3. Review & approve β€” the system proposes rules; you accept them in bulk from the dashboard.


Interactive demo β€” from facts to rules

What happens in Conversational Mode:

> I know Bob
LLM: ✦ I've recorded the fact: I know Bob.

> He goes to work by car
LLM: ✦ Noted: Bob goes to work by car.

> Can Bob vote?
LLM: ✦ I can't conclude yet β€” but since he drives, he is likely an adult.
     May I add the rule "Drivers are adults"?

> yes
LLM: ✨ Rule 'drivers_are_adults' added.
     May I also add "Adults can vote"?

> yes
LLM: ✨ Rule 'adults_can_vote' added.
     ✦ Therefore, yes β€” Bob can vote. (derived from 2 rules)

Every step is stored, attributed, and replayable β€” that's the point.


Tech stack

  • Backend: Python 3.11+, RDFLib, FastAPI

  • Frontend: SvelteKit, TypeScript, TailwindCSS

  • Reasoning: Neuro-symbolic (LLM + SPARQL / OWL)

  • Protocol: Model Context Protocol (MCP)

  • Packaging & deploy: Docker, GitHub Container Registry, Google Cloud Run


Roadmap

  • Broaden document ingestion (DOCX, HTML, web pages)

  • Richer graph visualization and rule-conflict detection

  • First tagged release (v0.1.0)

Ideas and contributions welcome β€” see CONTRIBUTING.md.


License

MIT β€” see LICENSE.

Available Tools

14 tools
add_memoryA

Store a fact in semantic memory using RDF triple notation.

CRITICAL - ANTI-HALLUCINATION RULES: ❌ NEVER suggest example facts and then add them as if user confirmed ❌ NEVER assume user response validates your examples ❌ NEVER invent names, relationships, dates, or any entities ❌ NEVER add facts based on your assumptions or knowledge βœ“ ONLY add facts that user EXPLICITLY and UNAMBIGUOUSLY stated βœ“ If unsure what user meant, ASK for clarification before adding βœ“ If user says 'I don't know', do NOT add anything

Example of INCORRECT behavior (HALLUCINATION): User: 'Who is Alice's father?' You: 'I don't know. Can you tell me? Example: :Alice :hasFather :Bob' User: 'ok' [or any vague response] You: add_memory(':Alice :hasFather :Bob') ← WRONG! User never said this!

Example of CORRECT behavior: User: 'Alice's father is Bob' You: add_memory(':Alice :hasFather :Bob') ← CORRECT!

What happens when you add a fact:

  1. Fact is stored with confidence=1.0 (explicit user fact)

  2. SPARQL inference rules automatically run in background

  3. New facts may be inferred (e.g., symmetry, transitivity)

  4. Check get_pending_verifications() for inferred facts needing approval

Supported predicates:

  • foaf:knows, foaf:friend - Social relationships

  • schema:worksFor, schema:colleague - Work relationships

  • rdf:type - Classifications

  • :customPredicate - Any custom predicate (user namespace)

Format: ':Subject predicate:name :Object'

Examples: add_memory(':User foaf:knows :Alice') add_memory(':User :isFriendOf :Bob') # Custom predicate add_memory(':Charlie schema:worksFor :AcmeCorp')

Note: Use ':User' for current user, ':' prefix for all user entities.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesRDF triple: ':Subject predicate :Object'

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses side effects: facts stored with confidence=1.0, SPARQL inference rules running automatically, and potential inferred facts requiring approval via get_pending_verifications(). This goes beyond the simple 'store a fact' statement, though it doesn't mention error cases or permission requirements.

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 well-structured with clear headers, critical rules, an incorrect-vs-correct example, and a supported-predicates list. Every section serves a purpose (especially the anti-hallucination guidance), though it could arguably be tightened slightly without losing value.

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 tool with no output schema and only one parameter, the description is remarkably complete. It covers the purpose, the exact input format with examples, when it should and shouldn't be used, what happens after invocation (confidence, inference), and related tools to check afterward. This fully equips an agent to use the tool correctly in context.

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?

Though the schema covers 100% of parameter semantics (the single 'input' parameter is described as an RDF triple), the description adds significant extra meaning: supported predicates (foaf:knows, schema:worksFor, rdf:type, custom), format examples, notes on the ':User' and ':' prefixes, and the triple structure. This meaningfully exceeds the schema's basic 'RDF triple: ':Subject predicate :Object''.

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: 'Store a fact in semantic memory using RDF triple notation.' It clearly differentiates from sibling tools like query_memory (retrieval) and forget_memory (deletion), and the RDF format is explicitly stated.

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?

Provides extensive when-to-use guidance through anti-hallucination rules: only add facts explicitly stated by the user, ask for clarification if unsure, and never add based on assumptions. It also instructs checking get_pending_verifications() after adding. However, it doesn't explicitly contrast with alternative tools (e.g., 'use search_entity for retrieval'), though the sibling names make that reasonably clear.

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

approve_ruleA

Approve a pending rule and activate it in the inference engine. The rule will start inferring facts immediately.

SYSTEM: DO NOT CALL THIS AUTOMATICALLY. WAIT FOR USER INPUT. You CANNOT verify/approve your own rules. You must display the rule using suggest_rule, wait for the user to read it, and only call this if they strictly say 'Approved' or 'Yes'.

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYesID of the rule to approve

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the key side-effect (rule activates and starts inferring facts immediately) and an important behavioral rule (cannot approve own rules, must be human-approved). This is strong transparency for a mutation tool, though it could mention additional details like reversibility or error conditions.

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?

The description is concise, with no filler. The first sentence states the action and consequence; the second paragraph delivers the essential human-in-the-loop instructions. Every sentence contributes critical guidance.

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 tool with significant operational constraints, the description is quite complete. It covers purpose, side-effects, and the approval workflow. It does not explain error handling or what happens if the rule is not pending, but given the simple parameter set and no output schema, the description provides sufficient context to use the tool 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?

The schema is 100% covered with 'ID of the rule to approve'. The description adds context about the rule being pending and displayed via suggest_rule, which enriches the meaning of rule_id. However, it doesn't add specific syntax or format details, so the baseline of 3 for high schema coverage is appropriate.

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 clearly states the tool's purpose: approve a pending rule and activate it in the inference engine. It uses a specific verb ('approve') and resource ('rule'), and the mention of immediate fact inference distinguishes it from related tools like reject_rule or suggest_rule.

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?

The description provides explicit usage guidelines: do not call automatically, wait for user input, cannot approve own rules, display the rule via suggest_rule, and only proceed after user explicitly says 'Approved' or 'Yes'. It also implicitly contrasts with reject_rule for rejection. This fully satisfies the when/when-not/alternatives criterion.

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

forget_memoryA

Remove a fact from semantic memory, including its provenance metadata.

CRITICAL RULES: ❌ NEVER remove facts without explicit user instruction ❌ NEVER remove facts that are foundations for other inferences (check first with query_memory) βœ“ Use when user explicitly says 'forget', 'remove', 'that's wrong', 'delete that' βœ“ Always confirm with user before removing

What happens when you forget a fact:

  1. The triple is removed from the graph

  2. Its provenance reification nodes (source, timestamp, confidence) are also removed

  3. Facts inferred FROM this fact are NOT automatically removed β†’ Use query_memory to check if dependent facts exist before forgetting

Format: ':Subject predicate :Object'

Examples: forget_memory(':User foaf:knows :Alice') forget_memory(':Bob schema:worksFor :AcmeCorp')

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesRDF triple to remove: ':Subject predicate :Object'

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It details exactly what happens when a fact is forgotten: the triple is removed, provenance reification nodes are removed, and dependent facts are NOT automatically removed. It also warns about the need to check for dependent facts first. This is comprehensive transparency for a destructive operation.

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?

The description is well-structured and front-loaded with a clear one-sentence summary, followed by critical rules, behavioral details, and examples. Every section earns its place: the critical rules prevent misuse, the behavioral list explains side effects, and the examples disambiguate syntax. No unnecessary words.

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 tool with no annotations and no output schema, the description is remarkably complete. It covers preconditions (user confirmation, checking dependencies), side effects (provenance removal, dependent facts persistence), and exact input syntax. An agent can safely and correctly invoke this tool based solely on the description.

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?

The input schema fully documents the only parameter as 'RDF triple to remove: Subject predicate :Object', achieving 100% schema description coverage. The description repeats this format and adds examples, but does not introduce new semantic details beyond what the schema already provides. Therefore, the baseline of 3 is appropriate.

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 clearly states the tool's action: 'Remove a fact from semantic memory, including its provenance metadata.' It uses a specific verb (remove), identifies the resource (a fact in semantic memory), and distinguishes itself from sibling tools like add_memory and query_memory by focusing on deletion. The scope and format are also clarified with examples.

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?

The description provides explicit when-to-use and when-not-to-use guidance: 'Use when user explicitly says forget, remove, that's wrong, delete that' and includes critical prohibitions about removing facts without explicit instruction or removing foundational facts before checking with query_memory. It also instructs the agent to always confirm with the user, making the usage context fully explicit.

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

get_graph_statsC

Retrieve statistics about the knowledge graph.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It only says 'Retrieve statistics' without mentioning side effects, permissions, cost, or what the returned statistics contain. This is a significant gap for a tool with no structured metadata.

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 a single, front-loaded sentence with no excessive wording. It earns its place by stating the core purpose, though it could be slightly more informative without becoming verbose.

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

Completeness2/5

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

Given there is no output schema and no annotations, the description is the only source of guidance. It is vague about what 'statistics' include, leaving the agent uncertain about the response format and content. The description is too thin for a tool that presumably returns a nontrivial set of metrics.

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 input schema has zero parameters, so there is nothing to explain. The baseline of 4 applies because no parameter information is needed; the description adds no parameter semantics but also has no deficiency.

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?

The description clearly states the tool retrieves statistics about the knowledge graph, with a specific verb and resource. It is distinguishable from sibling tools like search_entity or get_pending_verifications, though it does not explicitly differentiate itself.

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

Usage Guidelines2/5

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

The description offers no guidance on when to use this tool versus alternatives, nor does it provide context or exclusions. The usage is only implied by the purpose statement, which is insufficient for an agent to decide between this and similar retrieval tools.

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

get_pending_rulesA

Get list of rules proposed by the LLM that are awaiting user approval. Use this after suggesting a rule to show the user what needs approval.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It clearly states what the tool returns and implies a read-only operation through 'Get'. It adds behavioral context by specifying the source ('proposed by the LLM') and the pending status. It does not mention side effects, but for a getter this is sufficient.

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?

The description is two sentences: the first states the purpose, the second gives usage guidance. No filler words, information is front-loaded and every word earns its place.

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 parameterless list tool without an output schema, the description explains what is retrieved and when to call it. It could specify the structure of the returned rules or behavior when no rules are pending, but the scope is clearly defined and sufficient for an agent to invoke it correctly.

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 has zero parameters, and the input schema is an empty object. The baseline for 0 params is 4, and no further parameter explanation is required.

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 uses a specific verb 'Get list' and clearly identifies the resource as 'rules proposed by the LLM that are awaiting user approval'. This distinguishes it from sibling tools like list_rules (all rules) and approve_rule/reject_rule (actions).

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?

The description provides an explicit when-to-use: 'Use this after suggesting a rule to show the user what needs approval.' This ties it to the suggest_rule workflow and gives clear context. It does not mention explicit alternatives or when-not-to-use, but the guidance is concrete.

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

get_pending_verificationsA

List all pending verifications (uncertain inferences that need user confirmation). Returns a list of inferred triples with their confidence scores and source rules. Use verify_inference tool to accept or reject them.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of pending verifications to return (default: 10)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description must carry the burden of behavioral disclosure. It does add useful context: the list contains inferred triples with confidence scores and source rules, and it implies this is a read-only listing since it defers accept/reject to another tool. However, it never explicitly states that this operation has no side effects or requires any special permission, which would be valuable for safe invocation.

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?

The description is three short, front-loaded sentences. The first sentence states the purpose, the second explains the return content, and the third points to the next step. There is no filler or repetition; every sentence earns its place.

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 simple tool with one optional parameter and no output schema, the description is quite complete: it defines what pending verifications are, what the output includes, and what tool to use next. It falls short only by not explicitly stating that this is a read-only operation, but the overall context is sufficient for an agent 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?

The schema covers the single 'limit' parameter with a clear description and default value, so the schema alone provides full parameter semantics. The description adds no extra meaning about the parameter and even says 'all', which could be slightly misleading given the limit parameter. Baseline 3 is appropriate because the schema does the heavy lifting.

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 clearly states the tool's primary action ('List all pending verifications') and defines the resource ('uncertain inferences that need user confirmation'). It also specifies the return contents (inferred triples, confidence scores, source rules), and explicitly distinguishes itself from the sibling 'verify_inference' tool by pointing to it for accept/reject actions. This makes the purpose unmistakable.

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?

The description gives a clear usage context: call this tool to see pending verifications, then use 'verify_inference' to act on them. It provides a directional alternative but does not explicitly contrast with similar listing tools like 'get_pending_rules' or state when not to use this tool. Overall, it offers enough guidance for an agent to decide when to invoke it.

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

list_rulesB

Lists all available SPARQL inference rules, their sources, and their status.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoFilter rules by source.all

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description should disclose the safety profile and any behavioral nuances. It implies a read-only operation through the verb 'Lists,' but it does not explicitly state that it is non-destructive, nor does it mention whether it includes disabled rules or any system-wide restrictions. It also omits the optional source filter, which could limit the 'all' scope.

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?

The description is a single, front-loaded sentence of 11 words. It efficiently communicates the core purpose and return value without extraneous detail.

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?

The description covers the basic purpose and mentions that sources and status are returned, which is helpful given no output schema. However, it fails to clarify the filtering capability (covered by schema), differentiate from related rule-listing tools, or assert read-only behavior, leaving some gaps for an agent relying on this description alone.

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 100% (the 'source' parameter has a description: 'Filter rules by source.'). The tool description adds no extra parameter semantics, so the baseline of 3 is appropriate because the schema already fully documents the 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?

The description is specific: 'Lists all available SPARQL inference rules, their sources, and their status.' It clearly identifies the verb (Lists), the resource (SPARQL inference rules), and the scope (all available), and distinguishes from sibling tools that load, suggest, approve, or reject rules.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like get_pending_rules or get_pending_verifications. The description simply states what it does; it does not mention when not to use it or how it differs from other rule-management tools.

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

load_custom_ruleA

Loads a new custom SPARQL CONSTRUCT rule from text.

The rule should be a SPARQL CONSTRUCT query that infers new triples.

PREFIX declarations are optional - common prefixes (rdf, schema, foaf, etc.) will be auto-added if not present.

Example rule content: CONSTRUCT { ?person rdf:type :Engineer . } WHERE { ?person schema:worksFor :Company . }

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYesA unique ID for the new rule (lowercase, underscores only).
descriptionNoA short description of what the rule does.
rule_contentYesThe SPARQL CONSTRUCT query (PREFIX declarations optional).

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It does disclose the useful behavior that PREFIX declarations are optional and auto-added. However, it does not explain key behaviors like whether the rule is immediately active, whether it is persisted, if it overwrites existing rules, or if it requires approval (given siblings approve_rule/reject_rule exist). This is ambiguous for a mutation tool.

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 well-structured and front-loaded with the main purpose. It includes a necessary explanation of the rule format, a useful note about prefixes, and a concrete example. It is not overly verbose, though the example could be seen as extra, it earns its place.

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

Completeness2/5

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

Given the tool has no output schema and no annotations, the description should explain what happens after loading, e.g., whether the rule is activated immediately, goes to a pending state for approval, or how errors are handled. The lack of such details is a significant gap, especially with sibling approve_rule/reject_rule suggesting a workflow.

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 100%, providing a baseline of 3. The description adds meaning beyond the schema by explaining that rule_content should be a SPARQL CONSTRUCT query, showing an example, and clarifying that prefixes are optional. This helps an agent construct valid 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?

The description clearly states 'Loads a new custom SPARQL CONSTRUCT rule from text' with a specific verb and resource. The example rule content and explanation about inferences distinguish it from siblings like list_rules or approve_rule.

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 description implies usage: use this when you have a custom SPARQL CONSTRUCT rule to load. It gives guidance on the rule format (SPARQL CONSTRUCT query, optional prefixes) but does not explicitly mention when to use this versus alternatives like suggest_rule or when not to use it.

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

load_documentA

Load a document (PDF, Text, Markdown) into the knowledge graph and automatically extract business rules.

Usage:

  • Load a file: load_document(file_path='/path/to/rules.pdf')

  • Upload content: load_document(content='Rule 1:...', title='My Rules')

What it does:

  1. Parses the document

  2. Stores metadata in the graph

  3. Analyzes content with LLM to extract business rules

  4. Saves extracted rules as 'PENDING' for validation

Options:

  • store_content: Set to True to save full text in graph

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL of the document (not yet implemented)
titleNoTitle of the document (optional, auto-detected if file)
prefixNoPrefix to add to extracted rule IDs (e.g., 'HR_', 'GDPR_')
contentNoDirect text content to load
file_pathNoAbsolute path to the document file (PDF, TXT, MD)
extract_rulesNoWhether to automatically extract rules using LLM
store_contentNoWhether to store the full text content in the knowledge graph

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses parsing, metadata storage, LLM-based rule extraction, and the creation of rules in 'PENDING' state. This is substantial behavioral context, though it does not mention behavior around extract_rules=false or failure modes.

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?

The description is well-structured with a one-sentence summary, usage examples, a numbered process list, and an options section. Each section is purposeful and information is front-loaded; the length is justified by the tool's complexity.

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?

The description covers inputs, processing steps, and the PENDING rule state, which is good for a tool with no output schema. However, it does not describe the return value or response format, and it omits the extract_rules toggle even though that is a significant behavior.

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 100%, so the baseline is 3. The description adds usage examples for file_path/content and repeats store_content, but provides no additional semantics beyond the schema for extract_rules, prefix, url, or title.

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 has a specific verb and resource: 'Load a document ... into the knowledge graph and automatically extract business rules.' It clearly differentiates the tool from siblings like load_custom_rule and add_memory by focusing on document ingestion and rule extraction.

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?

The 'Usage' section gives concrete examples for both file_path and content, and the 'What it does' section explains the pipeline. However, it does not explicitly mention when to prefer this tool over alternatives like load_custom_rule, so it stops short of full exclusionary guidance.

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

query_memoryA

Query the semantic memory graph using SPARQL. Returns ONLY facts that are formally proven (either explicitly added by user or inferred by SPARQL rules).

CRITICAL - Your Role as Assistant:

  • You can make SOFT deductions based on language understanding (e.g., 'knows β†’ probably acquaintances')

  • BUT you MUST distinguish between YOUR deductions and FORMALLY PROVEN facts

  • Use this tool to CHECK if your soft reasoning is formally proven

  • If not proven, use verify_inference() to confirm, then suggest_rule() to formalize

When to use:

  • To verify if a fact exists in the graph

  • To check what the system KNOWS FOR CERTAIN (not what you deduce)

  • To explore relationships and connections

Query Guidelines:

  • ALWAYS scope queries to user namespace with ':' prefix (e.g., ':User', ':Alice')

  • Use LIMIT to avoid overwhelming results (max 1000 auto-injected)

  • Common predicates: foaf:knows, schema:worksFor, schema:colleague, rdf:type

Example workflow 1 (Simple check):

  1. User: 'Is Alice my friend?'

  2. You think: 'Hmm, I see :User foaf:knows :Alice, so maybe friends?'

  3. You call: verify_inference(':User', 'foaf:friend', ':Alice')

  4. Result: 'Not formally proven'

  5. You tell user: 'You know Alice, but friendship is not formally established. Should I create a rule?'

Example workflow 2 (Proactive rule learning):

  1. User asks: 'Can Gilles vote?'

  2. You query: ASK { :Gilles :canVote ?x } β†’ False

  3. You think: 'Voting requires age β‰₯ 18. Do I know Gilles' age? No.'

  4. You query: ASK { :Gilles :hasDrivingLicense ?x } β†’ True

  5. YOU IMMEDIATELY CALL: suggest_rule( rule_id='driving_license_implies_adult', description='Having a driving license implies being an adult (β‰₯18)', sparql_pattern='CONSTRUCT { ?person :isAdult true } WHERE { ?person :hasDrivingLicense ?license }' )

  6. After user approves, you can then infer :Gilles :isAdult true β†’ can vote

Output format:

  • SELECT: Returns table of results as list of dicts

  • ASK: Returns boolean (True/False)

  • CONSTRUCT/DESCRIBE: Returns graph triples

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSPARQL query to execute. Common prefixes (rdf, rdfs, foaf, schema, owl, sem) are auto-added.
output_formatNoOutput format (default: table for SELECT, turtle for CONSTRUCT)

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries full burden. It discloses that only formally proven facts are returned, distinguishes soft deductions, mentions auto-injected LIMIT (max 1000), and describes output formats for different SPARQL query types.

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 well-structured with bold headings and examples. It is front-loaded with the core purpose. The example workflows are somewhat verbose, but they serve the guidance purpose; still, a few sentences could be trimmed without loss.

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 the tool's complexity (SPARQL over a semantic graph) and the absence of an output schema, the description fully covers return value formats (SELECT, ASK, CONSTRUCT/DESCRIBE), query scoping, prefixes, and limits, making it self-sufficient for an AI agent.

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 100%, but the description adds significant meaning: auto-added SPARQL prefixes, default output format behavior, and query scoping guidelines with namespace prefix examples. This goes well beyond the schema fields.

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 clearly states 'Query the semantic memory graph using SPARQL' with a specific verb and resource. It is distinct from siblings like search_entity and verify_inference by emphasizing formal proof and SPARQL execution.

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?

Contains an explicit 'When to use' section and provides alternatives: if not proven, use verify_inference() then suggest_rule(). Example workflows illustrate when to query vs when to verify or suggest rules.

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

reject_ruleA

Reject a pending rule. It will not be activated and will be removed from pending list.

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYesID of the rule to reject

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly states the effects: the rule will not be activated and will be removed from the pending list. It does not mention reversibility or error conditions, but for a simple reject operation this is adequate.

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?

The description is two short sentences, front-loaded with the primary action 'Reject a pending rule.' Every word contributes meaning, with no redundancy or 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?

This is a low-complexity tool with one required parameter and no output schema. The description adequately conveys the tool's purpose and outcome, making it complete for an AI agent to select and invoke 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?

The input schema fully documents the only parameter 'rule_id' as 'ID of the rule to reject', giving 100% schema coverage. The description adds no extra parameter semantics, so the baseline score of 3 applies.

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 clearly states the action ('Reject'), the target ('a pending rule'), and the outcome ('will not be activated and will be removed from pending list'). It distinguishes this tool from its sibling 'approve_rule' by focusing on rejection and removal.

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?

The description clearly implies the tool is for pending rules only, stating 'Reject a pending rule' and noting it will not be activated. It does not explicitly name alternatives or when-not-to-use, but the context of sibling tools like 'approve_rule' and 'get_pending_rules' provides enough guidance.

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

search_entityA

Search for entities in the knowledge graph by name or label. Returns matching entities with their types and key properties.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return
entity_typeNoOptional filter by entity type (e.g., 'Person', 'Organization')
search_termYesText to search for in entity names/labels

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must fully disclose behavior. It states the tool returns matching entities with types and key properties, adding some value. However, it does not mention whether the operation is read-only, how search matching works (exact/fuzzy), or any pagination or permission details, leaving significant behavioral gaps.

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?

The description is a single, concise sentence that front-loads the action and resource. It contains no fluff or redundant information, earning a perfect score for conciseness.

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 the tool's simplicity and full schema parameter coverage, the description provides sufficient context for basic use. It could be improved by mentioning result ordering or relevance, but for a low-complexity search tool, it is largely 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 100%, with each parameter described (search_term, limit, entity_type). The description adds no further parameter-specific meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

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 clearly states the tool searches for entities in the knowledge graph by name or label, specifying the resource and action distinctly. It also mentions the return of types and key properties, making its purpose unambiguous and distinct from sibling tools like query_memory or load_document.

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?

The description implies usage context: searching for entities in the knowledge graph. However, it does not explicitly provide alternatives or exclusions, such as 'use query_memory for memory entries instead.' Thus it has clear context but lacks explicit when-not-to-use guidance.

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

suggest_ruleA

IMPORTANT: USER APPROVAL REQUIRED / APPROBATION REQUISE Allows the LLM to propose SPARQL rules to formalize reasoning patterns.

CRITICAL WORKFLOW:

  1. EXPLAIN & ASK: You MUST explain the rule and ask for explicit permission FIRST.

    • En FranΓ§ais: "Puis-je ajouter cette rΓ¨gle d'infΓ©rence ?"

    • In English: "May I add this inference rule?"

  2. WAIT: Do NOT call suggest_rule until the user says YES.

  3. SUGGEST: Only after approval, call this tool.

  4. CONFIRM: The user must then approve the pending rule using approve_rule (which you CANNOT call yourself).


WHEN TO USE: βœ“ After verify_inference() returns 'not proven' for logical deduction βœ“ When user explicitly states a rule (e.g., 'friends know each other') βœ“ When detecting recurring patterns in conversation βœ“ To convert YOUR soft reasoning into FORMAL guarantees

WORKFLOW EXAMPLE:

  1. You: 'Voting implies age >= 18. Shall I formalize this?'

  2. User: 'Yes'

  3. YOU CALL: suggest_rule(...)

  4. System: Previews inferences, adds to pending approval

  5. STOP: You wait for user to review.

CRITICAL - DO NOT BYPASS THIS TOOL: ❌ NEVER edit .rq files directly ❌ NEVER create rules outside this workflow βœ“ ALWAYS use suggest_rule() β†’ user approves β†’ system activates

Best Practices:

  • Use descriptive rule_id (snake_case)

  • SPARQL must be CONSTRUCT query

  • Set confidence < 1.0 for uncertain rules

  • Preview shows what WOULD be inferred

Rule goes to PENDING - User must approve!

ParametersJSON Schema
NameRequiredDescriptionDefault
rule_idYesUnique identifier for this rule (e.g., 'acquaintance_from_knows')
confidenceNoConfidence level (0.0-1.0) for facts inferred by this rule (default: 0.8)
descriptionYesHuman-readable description of what the rule does
sparql_patternYesSPARQL CONSTRUCT query defining the inference rule

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the burden of behavioral disclosure. It explicitly states that user approval is required before calling, that the tool puts rules into a pending state, previews inferences, and that the user must approve via approve_rule (which the LLM cannot call). It also warns 'Rule goes to PENDING - User must approve!' This is thorough and transparent about the tool's behavioral implications.

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 lengthy but well-structured with headers (CRITICAL WORKFLOW, WHEN TO USE, WORKFLOW EXAMPLE, etc.) and front-loads the most critical warning ('**IMPORTANT: USER APPROVAL REQUIRED**'). Some redundancy exists, such as repeated warnings about user approval and bypassing, but each section earns its place and the structure is clear. It could be tightened, but it is not excessive.

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 tool with 4 parameters, no output schema, and no annotations, the description is exceptionally complete. It covers the full workflow, prerequisites, user approval steps, best practices, and expected outcome (previews inferences, adds to pending approval). It even provides example phrases in French and English. All essential context for invoking the tool correctly is present.

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 input schema already provides 100% coverage of all three required and one optional parameter, so the baseline is 3. The description adds valuable beyond-schema guidance: 'Use descriptive rule_id (snake_case)', 'SPARQL must be CONSTRUCT query', and 'Set confidence < 1.0 for uncertain rules'. These are practical semantics that improve parameter use beyond the schema descriptions.

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 explicitly states the tool's purpose: 'Allows the LLM to propose SPARQL rules to formalize reasoning patterns.' It uses a specific verb (propose) and resource (SPARQL rules), and distinguishes it from siblings like approve_rule by emphasizing the rule goes to PENDING and the user must approve via approve_rule, which the LLM cannot call. This clearly differentiates it from related tools.

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?

The description provides explicit WHEN TO USE criteria (e.g., after verify_inference returns 'not proven', when user states a rule) and explicit DO NOT BYPASS constraints (never edit .rq files directly, never create rules outside this workflow). It also outlines the step-by-step workflow with EXAPLAN AND ASK, WAIT, SUGGEST, CONFIRM, making it clear when and how the tool should be used.

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

verify_inferenceA

Verify if a fact is FORMALLY PROVEN in the knowledge graph. This is THE KEY TOOL for collaborative LLM-Formal reasoning.

WHEN TO USE (CRITICAL): βœ“ BEFORE stating a deduction as fact βœ“ When user asks 'Is X true?' or 'Does Y hold?' βœ“ After making a soft reasoning step βœ“ To distinguish your intuition from formal proof

WORKFLOW:

  1. User asks: 'Is Alice my friend?'

  2. You check: query_memory('ASK { :User foaf:knows :Alice }')

  3. Result: True (they know each other)

  4. Your soft reasoning: 'knows β†’ maybe friends?'

  5. YOU MUST CALL: verify_inference(':User', ':isFriendOf', ':Alice')

  6. Result: 'Not proven'

  7. You respond: 'You know Alice, but friendship isn't formally established.'

  8. If user confirms: Call suggest_rule() to formalize

Returns:

  • If proven: Source (user/rule), confidence, explanation, rule name

  • If not proven: Suggestion to either add explicitly or create rule

Example: verify_inference(subject=':Alice', predicate='foaf:knows', object=':User') β†’ Returns proof chain if fact is formally established

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoAction for pending verification: 'accept' or 'reject' (optional)
objectNoObject of the triple (e.g., ':AcmeCorp', ':Bob')
tripleNoFull triple string as seen in pending verifications list (optional fallback)
subjectNoSubject of the triple (e.g., ':Alice', ':User')
predicateNoPredicate/property (e.g., 'foaf:knows', 'schema:worksFor')

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It explains return behavior for proven vs not proven and shows a sample flow. However, it omits the 'action' parameter (accept/reject) present in the schema, which suggests the tool may also mutate pending verification statesβ€”a significant behavioral gap and potential source of confusion.

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?

Description is well-structured with distinct sections (WHEN TO USE, WORKFLOW, Returns, Example) and front-loaded with purpose. However, it is verboseβ€”especially the workflow numbering and repeated examplesβ€”though every part contributes value for a key tool.

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?

The description covers purpose, usage, workflow, returns, and an example, providing a solid foundation. Yet it fails to address the 'action' parameter, its connection to pending verifications, or the tool's interplay with sibling tools like get_pending_verifications, leaving notable gaps given the tool's complexity.

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 100% with each parameter described, so schema already provides meaning. The description adds a concrete example call but does not deepen semantic understanding beyond schema text. Baseline of 3 is appropriate.

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?

Description clearly states the tool verifies if a fact is formally proven in the knowledge graph, using the specific verb 'verify' with a precise resource. It also emphasizes its role as 'THE KEY TOOL' for formal reasoning, distinguishing it from query or rule tools like query_memory and suggest_rule.

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' section lists critical use cases: before stating a deduction, when users ask 'Is X true?', after soft reasoning, and to distinguish intuition from proof. The workflow example further clarifies how to combine query_memory and verify_inference, and suggests suggest_rule as a follow-up, providing clear guidance against alternatives.

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. Dates show when Glama detected each change.

  1. 14 tool updatesv1.0.2
    • First observedadd_memory
    • First observedapprove_rule
    • First observedforget_memory
    • First observedget_graph_stats
    • First observedget_pending_rules
    • First observedget_pending_verifications
    • First observedlist_rules
    • First observedload_custom_rule
    • First observedload_document
    • First observedquery_memory
    • First observedreject_rule
    • First observedsearch_entity
    • First observedsuggest_rule
    • First observedverify_inference

TDQS

A3.7/5.0
Disambiguation3/5

Most tools are clearly distinct, but load_custom_rule and suggest_rule both add SPARQL rules with different approval paths, creating ambiguity. Additionally, verify_inference's description mentions accepting/rejecting pending verifications, overlapping with get_pending_verifications and approve_rule.

Naming Consistency3/5

All names use snake_case, but retrieval verbs are mixed (list, get, search, query) and rule-related tools use inconsistent actions (load, suggest, approve, reject). The naming is readable but not fully predictable.

Tool Count5/5

14 tools is within the ideal 3-15 range and each serves a distinct role in the memory and rule management workflows. The count is well-scoped for the server's purpose.

Completeness4/5

Core memory operations (add, remove, query, search) and rule lifecycle (suggest, approve, reject, list) are covered. Minor gaps include no explicit update/merge operation for facts and potential confusion around handling rules extracted by load_document.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A local MCP memory server giving LLMs a persistent, auditable memory fabric with temporal awareness, relationship tracking, and contradiction detection.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Open-source MCP server that gives any LLM long-term memory using a knowledge graph and vector search hybrid. It stores entities, observations, and relationships, enabling semantic recall across sessions with automatic clustering and fail-loud infrastructure.
    50
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that implements a heavily typed knowledge graph memory system with AI-powered entity and relation extraction, enabling structured knowledge storage and retrieval from unstructured text using predefined or custom ontologies.
    9
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A lightweight MCP server that provides long-term memory for LLMs by storing and retrieving important facts, decisions, and preferences through smart semantic search and automatic organization.
    10
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MauriceIsrael/SmartMemory'

If you have feedback or need assistance with the MCP directory API, please join our Discord server