Skip to main content
Glama

MarkScribe

npm version License: MIT Node.js

A convention-aware markdown MCP server for AI assistants. Point it at a directory of markdown files and it gives the AI read, write, search, wikilink, and validation tools, enforcing your conventions through user-defined YAML schemas rather than hard-coded vault assumptions.

Works with Obsidian vaults, Foam workspaces, Logseq graphs, digital gardens, documentation repos, or any plain markdown directory. Nothing about the format is assumed. If your directory has its own rules — required frontmatter, hub notes, filename patterns, link constraints — you express them as schemas and MarkScribe enforces them.

The distinction matters: conventions are enforced, not assumed. A schema-less directory still gets the full read/write/search/link toolkit; a schema-driven directory additionally gets structural validation, convention-aware note creation, and lint feedback on every file.

What It Does

Read, write, search. 24 tools for AI assistants to operate on markdown: atomic read/write/move/delete, batch reads, frontmatter-aware patching, and full-text BM25 search across body and frontmatter.

Wikilink graph. Backlinks, broken link detection, orphan finding, and plain-text mention discovery. The graph rebuilds on every call, so there is no stale index or cache to invalidate.

Schema validation. User-defined YAML note and folder schemas. Note schemas validate frontmatter fields and content rules; folder schemas classify directories, assign note schemas by role, and enforce structural constraints. _conventions.md files scope schemas to subtrees so the same directory can host multiple conventions.

Path security. .obsidian/, .git/, node_modules/, .DS_Store, and Thumbs.db are always blocked. User config can extend the blocklist, never shrink it. Atomic writes everywhere, so a crashed process never leaves a torn file.

Lite mode. --lite trims the tool surface from 24 to 12, keeping schema validation, the wikilink graph, and directory meta. Note CRUD, frontmatter editing, and search drop out, since harnesses like Claude Code already ship native file tools for those.

Related MCP server: LifeOS MCP Server

Quick Start

Prerequisites

  • Node.js v18+

  • A directory of markdown files

Install

npm install -g markscribe

Or run directly via npx, no install step. The MCP config below shows both.

Configure Your MCP Client

Add the following to your MCP client config. Works with Claude Code, Claude Desktop, Cursor, or any MCP-compatible client.

Zero-install via npx (recommended):

{
  "mcpServers": {
    "markscribe": {
      "command": "npx",
      "args": ["-y", "markscribe", "--root", "/path/to/your/notes"]
    }
  }
}

Or install globally:

{
  "mcpServers": {
    "markscribe": {
      "command": "markscribe",
      "args": ["--root", "/path/to/your/notes"]
    }
  }
}

--root is the directory MarkScribe will serve. To load your own schemas, add "--schemas-dir", "/path/to/schemas". Otherwise ~/.markscribe/schemas/ is used.

Verify

Ask your AI assistant to call get_stats. If it returns a note count and recent files, you're connected.

CLI flags

Flag

Default

Description

--root <path>

Current working directory

Root directory to serve

--schemas-dir <path>

~/.markscribe/schemas/

Directory to load schema YAML files from

--log-level <level>

info

Log level (debug, info, warn, error, fatal)

--lite

off

Trim the tool surface to lint, validation, and link-graph only

Lite mode

If your AI client already has native file read/write/search (like the Claude Code harness does), the note CRUD, frontmatter, and discovery tools are duplicative. --lite exposes only what MarkScribe uniquely provides — convention enforcement and wikilink analysis — and leaves file manipulation to the harness.

markscribe --lite --root /path/to/your/notes

Kept (12): lint_note, validate_folder, validate_area, validate_all, list_schemas, get_backlinks, find_broken_links, find_orphans, find_unlinked_mentions, find_bidirectional_mentions, get_stats, switch_directory.

Cut (12): read_note, write_note, patch_note, delete_note, move_note, read_multiple_notes, create_note, get_frontmatter, update_frontmatter, manage_tags, search_notes, list_directory.

The flag is a startup decision — restart the server to toggle it. Default behavior is unchanged for clients that don't pass --lite.

Per-directory config

Place a .markscribe/config.yaml in your root directory:

paths:
  blocked:
    - private/
    - drafts/
  allowed_extensions:
    - .md
    - .markdown
    - .txt
search:
  max_results: 50
  excerpt_chars: 40

The built-in security blocklist (.obsidian/, .git/, node_modules/, .DS_Store, Thumbs.db) is always enforced on top of user config.

Schemas (the short version)

Schemas are YAML files defining conventions for notes and folders. Note schemas validate frontmatter and content; folder schemas classify directories and assign note schemas by role.

Note schema. Validates frontmatter fields and content rules:

name: blog-post
description: Blog post with required metadata
type: note
frontmatter:
  fields:
    title: { type: string, required: true }
    tags: { type: list, required: true }
