Skip to main content
Glama

CKS MCP Server

Model Context Protocol server for Canonical Knowledge Structure.

Python License Tests PyPI

🚀 Live demo → — explore the CKS ecosystem graph directly in your browser, no server required.

cks-mcp is a fully asynchronous MCP (Model Context Protocol) server that gives LLMs a canonical knowledge backbone. It exposes 72 tools (listed under Available Tools below) for validation, evolution, branching, merging, semantic search, contradiction detection, sandboxing, and more, backed by the deterministic, immutable semantics of cks-core and the async operational management of cks-runtime.

Every tool call creates a Runtime Session and Transaction, producing an immutable Version and collecting Diagnostics. This guarantees full auditability and reproducibility.


Ecosystem

Other projects build upon it:

Project

Description

Repository

cks-core

Canonical semantic engine – the single source of canonical truth.

cks-core

cks-runtime

Operational environment – sessions, transactions, persistence.

cks-runtime

cks-mcp

MCP server – exposes CKS to LLMs and autonomous agents.

cks-mcp

cks-studio

Visual workspace – explore, monitor, and manage graphs.

cks-studio

cks-website

Documentation & demo site.

cks-website

📖 Full documentation, case studies, and an interactive demo are available at the CKS Documentation Site.


Quick Start

  1. Install and connect to Claude Desktop (see Installation).

  2. (Optional) Semantic search works out of the box with the built-in fastembed engine (no API keys required). To use HuggingFace models instead, set CKS_EMBEDDING_PROVIDER=huggingface and export HF_TOKEN=hf_.... See Getting Started.

  3. In the chat, start your message with "Use cks-mcp to…".

  4. Claude automatically picks the right tool from the 72 available — validation, evolution, branching, merging, source verification, contradiction detection, semantic search, subgraph queries, sandboxing, and more.

  5. Every operation is logged, versioned, and stored in a persistent SQLite database.

Just type "Use cks-mcp to..." and Claude does the rest. That's it. No programming, no command line — just a conversation!

CKS Demo

In the video above, Claude creates a validated knowledge graph about the water cycle from a single sentence, using validate_knowledge and explain_knowledge. All 72 tools are ready for you: branching, merging, versioning, source verification, contradiction detection, subgraph queries, sandboxing, gossip conflict resolution, and more — all triggered by plain English.


Why cks-mcp?

LLMs generate plausible but unverified statements. cks-mcp gives them a canonical knowledge backbone: every piece of information must be explicitly structured, validated against formal constraints, and traceable to its origin.

  • Eliminate citation hallucinations — optional extensions like embedding_projection mechanically detect references to non-existent sources.

  • Ensure verification integrity — the verify_source tool performs a real HTTP check and cryptographically signs the result. Any VerificationRecord without a valid signature is automatically rejected, even if the model fails to request the check.

  • Semantic search with real embeddings — the search_semantic tool uses HuggingFace models to find relevant nodes by meaning, not just keywords. A query for "how to train AI models" returns "Gradient Descent" and "Neural Network", not "Banana".

  • Graph-based RAG — combine semantic search with query_subgraph to retrieve a full neighbourhood around the found concepts, giving the LLM the context it needs without hallucinating connections.

  • Full audit trail — every operation is captured in an immutable version history, providing complete accountability for AI-generated knowledge.

  • Time-travel debugginglist_versions, revert_version, and compare_versions give LLMs a full version-control system for knowledge, enabling safe rollbacks and change inspection.

  • Contradiction detectiondetect_contradictions flags mutual exclusions (e.g., both supports and contradicts between the same pair) and functional relation violations (e.g., a planet orbiting two different stars).

  • Hypothesis sandboxingfork_sandbox creates an isolated branch, optionally applies a hypothesis, and reports the diff from the fork point — all without touching the parent session. Safe to discard or promote.

  • Content ingestioningest_document fetches a public URL, extracts structured content (sections, tables, lists, JSON‑LD/OpenGraph metadata) and builds a Knowledge Structure with Document, Section, Table, List, Metadata, and Topic objects. An optional use_llm parameter sends the extracted data to an LLM (same provider auto‑selection as construct_knowledge) for a richer, model‑generated graph.

  • LLM-assisted knowledge constructionconstruct_knowledge converts free-form text into a validated Knowledge Structure using a local Ollama model (no API key needed), the Anthropic API, Google Gemini, or any OpenAI-compatible endpoint, selected via CKS_LLM_PROVIDER (auto picks Ollama or Anthropic; google/openai_compatible must be selected explicitly).

  • Session portabilityexport_session packages a full session bundle (structure + version history) for migration or archival.

  • Telemetry dashboardget_metrics now returns per‑tool latency percentiles (p50/p95/p99), success rates, and top error types since server start.

  • Multi‑agent pipelines — the CKSAgentOrchestrator (ADR‑007) chains specialised agents (Researcher → Critic → Synthesizer → Arbiter) that communicate through the persistent outbox and CRDT registers. Agents run autonomously as a pipeline, with each step's findings committed as immutable knowledge objects. Start a pipeline via the cks-pipeline-agent console script.

  • AI Chat with tool calling — the ai_chat tool lets an LLM (Ollama or Anthropic) call any safe MCP tool, scoped to a session, enabling autonomous graph exploration and evolution.


Installation

pip install cks-mcp

The server requires cks-runtime (which includes cks-core) as a dependency.

See Getting Started for the full list of environment variables and how to set them via a ~/.cks-mcp/.env file.


Connect to Claude Desktop

  1. Install all three packages into a single virtual environment:

    python3 -m venv cks-env
    source cks-env/bin/activate
    pip install cks-core cks-runtime cks-mcp
  2. Open Claude Desktop, go to Settings → Developer → Edit Config. The configuration file (claude_desktop_config.json) will open. Add the following block (adjust the path to your cks-mcp executable):

    {
      "mcpServers": {
        "cks-mcp": {
          "command": "/absolute/path/to/cks-env/bin/cks-mcp"
        }
      }
    }
  3. Save the file and fully restart Claude Desktop (Cmd+Q, then reopen). After restart, a connector icon will appear – cks-mcp with 72 tools is ready to use.

See Getting Started for a walkthrough of your first session once the server is connected.


HTTP Transport & Real-Time Events

Setting CKS_MCP_HTTP_PORT starts an optional aiohttp server alongside the default stdio transport (used e.g. by cks-studio running in a browser):

CKS_MCP_HTTP_PORT=8769 cks-mcp
  • POST /mcp — the same JSON-RPC surface as stdio, over HTTP.

  • GET /events / GET /events/{session_id} — a Server-Sent Events (SSE) stream of runtime lifecycle events (SessionCreated, VersionCreated, TransactionCommitted, GossipConflictDetected, CRDTForkDetected, and more), so a client can react live instead of polling. Supports an optional ?event_types=A,B filter. Each line is data: {"event": "...", "session_id": "...", "timestamp": "...", "detail": {...}}.

