Skip to main content
Glama

Mnemosyne MCP

THIS IS A WORK IN PROGRESS AND THE DOCUMENTATION IS AI-GENERATED AND WILL BE REWRITTEN BY HUMAN BEFORE PEOPLE ARE WIDELY ENCOURAGED TO READ IT AND USE THIS CODE. THANK YOU FOR YOUR ATTENTION TO THIS MATTER XOXO VERA

AI-powered knowledge graph integration for Claude Code, Goose & Codex

The Mnemosyne MCP (neem) historically exposed a full suite of graph management tools. We are currently rebuilding those tools from scratch against a new FastAPI backend that runs inside our local kubectl context.

Status: The MCP server provides 23+ tools for knowledge graph management, SPARQL queries, real-time document editing, and workspace organization via Hocuspocus/Y.js.

Features:

  • πŸ”Œ Reliable connectivity to a local FastAPI backend (via env vars or kubectl port-forward)

  • 🩺 Automatic startup health probe so you know whether the backend is reachable

  • πŸ” Browser-based OAuth authentication (neem init)

  • πŸ“Š Full graph CRUD operations (create, list, delete)

  • πŸ” SPARQL query and update support

  • πŸ“ Real-time document editing via Y.js CRDT

Related MCP server: LightRAG MCP Server

Installation

uv tool install -e . 

While developing locally with uv:

uv sync
uv run neem --help

Commands

neem init               # Authenticate (run browser-based OAuth)
neem status             # Show token status and Claude Code config
neem logout             # Remove saved token (optional: keep config)
neem config             # Inspect config details (with optional --show-token)

Quick Start

Step 1: Install and authenticate

# Install the package
uv tool install -e .

# Authenticate with Mnemosyne
neem init                     # Opens your browser to log in

neem init handles authentication onlyβ€”the next steps show how to connect each MCP client manually.

Before registering the MCP server, expose the FastAPI backend from your kubectl context:

kubectl port-forward svc/mnemosyne-api 8080:80

The MCP server defaults to http://127.0.0.1:8080 which matches this port-forward. Both HTTP and WebSocket connections go through port 8080.

Step 2: Add MCP server to your agent

Using Claude Code (local backend):

claude mcp add mnemosyne --scope user \
  -- uv run neem-mcp-server

Using Claude Code (hosted API):

When connecting to the hosted API (e.g. api.garden.sophia-labs.com) rather than a local port-forward, disable WebSocket streaming. The WS endpoint is internal to the cluster and not exposed externally β€” without this flag, job-based tools like list_graphs will hang for up to 60 seconds before falling back to HTTP polling.

claude mcp add mnemosyne --scope user \
  --env MNEMOSYNE_FASTAPI_URL=https://api.garden.sophia-labs.com \
  -- uv run neem-mcp-server

Or add directly to ~/.claude.json:

"mcpServers": {
  "mnemosyne": {
    "type": "stdio",
    "command": "uv",
    "args": ["run", "neem-mcp-server"],
    "env": {
      "MNEMOSYNE_FASTAPI_URL": "https://api.garden.sophia-labs.com",
    }
  }
}

Authenticate first with neem init. Tokens are stored at ~/.mnemosyne/config.json and auto-refresh for ~30 days.

Using Codex

codex mcp add mnemosyne \
  --env LOG_LEVEL=ERROR \
  -- uv run neem-mcp-server

Dev-mode shortcut: Append --env MNEMOSYNE_DEV_TOKEN=<user> and --env MNEMOSYNE_DEV_USER_ID=<user> when the backend runs with MNEMOSYNE_AUTH__MODE=dev_no_auth. Both HTTP and WebSocket will impersonate that user without OAuth.

Custom port? Add --env MNEMOSYNE_FASTAPI_URL=http://127.0.0.1:XXXX if your port-forward differs from the default 8080.

Dev Mode (skip OAuth)

If the backend runs with MNEMOSYNE_AUTH__MODE=dev_no_auth, set both env vars before launching the MCP server to bypass the OAuth flow entirely:

export MNEMOSYNE_DEV_USER_ID=alice
export MNEMOSYNE_DEV_TOKEN=alice  # many clusters treat the token string as the user id
uv run neem-mcp-server

Both HTTP requests and the WebSocket handshake will send X-User-ID: alice plus Sec-WebSocket-Protocol: Bearer.alice, satisfying the backend’s dev-mode guards. Unset these envs when targeting production.

Usage Examples

After registering the server, ask your MCP client to run list_graphs. It submits a job, streams realtime events over /ws, and falls back to HTTP polling when the backend does not advertise push hints.

FastAPI Backend Configuration

The MCP server now assumes it should talk to the FastAPI backend that runs in your local kubectl context.

  1. Point kubectl at the desired cluster (kubectl config use-context ...).

  2. Port-forward the FastAPI service so it is reachable on your workstation (example: kubectl port-forward svc/mnemosyne-fastapi 8001:8000).

  3. Start neem-mcp-server with one of the supported backend configuration options:

    • MNEMOSYNE_FASTAPI_URL (preferred) or the legacy MNEMOSYNE_API_URL.

    • MNEMOSYNE_FASTAPI_HOST, MNEMOSYNE_FASTAPI_PORT, and optional MNEMOSYNE_FASTAPI_SCHEME if you want to supply host/port separately (handy for kubectl port-forward scripts).

    • MNEMOSYNE_FASTAPI_HEALTH_PATH if the FastAPI app exposes a non-standard health endpoint (defaults to /health).

If none of these environment variables are set the server defaults to http://127.0.0.1:8001, which lines up with the sample port-forward above. On startup we issue a lightweight health probe so you immediately know whether the backend is reachable.

Token Management

Tokens are automatically refreshed in the background using OAuth refresh tokens. After initial authentication, you'll stay logged in for approximately 30 days without any manual intervention.

When the refresh token eventually expires, simply run neem init to re-authenticate.

Important: Set LOG_LEVEL=ERROR for Codex CLI to avoid any stderr interference with the stdio protocol.

Available MCP Tools

Graph Management

  • list_graphs – List all knowledge graphs owned by the authenticated user (use include_deleted=true to show soft-deleted graphs)

  • create_graph – Create a new knowledge graph with ID, title, and optional description

  • delete_graph – Delete a graph (soft delete by default, use hard=true to permanently delete)

SPARQL Operations

  • sparql_query – Execute read-only SPARQL SELECT/CONSTRUCT queries against your graphs

  • sparql_update – Execute SPARQL INSERT/DELETE/UPDATE operations to modify graph data

Namespace Reference: When writing SPARQL queries, use these exact prefixes:

PREFIX doc: <http://mnemosyne.dev/doc#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX nfo: <http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX nie: <http://www.semanticdesktop.org/ontologies/2007/01/19/nie#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

WARNING: Do NOT use urn:mnemosyne:schema:doc: as the doc namespace β€” it will match nothing.

Orientation

  • get_user_location – Get the graph and document the user is currently viewing (minimal tokens)

  • get_workspace – Get the folder/file structure of a graph (primary exploration tool)

  • get_session_state – Get full session state including tabs and preferences (large payload, rarely needed)

Folder Operations

  • create_folder – Create a new folder in the workspace

  • rename_folder – Rename a folder

  • move_folder – Move a folder to a different parent

  • delete_folder – Delete a folder (with optional cascade to delete contents)

Document Operations (via Hocuspocus/Y.js)

  • read_document – Read document content as TipTap XML

  • write_document – Replace document content with TipTap XML

  • append_to_document – Add a block to the end of a document

  • move_document – Move a document to a different folder

  • delete_document – Remove a document from workspace navigation