content:
  rules:
    - name: has-outgoing-link
      check: hasPattern
      pattern: "\\[\\[.+?\\]\\]"

Folder schema. Enforces structural rules on directories:

name: project-folder
description: Project folder with hub note
type: folder
noteSchemas:
  default: blog-post
  hub: project-hub
classification:
  supplemental: [assets, templates]
  skip: [archive]
hub:
  detection:
    - pattern: "_{{folderName}}"
  required: true

Notes opt into a schema via note_schema: <name> in frontmatter, or inherit one from a _conventions.md file higher in the tree. The convention cascade resolves schema on a per-note basis.

Full schema reference, all field types, all check types, and the cascade resolution order: docs/schemas.md.

Tools

Tool

Description

list_directory

List files and subdirectories

get_stats

Note count, total size, recent files

switch_directory

Change the active root directory

read_note

Read a note with parsed frontmatter

write_note

Create or update a note

patch_note

String replacement within a note

delete_note

Delete a note (with confirmation)

move_note

Move/rename with optional link updates

read_multiple_notes

Batch read up to 10 notes

create_note

Convention-aware note creation

get_frontmatter

Read YAML frontmatter only

update_frontmatter

Merge or replace frontmatter fields

manage_tags

Add, remove, or list tags

search_notes

Full-text BM25 search

lint_note

Validate a note against its schema

validate_folder

Classify and validate a folder

validate_area

Recursive subtree validation

validate_all

Full directory tree validation

list_schemas

List all loaded schemas

get_backlinks

Find notes linking to a note

find_broken_links

Find wikilinks to non-existent notes

find_orphans

Find notes with no incoming links

find_unlinked_mentions

Find plain-text mentions that should be wikilinks

find_bidirectional_mentions

Two-direction mention sweep for batch new-note workflows

Compatible viewers

MarkScribe works with any tool that reads markdown files:

  • Obsidian: PKM app with graph view and community plugins

  • Foam: VS Code extension for linked notes

  • Logseq: outliner with bidirectional links

  • Any text editor or static site generator

Architecture

MarkScribe is stateless at runtime. There are no persistent indexes, caches, or file watchers; search and the link graph rebuild on every call, so results are always correct and never stale. Services (file, frontmatter, search, schema engine, link graph) are constructed via buildServices() and injected through a mutable ServiceContainer, which lets switch_directory rebuild the full service stack at runtime without re-registering tools. All file writes go through atomicWrite (write-to-temp-then-rename) so a crashed process never leaves a torn file. Convention knowledge is schema-driven: the server hard-codes no directory assumptions, only the inviolable path-security defaults.

Development

# Build
npm run build

# Test (vitest)
npm test
npm run test:watch
npm run test:coverage

# Lint and format
npm run lint
npm run lint:fix
npm run format
npm run format:check

# Type check
npx tsc --noEmit

Stdio transport: stdout is reserved for JSON-RPC, all human/debug output goes to stderr. Run tests after changes to services (src/services/) or the schema engine.

Acknowledgements

Built with Claude Code.

License

MIT

Available Tools

24 tools
create_noteA

