MarkScribe
MarkScribe is a convention-aware markdown MCP server that gives AI assistants a comprehensive toolkit for reading, writing, searching, and validating markdown files.
File & Note Management
Read, write (overwrite/append/prepend), patch, delete, move, and batch-read notes
Convention-aware note creation that applies schema templates and lints the result
List directory contents, get server stats, and switch the active root directory at runtime
Frontmatter & Tag Editing
Read and update YAML frontmatter (merge, replace, or remove keys)
Add, remove, or list tags — supports both YAML arrays and inline
#tags
Full-Text Search
BM25 search across note bodies and/or frontmatter with relevance-ranked results and scope filtering
Schema Validation & Linting
Define YAML schemas for frontmatter rules, content rules, and folder structures
Lint individual notes, validate folders, recursively validate subtrees, or validate the entire directory tree
List all loaded note and folder schemas
Wikilink Graph Analysis
Find backlinks, detect broken links, identify orphaned notes, discover unlinked plain-text mentions, and run bidirectional mention sweeps for new-note workflows
Security & Configurability
Automatically blocks sensitive directories; supports user-defined additional blocked paths
Configurable via CLI flags (
--root,--schemas-dir,--lite) and per-directoryconfig.yamlfiles
Provides tools for managing Logseq workspaces, including reading/writing notes, handling bidirectional links, managing tags, and validating notes against schemas for convention enforcement.
Provides tools for managing Obsidian vaults, including reading/writing notes, handling wikilinks, managing tags, and validating notes against schemas for convention enforcement.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MarkScribesearch for notes about project planning"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MarkScribe
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 markscribeOr 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 |
| Current working directory | Root directory to serve |
|
| Directory to load schema YAML files from |
|
| Log level ( |
| 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/notesKept (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: 40The 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: trueNotes 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 files and subdirectories |
| Note count, total size, recent files |
| Change the active root directory |
| Read a note with parsed frontmatter |
| Create or update a note |
| String replacement within a note |
| Delete a note (with confirmation) |
| Move/rename with optional link updates |
| Batch read up to 10 notes |
| Convention-aware note creation |
| Read YAML frontmatter only |
| Merge or replace frontmatter fields |
| Add, remove, or list tags |
| Full-text BM25 search |
| Validate a note against its schema |
| Classify and validate a folder |
| Recursive subtree validation |
| Full directory tree validation |
| List all loaded schemas |
| Find notes linking to a note |
| Find wikilinks to non-existent notes |
| Find notes with no incoming links |
| Find plain-text mentions that should be wikilinks |
| 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 --noEmitStdio 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
Available Tools
24 toolscreate_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_broken_linksA
Finds wikilinks pointing to non-existent notes. Optional { scope } path prefix. Returns { root, scope, brokenLinks[] } with sourcePath, link, line.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return structure (root, scope, brokenLinks) and that it accepts an optional scope path prefix. No annotations exist, so the description carries the burden. It does not mention side effects or scope of search (e.g., entire vault vs. directory), but the return includes root and scope, hinting at the search scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences covering purpose, optional parameter, and return structure. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description adequately covers purpose, parameter, and output format. It could be slightly more explicit about the scope of the search, but it remains sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, scope, is fully described in the schema as an optional string. The description adds value by clarifying it is a 'path prefix', which explains its purpose beyond the schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it finds wikilinks pointing to non-existent notes, distinguishing it from siblings like find_orphans and find_unlinked_mentions. The verb 'finds' and resource 'broken links' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for finding broken links but does not explicitly state when to use this tool versus alternatives like find_orphans or find_unlinked_mentions. No exclusions or prerequisites are provided.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_backlinksA
Finds all notes linking to a given note. Pass { path }. Returns { root, path, backlinks[] } where each backlink has sourcePath, link, line.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, and description does not disclose side effects, permissions, or limitations. The read-only nature is implied but not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple; description defines output shape adequately. Could mention differentiation from sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100% coverage), and description adds output structure but no additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it finds notes linking to a given note, specifying verb and resource, and is distinct from sibling tools by focusing on backlinks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides input format but lacks explicit context on when to use this over siblings like find_bidirectional_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.
get_frontmatterA
Returns { root, path, frontmatter } for a note. Reads only the YAML frontmatter block, not the body.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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? }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.5.1- Added
find_bidirectional_mentions - Changed
update_frontmatter9 fields changed- added
Input schema / def / shape / fields / def / defaultValueAdded value: +{} - added
Input schema / def / shape / fields / def / innerTypeAdded 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" +} - removed
Input schema / def / shape / fields / def / keyTypeRemoved value: -{ - "def": { - "type": "string" - }, - "format": null, - "maxLength": null, - "minLength": null, - "type": "string" -} - changed
Input schema / def / shape / fields / def / typePrevious value: -"record"New value: +"default" - removed
Input schema / def / shape / fields / def / valueTypeRemoved value: -{ - "def": { - "type": "unknown" - }, - "type": "unknown" -} - removed
Input schema / def / shape / fields / keyTypeRemoved value: -{ - "def": { - "type": "string" - }, - "format": null, - "maxLength": null, - "minLength": null, - "type": "string" -} - changed
Input schema / def / shape / fields / typePrevious value: -"record"New value: +"default" - removed
Input schema / def / shape / fields / valueTypeRemoved value: -{ - "def": { - "type": "unknown" - }, - "type": "unknown" -} - added
Input schema / def / shape / removeAdded 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" +}
- Changed
validate_all1 field changed- added
Input schema / def / shape / verboseAdded value: +{ + "def": { + "defaultValue": false, + "innerType": { + "def": { + "type": "boolean" + }, + "type": "boolean" + }, + "type": "default" + }, + "type": "default" +}
23 tool updates
v0.1.0- First observed
create_note - First observed
delete_note - First observed
find_broken_links - First observed
find_orphans - First observed
find_unlinked_mentions - First observed
get_backlinks - First observed
get_frontmatter - First observed
get_stats - First observed
lint_note - First observed
list_directory - First observed
list_schemas - First observed
manage_tags - First observed
move_note - First observed
patch_note - First observed
read_multiple_notes - First observed
read_note - First observed
search_notes - First observed
switch_directory - First observed
update_frontmatter - First observed
validate_all - First observed
validate_area - First observed
validate_folder - First observed
write_note
TDQS
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).
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.
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.
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
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
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityAmaintenanceA token-efficient, schema-aware MCP server that enables AI assistants to safely read, modify, query, and validate JSON, YAML, and TOML files with automatic schema detection and format conversion capabilities.89MIT
- FlicenseNot gradedqualityFmaintenanceAn MCP server for managing LifeOS Obsidian vaults, enabling AI assistants to create, read, and search notes with YAML compliance and organizational standards.1-
- AlicenseNot gradedqualityCmaintenancePython MCP server for programmatic access to markdown-based knowledge vaults, enabling AI assistants to browse, read, search, update, and manage notes, tasks, and projects.1MIT
- FlicenseAqualityAmaintenanceA 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.61,4441-
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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