Block-Level Operations

  • get_block – Read a specific block by its ID (includes text_length and formatting runs)

  • query_blocks – Search for blocks matching specific criteria

  • update_block – Update a block's attributes or replace entire content

  • edit_block_text – Insert/delete text at character offsets within a block (CRDT-safe collaborative editing)

  • insert_block – Insert a new block relative to an existing block

  • delete_block – Delete a block (with optional cascade for children)

  • batch_update_blocks – Update multiple blocks in a single transaction

Artifact Operations

  • move_artifact – Move an artifact to a different folder

  • rename_artifact – Rename an artifact

Wire Operations (Semantic Connections)

  • list_wire_predicates – List available semantic predicates organized by category

  • create_wire – Create a semantic connection between documents or blocks (syncs via Y.js CRDT)

  • get_wires – Get all wires connected to a document (filter by direction: outgoing/incoming/both)

  • traverse_wires – BFS traversal of the wire graph from a starting document (up to depth 10)

TipTap XML Format

Documents use TipTap's XML representation with full formatting support:

Blocks: paragraph, heading (level="1-3"), bulletList, orderedList, blockquote, codeBlock (language="..."), taskList, taskItem (checked="true"), horizontalRule

Marks (nestable): strong, em, strike, code, mark (highlight), a (href="...")

Annotation Marks: Special inline marks that reference external content:

  • footnote – Self-contained annotation with data-footnote-content attribute

  • commentMark – Reference annotation with data-comment-id attribute

Example:

<paragraph>Text with <mark>highlight</mark> and a note<footnote data-footnote-content="This is a footnote"/></paragraph>

Graph management and SPARQL tools submit jobs to the FastAPI backend, streaming realtime updates via WebSocket when available and falling back to HTTP polling otherwise. Document, block, folder, and wire operations use Y.js CRDT via Hocuspocus for real-time sync.

SPARQL Data Model

Documents, folders, and artifacts are materialized to RDF by two backend pipelines:

  • Workspace materializer – Syncs metadata (titles, folder structure, order) from the workspace Y.Doc

  • Document materializer – Syncs content (blocks, paragraphs, text nodes) from document Y.Docs

Common RDF types: doc:TipTapDocument, doc:Folder, doc:Artifact, doc:XmlFragment, doc:Paragraph, doc:Heading, doc:TextNode

Common predicates: dcterms:title, nfo:fileName, nfo:belongsToContainer, doc:order, doc:section, doc:content, doc:childNode, doc:siblingOrder, doc:createdAt, doc:updatedAt

Entity URI pattern: urn:mnemosyne:user:{user_id}:graph:{graph_id}:{type}:{entity_id} Content fragments use # suffixes: ...doc:{id}#frag, ...doc:{id}#block-{block_id}, ...doc:{id}#node-{n}

Example query to list all documents with titles:

PREFIX doc: <http://mnemosyne.dev/doc#>
PREFIX dcterms: <http://purl.org/dc/terms/>

SELECT ?doc ?title WHERE {
  ?doc a doc:TipTapDocument .
  ?doc dcterms:title ?title .
} ORDER BY ?title

Configuration

  • Tokens are stored at ~/.mnemosyne/config.json (override with MNEMOSYNE_CONFIG_DIR).

Architecture

This package contains two main components:

1. CLI Tool (neem)

Located in neem.cli:

  • OAuth PKCE authentication flow (neem.utils.oauth)

  • Secure token storage (neem.utils.token_storage)

  • Claude Code configuration management (neem.utils.claude_config)

2. MCP Server (neem-mcp-server)

Located in neem.mcp.server:

  • Stdio transport – Communicates with Claude Code via stdin/stdout

  • Backend resolver – Determines the FastAPI base URL from env vars or kubectl service hosts

  • Health probe – Pings the FastAPI backend on startup so you know whether the port-forward/context is correct

  • Realtime job wiring – neem.mcp.jobs ships a websocket-friendly client that tools can use to subscribe to job progress once the backend emits hints

  • Structured logging – All logs go to stderr (stdio-safe) with optional file output

Key design principles for this reset:

  • Local-first loops – Assume developers are targeting a FastAPI pod through kubectl

  • Minimal surface area – Keep the server slim until the new tool contract is finalized

  • Explicit configuration – Prefer environment variables over hidden defaults so CLI harnesses can inject settings

Development

Local Development

# Install in development mode
uv sync
uv pip install -e .

# Run the CLI
uv run neem init

# Test the MCP server
uv run neem-mcp-server

Project Structure

src/neem/
β”œβ”€β”€ cli.py                          # CLI commands (init, status, logout, config)
β”œβ”€β”€ hocuspocus/                     # Y.js CRDT client layer
β”‚   β”œβ”€β”€ client.py                   # WebSocket client for Hocuspocus
β”‚   β”œβ”€β”€ document.py                 # Document Y.Doc operations
β”‚   β”œβ”€β”€ protocol.py                 # Y.js sync protocol handler
β”‚   └── workspace.py                # Workspace Y.Doc operations
β”œβ”€β”€ mcp/
β”‚   β”œβ”€β”€ server/
β”‚   β”‚   β”œβ”€β”€ standalone_server.py    # Backend resolver, health probe, tool registration
β”‚   β”‚   └── standalone_server_stdio.py  # Stdio transport wrapper
β”‚   β”œβ”€β”€ tools/
β”‚   β”‚   β”œβ”€β”€ basic.py                # list_graphs + job helpers
β”‚   β”‚   β”œβ”€β”€ graph_ops.py            # create/delete graph, SPARQL query/update
β”‚   β”‚   β”œβ”€β”€ hocuspocus.py           # Document, block, folder, artifact operations
β”‚   β”‚   └── wire_tools.py           # Semantic connection tools
β”‚   β”œβ”€β”€ jobs/                       # Job streaming (WebSocket + polling)
β”‚   β”œβ”€β”€ session.py                  # Session management
β”‚   β”œβ”€β”€ auth.py                     # MCP auth context
β”‚   β”œβ”€β”€ errors.py                   # MCP-specific errors
β”‚   └── response_objects.py         # Formatted MCP responses
└── utils/
    β”œβ”€β”€ oauth.py                    # OAuth PKCE flow
    β”œβ”€β”€ token_storage.py            # Token persistence
    β”œβ”€β”€ claude_config.py            # Claude Code config management
    β”œβ”€β”€ logging.py                  # Structured logging
    β”œβ”€β”€ deployment_context.py       # Environment configuration
    └── errors.py                   # Base error classes