Creates a new note with convention-aware defaults. Pass { path, content } and optionally frontmatter (overrides), noteSchema (explicit schema name). Resolves the applicable schema, applies its frontmatter template, merges overrides, writes the note, and lints it. Returns { root, path, frontmatter, lintResult }. Fails if the note already exists.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses the creation process, failure on duplicate, and return type. However, it omits details like required permissions or side effects of schema resolution.

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: first covers purpose and required parameters, second outlines process and return. Front-loaded and every sentence adds value with no unnecessary detail.

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 moderate complexity, the description covers key behaviors (creation, schema resolution, linting) and return shape. However, it could elaborate on 'convention-aware defaults' and schema resolution logic for a more complete picture.

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 100% schema description coverage, the baseline is 3. The description adds meaning by explaining the role of each parameter (e.g., content defaults to '', frontmatter serves as overrides, noteSchema as explicit schema 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 'Creates a new note with convention-aware defaults,' specifying the verb and resource. It distinguishes from siblings like write_note by emphasizing default handling and linting, but does not explicitly name alternatives.

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 creating notes with schema-based defaults but lacks explicit guidance on when to use this tool versus others like write_note or patch_note.

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

delete_noteA

Deletes a note. Pass { path, confirmPath } where both must match exactly. Returns { root, path, success }. This is irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description fully covers behavior: deletion, irreversibility, return structure, and the confirmation requirement. It does not mention potential side effects, permissions, or error handling, but covers the core behavioral traits.

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

Conciseness5/5

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

Three sentences with no wasted words. The first sentence immediately states the primary action, followed by usage constraint and return/irreversibility note. Efficient and well-structured.

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

Completeness4/5

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

Given the tool's simplicity, the description covers input, constraints, return, and irreversibility. It lacks details on error conditions or permissions, but for a delete operation with confirmation, it is nearly complete.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning by stating that both paths must match exactly (confirmation) and describing the return object, going beyond the schema's field definitions.

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 'Deletes a note,' specifying the verb and resource. It adds important constraints (matching confirmPath, irreversible) but does not explicitly differentiate from sibling tools like patch_note or move_note, though the action is unique.

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 implies use for deletion but provides no guidance on when not to use or alternatives. It includes a usage instruction (pass matching path and confirmPath) but lacks context for choosing this over other note operations.

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

find_bidirectional_mentionsA

Two-direction mention sweep for batch new-note operations. Pass { newNotes, terms?, scope? }. Returns { root, scope, existing_to_new[], new_to_existing[] }. existing_to_new lists plain-text mentions of new-note titles found inside existing notes. new_to_existing lists plain-text mentions of free terms found inside the new notes. If a free term equals a new-note stem, the title classification wins.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: it accepts new notes, optional terms and scope, and returns structured output with two arrays. It also explains the tie-breaking rule when a term matches a new-note stem. This covers the key behavioral aspects.

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

Conciseness5/5

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

The description is four sentences, front-loaded with purpose followed by parameter signature and output explanation. Every sentence adds essential information without redundancy.

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

Completeness4/5

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

The description covers the core functionality and output structure, but lacks detail on case sensitivity, matching rules (exact vs fuzzy), and the scope parameter's effect. An example would enhance completeness.

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?

The description adds meaning beyond the schema: it clarifies that newNotes are note titles, terms are free-form search strings, and scope is optional. The schema only defines types and constraints, while the description explains their role in the bidirectional scan.

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

Purpose5/5

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

The description clearly states the tool performs a 'two-direction mention sweep for batch new-note operations,' specifying it handles both existing-to-new and new-to-existing mentions. It distinguishes itself from sibling tools like find_unlinked_mentions by focusing on batch new-note context and bidirectional scanning.

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 context ('for batch new-note operations') implying when to use this tool, but does not explicitly mention when not to use it or compare it to alternatives like find_unlinked_mentions or find_broken_links.

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

find_orphansA

Finds notes with no incoming wikilinks. Optional { scope } path prefix. Returns { root, scope, orphans[] } (array of relative paths).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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 the return format {root, scope, orphans[]} and the operation is read-only by nature, but it does not explicitly state safety, permissions, or side effects. Basic behavior is clear but could be more transparent.

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

Conciseness5/5

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

The description is extremely concise: two sentences covering purpose, optional parameter, and return structure. Every word adds value, and the information is front-loaded. No wasted words.

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

Completeness4/5

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

For a simple tool with one optional parameter and no output schema, the description provides the core purpose, the scope parameter, and the return format. It could mention that the operation is read-only, but overall it is sufficiently complete for 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 coverage is 100% with one optional string parameter 'scope'. The description adds 'path prefix' which provides contextual meaning beyond the schema type, helping the agent understand its purpose. This extra information merits a 4.

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 it finds notes with no incoming wikilinks, which is a specific verb+resource. It distinguishes the tool's function from siblings like find_broken_links and find_unlinked_mentions implicitly, but does not explicitly differentiate, so score is 4.

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 identifying orphan notes without inbound links. However, it provides no guidance on when not to use this tool or alternatives like find_broken_links. The optional scope parameter is mentioned, but no exclusions or context for sibling tools is given.

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

find_unlinked_mentionsA

Finds plain-text occurrences of a note's title that are not wikilinked. Pass { path }. Returns { root, path, mentions[] } with sourcePath, mentionText, line, column.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/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 the return structure but does not explicitly state that the operation is read-only or describe any side effects, though the name and context imply no destructive 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?

Two sentences: first defines the purpose, second specifies parameters and return structure. No unnecessary words, front-loaded.

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 simplicity and lack of output schema, the description covers purpose, input, and return fields but leaves ambiguity about whether the search is within a single note or across the vault, and does not clarify the scope of 'path'.

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?

The input schema is 100% covered but lacks a description for 'path'. The description only says 'Pass { path }' without explaining what the path should refer to (e.g., absolute path, relative path, note name), adding no value beyond the schema.

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

Purpose5/5

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

The description states the specific verb 'finds' and resource 'plain-text occurrences of a note's title that are not wikilinked', clearly distinguishing it from sibling tools like find_bidirectional_mentions which handle linked mentions.

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 detecting unlinked mentions but does not explicitly state when to use this tool versus alternatives or provide prerequisites or exclusions.

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

get_frontmatterA

Returns { root, path, frontmatter } for a note. Reads only the YAML frontmatter block, not the body.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description compensates by disclosing that the tool reads only the frontmatter block and returns a specific structure. However, it does not mention error handling (e.g., missing frontmatter), auth requirements, or side effects, leaving some gaps.

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

Conciseness5/5

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

The description is two sentences with no fluff. The return value is front-loaded, and every sentence adds value.

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

Completeness4/5

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

For a simple tool with no output schema, the description provides the output shape and distinguishes from body reading. It lacks details on edge cases (no frontmatter) but is largely complete.

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

Parameters3/5

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

The schema covers 100% of the parameters (single 'path' string). The description adds no additional meaning beyond what the schema provides. Baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states what the tool does: 'Returns `{ root, path, frontmatter }` for a note.' It specifies the resource (frontmatter) and the verb (returns), and distinguishes itself by noting 'Reads only the YAML frontmatter block, not the body,' which differentiates it from sibling tools like read_note.

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 fetching only metadata, but it does not explicitly state when to use this tool over alternatives like read_note or update_frontmatter. No guidance on when not to use it or context for exclusion.

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

get_statsA

Returns { root, noteCount, totalBytes, recentFiles[] }. No arguments needed. Use this to verify connectivity and get an overview of the active directory.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description carries burden. It states returns, implying no side effects, but doesn't explicitly declare read-only or safe operation. Adequate but could be improved.

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 return structure and purpose. No unnecessary words.

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

Completeness4/5

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

For a simple stats tool with no output schema, description provides the return shape and usage context. Could mention that it's safe/read-only, but overall sufficient.

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?

Input schema has 0 parameters with 100% coverage. Description adds value by explicitly stating 'No arguments needed', reinforcing the schema and avoiding any confusion.

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

Purpose5/5

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

Description clearly states the tool returns specific fields (root, noteCount, totalBytes, recentFiles) and its purpose (verify connectivity, get overview). Distinct from sibling tools as it's a catch-all stats snapshot.

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

Usage Guidelines4/5

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

Explicitly says 'No arguments needed' and describes use case ('verify connectivity and get overview'). Does not compare to alternatives, but context implies quick overview.

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

lint_noteB

Validates a note against its resolved schema. Pass { path }. Returns { root, path, pass, schema, checks[] }. Each check has name, pass, detail. Returns schema: null if no schema matches.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

The description discloses the return structure including the possibility of schema being null, but with no annotations, it fails to mention side effects (none expected), error conditions, or performance implications. It adds value but is not comprehensive.

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-loads the purpose, and is free of unnecessary words. Every part earns its place.

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

Completeness3/5

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

Given no output schema and the tool's complexity (single parameter, validation operation), the description covers the return structure but omits context like error handling, path validation, or schema resolution mechanics. It is adequate but not thorough.

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 simply mentions to pass `{ path }`, which repeats the schema. With 100% schema coverage, the bar is higher; additional details like path format or constraints would improve it.

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 validates a note against its resolved schema, which is specific and actionable. However, it does not differentiate from sibling tools like validate_all or validate_area that perform similar but scoped validations.

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 lint_note versus alternatives, no prerequisites (e.g., path must exist), and no context on when it should not be used.

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

list_directoryA

Returns { root, path, entries[] }. Each entry has name, type (file|directory), and relative path. Omit path or pass "" to list the root. Blocked paths (.obsidian, .git, node_modules) are excluded automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

The description explains the return format and automatic exclusion of blocked paths, but does not explicitly state that the operation is read-only or disclose any side effects. With no annotations, more behavioral context would be helpful.

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 efficiently convey the return structure, listing behavior, and special cases. No extraneous information.

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

Completeness5/5

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

Given no output schema, the description fully describes the return object and mentions blocked path exclusions. The tool is simple with one optional parameter, and the description covers all necessary context.

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

Parameters4/5

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

The parameter 'path' is described with usage instructions (omit or empty for root), adding meaning beyond the schema's type and default. This exceeds the baseline expectation even with high schema coverage.

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

Purpose5/5

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

The description clearly states that the tool returns a structure { root, path, entries[] } with entries having name, type, and relative path. It distinguishes itself from sibling tools like list_schemas by focusing on directory contents.

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 explicit guidance on how to list the root by omitting path or passing '', and mentions blocked paths are automatically excluded. However, it does not compare to alternatives or provide when/when-not advice.

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

list_schemasA

Lists all loaded schemas. No arguments. Returns { root, schemas[] } where each schema has name, description, type (note|folder), and type-specific details.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses return format `{ root, schemas[] }` with schema details, which is good transparency for a read-only list operation. No side effects noted, but none expected.

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 action, no redundant words. Every part earns its place.

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

Completeness4/5

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

For a simple, parameterless tool with no output schema, the description provides the return structure and schema fields, which is fairly complete. Could optionally mention that it's safe to call anytime, but not necessary.

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?

Zero parameters; schema coverage is 100% (empty object). Description confirms 'No arguments,' adding clarity beyond the schema. Baseline for 0 params is 4.

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?

Clearly states the function: 'Lists all loaded schemas.' Uses specific verb and resource, distinguishing it from all sibling tools, which deal with notes, directories, or other operations.

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

Usage Guidelines4/5

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

Explicitly notes 'No arguments,' which is a clear usage constraint. However, it does not provide context on when to use vs. not, or compare to alternatives; but given the unique function, this is sufficient.

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

manage_tagsA

Add, remove, or list tags on a note. Pass { path, operation, tags? } where operation is add|remove|list. Handles both YAML tags arrays and inline #tags. Returns { root, path, tags, added?, removed? }.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, description carries full burden. It discloses handling of YAML and inline tags, but does not mention side effects like permanent note modification or potential conflicts.

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, no wasted words, essential information presented upfront. Structured logically: purpose then usage pattern then return format.

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?

Covers main usage, parameters, and return format. Missing details like error handling or behavior when operation is list with tags, but overall sufficient for a simple tool.

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

Parameters4/5

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

Schema coverage is 100%, but description adds meaning by explaining the operation enum, the optional tags array, and the expected shape. Goes beyond schema by clarifying usage context.

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

Purpose5/5

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

Description explicitly states the tool adds, removes, or lists tags on a note, with specific verb and resource. It clearly distinguishes from sibling tools (e.g., no other tool handles tags directly).

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

Usage Guidelines4/5

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

Provides explicit usage pattern with required fields and operation values. Lacks explicit when-not or alternatives, but given no other tag tool exists, guidance is clear.

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

move_noteA

Moves or renames a note. Pass { oldPath, newPath }. Optional: overwrite (boolean), updateLinks (boolean, propagates [[wikilink]] renames). Returns { root, oldPath, newPath } and optionally linksUpdated.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided; description lacks details on destructive behavior, error handling, authentication needs, or side effects of updateLinks beyond wikilinks.

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 verb and resource, no redundant information. Every sentence adds value including return values.

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?

Describes core functionality and return values but omits details on error conditions, path formats, and overwrite behavior. Adequate for basic use but incomplete for edge cases.

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

Parameters4/5

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

Schema coverage is 100%; description adds meaning by explaining updateLinks propagates wikilinks and overwrite is boolean. Does not detail path format but adds value over 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 'Moves or renames a note', specifying the verb and resource. It distinguishes from siblings like create_note, delete_note, write_note, etc.

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 move_note vs alternatives (e.g., write_note for creating). Does not mention prerequisites or when not to use.

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

patch_noteA

Replaces a string within a note. Pass { path, oldString, newString } and optionally replaceAll (boolean). Returns { root, path, replacements }. Read the note first to confirm the exact string.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

Describes mutation (replaces) and returns replacement count. However, with no annotations, it lacks explicit disclosure of destructive nature, permission requirements, or behavior on multiple matches without replaceAll.

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: first covers purpose and required inputs, second provides return format and best practice. No unnecessary words.

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

Completeness5/5

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

Complete for a simple tool with 100% schema coverage. Covers input, output, and usage tip. No gaps.

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?

Adds meaning beyond schema by explaining parameter roles: oldString as target, newString as replacement, replaceAll as optional boolean. Also specifies return structure, compensating for missing output 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?

Clearly states 'Replaces a string within a note', which is a specific verb+resource action. Distinguishes from siblings like write_note (overwrites) and update_frontmatter (metadata).

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?

Advises to 'Read the note first to confirm the exact string', indicating preparation before use. Does not explicitly list alternatives or when not to use, but context of sibling tools provides implicit guidance.

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

read_multiple_notesA

Batch-reads up to 10 notes. Pass { paths: string[] }. Returns { root, results[] } where each result has path, note (or null), and optional error.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

As a read operation, the description discloses the limit (up to 10) and output structure, but without annotations, it could mention idempotency or lack of side effects more explicitly.

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 concise sentences that front-load the purpose and immediately provide input/output details, with no unnecessary words.

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

Completeness5/5

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

Given the simplicity of the tool (batch read with a clear limit) and the detailed description covering input, output, and capacity, it is fully complete for an agent to invoke correctly.

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

Parameters4/5

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

Schema coverage is 100%, and the description adds meaning by explaining the expected input format and the structure of results, beyond what the raw schema provides.

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 specifies the verb 'batch-reads', the resource 'notes', and the capacity 'up to 10', clearly distinguishing from sibling tools like read_note (single) and search_notes (search).

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

Usage Guidelines4/5

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

It implies usage for batch reading up to 10 notes, but does not explicitly state when not to use or compare to alternatives like read_note for single reads.

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

read_noteA

Returns { root, path, frontmatter, content }. Pass a relative path. Use list_directory first if unsure of the path.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations provided, but the description fully covers the read operation's behavior: it returns a structured object and no side effects are implied. Could be more explicit about error handling, but for a read tool this is sufficient.

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

Conciseness5/5

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

Two sentences, front-loaded with return value and path requirement, no extraneous information. Every sentence earns its place.

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

Completeness4/5

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

For a read tool with one parameter and no output schema, the description is complete: it tells what is returned, how to pass the path, and what to do if unsure. Could mention path separator expectations, but not necessary.

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

Parameters4/5

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

Schema description coverage is 100%, and the description adds meaning beyond the schema by specifying 'relative path', which clarifies the expected format.

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

Purpose5/5

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

The description explicitly states the tool returns { root, path, frontmatter, content } and accepts a relative path. It distinguishes from sibling tools like list_directory by advising to use it first if unsure.

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?

Provides clear usage: 'Pass a relative path. Use list_directory first if unsure of the path.' This gives both when-to-use and when-not-to-use with an explicit alternative.

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

search_notesA

Full-text BM25 search. Pass { query } and optionally scope (path prefix), searchContent (default true), searchFrontmatter (default false), limit. Returns { root, results[] } sorted by relevance, each with path, score, excerpt.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

The description discloses the BM25 algorithm, ordering by relevance, and return fields (path, score, excerpt). Without annotations, it provides good behavioral context. However, it does not mention rate limits, authentication needs, or side effects, which are not critical for a search 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 one concise sentence that front-loads the core functionality. Every word adds value, with no repetition or filler.

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

Completeness5/5

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

The description fully covers the tool's purpose, parameters, and return format. Given the lack of output schema, it compensates by explaining the response structure. No gaps remain for a search tool.

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?

The description explains each parameter's meaning beyond the schema (e.g., scope as path prefix, default values for searchContent and searchFrontmatter). Since schema coverage is 100% from the description, it adds significant value.

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

Purpose5/5

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

The description clearly states the tool performs 'Full-text BM25 search', specifies the return format with relevance scoring, and lists all parameters. It distinguishes itself from sibling tools by being the only general search tool, as others are specific (e.g., get_backlinks, find_orphans).

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

Usage Guidelines4/5

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

The description implies usage for full-text search, but lacks explicit guidance on when to use this versus alternatives. It could mention not to use for metadata-only searches, but the inclusion of searchFrontmatter parameter somewhat covers that. No when-not or exclusion criteria are provided.

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

switch_directoryA

Accepts { path } (absolute path). Rebuilds all services for the new root directory. Returns { root, switched: true } on success. Call get_stats after switching to verify.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It mentions rebuilding all services, implying a significant operation, but doesn't disclose potential side effects (e.g., state loss, service downtime, long execution time) or any destructive nature.

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

Conciseness5/5

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

Three sentences, no wasted words. Front-loaded input, then action, then return format, then a follow-up recommendation. Highly efficient.

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?

Covers input, action, output, and a verification step. Lacks information about side effects or when the operation is complete (e.g., synchronous vs async). Still fairly complete for a simple switch.

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 has 100% coverage with a string parameter 'path'. Description adds crucial semantic detail that the path must be absolute, which isn't in schema. This adds value beyond 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 tool's action using a specific verb ('rebuilds all services') and resource (new root directory). It distinguishes from sibling note editing tools by indicating it changes the working directory.

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 vs alternatives. It mentions calling get_stats after switching, but doesn't specify prerequisites, exclusions, or contexts where switching might not be appropriate.

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

update_frontmatterA

Sets and/or removes frontmatter keys. Pass { path, fields?, remove?, merge? }. fields sets key-value pairs (null is a real value, pass-through to schema validation). remove is a list of keys to delete. merge (default true) merges with existing frontmatter; false replaces all fields. Returns { root, path, frontmatter }.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Explains parameters, merge vs replace behavior, and return value. Could mention that it modifies the file on disk.

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

Conciseness4/5

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

Three sentences efficiently cover purpose, parameters, and return value. Slightly verbose in the middle sentence but overall concise.

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?

Output schema missing, but description explains return shape. Lacks error handling info and prerequisites (e.g., note must exist). Adequate for typical 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?

Input schema has 100% coverage, but description adds extra meaning: 'null is a real value' clarifies fields semantics, and explains merge default behavior. Adds value beyond 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?

Description clearly states 'Sets and/or removes frontmatter keys' with specific verbs and resource, and distinguishes from sibling tools like get_frontmatter (read-only) and write_note (writes entire note).

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?

No explicit when-to-use or when-not-to-use guidance. Does not mention alternatives like write_note or patch_note for modifying frontmatter alongside note body.

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

validate_allA

Validates the entire directory tree using the convention cascade. Optional verbose (default false) — when false, the response includes only folders/notes with actionable results. Returns { root, summaryText, pass, conventionSources, folders, summary }. Discovers _conventions.md notes and resolves folder schemas.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Discloses key behaviors like optional verbose filtering, return fields, and discovering conventions, but lacks explicit statement that it's read-only, and no annotations are provided.

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

Conciseness5/5

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

Three efficient sentences: purpose, parameter detail, return structure; concise and 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?

Covers purpose, parameter, and return fields; no output schema but description lists fields. Additional behaviors like discovering conventions are mentioned, making it fairly complete.

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

Parameters4/5

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

Description explains the verbose parameter's effect beyond the schema's type and default, adding value despite high schema coverage.

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

Purpose5/5

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

Description clearly states the tool validates the entire directory tree, distinguishes it from sibling tools like validate_area and validate_folder that target subsets.

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?

Implied usage for whole tree validation, but no explicit guidance on when to use this vs siblings, nor any prerequisites or exclusions.

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

validate_areaA

Recursively validates a subtree. Pass { path }. Returns { root, summaryText, path, pass, folders, summary }. Use for checking a section of the directory.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Describes recursion and return fields, including 'pass' indicating a boolean result. No annotation exist, so description carries full burden; it lacks mention of side effects (e.g., read-only), permissions, or error behavior. Adequate but not comprehensive.

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

Conciseness5/5

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

Two short sentences, no filler. First sentence states action and recursion; second sentence gives syntax and return shape. Every word earns its place.

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

Completeness4/5

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

For a simple validation tool with one parameter and no output schema, the description covers input, action, recursion, and return fields. Missing details like error conditions or idempotency, but overall sufficient for an agent to use correctly.

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

Parameters4/5

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

Schema coverage is 100% (single path parameter). Description adds meaning by saying 'Pass { path }' and indicating path is the subtree root, plus it appears in the return structure, clarifying its role beyond the schema type definition.

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?

Clearly states 'validates a subtree' with recursion, and 'Use for checking a section of the directory' implies scope. However, it does not explicitly differentiate from sibling tools validate_all and validate_folder, which likely validate entire directory or specific folders.

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

Usage Guidelines4/5

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

Explicitly says 'Use for checking a section of the directory', providing clear context for when to use this tool. Does not mention alternatives or when not to use it, but the guidance is sufficient for most cases.

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

validate_folderA

Classifies and validates a folder. Pass { path }. Returns { root, summary, path, pass, folderType, schema, notes, structural }. Folder types: packet, superfolder, supplemental, unclassified.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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 explains the tool's behavior (classification and validation) and lists return fields, but does not disclose side effects, permissions, or whether it is read-only. For a validation tool, the description is adequate but not comprehensive.

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-loading the core purpose and input/output structure in the first sentence. The second sentence lists folder types, which is useful but not excessive. Every sentence serves a purpose, making it highly concise and well-structured.

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

Completeness4/5

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

Given its simplicity (one parameter, defined output), the description covers the essential aspects: purpose, input format, return fields, and possible classifications. It does not address edge cases or errors, but for a straightforward validation tool, it is largely complete without requiring an output schema.

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?

The input schema defines one parameter 'path' as a string. The description merely echoes 'Pass `{ path }`' without adding context like expected format or constraints (e.g., absolute vs relative path). With 100% schema description coverage, 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.

Purpose5/5

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

The description clearly states the tool's purpose: 'Classifies and validates a folder.' It specifies the input format and lists the output fields, including the 'folderType' which distinguishes classifications like 'packet' and 'superfolder'. This is specific and differentiates from sibling tools like 'validate_all' or 'validate_area', which operate on broader scopes.

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 the input format ('Pass `{ path }`') and details the output, but does not explicitly state when to use this tool over alternatives like 'validate_all'. It implies single-folder scope, but lacks direct guidance or exclusions, leaving the agent to infer appropriate usage.

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

write_noteA

Writes content to a note. Pass { path, content } and optionally frontmatter (object) and mode (overwrite|append|prepend, default overwrite). Returns { root, path, message }. Creates parent directories automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It discloses modes, frontmatter handling, and automatic directory creation, but does not specify whether the note file is created if missing or the destructive nature of overwrite.

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

Conciseness5/5

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

The description is concise and front-loaded, with a clear first sentence stating purpose. Each sentence adds necessary detail without redundancy.

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

Completeness3/5

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

Given no annotations or output schema, the description covers return structure and directory creation. However, it omits whether the note file is created if missing, error scenarios, or permissions needed.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already defines types. The description adds value by specifying mode enum values, default, frontmatter as object, return shape, and implying required parameters beyond schema's required count.

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 'Writes content to a note' and lists parameters, making the purpose evident. However, it does not distinguish when to use this tool over siblings like create_note or patch_note.

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 explains parameters and default behavior but gives no explicit guidance on when to use or when not to use this tool compared to alternatives like create_note.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 3 tool updatesv0.5.1
    • Addedfind_bidirectional_mentions
    • Changedupdate_frontmatter9 fields changed
      • addedInput schema / def / shape / fields / def / defaultValue
        Added value: +{}
      • addedInput schema / def / shape / fields / def / innerType
        Added value: +{
        +  "def": {
        +    "innerType": {
        +      "def": {
        +        "keyType": {
        +          "def": {
        +            "type": "string"
        +          },
        +          "format": null,
        +          "maxLength": null,
        +          "minLength": null,
        +          "type": "string"
        +        },
        +        "type": "record",
        +        "valueType": {
        +          "def": {
        +            "type": "unknown"
        +          },
        +          "type": "unknown"
        +        }
        +      },
        +      "keyType": {
        +        "def": {
        +          "type": "string"
        +        },
        +        "format": null,
        +        "maxLength": null,
        +        "minLength": null,
        +        "type": "string"
        +      },
        +      "type": "record",
        +      "valueType": {
        +        "def": {
        +          "type": "unknown"
        +        },
        +        "type": "unknown"
        +      }
        +    },
        +    "type": "optional"
        +  },
        +  "type": "optional"
        +}
      • removedInput schema / def / shape / fields / def / keyType
        Removed value: -{
        -  "def": {
        -    "type": "string"
        -  },
        -  "format": null,
        -  "maxLength": null,
        -  "minLength": null,
        -  "type": "string"
        -}
      • changedInput schema / def / shape / fields / def / type
        Previous value: -"record"New value: +"default"
      • removedInput schema / def / shape / fields / def / valueType
        Removed value: -{
        -  "def": {
        -    "type": "unknown"
        -  },
        -  "type": "unknown"
        -}
      • removedInput schema / def / shape / fields / keyType
        Removed value: -{
        -  "def": {
        -    "type": "string"
        -  },
        -  "format": null,
        -  "maxLength": null,
        -  "minLength": null,
        -  "type": "string"
        -}
      • changedInput schema / def / shape / fields / type
        Previous value: -"record"New value: +"default"
      • removedInput schema / def / shape / fields / valueType
        Removed value: -{
        -  "def": {
        -    "type": "unknown"
        -  },
        -  "type": "unknown"
        -}
      • addedInput schema / def / shape / remove
        Added value: +{
        +  "def": {
        +    "defaultValue": [],
        +    "innerType": {
        +      "def": {
        +        "innerType": {
        +          "def": {
        +            "element": {
        +              "def": {
        +                "type": "string"
        +              },
        +              "format": null,
        +              "maxLength": null,
        +              "minLength": null,
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "element": {
        +            "def": {
        +              "type": "string"
        +            },
        +            "format": null,
        +            "maxLength": null,
        +            "minLength": null,
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "type": "optional"
        +      },
        +      "type": "optional"
        +    },
        +    "type": "default"
        +  },
        +  "type": "default"
        +}
    • Changedvalidate_all1 field changed
      • addedInput schema / def / shape / verbose
        Added value: +{
        +  "def": {
        +    "defaultValue": false,
        +    "innerType": {
        +      "def": {
        +        "type": "boolean"
        +      },
        +      "type": "boolean"
        +    },
        +    "type": "default"
        +  },
        +  "type": "default"
        +}
  2. 23 tool updatesv0.1.0
    • First observedcreate_note
    • First observeddelete_note
    • First observedfind_broken_links
    • First observedfind_orphans
    • First observedfind_unlinked_mentions
    • First observedget_backlinks
    • First observedget_frontmatter
    • First observedget_stats
    • First observedlint_note
    • First observedlist_directory
    • First observedlist_schemas
    • First observedmanage_tags
    • First observedmove_note
    • First observedpatch_note
    • First observedread_multiple_notes
    • First observedread_note
    • First observedsearch_notes
    • First observedswitch_directory
    • First observedupdate_frontmatter
    • First observedvalidate_all
    • First observedvalidate_area
    • First observedvalidate_folder
    • First observedwrite_note

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with detailed descriptions that eliminate ambiguity. For example, create_note and write_note both write notes but are differentiated by creation-only vs. overwrite/append/prepend modes. Similarly, the validation tools operate at different scopes (note, folder, area, all).

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_note, find_orphans, validate_all). No mixing of conventions like camelCase, and the pattern is predictable across all tools.

Tool Count5/5

With 24 tools, the set covers a comprehensive range of operations for a note-taking system without feeling excessive. Each tool has a clear role, from basic CRUD to advanced link analysis and validation, justifying the count.

Completeness5/5

The tool surface covers the full lifecycle of note management: creation, reading, updating, deletion, moving, patching, frontmatter manipulation, linting, validation, search, tag management, link analysis, and directory navigation. No obvious gaps for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    F
    maintenance
    An MCP server for managing LifeOS Obsidian vaults, enabling AI assistants to create, read, and search notes with YAML compliance and organizational standards.
    1
    -
  • F
    license
    A
    quality
    A
    maintenance
    A filesystem-based MCP server for Obsidian vaults that enables LLMs to browse, search, read, write, and edit Markdown notes directly on disk without requiring Obsidian to be running.
    6
    1,444
    1
    -

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Erodenn/markscribe'

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