By default this transport has no authentication and is meant for local development / trusted networks. Setting CKS_MCP_HTTP_TOKEN requires a matching token on every request to /mcp and /events, either as Authorization: Bearer <token> or, for browser EventSource clients (which can't set custom headers), as a ?token=<token> query parameter:

CKS_MCP_HTTP_PORT=8769 CKS_MCP_HTTP_TOKEN=change-me cks-mcp
GET /events?token=change-me

See HTTP Transport security notes for details.


Available Tools

72 tools, grouped by function. Full reference with parameters and real request/response examples: docs/tools/.

Group

Tools

Knowledge Lifecycle

validate_knowledge, serialize_knowledge, explain_knowledge, evolve_knowledge

Version Control

list_versions, revert_version, compare_versions, explain_diff

Branching & Merging

create_branch, merge_branch, merge_knowledge, close_session, fork_sandbox

Graph Exploration

query_subgraph, search_semantic, visualize_graph

Verification & Integrity

verify_source, detect_contradictions

LLM & AI

ai_chat, construct_knowledge, suggest_evolution, ingest_document, request_enrichment, get_llm_status, list_llm_models

Export & Observability

export_knowledge, export_session, get_metrics, export_storage, import_storage, migrate_storage, list_plugins

Memory & Persistence

register_graph, get_graph, clone_graph, list_graphs, search_graphs, check_graph_freshness, check_component_versions, update_registered_graph, update_graph_lifecycle, explain_graph, check_graph_health, compare_graphs, merge_graphs, link_graphs

Gossip & Conflict Resolution

list_gossip_conflicts, list_inference_conflicts, arbitrate_inference_conflict, resolve_gossip_conflict, refresh_verification, resolve_temporal_conflict, resolve_contradiction, review_dead_letter, approve_resolution, reject_resolution, claim_conflict_task, complete_conflict_task, fail_conflict_task, dead_letter_conflict_task, list_dead_lettered_conflicts

Agent Observability

list_agents, agent_status, list_processes, process_status

Agent Control

start_agent, stop_agent, request_process_stop, start_pipeline, list_pipeline_runs

Critic Agent (unattended conflict resolution)

Alongside the interactive tools above, cks-critic-agent is a separate console script that runs autonomously: it polls the persistent outbox (SQLite/Postgres only — not the default in-memory backend) for gossip_conflict and inference_conflict tasks, resolves each via merge_branch / arbitrate_inference_conflict(auto_resolve=True), and dead-letters whatever it can't confidently resolve for a human to review via list_dead_lettered_conflicts.

  • provenance_conflict → calls refresh_verification to re‑verify the source.

  • temporal_conflict → calls resolve_temporal_conflict(action="bump", extend_by_days=30) as a safe default.

# Point it at the same database cks-mcp itself uses (defaults to
# ~/.cks-mcp/cks_mcp.db if CKS_MCP_DB_PATH is unset).
CKS_MCP_DB_PATH=~/.cks-mcp/cks_mcp.db cks-critic-agent

Env vars: CKS_MCP_DB_PATH (shared storage path), CKS_CRITIC_POLL_INTERVAL (seconds between polls, default 5), CKS_CRITIC_MAX_RETRIES (attempts before dead-lettering, default 5). See cks_mcp/critic_agent.py for the resolution policy in full.

Related MCP server: EKMS MCP Server

Enrichment Agent (external RAG / auto‑growth)

cks-enrichment-agent is a companion process that searches external sources (Wikipedia, arXiv) for more context about an object marked for enrichment (via request_enrichment) and links whatever it finds back into the graph with provenance. Same outbox‑polling architecture as the Critic Agent — runs autonomously against the same database.

CKS_MCP_DB_PATH=~/.cks-mcp/cks_mcp.db cks-enrichment-agent

Env vars: CKS_MCP_DB_PATH (shared storage), CKS_ENRICHMENT_POLL_INTERVAL (default 5s), CKS_ENRICHMENT_MAX_RETRIES (default 5), CKS_ENRICHMENT_MIN_SCORE (default 0.5), and adapter‑specific tuning (see cks_mcp/enrichment_agent.py).

Fork Resolution Agent (autonomous CRDT fork resolution)

cks-fork-agent is a companion process, following the same outbox‑polling architecture as the Critic Agent and Enrichment Agent, dedicated to resolving crdt_fork tasks (MV‑Register forks detected by CRDTForkDetected, cks‑runtime ADR‑013 Stage 2) without human involvement. It is purely mechanical — no LLM is involved:

  1. Prefers the causally‑newest conflicting object, when VersionVector comparison (causality_check) shows one candidate strictly dominates the others.

  2. Otherwise falls back to whichever candidate has the most recent created_at on the live MV‑Register pointer row.

  3. Otherwise falls back to a deterministic, replica‑agnostic tie‑break: the alphabetically‑first object_id — every replica computes object ids identically (content hashes), so every replica's agent converges on the same winner independently.

CKS_MCP_DB_PATH=~/.cks-mcp/cks_mcp.db cks-fork-agent

Env vars: CKS_MCP_DB_PATH (shared storage path), CKS_FORK_AGENT_POLL_INTERVAL (seconds between polls, default 30), CKS_FORK_AGENT_MAX_RETRIES (attempts before dead‑lettering, default 3), CKS_FORK_AGENT_HEARTBEAT_INTERVAL (lease renewal interval, default 69). See cks_mcp/fork_resolution_agent.py for the resolution policy in full.

Note: critic_agent.py also claims crdt_fork tasks from the same outbox queue, with a different (simpler, lexicographically‑last) tie‑break policy. Both agents compete for the same queue if run together — whichever claims a fork first decides its outcome. Run cks-fork-agent as the intended owner of crdt_fork resolution; avoid running both against the same database at once.

Pipeline Agent (multi‑agent orchestration)

cks-pipeline-agent is a console script that runs a configurable pipeline of AgentStep implementations coordinated by CKSAgentOrchestrator. Each step writes its result as a knowledge object (with provenance and a semantic edge from the previous step), and the orchestrator publishes AgentStepStarted / AgentStepCompleted events. Built on the same outbox‑polling architecture as the other autonomous agents.

CKS_MCP_DB_PATH=~/.cks-mcp/cks_mcp.db cks-pipeline-agent

Env vars: CKS_MCP_DB_PATH (shared storage path), CKS_PIPELINE_POLL_INTERVAL (default 5s), CKS_PIPELINE_MAX_RETRIES (default 5). See cks_mcp/orchestrator.py and cks_mcp/pipeline/researcher_step.py / reviewer_step.py for the pipeline and step implementations.


Usage Examples

A couple of representative calls — the full set, with real response shapes for every tool, is in docs/tools/.

Validate a structure

{
  "method": "tools/call",
  "params": {
    "name": "validate_knowledge",
    "arguments": {
      "json_data": "{\"objects\":[{\"identity\":{\"id\":\"obj-1\",\"type\":\"Definition\",\"name\":\"Test\"},\"structure\":{}}]}"
    }
  }
}

The response includes valid, session_id, version_id, and diagnostics — keep session_id for every following call on this structure. See Knowledge Lifecycle for the other three tools in this group.

Semantic search (no seed IDs required)

{
  "method": "tools/call",
  "params": {
    "name": "search_semantic",
    "arguments": {"session_id": "...", "query": "virtual machines in the cloud"}
  }
}

Returns matched objects by meaning (e.g. EC2, not S3), expanded into a subgraph. See Graph Exploration.

Branch, evolve independently, and merge back

{"method": "tools/call", "params": {"name": "create_branch", "arguments": {"session_id": "trunk-session-id"}}}
{"method": "tools/call", "params": {"name": "evolve_knowledge", "arguments": {"session_id": "branch-session-id", "operations": [...]}}}
{"method": "tools/call", "params": {"name": "merge_branch", "arguments": {"target_session_id": "trunk-session-id", "source_session_id": "branch-session-id"}}}

A successful merge commits a new version and returns the merged structure; a conflicting merge returns "merged": false with a conflicts list to resolve. See Branching & Merging for the full conflict-resolution flow.

Detect contradictions

{
  "method": "tools/call",
  "params": {
    "name": "detect_contradictions",
    "arguments": {"session_id": "..."}
  }
}

Requires MutualExclusionRule and/or FunctionalRelationRule objects in the structure declaring which relation types to check. See Verification & Integrity for the rule shapes and how this interacts with verify_source's provenance signing.


Security and Provenance

verify_source includes built-in protections:

  • SSRF prevention: URLs are validated against a strict allowlist; private, loopback, and cloud metadata IPs are blocked. DNS rebinding attacks are neutralised by pinning the connection to the IP address resolved during the safety check.

  • Cryptographic signing: every verification record is signed with a process-local HMAC. validate_knowledge unconditionally verifies this signature, so a hand‑written VerificationRecord can never pass as genuine.


Testing

python -m pytest -v

1150+ tests: 1144 passing, 6 skipped (require Postgres or optional providers not configured in a default environment).


License

MIT

Available Tools

24 tools
close_sessionA

Close a session, releasing it from the runtime. Typical use: after merge_branch reports success, close_session the source branch that was just merged in -- it has been integrated and no longer needs to stay open.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe session to close.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of disclosure. It mentions the key behavior of releasing the session from the runtime and the context that it is no longer needed. However, it does not discuss reversibility, side effects, or failure modes, leaving 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 two sentences, with the action stated first and a concrete use case following. Every word serves a purpose; there is no wasted text or redundancy.

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 core action and a typical use case, which is adequate for a one-parameter tool. However, without annotations or an output schema, it does not address return values, error handling, or preconditions, so it is not fully 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?

The single parameter session_id is fully described in the schema with 100% coverage. The description adds no additional detail about the parameter, such as format or constraints, so 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 action 'Close a session' and the effect 'releasing it from the runtime.' It also provides a typical use case after merge_branch, which distinguishes it from sibling tools like merge_branch and create_branch.

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?

It explicitly describes when to use the tool: after merge_branch reports success, with the rationale that the source branch has been integrated and no longer needs to stay open. However, it does not mention exclusions or alternative tools, so it stops short of full guidance.

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

compare_versionsC

Compare the current state of a session against a target version. The returned diff is directional. 'direction' explicitly describes how to interpret the changes. 'base_version_id' is the historical version being compared against. 'target_version_id' is the current session state. The response also contains a semantic summary (added/removed objects and relations) to make interpretation easier for LLMs.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe session whose current state will be compared.
target_version_idYesHistorical version to compare against. The comparison is performed between this version and the current state of the session.

TDQS

C2.6/5.0
Behavior3/5

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

The description adds useful behavioral context by noting the returned diff is directional and that a semantic summary is included. However, with no annotations, it fails to explicitly state that the operation is read-only or has no side effects, leaving part of the burden unmet.

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

Conciseness2/5

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

The description is verbose and includes contradictory information about parameters. It would be more effective as two clear sentences, without referencing nonexistent fields or duplicating schema information.

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 no annotations and no output schema, the description should clarify the exact parameter roles and return structure. While it mentions directional diff and semantic summary, it inaccurately describes parameters and omits any mention of side effects or use cases, leaving the tool incompletely specified.

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

Parameters1/5

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

The description introduces base_version_id, which is not in the schema, and incorrectly states that target_version_id is the current session state, contradicting the schema's definition of it as the historical version. This actively misleads instead of adding value beyond the schema.

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 compares a session's current state against a historical version, which is a specific verb+resource. However, it does not explicitly differentiate itself from sibling tools like explain_diff, reserving the top score.

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 provided on when to use this tool versus alternatives such as explain_diff or list_versions. The description only explains the operation without contextual usage instructions.

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

construct_knowledgeA

Build a Canonical Knowledge Structure from free-form text using an LLM. The LLM extracts entities and relationships, generates a valid CKS JSON payload, which is then parsed and validated before being persisted as a new session. Provider is auto-selected (CKS_LLM_PROVIDER): a local Ollama server if reachable (no API key needed), else Anthropic if ANTHROPIC_API_KEY is set. Returns 'session_id', 'version_id', and the serialized structure. Use 'hint' to direct the extraction toward specific aspects of the text.

ParametersJSON Schema
NameRequiredDescriptionDefault
hintNoOptional. A short description of which aspects to focus on (e.g. 'focus on causal relations between diseases and symptoms').
textYesFree-form text to extract a Knowledge Structure from.
modelNoOptional. Model name for whichever provider is selected (e.g. an Ollama model tag, or an Anthropic model). Defaults to CKS_OLLAMA_MODEL/CKS_LLM_MODEL depending on provider.
max_tokensNoOptional. Max tokens for the LLM response. Defaults to CKS_LLM_MAX_TOKENS env var, or 4096.

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses the internal pipeline (LLM extraction, parsing, validation, persistence), provider auto-selection logic (local Ollama vs. Anthropic based on environment), and return values ('session_id', 'version_id', serialized structure). It also mentions that a new session is persisted, implying a side effect. Since there are no annotations, this level of disclosure is strong.

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 about four sentences, front-loading the primary purpose. It includes necessary details about provider selection and return values without extraneous fluff. It is compact and informative.

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 complex tool with 4 parameters and no output schema, the description provides sufficient context: creation process, provider fallback logic, return identifiers, and the hint parameter. It does not explain failure modes or validation errors, but the core invocation path is well covered.

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 already provides descriptions for all four parameters (100% coverage). The description adds little beyond schema – only a brief note about using 'hint'. Parameters like 'model' and 'max_tokens' are adequately explained in the schema, so the description does not need to compensate.

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 'Build a Canonical Knowledge Structure from free-form text using an LLM' – a specific verb, resource, and process. It clearly differentiates from sibling tools by stating the output is persisted as a new session, while others like export_knowledge or validate_knowledge serve different purposes.

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 when to use it: when you have free-form text and want to create a knowledge structure. It provides context like using 'hint' to direct extraction, but does not explicitly name alternatives or state when not to use this tool. Since the purpose is distinct and clear, this is acceptable.

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

create_branchA

Fork a new session from an existing one. Use this to isolate an experiment, explore an alternative modeling approach, or try a risky edit without touching the parent session -- if the branch doesn't pan out, close_session it; if it does, merge_branch it back into the parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe parent session to branch from.
version_idNoOptional. Fork from this specific historical version of the parent instead of its current state. Recommended when you intend to merge_branch the result back later: it records the exact fork point merge_branch needs as its merge base. Without it, merge_branch has no automatic fork point and requires an explicit 'base_version_id' itself.

TDQS

A4.2/5.0
Behavior4/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 states 'without touching the parent session', which reveals that the operation is non-destructive to the parent. The fork action implies creation of a new session, and the lifecycle mention of close_session/merge_branch hints at the branch's temporary nature. It does not cover all conceivable side effects (e.g., data isolation level), but the description is reasonably transparent for the tool's complexity.

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, front-loaded with the core action, then usage context, then lifecycle guidance. Every phrase earns its place; no fluff or repetition. It is concise yet informative.

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 2-parameter tool with no output schema, the description covers the essential context: purpose, when to use, and post-branch actions. It does not explain return values or error behavior, but those may be inferred from the schema and the tool name. The lack of an output schema means the description need not describe return format. Overall, it is sufficiently complete for an agent to select and invoke 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?

Schema coverage is 100%: both session_id and version_id have descriptive schema text. The description does not add parameter-level detail beyond the schema. Per the rubric, baseline 3 is appropriate when the schema fully documents parameters, and the description provides no additional semantic value for them.

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 'Fork a new session from an existing one' – a specific verb and resource that clearly defines the tool's purpose. It further distinguishes from siblings by referencing close_session and merge_branch as lifecycle actions, indicating it is the branching tool in a session-management workflow.

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 states when to use: 'Use this to isolate an experiment, explore an alternative modeling approach, or try a risky edit without touching the parent session.' It also provides lifecycle guidance (close_session if it fails, merge_branch if it succeeds), which gives clear context. It does not explicitly name alternative tools to use instead, but the guidance is specific enough to differentiate its role.

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

detect_contradictionsA

Detect logical contradictions in a Knowledge Structure using the contradiction/conflict extension constraints. Supports three types of detection:

  • mutual_exclusion: Flags when the same source-target pair has both of two declared relation types.

  • functional_relation: Flags when a source has multiple targets via a declared single-valued relation type.

  • inference_confidence_conflict (see ADR-001): Flags when two or more active (non-superseded) InferenceStep objects share a 'conclusion' but disagree on 'confidence'. Reported at WARNING severity, not ERROR -- this is a resolvable belief conflict between agreeing inference paths, not a jointly-nonsensical relation pair. Mark a step no longer active with its own 'superseded_by' field, not by editing another step. Examples of contradiction rules:

  • MutualExclusionRule: {"identity": {"id": "rule-1", "type": "MutualExclusionRule", "name": "no-support-and-refute"}, "structure": {"relation_type_a": "supports", "relation_type_b": "refutes"}}. This flags when the SAME source-target pair has BOTH a 'supports' and a 'refutes' relation.

  • FunctionalRelationRule: {"identity": {"id": "rule-2", "type": "FunctionalRelationRule", "name": "single-orbit"}, "structure": {"relation_type": "orbits"}}. This flags when a single source has MORE THAN ONE target via 'orbits'. To use mutual_exclusion/functional_relation, ensure your structure contains MutualExclusionRule and/or FunctionalRelationRule objects. inference_confidence_conflict needs no rule object -- it applies to any InferenceStep objects present.

ParametersJSON Schema
NameRequiredDescriptionDefault
json_dataNoOptional. JSON Knowledge Structure to check (if no session_id).
session_idNoOptional. Session whose structure to check for contradictions.

TDQS

A4.3/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. It discloses important behavioral traits: inference_confidence_conflict is reported at WARNING severity, not ERROR; it clarifies that it is a resolvable belief conflict; and it instructs how to properly mark steps inactive via 'superseded_by'. These details go beyond what would be expected in structured annotations.

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 clear sections: main purpose, detection types, examples, and practical usage notes. Each section adds value, though the example JSON snippets could be considered verbose. The front-loading of the core purpose is strong.

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 the tool's complexity well, explaining three detection types, prerequisites, and even a specific ADR reference. However, since there is no output schema, the description does not explain what the tool returns (e.g., list of contradictions, their locations, severities). This is a notable gap for complete contextual understanding.

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 already provides 100% coverage with descriptions for both json_data and session_id. The tool description does not add significant parameter-specific meaning; its examples and details focus on the detection behavior and rule configurations rather than the parameters themselves. Baseline 3 is appropriate given full schema coverage.

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 with a specific verb ('Detect logical contradictions') and resource ('Knowledge Structure'), and elaborates with three distinct detection types. It distinguishes from siblings by detailing the specific contradiction rules and providing examples, making its unique function immediately apparent.

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 rich usage context, including how to enable detection types (e.g., 'ensure your structure contains MutualExclusionRule and/or FunctionalRelationRule objects') and clarifying that inference_confidence_conflict needs no rule object. However, it does not explicitly compare to alternatives or state when not to use this tool, so it lacks explicit exclusions.

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

evolve_knowledgeB

Apply structural evolution operators to a Knowledge Structure. Returns a new 'session_id' and 'version_id'. The 'session_id' can be used with list_versions and revert_version.

ParametersJSON Schema
NameRequiredDescriptionDefault
json_dataYesA valid CKS Knowledge Structure as a JSON string. Each object has an 'identity' ({'id', 'type', 'name'}) and a free-form 'structure' dict. Relations are objects whose 'structure' contains 'participants' (a list of object ids) and 'relation_type'. Example: '{"objects": [{"identity": {"id": "obj-1", "type": "Definition", "name": "Photosynthesis"}, "structure": {"content": "..."}}, {"identity": {"id": "rel-1", "type": "Relation", "name": "r"}, "structure": {"participants": ["obj-1", "obj-2"], "relation_type": 'derives"}}]}'.
operationsNoList of evolution operators to apply, in order. Each operator is an object with a 'type' field; the other required fields depend on that type and are NOT interchangeable between operators: - 'add_object': requires 'identity' ({'id','type','name'}) and optional 'structure' (a free-form dict). Fails if the id already exists -- use 'update_object' to change an existing object instead. - 'add_relation': requires 'identity', 'participants' (list of existing object ids), 'relation_type', and optional 'structure'. - 'remove_object': requires 'object_id' (NOT 'identity'). Removing an object also cascade-removes every relation that references it; the response's 'cascade_removed_relations' lists what was removed. - 'remove_relation': requires 'relation_id' (NOT 'identity'). Only valid for an id that is actually a relation -- use 'remove_object' for a plain object. - 'update_object': requires 'object_id' and 'structure_patch' (a dict of fields to change), and optional 'mode' ('merge', the default -- shallow-merges structure_patch into the existing structure, and a patch value of null deletes that key -- or 'replace', which replaces the whole structure dict). Use this instead of remove_object + add_object to change an object's content: the object's id and every relation referencing it are left untouched, with no cascade. - 'rename_object': requires 'object_id' and 'new_name'. Changes only the human-readable identity.name of an existing object or relation, leaving its id, type, structure, and every referencing relation completely untouched — zero cascade, no relation rebuild. Example: '[{"type": "add_object", "identity": {"id": "obj-2", "type": "Lemma", "name": "New"}, "structure": {}}, {"type": "add_relation", "identity": {"id": "rel-1", "type": "Relation", "name": "r"}, "participants": ["obj-1", "obj-2"], "relation_type": "derives"}, {"type": "update_object", "object_id": "obj-1", "structure_patch": {"summary": "revised text"}}, {"type": "rename_object", "object_id": "obj-2", "new_name": "Renamed Lemma"}]'.
session_idNoOptional. If provided, evolve the current structure of this session instead of creating a new session from json_data.

TDQS

B3.2/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 of behavioral disclosure. It mentions that the tool returns a new session_id and version_id, which is a useful behavioral detail. However, it does not disclose potentially destructive side effects (e.g., remove_object cascade-deletes relations), mutation semantics (evolving an existing session vs. creating a new one), or failure modes. This is a significant gap for a tool that can modify or delete knowledge structures.

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 and front-loads the core purpose. The first sentence states what the tool does, and the second sentence provides actionable output information. Every word earns its place. There is no fluff or repetition of schema content.

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?

The tool is complex (three parameters, one required, operations with many variants) and there is no output schema. The description only mentions the return of session_id and version_id, omitting the overall behavior of applying operators, the meaning of a new session, or what happens when session_id is provided. It gives no hint about the breadth of operations defined in the schema, leaving the agent without a high-level understanding of the tool's capabilities and side effects.

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 tool description itself adds no parameter semantics; all details are in the input schema, which is exceptionally thorough with operator types, required fields, examples, and cascade behaviors. The description neither adds nor detracts from the schema, so a baseline 3 is appropriate.

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 states a clear verb+resource: 'Apply structural evolution operators to a Knowledge Structure.' It also explains the return values (new session_id and version_id). While it doesn't explicitly differentiate from siblings like merge_knowledge or construct_knowledge, the concept of 'evolution operators' is specific enough. The purpose is clear but not maximally distinct from other knowledge-structure tools.

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: you apply evolution operators to a Knowledge Structure. It also mentions that the resulting session_id can be used with list_versions and revert_version, giving some post-use context. However, it does not explicitly state when to use this tool versus alternatives (e.g., when to use construct_knowledge for creation or merge_knowledge for combining), nor does it provide any exclusions or prerequisites.

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

explain_diffA

Explain the differences between the current state of a session and a target version in plain English. Useful for understanding what changed without parsing raw diff output.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe session to analyze.
target_version_idYesThe version to compare against.

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 carries the full burden of behavioral disclosure. It discloses that output is 'in plain English' and that it analyzes the 'current state of a session,' suggesting a read-only operation, but it does not explicitly state side effects, permissions, or limitations. This is adequate but lacks explicit clarity on whether any modification occurs.

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, front-loaded with the primary action, and every sentence adds value. The first sentence defines the operation, and the second explains the use case, with no redundant or filler content.

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 (2 parameters, no output schema, no annotations), the description covers the core elements: what it does, when to use it, and the nature of its output. It does not specify return details or error scenarios, but these are less critical for an explanation tool. The description is sufficiently complete for the context.

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 has 100% coverage with descriptions for both parameters (session_id and target_version_id). The description adds context by framing the comparison as 'current state' versus 'target version,' but this does not introduce new semantics beyond what the schema already provides. 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 function: explaining differences between a session's current state and a target version in plain English. It uses a specific verb ('explain') and resource ('session', 'target version'), and it distinguishes itself from siblings like compare_versions by emphasizing the plain-English output rather than raw diff.

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 clear context by stating it is 'useful for understanding what changed without parsing raw diff output,' which implies the tool is for high-level analysis. However, it does not explicitly name alternative tools (e.g., compare_versions) or state when not to use it, so it falls 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.

explain_knowledgeA

Produce a human-readable explanation of a Knowledge Structure. Optionally accepts 'session_id' to explain the current state of an existing session.

ParametersJSON Schema
NameRequiredDescriptionDefault
json_dataYesA valid CKS Knowledge Structure as a JSON string. Each object has an 'identity' ({'id', 'type', 'name'}) and a free-form 'structure' dict. Relations are objects whose 'structure' contains 'participants' (a list of object ids) and 'relation_type'. Example: '{"objects": [{"identity": {"id": "obj-1", "type": "Definition", "name": "Photosynthesis"}, "structure": {"content": "..."}}, {"identity": {"id": "rel-1", "type": "Relation", "name": "r"}, "structure": {"participants": ["obj-1", "obj-2"], "relation_type": 'derives"}}]}'.
session_idNoOptional. If provided, explain the current structure of this session instead of creating a new session from json_data.

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 of behavioral disclosure. It only states that it produces an explanation and mentions the session_id condition; it does not disclose whether the operation is read-only, if it has side effects, or what the output format is. This leaves important behavioral traits unexplained.

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, directly stating the purpose and the optional parameter. It is front-loaded with the primary action and has no filler or redundant information.

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?

Given no output schema and no annotations, the description should provide more context about what the explanation includes and any behavioral implications. It clearly states the purpose but leaves gaps around output format and side effects, making it only minimally complete for a tool handling complex knowledge structures.

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%, and the schema already provides detailed descriptions for both json_data and session_id. The description's mention of session_id adds no new meaning beyond what the schema provides, so it stays at the baseline of 3.

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 produces a human-readable explanation of a Knowledge Structure, which is a specific verb+resource combination. It implicitly distinguishes from siblings like explain_diff (explains differences) and validate_knowledge (validates structure).

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 gives context for the optional session_id parameter (explaining an existing session vs. creating a new one from json_data), but it does not explicitly discuss when to use this tool versus alternatives like explain_diff or validate_knowledge. Usage is implied rather than stated.

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

export_knowledgeA

Export a session's Knowledge Structure to another format. Supports 'json-ld', 'turtle', and 'rdf-xml'.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format: 'json-ld', 'turtle', or 'rdf-xml'. Default 'json-ld'.
session_idYesThe session to export.

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must carry the full burden of behavioral disclosure. It does not explicitly state that the export is read-only or non-modifying, nor does it describe what happens to the session or what the output looks like (e.g., returned string vs. file download). The word 'Export' implies a safe operation, but this is not made explicit, leaving uncertainty.

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 exactly two sentences, front-loaded with the action verb. Every word earns its place—the first sentence states the core function, and the second lists specifics. There is no filler or redundancy.

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?

Given the simplicity of the tool (2 params, 1 required), the description covers the basic purpose and formats. However, it lacks information about the return value or output format (e.g., whether it returns the RDF content directly or as an attachment), and it does not differentiate from the similar-sounding sibling 'export_session'. Since there is no output schema, the description should have provided this context.

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 schema already documents both 'session_id' and 'format' parameters effectively. The description adds minimal extra value by listing the supported format values, but these are already present in the schema's format description. It does not clarify default behavior beyond what the schema already states.

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 ('Export'), identifies the resource ('a session's Knowledge Structure'), and states the destination ('to another format'). It also lists the supported formats ('json-ld', 'turtle', 'rdf-xml'), making the tool's purpose immediately clear. This clearly distinguishes it from generic 'export' tools, though it does not explicitly contrast with the sibling 'export_session'.

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 context: use this tool when you need to export a session's Knowledge Structure to a supported RDF format. However, it provides no explicit guidance on when to use this tool versus alternatives like 'export_session' or 'serialize_knowledge', and no exclusions or prerequisites are mentioned.

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

export_sessionA

Export a full session bundle for migration or archival. Unlike export_knowledge (which converts to RDF/JSON-LD), this tool packages the session's current structure, version history, and metadata into a self-contained JSON document that can be used to recreate the session in another runtime instance. Supports two formats: 'bundle' (default) — a complete migration envelope with version history; 'cks' — bare canonical CKS JSON of the current structure only. Set 'include_structures' to true to embed the full KnowledgeStructure for each historical version (may be large).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format: 'bundle' (default) — full migration envelope with metadata and version history; 'cks' — current structure only.
session_idYesThe session to export.
include_structuresNoOptional. When true and format='bundle', embed the serialized KnowledgeStructure for each version in the history (may produce a large payload for long-lived sessions). Default false.

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses the output nature (self-contained JSON document), what it includes (version history, metadata), and warns about potentially large payloads when include_structures is set. Since no annotations are provided, this added context is valuable, though it stops short of explicitly stating side effects or required permissions.

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-organized: a clear purpose statement, a sibling contrast, format details, and a note on the include_structures option. It is reasonably concise for a tool with three parameters, though a minor redundancy with the schema could be tightened.

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 absence of an output schema and annotations, the description provides a solid overview of what the tool returns (self-contained JSON, version history, metadata) and includes a size warning. It covers the essential context, though a brief note on non-destructive behavior would have made it fully complete.

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?

All parameters are described in the schema (100% coverage), giving a baseline of 3. The description adds extra meaning by elaborating on the difference between 'bundle' and 'cks' formats and the implications of include_structures, going beyond the schema's bare definitions.

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 exports a full session bundle for migration or archival. It explicitly differentiates from export_knowledge, eliminating ambiguity and making the purpose and scope immediately clear.

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 explicitly contrasts with export_knowledge, telling the user when not to use this tool (when RDF/JSON-LD output is desired). It also explains the two output formats and when to prefer each, providing direct guidance on usage.

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

fork_sandboxA

Create an isolated sandbox branch from a parent session, optionally apply a hypothesis (list of evolution operations) immediately, and show how the sandbox differs from its fork point. The parent session is never touched. Safe to discard with close_session if the hypothesis doesn't pan out.

ParametersJSON Schema
NameRequiredDescriptionDefault
hypothesisNoOptional. A short description of the hypothesis (for logging/reporting).
operationsNoOptional. Evolution operations to apply immediately in the sandbox.
session_idYesThe parent session to fork from.
version_idNoOptional. Fork from this historical version instead of the current state.

TDQS

A4.2/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 key behaviors: parent session untouched, sandbox is isolated, and it can be safely discarded. It also explains the operations are evolution operations, providing useful 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.

Conciseness5/5

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

Two sentences with no redundant content; front-loaded with the main action, then safety note. 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 tool with 4 params and no output schema or annotations, the description covers the core purpose, optional operations, and safety. It also hints at the diff behavior. It lacks return-format details, but the mention of showing differences partially compensates.

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%, so the schema already documents all four parameters. The description adds that operations are evolution operations and mentions applying a hypothesis, but its phrasing '(list of evolution operations)' could be misread as defining the hypothesis parameter rather than operations, introducing ambiguity.

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 ('Create') and resource ('isolated sandbox branch') and clarifies optional application of operations and diff display. This distinguishes it from sibling tools like create_branch by emphasizing isolation and safety.

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?

It states the sandbox is for testing a hypothesis and can be discarded if it fails, implying use for safe exploration. It does not explicitly name alternatives or exclusions, but the isolation context ('parent session never touched') provides clear usage context.

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

get_metricsA

Return runtime metrics and the tool telemetry dashboard. 'runtime_metrics' contains invocation counts and average execution times per runtime operation type. 'tool_telemetry' contains per-MCP-tool call counts, success rates, latency percentiles (p50/p95/p99), and top error types since the server started.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/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 the internal structure of the return value ('runtime_metrics' and 'tool_telemetry') and the temporal scope ('since the server started'). While it does not explicitly state read-only behavior, the verb 'get' implies no side effects, and the description adds meaningful context.

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 long, front-loaded with the main action and object, and then elaborates with relevant details. Every sentence adds value with no filler.

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?

Without an output schema, the description adequately conveys the return structure by listing the two main sections and key fields. Minor ambiguity around the term 'dashboard' prevents a perfect score, but overall it is complete for a zero-parameter metrics tool.

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, so the baseline is 4. There is no parameter information to provide, and the description correctly focuses on the return value instead.

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 returns runtime metrics and a tool telemetry dashboard, using a specific verb ('Return') and resource. It is distinct from sibling tools, which are all knowledge-related operations, so the purpose is unambiguous.

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 does not explicitly state when to use this tool or mention alternatives. However, its purpose is self-evident and no sibling tool overlaps with metrics retrieval, so usage is implied rather than explicitly guided.

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

ingest_documentA

Fetch a public URL, extract its title, description and key topics, and return a Knowledge Structure representing the document. The document object is linked via 'mentions' relations to Topic objects for each extracted keyword. SSRF protection is applied, so private/internal URLs are refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe publicly accessible URL to fetch.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description bears full responsibility for transparency. It discloses SSRF protection and refusal of private/internal URLs, and describes the linking behavior via 'mentions' relations. However, it does not clarify whether the tool persists the Knowledge Structure or only returns it, leaving side-effect ambiguity.

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, front-loaded with the primary action, and contains no redundant phrasing. Every clause adds useful information.

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 simple single-parameter interface and lack of output schema, the description adequately explains the primary function, output structure, and a key behavioral restriction. Minor gap: it doesn't state persistence or side-effects, but this is a relatively simple tool.

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 schema already documents the 'url' parameter as 'The publicly accessible URL to fetch', so coverage is 100%. The description adds meaningful context by emphasizing public access and SSRF refusal, which clarifies failure conditions.

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 specific verbs 'Fetch', 'extract', and 'return' with a clear resource (public URL document) and states the result (Knowledge Structure). It distinguishes this from sibling tools like construct_knowledge or verify_source by focusing on external URL ingestion.

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 for publicly accessible web documents but does not explicitly say when to choose this over alternatives like construct_knowledge or verify_source. It provides a constraint (SSRF refusal) but no explicit 'when to use this tool' guidance.

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

list_versionsA

List all available versions of a session's history. Requires a 'session_id' obtained from a previous call to validate_knowledge or evolve_knowledge.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe ID of the session to list versions for.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral disclosure burden. It implies a read-only operation ('List') and mentions a prerequisite, but does not disclose return format, pagination, or whether the session must be active. This adds some context but remains basic.

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, front-loaded with the core purpose, followed by the prerequisite. Every word earns its place with no redundancy.

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 1-parameter list tool with no output schema, the description covers the essential: what it does and how to obtain the required input. It could mention the return value shape, but given the simplicity, it is reasonably complete.

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 schema already describes session_id fully, but the description adds crucial semantics by explaining that the ID comes from specific prior calls. This helps the agent understand where to obtain the value, going beyond the schema's generic description.

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 lists all available versions of a session's history, using a specific verb and resource. It distinguishes itself from siblings like compare_versions and revert_version by focusing solely on listing versions.

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 a clear prerequisite: the session_id must come from a previous call to validate_knowledge or evolve_knowledge. While it doesn't explicitly contrast with alternative tools, this gives the agent actionable context for when to use this tool.

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

merge_branchA

Session-aware three-way merge: merge a branch session's changes into a target session. The merge base is resolved automatically from the branch's recorded fork point (set by create_branch), so -- unlike merge_knowledge -- you never supply the base yourself. On success, commits the merged result as a new version of the target session. On conflict, returns a 'conflicts' list (object_id, target_diff, source_diff) instead of merging. Do not call merge_branch again unchanged after a conflict -- retry it with a 'resolutions' argument covering each conflicting object_id (see the 'resolutions' parameter), which merges everything -- non-conflicting changes and now-resolved conflicts alike -- in this one call; identities you don't supply a resolution for are reported again. Only if you'd rather change the target session's content directly, apply your resolution there with evolve_knowledge and retry merge_branch with no resolutions. Either way, close_session the source branch once it has been fully integrated.

ParametersJSON Schema
NameRequiredDescriptionDefault
resolutionsNoOptional. Per-object conflict resolution strategies. Keys are object IDs. Values: 'branch_a' (take target's version), 'branch_b' (take source branch's version), null (drop the object), or a complete object definition to use as the merged result.
base_version_idNoOptional. Overrides the merge base with a specific version id from the target session's history. Only needed if source_session_id wasn't created with create_branch's 'version_id' parameter.
source_session_idYesThe branch session being merged in.
target_session_idYesThe session to merge into.

TDQS

A4.9/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 honestly states that on conflict it returns a 'conflicts' list instead of merging, that retrying with resolutions merges everything including previously non-conflicting changes, and that unresolved identities are reported again. It also reveals the commit behavior ("commits the merged result as a new version of the target session"). This is highly transparent.

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 dense paragraph that front-loads the core purpose and then methodically covers conflict handling, retry semantics, and alternative paths. Each clause earns its place, but the length and density make it slightly harder to parse quickly. It is efficient but not maximally concise.

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 complexity of a three-way merge tool, the description is remarkably complete. There is no output schema to explain return values, but the description covers the success case, conflict return format, retry workflow, and final cleanup via close_session. It also accounts for the edge case where the user wants to modify the target directly. This is sufficient for an agent to select and invoke the tool correctly.

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?

Though the input schema already describes each parameter (100% coverage), the description adds significant semantic value. It explains the 'resolutions' parameter in detail, including the behavior of merging everything in one call and the meaning of each resolution value. It also clarifies 'base_version_id' overrides and the roles of source/target session IDs, going beyond the schema's per-parameter 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 opens with a specific verb and resource: "Session-aware three-way merge: merge a branch session's changes into a target session." It clearly distinguishes this tool from merge_knowledge by noting the automatic base resolution and the lack of user-supplied base. This makes the tool's purpose unambiguous and differentiates it from a direct sibling.

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 guidance: it contrasts with merge_knowledge ("unlike merge_knowledge -- you never supply the base yourself"), instructs not to call merge_branch unchanged after a conflict, directs the retry with a 'resolutions' argument, and offers an alternative path via evolve_knowledge. It also tells the user to close_session the source branch once fully integrated. This is comprehensive when/when-not guidance.

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

merge_knowledgeA

Three-way merge of Knowledge Structures. Provide a common ancestor (base) and two independently evolved branches. Returns the merged structure or a list of conflicts if automatic resolution is impossible.

ParametersJSON Schema
NameRequiredDescriptionDefault
resolutionsNoOptional. Per-object conflict resolution strategy. Keys are object IDs. Values: 'branch_a', 'branch_b', null (drop), or a full object definition to override the conflict.
json_data_baseYesThe common ancestor Knowledge Structure as a JSON string.
json_data_branch_aYesBranch A Knowledge Structure as a JSON string.
json_data_branch_bYesBranch B Knowledge Structure as a JSON string.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description must disclose side effects and error behavior. It discloses the return behavior (merged structure or conflict list) and the condition for conflicts, but does not mention whether inputs are modified, permissions required, or other potential 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 exactly two sentences, front-loaded with the primary action and clear about inputs and outputs. No wasted words.

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 four parameters, nested objects, and no output schema, the description covers the core functionality and return types. However, it does not detail the conflict list format or how the optional 'resolutions' parameter interacts with conflict resolution, leaving some gaps for an agent unfamiliar with the domain.

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 100%, so the baseline is 3. The description adds contextual meaning by framing the parameters as 'independently evolved branches' and explaining the three-way merge scenario, which enriches understanding beyond the schema's property 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 clearly states the tool performs a three-way merge of Knowledge Structures, specifying the exact inputs (base, branch A, branch B) and outputs. This distinguishes it from sibling tools like merge_branch, which likely operates at a different level.

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 clear usage context: provide a common ancestor and two independently evolved branches. However, it does not explicitly state when not to use it or name alternative tools, so it lacks explicit exclusions.

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

query_subgraphA

Extract the local k‑hop neighbourhood around one or more seed ids from a session's current Knowledge Structure. Returns a self‑contained subgraph (serialized) and metadata: total_found_nodes, returned_nodes, is_truncated, truncation_reason, suggested_next_seed. Use filters (include_relation_types, include_object_types) to narrow the traversal, and max_tokens/max_objects to cap the result. type_weights can prioritise certain object types when the budget forces truncation.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoMaximum hops from any seed. Default 1.
seed_idsNoList of object ids to start traversal from.
max_tokensNoOptional token budget (approx).
session_idYesThe session whose Knowledge Structure to query.
max_objectsNoOptional hard cap on total objects returned.
compact_modeNoIf true, return a compact representation (nodes + edges) instead of full canonical JSON.
type_weightsNoOptional mapping of object type to weight (float), used in budget ranking.
structure_filtersNoOptional. AND-filter applied to non-relation objects after extraction: only objects whose 'structure' dict contains ALL key=value pairs survive. Seed objects are always kept regardless. Relations are retained when both their participants survive the filter. Example: {"status": "active", "domain": "biology"}.
include_object_typesNoOptional. Only include discovered objects of these types (seeds always kept).
include_relation_typesNoOptional. Only traverse/include these relation types.

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 discloses the return format (self-contained subgraph, serialized), metadata fields (total_found_nodes, returned_nodes, is_truncated, truncation_reason, suggested_next_seed), and behavior around truncation and budget prioritization via type_weights. This is rich, beyond what a typical description offers.

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 four sentences, tightly packed with useful information. It front-loads the main purpose in the first sentence, then systematically covers return metadata, filtering, and budget handling. No filler or redundancy.

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 tool with 10 parameters and no output schema, the description covers the essential behavior: what is returned, truncation metadata, and how to control the traversal. The schema handles the remaining parameter details, and the description explicitly lists the metadata fields, making the output understandable without an output 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?

The input schema already covers all 10 parameters with descriptions (100% coverage), so the baseline is 3. The description adds strategic guidance on how parameters interact: filters narrow traversal, max_tokens/max_objects cap the result, and type_weights prioritize when truncation occurs. This adds meaning beyond the schema's simple per-parameter 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 clearly states the tool's purpose: 'Extract the local k-hop neighbourhood around one or more seed ids from a session's current Knowledge Structure.' It uses a specific verb ('extract') and resource ('session's Knowledge Structure'), and the mention of 'k-hop neighbourhood' distinguishes it from sibling tools like search_semantic or serialize_knowledge.

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 clear usage context: it explains how to narrow traversal with filters and cap results with max_tokens/max_objects. However, it does not explicitly mention when to use this tool versus alternatives or state any exclusions, so it lacks explicit sibling differentiation.

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

revert_versionA

Revert a session's Knowledge Structure to a specific previous version. Requires a 'session_id' obtained from a previous call to validate_knowledge or evolve_knowledge.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe ID of the session to revert.
target_version_idYesThe ID of the version to revert to.

TDQS

A3.9/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It says 'revert,' which implies mutation, but it doesn't state whether the action is irreversible, what happens to the current version, or if branches are affected. This is a significant gap for a potentially 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 two sentences, direct, and front-loaded with the action. It wastes no words and delivers the essential information efficiently.

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?

For a tool with no annotations and no output schema, the description covers the basic purpose and a key prerequisite, but it lacks behavioral details such as whether the revert is irreversible, what the response looks like, or potential side effects. This is adequate but not fully complete for safe 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?

The schema already provides descriptions for both parameters (100% coverage). The description adds valuable extra meaning by specifying that session_id must come from a prior call to validate_knowledge or evolve_knowledge, which is not in the schema. It doesn't add detail for target_version_id, but the schema covers it adequately.

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: 'Revert a session's Knowledge Structure to a specific previous version.' It identifies the specific resource (Knowledge Structure) and the target (previous version), which distinguishes it from sibling tools like list_versions or compare_versions.

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?

It provides a clear prerequisite: session_id must come from a previous call to validate_knowledge or evolve_knowledge. This gives useful context for when to use the tool, but it doesn't explicitly mention alternatives or when not to use it, so it misses the top tier.

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

search_semanticA

Semantically search the Knowledge Structure of a session. Provide a natural language query; if the storage backend has a vector index (embeddings generated via the background outbox worker), matching seed objects are found automatically. Pass explicit 'seed_ids' instead when you already know which objects to expand around, or as a fallback if no embeddings have been generated yet for this session. The tool expands the neighbourhood around the matched seeds using query_subgraph. Use this when you don't know exact object IDs but have a description of what you're looking for.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoHow many hops to expand around each seed (default 1).
queryYesNatural language description of what to find.
top_kNoMax number of seed objects to use (default 3).
seed_idsNoOptional. List of object IDs to start the subgraph expansion from. Omit to use vector search automatically; required as a fallback if the storage backend has no embeddings for this session yet.
min_scoreNoMinimum cosine similarity score (0.0 to 1.0). Results below this threshold are excluded. Default 0.0 (no filtering).
session_idYesThe session to search in.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the transparency burden. It explains the vector-index dependency, the background outbox worker, and the seed_ids fallback. It also mentions that the tool expands via query_subgraph. It does not disclose the return format or any side effects, but for a search tool this is acceptable.

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?

Three sentences, front-loaded with purpose, and every sentence earns its place. It covers the action, the conditional behavior, and the when-to-use guidance without unnecessary verbosity.

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 6 parameters and no output schema, the description covers the key context: the search mechanism, the fallback, the expansion via query_subgraph, and the applicable use case. It does not describe the return format, but with no output schema and clear param details, this is a minor gap.

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 100%, so the baseline is 3. The description adds extra value by explaining the relationship between query and seed_ids, clarifying when each is appropriate, and noting the fallback behavior. This goes beyond the schema's individual parameter 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 opens with a specific action: 'Semantically search the Knowledge Structure of a session.' It clearly distinguishes from siblings by explaining that it uses natural language queries instead of exact IDs and mentions query_subgraph as an internal helper. The resource and scope are well-defined.

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 guidance: 'Use this when you don't know exact object IDs but have a description of what you're looking for.' It also explains when to pass seed_ids instead, covering both the primary and fallback scenarios. This makes the usage context unambiguous.

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

serialize_knowledgeA

Serialize a Knowledge Structure into its canonical JSON representation. Optionally accepts 'session_id' to serialize the current state of an existing session.

ParametersJSON Schema
NameRequiredDescriptionDefault
json_dataYesA valid CKS Knowledge Structure as a JSON string. Each object has an 'identity' ({'id', 'type', 'name'}) and a free-form 'structure' dict. Relations are objects whose 'structure' contains 'participants' (a list of object ids) and 'relation_type'. Example: '{"objects": [{"identity": {"id": "obj-1", "type": "Definition", "name": "Photosynthesis"}, "structure": {"content": "..."}}, {"identity": {"id": "rel-1", "type": "Relation", "name": "r"}, "structure": {"participants": ["obj-1", "obj-2"], "relation_type": 'derives"}}]}'.
session_idNoOptional. If provided, serialize the current structure of this session instead of creating a new session from json_data.

TDQS

A3.7/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 full responsibility for behavioral disclosure. It only states the core action and the session option, but fails to explain side effects (e.g., whether a session is created when json_data is used), the precedence when both parameters are provided, or any auth/rate-limit concerns. This is a significant gap for a serialization tool.

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 concise sentences: the first states the primary action, the second covers the session alternative. Both sentences earn their place with no filler or redundancy.

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 two main usage modes (json_data and session_id) but lacks details about the return value (exact JSON structure), error conditions, and the meaning of 'canonical' in this context. Given the complexity of the tool and absence of an output schema, this is a moderate gap that could affect correct invocation.

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 already provides 100% coverage for both parameters, including a detailed example for json_data. The description only restates the optional nature of session_id without adding new semantic details, 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 uses the specific verb 'Serialize' with the resource 'Knowledge Structure' and states the outcome 'canonical JSON representation'. This clearly distinguishes it from sibling tools like validate_knowledge or export_knowledge, which have different purposes.

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 clear usage context by explaining that session_id is optional for serializing an existing session, implying the alternative of providing json_data for a new structure. However, it does not explicitly mention exclusions or alternatives like export_knowledge, leaving some ambiguity.

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

suggest_evolutionA

Given a session and a description of what to change, return the current objects/relations and guidance for constructing valid evolution operations. Use this before evolve_knowledge to reduce trial-and-error. If you already have a candidate 'operations' list (same format evolve_knowledge accepts), pass it here first to preview whether it would be valid -- this dry-runs it the same way evolve_knowledge does internally, but commits nothing, so you can check correctness before spending a real evolve_knowledge call on a guess.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsNoOptional. A candidate list of evolution operations (same format as evolve_knowledge's 'operations') to preview instead of getting a template. Nothing is committed either way.
session_idYesThe session to inspect.
descriptionYesWhat you want to change (e.g. 'add a new Concept about photosynthesis').

TDQS

A4.6/5.0
Behavior4/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 clearly states that the tool 'commits nothing' and is a dry-run that validates 'the same way evolve_knowledge does internally.' It also discloses the output (current objects/relations and guidance). While it doesn't mention potential side effects like cost or permissions, the non-mutating nature is explicitly communicated.

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 sentences long, front-loaded with the core purpose, followed by usage guidance and the alternative preview mode. Every sentence provides essential information without redundancy or fluff. It's concise and well-structured.

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 moderate complexity (two usage modes, dry-run behavior) and the lack of an output schema, the description covers the essential aspects: what it does, when to use it, and that it commits nothing. It names the sibling tool (evolve_knowledge) and the return content. It doesn't detail the exact return structure, but the high-level description is sufficient for an agent to understand the tool's role.

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%, so the baseline is 3. The description adds meaningful context beyond the schema by explaining the relationship between the two modes: using `description` alone to get guidance, vs. providing an `operations` list for preview. It also clarifies that `operations` accepts the same format as evolve_knowledge, which is not evident from the schema descriptions alone.

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 function: given a session and a change description, it returns current objects/relations and guidance for constructing valid evolution operations. It also distinguishes itself from the sibling evolve_knowledge by positioning it as a pre-check or dry-run, and from validate_knowledge by focusing on evolution operations. The verb 'return' and resource 'guidance' are specific.

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 usage guidance is provided: 'Use this before evolve_knowledge to reduce trial-and-error.' It also explains the alternative scenario where you already have a candidate operations list and want to preview its validity. The description clarifies when not to use it (when ready to commit) by contrasting with 'spending a real evolve_knowledge call on a guess.'

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

validate_knowledgeA

Validate a Canonical Knowledge Structure. Returns validation result and diagnostics. Optionally accepts 'session_id' to validate an existing session's current state instead of creating a new one. Optionally accepts 'extensions' to opt into additional, non-default validation rules for this call only (see 'extensions' parameter). Returns a 'session_id' that can be used with list_versions and revert_version to track and manage version history.

ParametersJSON Schema
NameRequiredDescriptionDefault
json_dataYesA valid CKS Knowledge Structure as a JSON string. Each object has an 'identity' ({'id', 'type', 'name'}) and a free-form 'structure' dict. Relations are objects whose 'structure' contains 'participants' (a list of object ids) and 'relation_type'. Example: '{"objects": [{"identity": {"id": "obj-1", "type": "Definition", "name": "Photosynthesis"}, "structure": {"content": "..."}}, {"identity": {"id": "rel-1", "type": "Relation", "name": "r"}, "structure": {"participants": ["obj-1", "obj-2"], "relation_type": 'derives"}}]}'.
extensionsNoOptional list of opt-in validation extensions to apply for this call only (does not affect other calls). Currently available: 'embedding_projection', 'verification_record', 'type_hierarchy', 'relation_type', 'mutual_exclusion', 'functional_relation', 'inference_referential_integrity', 'confidence_bounds', 'supersession_chain', 'inference_confidence_conflict' (see ADR-001: these apply to 'InferenceStep' objects -- {'identity': {'id': ..., 'type': 'InferenceStep', 'name': ...}, 'structure': {'premises': [...], 'conclusion': <object_id>, 'operator': 'deductive|inductive|abductive|heuristic', 'confidence': 0.0-1.0, 'justification': ..., 'alternatives_considered': [...], 'superseded_by': <object_id> | null}}. 'inference_confidence_conflict' flags active (non-superseded) InferenceSteps that share a conclusion but disagree on confidence, at WARNING severity rather than ERROR). Examples of contradiction rules: - MutualExclusionRule: {"identity": {"id": "rule-1", "type": "MutualExclusionRule", "name": "no-support-and-refute"}, "structure": {"relation_type_a": "supports", "relation_type_b": "refutes"}}. This flags when the SAME source-target pair has BOTH a 'supports' and a 'refutes' relation. - FunctionalRelationRule: {"identity": {"id": "rule-2", "type": "FunctionalRelationRule", "name": "single-orbit"}, "structure": {"relation_type": "orbits"}}. This flags when a single source has MORE THAN ONE target via 'orbits'. Example of a correct EmbeddingProjection with its 'represents' relation: {"objects": [{"identity": {"id": "src-1", "type": "Document", "name": "Real paper"}, "structure": {}}, {"identity": {"id": "proj-1", "type": "EmbeddingProjection", "name": "projection"}, "structure": {"store_ref": "vecdb://xyz"}}, {"identity": {"id": "rel-1", "type": "Relation", "name": "r"}, "structure": {"participants": ["src-1", "proj-1"], "relation_type": "represents"}}]}. Example of TypeDefinition and TypeRule for ontology validation: {"objects": [{"identity": {"id": "td-1", "type": "TypeDefinition", "name": "Planet"}, "structure": {"type_name": "Planet", "parent_type": "CelestialBody"}}, {"identity": {"id": "tr-1", "type": "TypeRule", "name": "orbits rule"}, "structure": {"relation_type": "orbits", "allowed_source_types": ["Planet", "Moon"], "allowed_target_types": ["Star", "Planet"]}}]}.
session_idNoOptional. If provided, validate the current structure of this session instead of creating a new session from json_data.

TDQS

A4.1/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 side effects (creation of a session when session_id is absent), the per-call nature of extensions, and the return of a session_id for version tracking. It does not provide exhaustive details on permissions or reversibility, but it gives a reasonably transparent behavioral overview for a validation 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 front-loaded with the core purpose and is divided into short, actionable sentences. It is slightly redundant with the schema but not bloated. Each sentence serves a distinct informative function: purpose, return value, optional modes, and return usage.

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 tool has 3 parameters, a rich schema, and no output schema. The description covers the main aspects: what it validates, optional behaviors, return value, and how the returned session_id can be used with version tooling. It does not detail the exact shape of validation results, but that may be standard for the domain and is adequately summarized as 'validation result and diagnostics'.

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 does not add meaningful new information about parameters beyond what the schema already provides; it merely restates the purpose of session_id and extensions. It does not clarify the format of json_data beyond the schema's detailed 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 opens with 'Validate a Canonical Knowledge Structure', a specific verb+resource pairing that clearly identifies the tool's function. It distinguishes itself from siblings by focusing on validation rather than evolution, construction, or versioning operations. The mention of 'Returns validation result and diagnostics' further clarifies the core purpose.

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 clear context on when to use the tool, including the option to validate an existing session's current state or create a new session, which is a mode selection. It explains how extensions and session_id alter behavior. However, it does not explicitly compare against alternative tools like detect_contradictions or verify_source, so it lacks explicit exclusions.

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

verify_sourceA

Verify an external source by performing a real HTTP request. Creates a VerificationRecord that can be validated.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL of the source to verify.
subject_idYesThe ID of the Knowledge Object that this verification is about.

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 the transparency burden. It discloses the important behavioral trait of performing a 'real HTTP request', which implies network side effects, and mentions the creation of a VerificationRecord. However, it does not discuss potential failures, timeouts, or authorization requirements, so it is informative but not fully transparent.

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 packs in the purpose, mechanism, and outcome. Every word contributes value with no irrelevant detail or repetition.

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 a simple 2-parameter tool with no output schema, the description adequately states what happens (HTTP call, VerificationRecord created). It could include return structure, but the absence of an output schema makes this a minor gap. The description provides enough context for an agent to understand the tool's role.

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% since both parameters have descriptions in the schema. The tool description does not add further context about the parameters, but it doesn't need to because the schema already defines 'url' and 'subject_id' clearly. Baseline 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 verb 'verify' and the resource 'external source', and specifies that a real HTTP request is made. It also mentions the creation of a VerificationRecord, which distinguishes it from sibling tools like validate_knowledge that might refer to internal validation.

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 phrase 'Verify an external source' provides clear context for when to use the tool. However, it does not explicitly mention alternatives or exclusions, relying on the explicit 'external' qualifier to differentiate from other validation tools.

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

visualize_graphA

Export a subgraph as a Mermaid diagram. Many MCP clients render Mermaid natively; if yours doesn't, the raw Mermaid text is still useful as structured output. Use this after query_subgraph to show the structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoHow many hops to expand. Default 1.
seed_idsNoOptional. Object IDs to start from. Defaults to all objects.
session_idYesThe session to visualize.
max_objectsNoMax objects to include. Default 20.

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 the full burden. It discloses the output format (Mermaid) and notes that raw Mermaid text is useful even if clients don't render it. However, it does not mention whether the operation is read-only, has any side effects, or requires specific session state, leaving some uncertainty.

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, front-loaded with the core purpose and followed by a brief usage note. Every sentence earns its place, with no filler or repetition.

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, the description covers the essential purpose, output format, and usage context. The schema handles parameters, and the description adds the key context about when to use it. It lacks explicit safety or side-effect details, but that is a minor gap for a likely read-only export 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?

The input schema covers 100% of the parameters with descriptions, so the baseline is 3. The description does not add any additional parameter semantics beyond the schema, making it adequate but not enhanced.

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 states a specific verb ('Export'), a clear resource ('a subgraph'), and a concrete output format ('Mermaid diagram'). This distinguishes it from sibling tools like export_knowledge or serialize_knowledge, which might have different output formats or purposes.

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 explicitly states when to use the tool: 'Use this after query_subgraph to show the structure.' It provides clear context but does not mention alternatives or when not to use it, so it falls short of a fully explicit when/when-not guideline.

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 updatev1.19.0
    • Changedvalidate_knowledge1 field changed
      • changedInput schema / properties / extensions / description
        Previous value: -"Optional list of opt-in validation extensions to apply for this call only (does not affect other calls). Currently available: 'embedding_projection', 'verification_record', 'type_hierarchy', 'relation_type', 'mutual_exclusion', 'functional_relation'. Examples of contradiction rules:\n- MutualExclusionRule: {\"identity\": {\"id\": \"rule-1\", \"type\": \"MutualExclusionRule\", \"name\": \"no-support-and-refute\"}, \"structure\": {\"relation_type_a\": \"supports\", \"relation_type_b\": \"refutes\"}}. This flags when the SAME source-target pair has BOTH a 'supports' and a 'refutes' relation.\n- FunctionalRelationRule: {\"identity\": {\"id\": \"rule-2\", \"type\": \"FunctionalRelationRule\", \"name\": \"single-orbit\"}, \"structure\": {\"relation_type\": \"orbits\"}}. This flags when a single source has MORE THAN ONE target via 'orbits'. Example of a correct EmbeddingProjection with its 'represents' relation: {\"objects\": [{\"identity\": {\"id\": \"src-1\", \"type\": \"Document\", \"name\": \"Real paper\"}, \"structure\": {}}, {\"identity\": {\"id\": \"proj-1\", \"type\": \"EmbeddingProjection\", \"name\": \"projection\"}, \"structure\": {\"store_ref\": \"vecdb://xyz\"}}, {\"identity\": {\"id\": \"rel-1\", \"type\": \"Relation\", \"name\": \"r\"}, \"structure\": {\"participants\": [\"src-1\", \"proj-1\"], \"relation_type\": \"represents\"}}]}. Example of TypeDefinition and TypeRule for ontology validation: {\"objects\": [{\"identity\": {\"id\": \"td-1\", \"type\": \"TypeDefinition\", \"name\": \"Planet\"}, \"structure\": {\"type_name\": \"Planet\", \"parent_type\": \"CelestialBody\"}}, {\"identity\": {\"id\": \"tr-1\", \"type\": \"TypeRule\", \"name\": \"orbits rule\"}, \"structure\": {\"relation_type\": \"orbits\", \"allowed_source_types\": [\"Planet\", \"Moon\"], \"allowed_target_types\": [\"Star\", \"Planet\"]}}]}."New value: +"Optional list of opt-in validation extensions to apply for this call only (does not affect other calls). Currently available: 'embedding_projection', 'verification_record', 'type_hierarchy', 'relation_type', 'mutual_exclusion', 'functional_relation', 'inference_referential_integrity', 'confidence_bounds', 'supersession_chain', 'inference_confidence_conflict' (see ADR-001: these apply to 'InferenceStep' objects -- {'identity': {'id': ..., 'type': 'InferenceStep', 'name': ...}, 'structure': {'premises': [...], 'conclusion': <object_id>, 'operator': 'deductive|inductive|abductive|heuristic', 'confidence': 0.0-1.0, 'justification': ..., 'alternatives_considered': [...], 'superseded_by': <object_id> | null}}. 'inference_confidence_conflict' flags active (non-superseded) InferenceSteps that share a conclusion but disagree on confidence, at WARNING severity rather than ERROR). Examples of contradiction rules:\n- MutualExclusionRule: {\"identity\": {\"id\": \"rule-1\", \"type\": \"MutualExclusionRule\", \"name\": \"no-support-and-refute\"}, \"structure\": {\"relation_type_a\": \"supports\", \"relation_type_b\": \"refutes\"}}. This flags when the SAME source-target pair has BOTH a 'supports' and a 'refutes' relation.\n- FunctionalRelationRule: {\"identity\": {\"id\": \"rule-2\", \"type\": \"FunctionalRelationRule\", \"name\": \"single-orbit\"}, \"structure\": {\"relation_type\": \"orbits\"}}. This flags when a single source has MORE THAN ONE target via 'orbits'. Example of a correct EmbeddingProjection with its 'represents' relation: {\"objects\": [{\"identity\": {\"id\": \"src-1\", \"type\": \"Document\", \"name\": \"Real paper\"}, \"structure\": {}}, {\"identity\": {\"id\": \"proj-1\", \"type\": \"EmbeddingProjection\", \"name\": \"projection\"}, \"structure\": {\"store_ref\": \"vecdb://xyz\"}}, {\"identity\": {\"id\": \"rel-1\", \"type\": \"Relation\", \"name\": \"r\"}, \"structure\": {\"participants\": [\"src-1\", \"proj-1\"], \"relation_type\": \"represents\"}}]}. Example of TypeDefinition and TypeRule for ontology validation: {\"objects\": [{\"identity\": {\"id\": \"td-1\", \"type\": \"TypeDefinition\", \"name\": \"Planet\"}, \"structure\": {\"type_name\": \"Planet\", \"parent_type\": \"CelestialBody\"}}, {\"identity\": {\"id\": \"tr-1\", \"type\": \"TypeRule\", \"name\": \"orbits rule\"}, \"structure\": {\"relation_type\": \"orbits\", \"allowed_source_types\": [\"Planet\", \"Moon\"], \"allowed_target_types\": [\"Star\", \"Planet\"]}}]}."
  2. 1 tool updatev1.18.1
    • Changedconstruct_knowledge1 field changed
      • changedInput schema / properties / model / description
        Previous value: -"Optional. Anthropic model to use. Defaults to the CKS_LLM_MODEL environment variable, or 'claude-sonnet-4-6'."New value: +"Optional. Model name for whichever provider is selected (e.g. an Ollama model tag, or an Anthropic model). Defaults to CKS_OLLAMA_MODEL/CKS_LLM_MODEL depending on provider."
  3. 24 tool updatesv1.16.2
    • First observedclose_session
    • First observedcompare_versions
    • First observedconstruct_knowledge
    • First observedcreate_branch
    • First observeddetect_contradictions
    • First observedevolve_knowledge
    • First observedexplain_diff
    • First observedexplain_knowledge
    • First observedexport_knowledge
    • First observedexport_session
    • First observedfork_sandbox
    • First observedget_metrics
    • First observedingest_document
    • First observedlist_versions
    • First observedmerge_branch
    • First observedmerge_knowledge
    • First observedquery_subgraph
    • First observedrevert_version
    • First observedsearch_semantic
    • First observedserialize_knowledge
    • First observedsuggest_evolution
    • First observedvalidate_knowledge
    • First observedverify_source
    • First observedvisualize_graph

TDQS

A3.6/5.0

Scored across 24 tools

Disambiguation4/5

Each tool targets a distinct operation (evolve, validate, serialize, merge, branch, etc.), and the descriptions are detailed enough to separate them. However, a few pairs like create_branch vs fork_sandbox and merge_knowledge vs merge_branch could still cause confusion if an agent only skims the names.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using lowercase and underscores (e.g., evolve_knowledge, merge_branch, query_subgraph). Even compound operations like detect_contradictions fit the pattern, making the naming highly predictable.

Tool Count3/5

With 24 tools, the server sits in the upper range of what feels heavy for an MCP server. The domain is complex enough to warrant many operations, but the count borders on excessive; a few tools could potentially be consolidated without losing capability.

Completeness4/5

The tool surface covers the full lifecycle of knowledge structures: creation (construct_knowledge), exploration (query_subgraph, search_semantic), modification (evolve_knowledge, merge_branch), validation, branching, versioning, and export. Minor gaps exist such as no explicit get_session or delete_session, but close_session and the session-aware operations largely fill these needs.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables Claude to search, query, and interact with an Enterprise Knowledge Management System (EKMS). Supports semantic search, knowledge recommendations, relationship graphs, and feedback recording for enterprise knowledge bases.
    7
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables LLMs to build and explore a cognitive neuroscience-inspired knowledge graph with SQLite, supporting search, graph traversal, temporal sequences, and structured reasoning.
    24
    MIT