Environment Variables

  • MNEMOSYNE_FASTAPI_URL – Preferred FastAPI base URL (defaults to http://127.0.0.1:8001). The legacy MNEMOSYNE_API_URL is still honored if set.

  • MNEMOSYNE_FASTAPI_HOST, MNEMOSYNE_FASTAPI_PORT, MNEMOSYNE_FASTAPI_SCHEME – Specify host/port separately (handy for scripted kubectl port-forwards).

  • MNEMOSYNE_FASTAPI_HEALTH_PATH – Alternate health-check path if your FastAPI app doesn't expose /health.

  • MNEMOSYNE_FASTAPI_WS_URL – Override the WebSocket gateway directly (defaults to ws(s)://<host>/ws derived from the HTTP base).

  • MNEMOSYNE_FASTAPI_WS_PATH – Custom path appended to the derived WebSocket URL when MNEMOSYNE_FASTAPI_WS_URL is unset.

  • MNEMOSYNE_FASTAPI_WS_PORT – Override just the WebSocket port while keeping the same host/path (useful when HTTP and WS are forwarded on different local ports).

  • MNEMOSYNE_FASTAPI_WS_DISABLE – Set to true to opt out of WebSocket streaming (falls back to HTTP polling).

  • MNEMOSYNE_CONFIG_DIR – Token storage location (default: ~/.mnemosyne)

  • MNEMOSYNE_DEV_TOKEN – Optional dev-only override that skips the OAuth flow by injecting the provided bearer token directly (use only on trusted local stacks).

  • CLAUDE_CODE_SETTINGS_PATH – Claude settings file (default: ~/.claude/settings.json)

  • LOG_LEVEL – Logging verbosity (default: INFO)

    • DEBUG – Verbose logging for troubleshooting

    • INFO – Normal operational logging (default)

    • WARNING – Quiet mode, only warnings and errors

    • ERROR – Silent mode, only errors (recommended for Codex CLI)

    • CRITICAL – Minimal logging, critical errors only

Sessions are stored in-memory by default; no external cache service is required.

Troubleshooting

MCP Server Not Loading

For Claude Code:

  1. Check configuration: cat ~/.claude.json | grep mnemosyne-graph

  2. Test server directly: echo '{"jsonrpc": "2.0", "method": "initialize", "id": 1}' | neem-mcp-server

  3. Check logs: Look for stderr output when Claude Code starts

  4. Verify token: neem status should show "Active" authentication

  5. Restart Claude Code: Configuration changes require a complete restart

For Goose CLI:

  1. Check configuration: cat ~/.config/goose/config.yaml | grep mnemosyne-graph

  2. Verify extension is enabled: enabled: true in the config

  3. Check timeout: Increase to 600 seconds if server is slow to start

  4. Test in session: Start a new Goose session and ask it to list available tools

  5. Check environment: Ensure MNEMOSYNE_FASTAPI_URL (or legacy MNEMOSYNE_API_URL) is set correctly

For Codex CLI:

  1. Enable debug logging: Codex intentionally silences stderr, making debugging difficult

  2. Set LOG_LEVEL: Use LOG_LEVEL=ERROR in the environment to prevent stderr interference

  3. Test manually: Run echo '{"jsonrpc":"2.0","method":"initialize","id":1}' | neem-mcp-server to verify it works

  4. Check configuration: Ensure codex.json or your config file has the correct command and environment variables

Authentication Issues

  1. Token not refreshing: Tokens auto-refresh in the background. If you see auth errors, your refresh token may have expired (~30 days). Run neem init to re-authenticate.

  2. Check token: neem status to see token details and expiry

  3. Force refresh: neem init --force to get completely fresh tokens

SPARQL Returns Empty Results

The most common cause is using the wrong namespace prefix. Use:

PREFIX doc: <http://mnemosyne.dev/doc#>

Do NOT use urn:mnemosyne:schema:doc: β€” it will silently match nothing.

See the docs/ directory for end-user quick start and detailed guides that can ship with the package or be published separately.

Available Tools

23 tools
append_to_documentAppend Block to DocumentA

Appends a block to the end of a document. Accepts TipTap XML for any block type. Use this for incremental additions without replacing existing content. For plain text, wrap in text. For structured content, provide full XML like Title or ....

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
document_idYes
textYes

TDQS

A4.1/5.0
Behavior3/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 behavioral traits: it's a mutation operation (implied by 'Appends'), it adds content without replacing existing content, and it accepts TipTap XML for various block types. However, it lacks details on permissions, error conditions, rate limits, or what happens if the document doesn't exist. The description does not contradict any annotations (since none exist).

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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by essential details about input format and usage context. Every sentence earns its place by providing necessary information without redundancy or fluff.

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 complexity (a mutation tool with 3 parameters, no annotations, and no output schema), the description is partially complete. It adequately covers the tool's purpose and input format but lacks information on prerequisites (e.g., required permissions), error handling, response format, or side effects. Without annotations or output schema, more behavioral context would be beneficial 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?

Schema description coverage is 0%, so the description must compensate. It explains that the 'text' parameter accepts 'TipTap XML for any block type' and provides examples (e.g., '<paragraph>text</paragraph>', '<heading level="2">Title</heading>'), adding crucial semantic meaning beyond the schema's generic 'Text' title. However, it does not clarify the semantics of 'graph_id' or 'document_id' parameters, leaving them undocumented.

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 specific action ('Appends a block to the end of a document') and resource ('document'), distinguishing it from siblings like 'insert_block' (which might insert at arbitrary positions) or 'write_document' (which might replace content). It explicitly mentions 'incremental additions without replacing existing content' to further differentiate.

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 this tool ('for incremental additions without replacing existing content') and gives examples of acceptable content types (plain text vs. structured XML). However, it does not explicitly state when NOT to use it or name specific alternatives among the sibling tools (e.g., 'insert_block' for non-append insertions, 'update_block' for modifications, or 'write_document' for full replacements).

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

batch_update_blocksBatch Update BlocksB

Update multiple blocks in a single transaction. More efficient than individual update_block calls. Each update can specify attributes to change and/or new XML content. Returns results for each update.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
document_idYes
updatesYes

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 full burden. It mentions transactional behavior ('single transaction') and efficiency, but lacks critical details: it doesn't specify permissions required, whether updates are atomic or partial, error handling for failed updates, or rate limits. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.

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

Conciseness5/5

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

The description is highly concise and well-structured: three sentences that efficiently cover purpose, efficiency benefit, parameter details, and return value. Every sentence adds value without redundancy, and key information is front-loaded.

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

Completeness2/5

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

Given the tool's complexity (batch mutation with 3 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't explain the return format ('results for each update' is vague), error scenarios, or provide enough parameter guidance. For a mutation tool with zero structured support, this leaves too many gaps for reliable agent use.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions 'attributes to change and/or new XML content' for updates, which adds some meaning to the 'updates' parameter. However, it doesn't explain 'graph_id' or 'document_id' parameters at all, leaving two of three parameters semantically unclear. The partial coverage is insufficient.

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's purpose: 'Update multiple blocks in a single transaction.' It specifies the resource (blocks) and verb (update), and distinguishes it from 'update_block' by highlighting batch efficiency. However, it doesn't explicitly differentiate from other sibling tools like 'write_document' or 'sparql_update' that might also modify content.

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 for usage: 'More efficient than individual update_block calls.' This explicitly positions it as an alternative to 'update_block' for bulk operations. It doesn't specify when NOT to use it or mention other alternatives like 'write_document', but the efficiency guidance is helpful.

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

create_folderCreate FolderB

Create a new folder in the workspace. Use parent_id to nest inside another folder (null for root level). The section parameter determines which sidebar section the folder appears in.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
folder_idYes
labelYes
parent_idNo
orderNo
sectionNodocuments

TDQS

B3/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the creation action and some organizational aspects (nesting, sidebar section), but doesn't address important behavioral traits like: what permissions are required, whether folder creation is reversible (can folders be deleted?), what happens if a folder with the same ID already exists, or what the response format looks like. For a mutation tool with zero annotation coverage, this represents significant 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 efficiently structured in two sentences that each add value. The first sentence states the core purpose, and the second sentence provides important usage context for two key parameters. There's no wasted language or redundancy, and the most critical information appears first.

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?

For a mutation tool with 6 parameters, 0% schema description coverage, no annotations, and no output schema, the description is insufficiently complete. It covers the basic creation action and two parameters but leaves critical gaps: no information about required permissions, error conditions, response format, or the purpose of most parameters. The agent would struggle to use this tool correctly without additional context.

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

Parameters2/5

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

With 0% schema description coverage for all 6 parameters, the description must compensate but only partially succeeds. It explains parent_id ('to nest inside another folder (null for root level)') and section ('determines which sidebar section the folder appears in'), covering 2 of 6 parameters. However, it doesn't explain the purpose of graph_id, folder_id, label, or order parameters, leaving most parameters without semantic context beyond their schema titles.

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 action ('Create a new folder') and the resource ('in the workspace'), making the purpose immediately understandable. It distinguishes from siblings like 'create_graph' by specifying folder creation rather than graph creation. However, it doesn't explicitly differentiate from 'move_folder' or 'rename_folder' which also involve folder operations.

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 provides some implicit usage guidance by explaining how to use parent_id for nesting and mentioning the section parameter for sidebar placement. However, it doesn't explicitly state when to use this tool versus alternatives like 'move_folder' for reorganizing existing folders or 'create_graph' for creating different resource types. No explicit when-not-to-use guidance is provided.

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

create_graphCreate Knowledge GraphB

Creates a new knowledge graph with the given ID, title, and optional description. The graph_id should be a URL-safe identifier (e.g., 'my-project', 'research-notes').

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
titleYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While it mentions the tool creates something (implying mutation), it doesn't address important behavioral aspects like permissions required, whether the operation is idempotent, what happens on duplicate graph_id, rate limits, or what the output contains. The description provides minimal behavioral context beyond the basic 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?

Two sentences with zero waste. The first sentence states the core purpose and parameters. The second provides crucial formatting guidance for graph_id. Every word earns its place, and the most important information (what it creates) comes first.

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 this is a mutation tool with no annotations but with an output schema (which handles return values), the description is moderately complete. It covers the parameters well but lacks behavioral context about permissions, idempotency, and error conditions. For a creation tool, more guidance on duplicate handling and success criteria would be beneficial.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well by explaining all 3 parameters: graph_id (URL-safe identifier with examples), title, and description (optional). It adds meaningful context about the graph_id format that isn't in the schema, though it doesn't elaborate on title constraints or description content guidelines.

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 verb 'creates' and resource 'knowledge graph' with specific attributes (ID, title, optional description). It distinguishes from siblings like 'delete_graph' or 'list_graphs' by focusing on creation, but doesn't explicitly contrast with similar tools like 'create_folder' beyond the resource type.

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 on when to use this tool versus alternatives is provided. The description doesn't mention prerequisites, when this operation is appropriate, or what happens if a graph with the same ID already exists. It simply states what the tool does without contextual usage information.

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

delete_blockDelete BlockA

Delete a block by its ID. Use cascade=true to also delete all subsequent blocks with higher indent (indent-based children). Returns the list of deleted block IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
document_idYes
block_idYes
cascadeNo

TDQS

A3.8/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. It discloses key behavioral traits: the destructive nature ('Delete'), the cascade effect for children blocks, and the return value ('Returns the list of deleted block IDs'). This covers the core behavior, though it doesn't mention permissions, error conditions, or rate limits, which would enhance transparency further.

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 front-loaded with the core purpose in the first sentence, followed by parameter guidance and return value in subsequent sentences. Each sentence earns its place by adding value: defining the action, explaining a key parameter, and stating the output. No wasted words, and it's appropriately sized for the tool's complexity.

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 annotations, 0% schema coverage, and no output schema, the description provides a basic but incomplete picture. It covers the destructive behavior and cascade effect, which is essential, but lacks details on permissions, error handling, or the structure of the returned list. For a mutation tool with multiple parameters, more context would be beneficial to ensure safe and correct usage.

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 description coverage is 0%, so the description must compensate. It adds meaning for the 'cascade' parameter by explaining its effect ('to also delete all subsequent blocks with higher indent'), which is crucial beyond the schema's basic type. However, it doesn't clarify the semantics of 'graph_id', 'document_id', or 'block_id', leaving those parameters undocumented in both schema and description.

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 action ('Delete a block by its ID') and resource ('block'), which is specific and unambiguous. It distinguishes from siblings like 'delete_folder' or 'delete_graph' by specifying the resource type. However, it doesn't explicitly differentiate from 'update_block' or 'batch_update_blocks' in terms of destructive intent beyond the verb 'Delete'.

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 provides implied usage guidance by mentioning the 'cascade' parameter effect ('to also delete all subsequent blocks with higher indent'), which suggests when to use this option. However, it lacks explicit when-to-use vs. alternatives (e.g., compared to 'delete_graph' or 'update_block' for partial modifications), and no prerequisites or exclusions are stated.

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

delete_folderDelete FolderA

Delete a folder from the workspace. Set cascade=true to delete all contents (subfolders, documents, artifacts). Without cascade, deletion fails if the folder has children.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
folder_idYes
cascadeNo

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by disclosing critical behavioral traits: it's a destructive operation (implied by 'Delete'), specifies failure conditions ('deletion fails if the folder has children'), and explains the cascade parameter's effect on subfolders/documents/artifacts. It doesn't mention permissions, rate limits, or reversibility, which keeps it from a perfect score.

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, front-loaded with the core purpose, followed by parameter-specific guidance. Every word earns its placeβ€”no fluff, no repetition, efficiently covering both the action and critical behavioral nuance.

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 destructive tool with 3 parameters, 0% schema coverage, and no output schema, the description is quite completeβ€”it explains the core operation, failure conditions, and key parameter. It doesn't cover return values or error formats, but given the straightforward nature of a delete operation, this is a minor gap.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining the 'cascade' parameter's semantics in detail (what happens when true/false). It doesn't explain 'graph_id' or 'folder_id', but given the tool's name and context, their purpose is reasonably inferable, and the cascade explanation adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Delete a folder from the workspace') and distinguishes it from siblings like 'delete_graph' or 'delete_block' by specifying the resource type. It uses precise language that leaves no ambiguity about what the tool does.

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 about when to use cascade=true vs. not (when folder has children), but doesn't explicitly mention when to use this tool versus alternatives like 'delete_graph' or 'move_folder'. It gives operational guidance but lacks sibling differentiation.

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

delete_graphDelete Knowledge GraphA

Permanently deletes a knowledge graph and all its contents. This action cannot be undone. Use with caution.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/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 and effectively discloses key behavioral traits: it's a destructive operation ('permanently deletes'), irreversible ('cannot be undone'), and has broad impact ('all its contents'). However, it omits details like permissions needed, rate limits, or error conditions, which would enhance transparency for a mutation tool.

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

Conciseness5/5

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

The description is front-loaded with the core action in the first sentence, followed by critical warnings, with no wasted words. Every sentence ('Permanently deletes...', 'This action cannot be undone.', 'Use with caution.') earns its place by adding essential context 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?

Given the tool's complexity (destructive mutation), lack of annotations, and 0% schema coverage, the description is incomplete. It covers the irreversible nature but misses parameter details, permissions, or output expectations. The presence of an output schema helps, but the description should do more to compensate for the sparse structured data.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate, but it adds no information about the 'graph_id' parameter beyond what the schema's title implies. The description does not explain what a graph_id is, its format, or how to obtain it, leaving the parameter's meaning unclear despite the low 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 specific action ('permanently deletes') and resource ('a knowledge graph and all its contents'), distinguishing it from siblings like delete_block or delete_folder which target different resources. It precisely communicates the tool's function without ambiguity.

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 with 'Use with caution' and implies usage for irreversible deletion, but does not explicitly state when to use this versus alternatives like delete_block or delete_folder, or any prerequisites. It offers general warning but lacks specific comparative guidance.

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

get_active_contextGet Active Graph and DocumentA

Returns the currently active graph ID and document ID from the user's session. Use this to understand what the user is currently working on in the Mnemosyne UI. The user_id is automatically derived from authentication if not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idNo

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses that user_id is 'automatically derived from authentication if not provided,' which is useful behavioral context about default behavior. However, it doesn't describe what happens if no active session exists, whether this is a read-only operation, or what the return format looks like.

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, front-loaded with core purpose, followed by usage guidance and parameter clarification. Every sentence earns its place with no wasted words 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?

For a simple read operation with 1 parameter and no output schema, the description covers purpose and usage well. However, without annotations or output schema, it should ideally mention that this is a read-only operation and hint at the return structure (e.g., returns IDs as strings). The current description is adequate but has gaps in behavioral disclosure.

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 description adds meaningful context about the single parameter: 'The user_id is automatically derived from authentication if not provided.' This explains the optional nature and default behavior beyond what the schema shows (just 'User Id' with null default). With 0% schema description coverage and only 1 parameter, this adequately compensates.

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 specific action ('Returns'), resources ('currently active graph ID and document ID'), and context ('from the user's session'). It distinguishes from siblings like 'get_block' or 'get_workspace' by focusing on session-specific active context rather than retrieving arbitrary resources.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool: 'Use this to understand what the user is currently working on in the Mnemosyne UI.' This provides clear context for application versus alternatives like 'list_graphs' for general listing or 'read_document' for document content.

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

get_blockGet Block by IDA

Read a specific block by its data-block-id. Returns detailed info including the block's XML content, attributes, text content, and context (prev/next block IDs). Use this for targeted reads without fetching the entire document.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
document_idYes
block_idYes

TDQS

A3.8/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. It discloses that the tool is a read operation (implied safe) and describes the return content (XML, attributes, text, context), which is helpful. However, it lacks details on permissions, error handling, rate limits, or whether it's idempotent, leaving behavioral gaps.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by return details and usage context in two efficient sentences. Every sentence adds value without redundancy, making it appropriately sized and well-structured.

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 annotations, no output schema, and 3 required parameters with 0% schema coverage, the description is incomplete. It covers the purpose and return content well but fails to explain parameter meanings or full behavioral traits, leaving gaps for a tool with multiple inputs.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only mentions 'data-block-id' (likely referring to block_id), but does not explain the purpose or relationships of graph_id and document_id parameters. This leaves two of three parameters semantically unclear.

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 ('Read') and resource ('a specific block by its data-block-id'), distinguishing it from siblings like query_blocks (which likely searches/filters) or read_document (which fetches entire documents). It specifies the targeted nature of the operation.

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 for when to use this tool ('for targeted reads without fetching the entire document'), implicitly contrasting with read_document. However, it does not explicitly state when not to use it or name alternatives, missing full explicit guidance.

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

get_workspaceGet Workspace StructureB

Returns the folder and file structure of a graph's workspace. Use this to understand the organization of documents in a graph.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes

TDQS

B3/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 burden. It states it 'Returns' data, implying a read-only operation, but does not disclose behavioral traits such as permissions required, rate limits, pagination, or response format. For a tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.

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 usage context. Every sentence adds value without redundancy, making it efficient and well-structured for quick comprehension.

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 1 parameter with 0% schema coverage, no annotations, and no output schema, the description is incomplete. It covers the basic purpose but lacks details on parameters, behavioral traits, or return values, which are essential for a tool that retrieves structural data in a graph-based system.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It mentions 'graph's workspace' but does not explain the 'graph_id' parameter beyond what the schema title ('Graph Id') provides. No details on format, sourcing, or constraints are added, failing to adequately clarify parameter meaning.

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 verb ('Returns') and resource ('folder and file structure of a graph's workspace'), specifying it provides organizational understanding. It distinguishes from siblings like 'list_graphs' (which lists graphs) or 'get_block' (which retrieves individual blocks), but could be more explicit about the distinction.

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

Usage Guidelines3/5

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

The description implies usage ('Use this to understand the organization of documents in a graph') for exploring workspace structure, but lacks explicit guidance on when to choose this over alternatives like 'list_graphs' for high-level overview or 'query_blocks' for detailed content. 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.

insert_blockInsert BlockA

Insert a new block relative to an existing block. Use position='after' or 'before' to specify where to insert. Returns the new block's generated ID. For appending to the end, use append_to_document instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
document_idYes
reference_block_idYes
xml_contentYes
positionNoafter

TDQS

A4.3/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. It discloses that the tool returns the new block's generated ID, which is useful behavioral information. However, it lacks details on permissions, error conditions, or mutation effects beyond the basic operation. The description doesn't contradict annotations (none exist).

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 front-loaded with the core purpose, followed by parameter guidance and alternative usage. Every sentence earns its place: the first states the action, the second explains parameter usage, and the third provides sibling differentiation. No wasted words.

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 tool's complexity (5 parameters, mutation operation) and lack of annotations/output schema, the description is moderately complete. It covers the basic operation and sibling differentiation but misses details on parameter meanings beyond 'position', error handling, and return format specifics. It's adequate but has clear gaps for a mutation 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?

Schema description coverage is 0%, so the description must compensate. It explains the 'position' parameter's semantics ('after' or 'before'), which adds meaning beyond the schema's basic type definition. However, it doesn't clarify the purpose of other parameters like 'graph_id', 'document_id', 'reference_block_id', or 'xml_content', leaving gaps in understanding.

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 specific action ('Insert a new block relative to an existing block') and distinguishes it from a sibling tool ('For appending to the end, use append_to_document instead'). It specifies both the verb (insert) and resource (block) with context about positioning.

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 guidance on when to use this tool vs. alternatives: it specifies to use 'append_to_document' for appending to the end, and implies usage for inserting relative to existing blocks. This clearly differentiates from sibling tools like 'append_to_document' and 'batch_update_blocks'.

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

list_graphsList Mnemosyne GraphsA

Lists all knowledge graphs owned by the authenticated user. Returns graph metadata including IDs, titles, and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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. It discloses that the tool returns metadata (IDs, titles, timestamps) and is scoped to the authenticated user's graphs, which is useful context. However, it omits behavioral details like pagination, rate limits, error handling, or whether the list is sorted/filtered beyond ownership.

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 zero waste: the first states the purpose and scope, the second specifies the return data. It is front-loaded with the core functionality and efficiently structured without redundant 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 tool's low complexity (0 parameters, simple list operation) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers ownership scope and metadata types, but could improve by addressing behavioral aspects like ordering or limitations, though the output schema mitigates this 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?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately adds no parameter details, focusing instead on the tool's purpose and output. This aligns with the baseline for zero parameters, though it doesn't explicitly state the lack of parameters.

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 ('Lists') and resource ('all knowledge graphs owned by the authenticated user'), specifying both scope and ownership. It distinguishes from siblings like 'create_graph' (creation) and 'delete_graph' (deletion) by focusing on retrieval of existing graphs.

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 retrieving graph metadata, but lacks explicit guidance on when to use this versus alternatives like 'query_blocks' or 'sparql_query' for more specific queries. No exclusions or prerequisites are mentioned, leaving usage context somewhat open-ended.

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

move_artifactMove ArtifactC

Move an artifact to a different folder. Set new_parent_id to null to move to root level.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
artifact_idYes
new_parent_idNo
new_orderNo

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but reveals minimal behavioral traits. It states the tool moves artifacts and allows null parent_id for root, but doesn't disclose permission requirements, whether the move is destructive/reversible, rate limits, or what happens to artifact relationships. For a mutation tool with zero annotation coverage, this is inadequate.

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 extremely concise with two sentences that directly address core functionality and a key parameter nuance. Every word earns its place with zero waste or redundancy.

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?

For a mutation tool with 4 parameters, 0% schema coverage, no annotations, and no output schema, the description is incomplete. It doesn't explain return values, error conditions, permission requirements, or how it differs from similar sibling tools like 'move_document' and 'move_folder'.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate but only adds meaning for 'new_parent_id' (null moves to root). It doesn't explain 'graph_id', 'artifact_id', or 'new_order' parameters. With 4 parameters total and only 1 partially clarified, this meets the baseline for minimal compensation.

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 verb ('Move') and resource ('an artifact'), specifying the action of relocating to a different folder. It distinguishes from siblings like 'move_document' and 'move_folder' by focusing on artifacts, but doesn't explicitly contrast with 'rename_artifact' or other artifact-related tools.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'move_document', 'move_folder', or 'rename_artifact'. It mentions moving to root level with null parent_id, but offers no context about prerequisites, error conditions, or sibling tool distinctions.

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

move_documentMove DocumentA

Move a document to a folder. Set new_parent_id to null to move to root level (unfiled). Note: This updates the document's folder assignment in workspace navigation.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
document_idYes
new_parent_idNo

TDQS

A3.7/5.0
Behavior2/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 mentions that the tool 'updates the document's folder assignment,' implying a mutation, but fails to disclose critical behavioral traits such as required permissions, whether the move is reversible, potential side effects (e.g., impact on linked content), or error conditions. This leaves significant gaps for an AI agent to understand the tool's behavior.

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 appropriately sized and front-loaded, with the core purpose stated first ('Move a document to a folder'), followed by a usage note and behavioral detail. Every sentence earns its place by adding value, and there is no redundant or verbose language.

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 complexity of a mutation tool with no annotations and no output schema, the description is incomplete. It covers the basic purpose and one parameter nuance but lacks details on permissions, error handling, return values, or side effects. While concise, it does not provide enough context for safe and effective use by an AI agent.

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

Parameters3/5

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

The schema description coverage is 0%, so the description must compensate. It adds meaning for 'new_parent_id' by explaining that setting it to null moves the document to root level, which clarifies the parameter's semantics beyond the schema. However, it does not provide context for 'graph_id' or 'document_id,' leaving two of the three parameters without additional explanation, resulting in a baseline score.

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 specific action ('Move a document to a folder') and resource ('document'), distinguishing it from siblings like move_folder or move_artifact. It also specifies the scope of the operation ('updates the document's folder assignment in workspace navigation'), making the purpose unambiguous.

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 this tool ('Move a document to a folder') and includes a specific usage note ('Set new_parent_id to null to move to root level (unfiled)'). However, it does not explicitly state when not to use it or mention alternatives like move_folder for different resource types, which prevents a perfect score.

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

move_folderMove FolderA

Move a folder to a new parent folder. Set new_parent_id to null to move to root level. Optionally update the order for positioning among siblings.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
folder_idYes
new_parent_idNo
new_orderNo

TDQS

A3.8/5.0
Behavior2/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 mentions the action ('Move') and optional ordering, but fails to address critical aspects like permissions required, whether the operation is reversible, error conditions, or what happens to child items. This is inadequate for a mutation tool.

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

Conciseness5/5

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

The description is efficiently structured in two sentences with zero waste. The first sentence states the core purpose, and the second provides essential usage details for parameters. Every element adds value.

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

Completeness2/5

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

Given the complexity of a mutation tool with no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It lacks information on permissions, side effects, error handling, and return values, which are critical for safe and effective use.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaningful context for 'new_parent_id' (null for root) and 'new_order' (positioning among siblings), clarifying their purposes beyond the schema's basic titles. However, it does not explain 'graph_id' or 'folder_id' parameters.

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 specific action ('Move a folder') and resource ('to a new parent folder'), distinguishing it from sibling tools like 'rename_folder' or 'delete_folder'. It precisely defines the tool's function with no ambiguity.

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 for usage ('Set new_parent_id to null to move to root level') but does not explicitly mention when to use this tool versus alternatives like 'move_document' or 'move_artifact'. It offers operational guidance but lacks sibling differentiation.

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

query_blocksQuery BlocksA

Search for blocks matching specific criteria. Filter by block type, indent level, list type, checked state, or text content. Returns a list of matching block summaries. Use this to find blocks without reading the entire document.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
document_idYes
block_typeNo
indentNo
indent_gteNo
indent_lteNo
list_typeNo
checkedNo
text_containsNo
limitNo

TDQS

A4.3/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 states the tool returns 'a list of matching block summaries,' which is helpful context about output format. However, it doesn't mention pagination behavior (though 'limit' parameter is in schema), error conditions, or performance characteristics. The description adds some value but lacks comprehensive behavioral details.

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 efficiently structured in two sentences: the first explains what the tool does and its filtering capabilities, the second states the return type and primary use case. Every word earns its place with no redundancy or unnecessary elaboration.

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 search tool with 10 parameters, 0% schema description coverage, and no output schema, the description provides adequate but incomplete context. It explains the core filtering logic and use case but doesn't cover all parameters or provide details about the 'block summaries' structure. Given the complexity, more comprehensive documentation would be beneficial.

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 description lists specific filter criteria ('block type, indent level, list type, checked state, or text content'), which maps to 5 of the 10 parameters. With 0% schema description coverage, this adds significant value beyond the bare schema. However, it doesn't explain the relationship between 'indent' vs 'indent_gte/lte' parameters or mention 'graph_id' and 'document_id' requirements.

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 specific action ('Search for blocks matching specific criteria') and resource ('blocks'), distinguishing it from siblings like 'get_block' (single block retrieval) or 'read_document' (full document reading). It explicitly mentions the purpose is to 'find blocks without reading the entire document,' which differentiates it from document-level operations.

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 guidance on when to use this tool ('to find blocks without reading the entire document') and implies when not to use it (for reading entire documents or retrieving single blocks). It distinguishes this search-focused tool from alternatives like 'get_block' (for single blocks) and 'read_document' (for full documents).

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

read_documentRead Document ContentB

Reads document content as TipTap XML with full formatting.

Blocks: paragraph, heading (level="1-3"), bulletList, orderedList, blockquote, codeBlock (language="..."), taskList (taskItem checked="true"), horizontalRule Marks (nestable): strong, em, strike, code, mark (highlight), a (href="..."), footnote (data-footnote-content="..."), commentMark (data-comment-id="...") Lists: item

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
document_idYes

TDQS

B3.1/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 effectively describes the output format (TipTap XML) and supported elements (blocks, marks, lists), which helps the agent understand what to expect. However, it lacks details on permissions, rate limits, error handling, or whether the operation is idempotent, leaving gaps for a mutation-free read 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 appropriately sized and front-loaded, starting with the core purpose. The detailed formatting examples are useful but could be more structured; however, every sentence adds value by clarifying output semantics, avoiding waste.

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 tool's complexity (read operation with specific output format), no annotations, no output schema, and low schema coverage, the description is partially complete. It excels in explaining the return format but fails to cover parameters or broader behavioral context, making it adequate but with clear gaps.

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 adds no meaning beyond the input schema, which has 0% description coverage. Parameters 'graph_id' and 'document_id' are undocumented in both schema and description, leaving their purpose, format, and sourcing unclear. For a tool with two required parameters, this is a significant deficiency.

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 specific action ('Reads document content') and resource ('document'), distinguishing it from siblings like 'write_document', 'append_to_document', or 'get_block' by specifying the output format as TipTap XML with full formatting. It goes beyond a simple read operation by detailing what content is retrieved.

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 like 'get_block' or 'query_blocks'. The description focuses on output format but does not mention prerequisites, context, or exclusions, leaving the agent to infer usage based on sibling tool names alone.

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

rename_artifactRename ArtifactC

Rename an artifact's display label.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
artifact_idYes
new_labelYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool performs a rename operation but doesn't specify whether this requires specific permissions, if the change is reversible, what happens to references to the artifact, or what the response looks like. This leaves significant gaps for a mutation tool.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose with zero wasted words. It's appropriately sized for a simple rename operation.

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?

For a mutation tool with 3 parameters, 0% schema coverage, no annotations, and no output schema, the description is inadequate. It doesn't explain parameter meanings, behavioral implications, or what to expect after invocation, leaving the agent with insufficient context.

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

Parameters2/5

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

Schema description coverage is 0%, so the schema provides only parameter names without meaning. The description mentions 'artifact's display label' which hints at 'new_label' but doesn't explain 'graph_id' or 'artifact_id' parameters. It adds minimal value beyond what's inferable from the tool name.

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

Purpose4/5

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

The description clearly states the verb ('rename') and resource ('artifact's display label'), making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'rename_folder', which performs a similar operation on a different resource type.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'move_artifact' or 'update_block', nor does it mention prerequisites or constraints. The agent must infer usage from the tool name alone.

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

rename_folderRename FolderC

Rename a folder's display label.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
folder_idYes
new_labelYes

TDQS

C2.8/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. 'Rename' implies a mutation operation, but the description doesn't state whether this requires specific permissions, whether the change is reversible, what happens to references to the old label, or if there are rate limits. For a mutation tool with zero annotation coverage, this is a significant gap in 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?

The description is a single, efficient sentence that front-loads the core action. Every word earns its place with no redundancy or fluff. It's appropriately sized for a straightforward operation like renaming.

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

Completeness2/5

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

Given the tool's complexity (a mutation with 3 parameters), lack of annotations, 0% schema description coverage, and no output schema, the description is incomplete. It doesn't explain parameter meanings, behavioral implications, error conditions, or what the tool returns. The agent lacks sufficient context to use this tool effectively without guessing.

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

Parameters2/5

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

Schema description coverage is 0%, meaning none of the three parameters (graph_id, folder_id, new_label) are documented in the schema. The description only mentions 'a folder's display label', which loosely relates to 'new_label' but doesn't explain what graph_id or folder_id are, their formats, or how to obtain them. The description adds minimal 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 action ('Rename') and the resource ('a folder's display label'), making the purpose immediately understandable. It distinguishes from siblings like 'create_folder' or 'delete_folder' by focusing on modification rather than creation or deletion. However, it doesn't explicitly differentiate from 'rename_artifact' which might be a similar operation on a different resource type.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing folder), when not to use it, or how it differs from similar tools like 'rename_artifact' or 'move_folder'. The agent must infer usage from the tool name alone.

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

sparql_queryRun SPARQL QueryA

Executes a read-only SPARQL SELECT or CONSTRUCT query against the user's graphs. Returns query results as JSON. Use this for searching and retrieving data from graphs.

ParametersJSON Schema
NameRequiredDescriptionDefault
sparqlYes
result_formatNojson

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/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 successfully communicates that this is a read-only operation (important safety context) and specifies the query types supported (SELECT/CONSTRUCT). However, it doesn't mention potential limitations like query timeout, result size limits, authentication requirements, or error handling. The description adds useful context but leaves significant behavioral aspects unspecified.

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 perfectly concise with three tightly focused sentences: the first states the core functionality, the second specifies the return format, and the third provides usage guidance. Every sentence earns its place with no wasted words, and the most important information (read-only query execution) is front-loaded.

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 (SPARQL queries can be complex), no annotations, and an output schema that presumably documents the return structure, the description covers the essential aspects: purpose, read-only nature, supported query types, and basic usage. However, the complete lack of parameter documentation (0% schema coverage with no compensation in the description) prevents a perfect score, as users need to understand what constitutes valid SPARQL syntax.

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

Parameters2/5

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

With 0% schema description coverage for both parameters, the description provides no additional semantic information about the 'sparql' parameter (what constitutes a valid SPARQL query) or 'result_format' parameter (what formats are supported beyond the default 'json'). The description mentions JSON output but doesn't clarify if this relates to the result_format parameter or is fixed behavior. The description fails to compensate for the complete lack of schema documentation.

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 specific action ('Executes'), resource ('SPARQL SELECT or CONSTRUCT query against the user's graphs'), and distinguishes it from sibling tools by specifying it's for read-only queries (unlike sparql_update which presumably handles updates). It explicitly mentions the return format ('Returns query results as JSON') and primary use case ('searching and retrieving data from graphs').

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 guidance on when to use this tool ('for searching and retrieving data from graphs') and implicitly when not to use it (since it's 'read-only' and only handles SELECT/CONSTRUCT queries, suggesting sparql_update should be used for modifications). It clearly differentiates from the sparql_update sibling tool without needing to name it directly.

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

sparql_updateRun SPARQL UpdateA

Executes a SPARQL INSERT, DELETE, or UPDATE operation to modify graph data. Use this for adding, modifying, or removing triples from graphs.

ParametersJSON Schema
NameRequiredDescriptionDefault
sparqlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/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. While it states this is for modification operations, it doesn't disclose important behavioral traits like whether this requires specific permissions, whether changes are reversible, what happens on failure, or any rate limits. For a mutation tool with zero annotation coverage, this is a significant gap in behavioral transparency.

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 extremely concise with just two sentences that each earn their place. The first sentence states the core functionality, and the second provides usage guidance. There's zero waste or redundancy in the text.

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 this is a mutation tool with no annotations, 0% schema description coverage, but with an output schema present, the description is moderately complete. It covers the purpose and basic usage but lacks important behavioral context about permissions, side effects, and error handling that would be crucial for safe tool 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 description doesn't provide any parameter-specific information beyond what's implied by the tool's purpose. With 0% schema description coverage and only one parameter, the baseline would be 4 for zero parameters, but since there is one parameter with no description in either schema or tool description, this drops to 3. The description doesn't explain what format the SPARQL query should take or provide examples.

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 specific verb ('executes') and resource ('SPARQL INSERT, DELETE, or UPDATE operation'), and distinguishes it from sibling tools by specifying it's for modifying graph data rather than querying (sparql_query) or other operations like creating/deleting graphs. It explicitly mentions the types of operations supported (INSERT, DELETE, UPDATE).

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 guidance on when to use this tool ('for adding, modifying, or removing triples from graphs') and implicitly distinguishes it from sparql_query (which would be for querying rather than modifying). It clearly indicates this is for data modification operations rather than read operations.

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

update_blockUpdate BlockA

Update a block by its ID. Can update attributes (indent, checked, listType) without changing content, or replace the entire block content. This is the most surgical edit - only modifies what you specify.

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
document_idYes
block_idYes
attributesNo
xml_contentNo

TDQS

A3.8/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. It discloses that this is a mutation operation ('Update', 'edit') and describes the scope of changes ('without changing content' or 'replace the entire block content'), but doesn't mention permissions needed, whether changes are reversible, error conditions, or response format. It adds some behavioral context but leaves significant 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 perfectly front-loaded and concise with three sentences that each earn their place: first states the core action, second explains the two update modes, third emphasizes the surgical nature. Zero wasted words.

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 a mutation tool with 5 parameters, 0% schema coverage, no annotations, and no output schema, the description is incomplete. It covers purpose and some parameter semantics but lacks behavioral details (permissions, reversibility), full parameter explanations, and output information. It's adequate as a minimum viable description but has clear gaps for this complexity level.

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

Parameters2/5

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

With 0% schema description coverage for 5 parameters, the description must compensate but only partially does so. It mentions 'attributes (indent, checked, listType)' and 'xml_content' for content replacement, explaining their purpose, but doesn't address graph_id, document_id, or block_id parameters. The description adds meaning for 2 of 5 parameters, insufficient compensation for the coverage gap.

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

Purpose5/5

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

The description clearly states the verb ('Update') and resource ('a block by its ID'), and distinguishes it from siblings by specifying it's 'the most surgical edit' that 'only modifies what you specify', contrasting with batch operations like batch_update_blocks or broader document edits like write_document.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('only modifies what you specify' for 'surgical edit'), but doesn't explicitly state when not to use it or name specific alternatives. It implies this is for targeted updates versus batch operations, but lacks explicit exclusions.

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

write_documentWrite Document ContentA

Replaces document content with TipTap XML. Syncs to UI in real-time.

WARNING: This REPLACES all content. For collaborative editing, prefer append_to_document.

Blocks: paragraph, heading (level="1-3"), bulletList, orderedList, blockquote, codeBlock (language="..."), taskList (taskItem checked="true"), horizontalRule Marks (nestable): strong, em, strike, code, mark (highlight), a (href="..."), footnote (data-footnote-content="..."), commentMark (data-comment-id="...") Example: Text with highlight and a note

Comments: Pass a dict mapping comment IDs to metadata. Comment IDs must match data-comment-id attributes in the content. Example comments: {"comment-1": {"text": "Great point!", "author": "Claude"}}

ParametersJSON Schema
NameRequiredDescriptionDefault
graph_idYes
document_idYes
contentYes
commentsNo

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 full burden and does well by disclosing critical behavioral traits: it replaces all content (destructive), syncs to UI in real-time, and warns about the replacement nature. It also hints at collaboration considerations but doesn't cover permissions, rate limits, or error handling in depth.

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 appropriately sized and front-loaded with key information (replacement action and warning). Every sentence adds value, such as usage guidelines, XML details, and examples, though the structure could be slightly tighter by integrating examples more seamlessly.

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 complexity (destructive write operation with XML content and comments), no annotations, and no output schema, the description is largely complete: it covers purpose, usage, parameters, and behavioral aspects. However, it lacks details on error cases, response format, or authentication needs, leaving minor gaps.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate fully. It adds substantial meaning beyond the schema: 'content' is TipTap XML with detailed block and mark examples, 'comments' is a dict mapping IDs to metadata with examples, and it implies 'graph_id' and 'document_id' identify the target. This effectively documents all parameters.

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 specific action ('Replaces document content with TipTap XML') and resource ('document'), distinguishing it from sibling tools like 'append_to_document' by emphasizing replacement versus appending. It also mentions real-time UI syncing, adding operational context.

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 guidance is provided: use this tool to replace all content, and for collaborative editing, prefer 'append_to_document' instead. This directly addresses when to use this tool versus alternatives, with clear exclusions for specific scenarios.

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. 27 tool updatesv1.0.0
    • Addedappend_to_document
    • Addedbatch_update_blocks
    • Addedcreate_folder
    • Changedcreate_graph10 fields changed
      • addedInput schema / properties / description / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / description / default
        Previous value: -""New value: +null
      • removedInput schema / properties / description / type
        Removed value: -"string"
      • removedInput schema / properties / is_persistent
        Removed value: -{
        -  "default": true,
        -  "title": "Is Persistent",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / max_triples
        Removed value: -{
        -  "default": 0,
        -  "title": "Max Triples",
        -  "type": "integer"
        -}
      • removedInput schema / properties / name
        Removed value: -{
        -  "title": "Name",
        -  "type": "string"
        -}
      • addedInput schema / properties / title
        Added value: +{
        +  "title": "Title",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "graph_id",
        -  "name"
        -]New value: +[
        +  "graph_id",
        +  "title"
        +]
      • addedInput schema / title
        Added value: +"create_graph_toolArguments"
      • changedOutput schema / title
        Previous value: -"create_graphOutput"New value: +"create_graph_toolOutput"
    • Removedcreate_session
    • Addeddelete_block
    • Addeddelete_folder
    • Changeddelete_graph4 fields changed
      • removedInput schema / properties / backup
        Removed value: -{
        -  "default": true,
        -  "title": "Backup",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "default": false,
        -  "title": "Confirm",
        -  "type": "boolean"
        -}
      • addedInput schema / title
        Added value: +"delete_graph_toolArguments"
      • changedOutput schema / title
        Previous value: -"delete_graphOutput"New value: +"delete_graph_toolOutput"
    • Addedget_active_context
    • Addedget_block
    • Removedget_graph_info
    • Removedget_graph_schema
    • Addedget_workspace
    • Addedinsert_block
    • Changedlist_graphs4 fields changed
      • removedInput schema / properties / include_metadata
        Removed value: -{
        -  "default": true,
        -  "title": "Include Metadata",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / include_stats
        Removed value: -{
        -  "default": true,
        -  "title": "Include Stats",
        -  "type": "boolean"
        -}
      • addedInput schema / title
        Added value: +"list_graphs_toolArguments"
      • changedOutput schema / title
        Previous value: -"list_graphsOutput"New value: +"list_graphs_toolOutput"
    • Addedmove_artifact
    • Addedmove_document
    • Addedmove_folder
    • Addedquery_blocks
    • Addedread_document
    • Addedrename_artifact
    • Addedrename_folder
    • Changedsparql_query7 fields changed
      • removedInput schema / properties / graph_id
        Removed value: -{
        -  "title": "Graph Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / query
        Removed value: -{
        -  "title": "Query",
        -  "type": "string"
        -}
      • addedInput schema / properties / sparql
        Added value: +{
        +  "title": "Sparql",
        +  "type": "string"
        +}
      • removedInput schema / properties / timeout_seconds
        Removed value: -{
        -  "default": 30,
        -  "title": "Timeout Seconds",
        -  "type": "integer"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "graph_id",
        -  "query"
        -]New value: +[
        +  "sparql"
        +]
      • addedInput schema / title
        Added value: +"sparql_query_toolArguments"
      • changedOutput schema / title
        Previous value: -"sparql_queryOutput"New value: +"sparql_query_toolOutput"
    • Addedsparql_update
    • Addedupdate_block
    • Removedupload_file_to_graph
    • Addedwrite_document
  2. 8 tool updates
    • First observedcreate_graph
    • First observedcreate_session
    • First observeddelete_graph
    • First observedget_graph_info
    • First observedget_graph_schema
    • First observedlist_graphs
    • First observedsparql_query
    • First observedupload_file_to_graph

TDQS

A3.7/5.0

Scored across 23 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no significant overlap. For example, append_to_document is for adding content without replacement, while write_document replaces entire documents; get_block retrieves a single block, query_blocks searches across blocks, and read_document fetches full documents. The separation between document operations, block operations, folder management, and graph queries is well-defined.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern throughout, such as create_folder, delete_block, get_workspace, and move_document. All tools use snake_case without deviation, and verbs like create, delete, get, list, move, rename, query, and update are applied predictably across different resource types (e.g., graph, folder, block, document).

Tool Count4/5

With 23 tools, the count is slightly high but reasonable for the server's broad scope covering document editing, block management, folder organization, and graph operations. Each tool appears purposeful, such as batch_update_blocks for efficiency or sparql_query for specialized queries, though some consolidation might be possible (e.g., move_artifact, move_document, and move_folder could be unified).

Completeness5/5

The toolset provides comprehensive coverage for the Mnemosyne domain, including full CRUD for documents, blocks, folders, and graphs, plus advanced operations like SPARQL queries, workspace navigation, and context retrieval. There are no obvious gaps; tools support creation, reading, updating, deletion, moving, renaming, querying, and batch operations, enabling agents to handle all typical workflows without dead ends.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Enables AI assistants to interact with LightRAG knowledge graphs, supporting smart upsert for Obsidian vaults, semantic queries, and document/graph management.
    18
    8
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI clients to interact with a LightRAG knowledge graph server via MCP, providing 30 tools for queries, document management, and graph operations.
    35 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to query and analyze code across multiple repositories through a unified knowledge graph, with tools for symbol search, impact analysis, and graph algorithms.
    38 npm
    MIT