hive
Hive is an MCP server that connects your AI assistant to an Obsidian vault, enabling persistent knowledge management, context retrieval, and task delegation across sessions.
vault_list– Browse all vault projects or list files within a specific project, with optional glob pattern filteringvault_query– Read content from a vault project by section shortcut (context, tasks, roadmap, lessons) or by a specific file path, with optional metadata and line limitsvault_search– Full-text search across all vault files with support for regex, relevance ranking, metadata filters (type, status, tag, project), and recent-changes detectionsession_briefing– Load a comprehensive project briefing at session start, combining active tasks, recent lessons, git activity, and health metrics in a single callvault_write– Create new vault files or append/replace content in existing project sections, with auto-generated frontmatter and auto git commitvault_patch– Perform surgical find-and-replace edits on vault files (single or multi-patch), with validation and auto git commitvault_health– Get health metrics and validation reports for the vault, including drift detection (frontmatter, stale files, broken links) and usage analyticscapture_lesson– Save structured lessons learned (title, context, problem, solution) inline or batch-extract lessons from raw text using a worker modeldelegate_task– Offload tasks or vault file summarization to cheaper/free AI models (Ollama, OpenRouter), with cost and output length controlsworker_status– Check worker health, budget, connectivity, available models, and usage statistics
Automatically performs Git commits when creating, appending, replacing, or patching files within the vault.
Manages vault content stored in Markdown, allowing tools to browse, read, and update files while preserving project documentation structure.
Connects an AI assistant to an Obsidian vault to enable on-demand querying, full-text searching, and management of project context, tasks, roadmaps, and lessons.
Integrates with Ollama as a worker to delegate tasks or summarize vault files using local AI models.
Utilizes YAML frontmatter within vault files for metadata filtering, structured data retrieval, and health metrics.
hive-vault
Your AI coding assistant forgets everything between sessions. Hive fixes that.
Hive is an MCP server that connects your AI assistant to an Obsidian vault. Instead of loading everything upfront, it queries only what's needed — on demand.
Metric | Without Hive | With Hive |
Context loaded per session | ~800 lines (static) | ~50 lines (on demand) |
Token cost for context | 100% every session | 6% average per query |
Knowledge retained between sessions | 0% | 100% (in vault) |
Measured on a real vault with 19 projects, 200+ files. See benchmarks.
Quick Start
Hive runs without a vault — vault tools return a friendly error until VAULT_PATH is set, so you can install first and configure later.
# Minimal — uses default vault path ~/Projects/knowledge
claude mcp add -s user hive -- uvx --upgrade hive-vault
# With a custom vault path
claude mcp add -s user hive -e VAULT_PATH=$HOME/path/to/vault -- uvx --upgrade hive-vault
# Gemini CLI
gemini mcp add -s user -e VAULT_PATH=$HOME/path/to/vault hive-vault uvx -- --upgrade hive-vaultDefault vault path:
~/Projects/knowledge. Override withVAULT_PATH(orHIVE_VAULT_PATH) as shown above.
For Codex CLI, GitHub Copilot, Cursor, Windsurf, and other clients, see Getting Started.
Then ask your assistant: "Use vault_list to see my vault"
Related MCP server: Obsidian MCP
Requirements
Hive degrades gracefully — every recommended or optional dependency reveals more capability without breaking the baseline.
Required
Python 3.12+ (works on 3.13).
A directory of markdown files. The vault structure used by
00_meta/10_projects/50_work/80_agentsis optional — without it, vault tools still operate but the scope routing is flat.
Recommended
gitinitialised inside the vault. Without it,vault_write/vault_patchstill write to disk; they just skip the per-write commit (andvault_commitreports the working tree as untracked).The Obsidian desktop app to author the vault by hand.
The obsidian-git plugin with auto-commit set to 5–10 minutes. Pair it with
vault_write(commit=False)/vault_patch(commit=False)to push the git workload off the synchronous tool path; see Recommended configuration below.
Optional
Ollama running
qwen2.5-coder:7b(or compatible) for local, freedelegate_task/capture_lessonworker calls.An OpenRouter API key (
OPENROUTER_API_KEY) as a free-tier and paid fallback worker.A backup git remote (e.g. private GitHub repo) so vault history survives a disk loss.
Recommended configuration
Per ADR-006 (commit policy), the recommended pairing for write-heavy flows is:
Install and enable the obsidian-git plugin in your vault.
Set its auto-commit interval to 5 or 10 minutes.
Call
vault_write(..., commit=False)andvault_patch(..., commit=False)for all bulk operations.Optionally call
vault_commit(message="...")at the end of a session to force a checkpoint sooner than the obsidian-git tick.
vault_health reports a ## external_committer block when it detects obsidian-git in the vault. The commit=False durability contract is explicit: files are persisted to disk regardless; only the commit is deferred. A crash before the next flush loses the commit, not the content.
When a tool call is cancelled mid-flight (slow worker, client timeout), the server may have already mutated the disk before the cancel ack reaches the wire. vault_health surfaces a ## ghost_responses counter and emits a mcp.ghost_response.suppressed_after_cancel_ack WARNING for each event — verify state via vault_query rather than retrying, since the ErrorData ack does not imply rollback (ADR-007).
Daemon mode (optional)
The default uvx hive-vault runs a fresh server per session. Daemon mode instead runs one long-lived hive serve that owns the vault, with each session connecting through a thin hive client shim — useful for concurrent sessions, single-owner guarantees (ADR-011), and automatic version adoption. It always degrades to an in-process server if the daemon is down, so it never breaks a session.
uv tool install --upgrade hive-vault # >= 1.32.0
hive service install # supervise hive serve (systemd --user / Task Scheduler)To install a newer release, use the platform-specific command:
# Linux / macOS
uv tool upgrade hive-vault
# Windows (the version is optional; omitted selects the latest PyPI release)
hive self-upgrade [version]On Windows, self-upgrade builds the release beside the running files and atomically switches
the managed runtime, avoiding in-use-file conflicts. Open a new terminal after the first managed
upgrade so its PATH change is available. Once supervised, the daemon detects the new installed
version, exits 75, and the supervisor restarts it into the new code. See the
daemon mode guide and the
activation runbook.
Tools
Tool | What it does |
| Load project context, tasks, roadmap, lessons — or any file by path |
| Full-text search with metadata filters, regex, ranked results, recent changes, lesson-usage ranking ( |
| Browse projects and files with glob filtering |
| Server identity (version, vault path, backends), health metrics, drift detection, usage stats, opt-in runtime block |
| Create, append, or replace vault files. |
| Surgical find-and-replace. |
| Flush pending |
| Capture lessons inline / batch-extract from text / look up existing lessons by keyword ( |
| Tasks + lessons + git log + health in one call |
| Route tasks to cheaper models or summarize vault files |
| Budget, connectivity, available models |
Plus 5 resources and 4 prompts for guided workflows.
Lesson reinforcement
Every read of a lesson via vault_query, vault_search, or capture_lesson(find=…) increments a counter and grows that lesson's confidence asymptotically toward 1.0. Validated lessons rank higher than one-shot captures over time.
# Surface the top-ranked lessons matching a keyword
capture_lesson(project="hive", find="multi-process")
# Search lessons ranked by usage signal (not BM25)
vault_search(query="timeout", rank_by="reinforcements") # most-reinforced first
vault_search(query="timeout", rank_by="confidence") # highest decayed confidence
vault_search(query="timeout", rank_by="hybrid") # α=0.7 BM25 + 0.3 confidenceStorage: SQLite side-table at HIVE_LESSON_DB_PATH (default ~/.local/share/hive/lesson_reinforcement.db). WAL mode + busy_timeout make it cross-process safe.
Architecture
MCP Host (Claude Code, Gemini CLI, Codex CLI, Cursor, ...)
└── hive-vault (MCP server, stdio)
├── Vault Tools (7) ── Obsidian vault (Markdown + YAML frontmatter)
├── Session Tools (1) ── Adaptive context assembly
└── Worker Tools (2) ── Ollama (free) → OpenRouter free → paid ($1/mo cap) → rejectDocumentation
Full documentation at mlorentedev.github.io/hive:
Getting Started — install for all MCP clients
Configuration — all 19 environment variables
Vault Structure — how to organize your vault
Use Cases — real-world workflows
Architecture — module map and design decisions
Troubleshooting — common issues and fixes
Project-bound knowledge (docs-as-code) lives in docs/:
docs/adr/— Architecture Decision Recordsdocs/runbooks/— operational proceduresdocs/troubleshooting/— known issues and root-cause write-upsdocs/lessons.md— accumulated gotchas and post-mortems
Contributing
See CONTRIBUTING.md for setup and PR workflow.
git clone https://github.com/mlorentedev/hive.git && cd hive
make install # create venv + install deps
make check # lint + typecheck + test (478 tests, 90% coverage)License
Available Tools
13 toolscapture_lessonA
Capture lessons: inline / batch write, or lookup by keyword.
Inline mode (default): provide title, context, problem, solution.
Batch mode: provide text to extract lessons automatically via worker.
Lookup mode: provide find to surface top-ranked existing
lessons whose heading matches the keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| find | No | Keyword to look up in existing lesson headings (lookup mode). | |
| tags | No | Optional tags (e.g. ["python", "testing"]). | |
| text | No | Raw text to extract lessons from (batch mode). | |
| title | No | Short descriptive title (inline mode). | |
| context | No | What you were doing (inline mode). | |
| problem | No | What went wrong or what decision was needed (inline mode). | |
| project | Yes | Project slug (directory under 10_projects/). | |
| rank_by | No | Lookup ranking — 'reinforcements' (default), 'confidence', or 'hybrid'. Ignored unless ``find`` is set. | reinforcements |
| solution | No | What fixed it or what was decided (inline mode). | |
| max_lessons | No | Maximum lessons to extract / surface. Default 5. | |
| min_confidence | No | Minimum confidence for batch extraction. Default 0.7. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description goes beyond annotations by detailing the behavior of each mode, such as batch extraction via a worker and lookup ranking. Annotations already indicate not read-only, not destructive, not idempotent, and description aligns without contradiction.
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 structured into clear paragraphs for each mode, uses concise language, and avoids redundancy. Every sentence adds information without 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?
Given the complexity of three modes and 11 parameters, the description is fully complete. It covers all necessary aspects for correct usage, including mode selection, parameter roles, and default values. The presence of an output schema does not detract from the description's 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?
With 100% schema coverage, the description adds significant value by grouping parameters into modes, explaining conditional usage (e.g., rank_by ignored unless find is set), and providing context for each parameter. This exceeds the baseline of 3.
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 defines the tool's purpose as capturing lessons with three distinct modes (inline, batch, lookup). It differentiates from sibling tools which include vault operations and delegation tasks.
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 when to use each mode: inline for structured input, batch for extracting from raw text, lookup for searching existing lessons. It lacks explicit when-not-to-use guidance but 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.
delegate_taskA
Offload work to a cheaper model or summarize vault files.
When project is provided, reads a vault file. Small files (≤50 lines) are returned directly. Large files are auto-delegated to a worker for summarization — falls back to raw content if workers are unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Relative path to a .md file. Overrides section. | |
| model | No | Concrete model id. Empty uses the configured worker model. The 4.0.0 removal retired 'auto', 'ollama', 'openrouter-free' and 'openrouter'; passing one is rejected rather than ignored. | |
| prompt | No | The task description or code to process. | |
| context | No | Optional system context for the model. | |
| project | No | Project slug for vault summarization mode. | |
| section | No | Shortcut name for summarization. Ignored if path is set. | context |
| timeout_s | No | Per-dispatch deadline in seconds. 0 uses the ambient tool timeout. A value ABOVE the ambient one raises the ceiling rather than being clamped by it — a deadline a 60s default can silently cap is not a deadline (HIVE-384 AC3). | |
| max_tokens | No | Maximum tokens in the response. | |
| structured | No | Return a JSON record instead of prose. Prose is the default so every existing caller's contract is unchanged; the dispatcher asks for JSON because it needs the status as a VALUE. Exception types do not survive the JSON-RPC boundary between the daemon and its clients, so "the pool refused" and "the worker answered badly" cannot be told apart by type on the far side — and a dispatcher that cannot tell them apart turns a rate limit into a silent retry against a different model. | |
| max_summary_lines | No | Target summary length for summarization. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide no safety disclosure, but the description adds useful behavioral detail beyond them: the 50-line threshold, automatic worker delegation, and fallback behavior. It also clarifies the tool mutates nothing structurally while it performs offloading, though it doesn't fully explain side effects or costs.
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 entire description is two sentences that front-load the key action and immediately provide the most important behavioral caveat. No word is wasted, and the format is easy to grasp.
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 main usage modes, file-size behavior, and fallback. With an output schema and full parameter descriptions present, this is sufficient for basic invocation, but it does not explain the generic no-project delegation mode clearly, so it is not a 5.
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%, so the tool description does not need to document parameters. The main description only associates project with vault reading, but availing of the expected baseline: since the schema already covers 10 parameters, the description adds little beyond that.
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 opening line 'Offload work to a cheaper model or summarize vault files' names a clear verb and resource, so an agent can understand the tool's purpose immediately. It does not explicitly name or distinguish itself from siblings like vault_ask or worker_status, so it's not quite a 5.
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 gives concrete execution context: it states that when project is provided a vault file is read, files ≤50 lines are returned directly, larger files are delegated to a worker, and there is a fallback if workers are unavailable. It does not provide explicit when-not-to-use guidance or alternatives, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_briefingARead-onlyIdempotent
Call at the start of every new session to load project context.
Without a project, returns the available project list with a usage hint — discoverability parity with vault_health() and worker_status(). With a project, assembles active tasks, recent lessons, git activity, and project health into a single response (replaces 3-4 manual calls).
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project slug (directory under 10_projects/). Empty = list available projects so the caller can pick one. This is the only parameter — there is no `days` argument (the briefing window is fixed). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent), the description details what the tool assembles (active tasks, recent lessons, git activity, project health) and how it provides discoverability parity with other tools. No contradictions with annotations; adds valuable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise paragraphs: first sentence states primary use, second paragraph explains dual behavior (with/without project). Every sentence adds value, no fluff, and the critical info is 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 low complexity (1 param, no required, output schema exists), the description fully covers what the tool does, what it returns in both cases, and how it fits with sibling tools. It is complete for an agent to decide when and how to invoke it.
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 a clear description for the 'project' parameter. The description adds extra meaning by clarifying the slug is a directory under 10_projects/, that empty lists projects, and explicitly stating there is no 'days' argument – fixed briefing window. This reduces ambiguity 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 the tool loads project context at session start. It distinguishes from siblings by being a consolidated briefing that replaces multiple manual calls, and notes behavior without a project (returns project list) for discoverability parity with vault_health and worker_status.
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 'Call at the start of every new session' and explains what happens with and without a project. It also contrasts with alternatives by stating it replaces 3-4 manual calls, giving clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_askARead-onlyIdempotent
Ask a natural-language question; get a source-cited synthesized answer (semantic retrieval / RAG) or relevant vault sections when no synthesis model is configured.
OPTIONAL — disabled by default. Requires the [semantic] extra plus an
embeddings backend (HIVE_EMBED_BASE_URL); until then it returns a
short how-to-enable message and never errors. Set HIVE_SYNTH_MODEL to
enable LLM synthesis on top of retrieval. For keyword / regex lookups
use vault_search instead.
| Name | Required | Description | Default |
|---|---|---|---|
| question | No | The natural-language question to answer. Use `question`, not `query` or `prompt`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds that without proper setup, it returns a helpful how-to-enable message and never errors, which is consistent and 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 informative but slightly wordy. It is well-structured with optional setup details, but could be more succinct.
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 presence of an output schema and annotations, the description provides sufficient context about behavior when not configured. It covers key aspects for a RAG 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?
Only one parameter 'question' with full schema coverage. The description adds no extra semantic detail beyond what the schema provides, so baseline 3 is appropriate.
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: answering natural-language questions via semantic retrieval or returning relevant sections. It distinguishes itself from sibling tool vault_search, which handles keyword/regex lookups.
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 tells when to use (natural-language questions) and when not (use vault_search for keyword/regex). Also notes it is optional and requires specific configuration to work, preventing misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_commitA
Stage everything in the vault and create one commit.
Companion to vault_write(commit=False) and
vault_patch(commit=False): callers that opt out of per-write
commits batch many writes and then flush with a single
vault_commit call.
Returns the new commit SHA on success, a clean-tree notice when there is nothing to commit, or a human-readable error.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Commit message. Empty defaults to "vault: batch update". This is the only parameter — there is no `project` argument; the commit spans the whole vault working tree. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral details beyond annotations: it stages everything, creates one commit, returns commit SHA, clean-tree notice, or error, and mentions default commit message. Annotations confirm it's not read-only, not destructive, and not idempotent, which aligns with the described 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?
Three sentences, front-loaded with the core purpose, followed by usage context and return values. Every sentence adds value with no 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?
For a simple tool with one optional parameter and an output schema, the description covers return values (commit SHA, clean-tree notice, error), batch usage context, and default message, providing complete guidance.
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% for the single parameter 'message', and the description adds extra meaning: empty defaults to 'vault: batch update' and notes it's the only parameter with no project argument, enhancing understanding 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 'Stage everything in the vault and create one commit' and explains its relationship to vault_write and vault_patch, distinguishing it from sibling tools by specifying it's a batch commit operation.
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 this is a companion to vault_write and vault_patch with commit=False, providing when-to-use context. It also notes there is no project argument, clarifying scope. Missing explicit 'when not to use', but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_deleteB
Delete a single file from the vault (destructive; recoverable via git).
Removes one file and, by default, commits the deletion so it stays
recoverable from git history (git revert / git show). Files
only — directories are rejected. A non-existent path is an error,
unless idempotency_key is set (then a retry against an already-gone
file is a no-op success).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Relative path to the file within the project. | |
| commit | No | Must be True (the default). Unlike ``vault_write``, this tool has no deferred mode: it neither uses the commit queue (a delete and a recreate inside one tick would collapse to a single state) nor leaves the removal uncommitted, which is the indefinite deferral ADR-018 §4 removed. ``commit=False`` is rejected with an explanation rather than silently upgraded — see the ADR's 2026-08-09 amendment. | |
| project | Yes | Project slug or '_meta' for cross-project content. | |
| idempotency_key | No | Optional at-most-once token. If set, a retry with the same key is a no-op after the first delete (ADR-013), which also makes deleting an already-removed file succeed. Empty (default) disables idempotency. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'destructive; recoverable via git', but the annotations include destructiveHint: false. This is a direct contradiction. The description does provide rich behavioral context (commit default, idempotency, error conditions), but the contradiction triggers the score 1 rule.
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 three sentences, front-loaded with the primary purpose, and includes essential caveats (files only, recoverable via git, idempotency behavior) without wasting words. Every sentence contributes 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?
The description covers edge cases (error on non-existent path, idempotency, commit behavior) and references git recovery. With the output schema and rich parameter descriptions, it is nearly complete. It loses a point for not providing usage alternatives or addressing the destructive annotation inconsistency.
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%, so the schema documents all parameters. The description adds general context (e.g., error behavior for non-existent paths) but does not add meaning beyond the schema's parameter descriptions. Baseline 3 is appropriate.
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 opens with a specific verb and resource: 'Delete a single file from the vault'. It clearly states that it removes one file, commits the deletion, and explicitly excludes directories. This distinguishes it from sibling tools like vault_write and vault_patch.
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 (delete files, not directories; use commit=True) and contrasts with vault_write for commit behavior. However, it does not explicitly state when to use this tool over alternatives, nor does it mention any alternative for directory deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_healthARead-onlyIdempotent
Return vault health metrics, validation, and optional usage analytics.
Always emits the ## server identity block (version, python,
vault path, backend presence, started_at) at the top.
Without parameters, returns a health summary for all projects. When checks are specified, runs drift detection (frontmatter, stale, links). When include_usage is True, appends tool usage analytics. When include_runtime is True, appends runtime metadata (uptime, tools, budget).
| Name | Required | Description | Default |
|---|---|---|---|
| checks | No | Validation checks to run. Empty = health summary only. Options: frontmatter, stale, links. | |
| project | No | Project slug to validate. Empty = all projects. | |
| max_issues | No | Maximum validation issues to report. Default 50. | |
| usage_days | No | Usage look-back window in days. Default 30. | |
| include_usage | No | Append vault tool usage analytics. Default False. | |
| include_runtime | No | Append runtime metadata block. Default False. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds behavioral details: always emits server identity block, conditional outputs based on parameters. No contradictions.
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 well-structured with clear bullet points. It is informative without being overly verbose, though could be slightly more 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?
Given the tool has 6 optional parameters and conditional behavior, the description covers main use cases. Output format is partially described (blocks), but output schema exists to fill gaps. Adequate for the complexity.
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 beyond schema by explaining what checks trigger drift detection and what include_usage/runtime append, enhancing semantic understanding.
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 returns vault health metrics, validation, and optional usage analytics. It distinguishes itself from sibling tools like vault_list or vault_search by focusing on health checks and diagnostics.
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 conditional usage: without parameters returns summary, with checks runs drift detection, and with flags appends analytics or runtime metadata. It provides clear context but does not explicitly state when not to use or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_listARead-onlyIdempotent
List vault projects, or files within a project.
When called without arguments, lists all available projects. When called with a project, lists files in that project directory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Subdirectory within the project. Empty = project root. (Use `path`, not `subpath` — `subpath` is accepted as an alias.) | |
| pattern | No | Glob pattern to filter files (e.g. 'adr-*', '*.md'). | |
| project | No | Project slug. Empty = list all projects. | |
| subpath | No | Alias of `path` (#151). Prefer `path`. Note: there is no `scope` parameter here — `scope` lives on `vault_search`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and idempotentHint. The description adds details on how arguments affect behavior (listing projects vs files, using subdirectories and patterns). It does not contradict annotations and provides good behavioral context beyond the structured fields.
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 very concise at 4 lines, front-loads the main purpose, and includes only essential details with no redundant content. Every sentence provides useful 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 the complexity (4 optional params, nested structure), the description covers the main usage patterns. It explains the two modes and parameter roles. The output schema exists to document return values, so the description is sufficiently complete for a list 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 the description adds significant value: explains the alias 'subpath' for 'path', notes that 'scope' is not a parameter here, and clarifies default behaviors for empty strings. This is excellent parameter-level guidance.
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 lists vault projects or files within a project. It distinguishes two modes based on arguments, and the verb 'list' combined with resource 'vault projects/files' is specific. It differentiates from sibling tools like vault_search and vault_write.
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 explicitly explains when to use with or without the 'project' argument. It does not directly compare with sibling tools, but the usage context is clear and provides actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_patchA
Surgical find-and-replace in a vault file with auto git commit.
Supports single or multi-replacement. For a single replacement, provide
find and replace. For multiple replacements, provide patches
— a list of {"find": "...", "replace": "..."} dicts applied in
sequence. Do not mix both modes.
Each find value must appear exactly once in the file (after prior
patches in the list have been applied). If any patch fails validation,
no changes are written.
Uses 3-pass cascading match: exact → body-only → whitespace-normalized.
| Name | Required | Description | Default |
|---|---|---|---|
| find | No | Exact text to find (single mode). Empty = not set. (Use `find`/`replace`, NOT `old_string`/`new_string` — those are accepted as aliases.) | |
| path | Yes | Relative path to the file within the project. | |
| commit | No | If True, commit synchronously before returning. Defaults to False, which queues the path for the reconciler. See ``vault_write`` docstring for the durability contract. | |
| patches | No | List of {"find", "replace"} dicts (multi mode). | |
| project | Yes | Project slug or '_meta' for cross-project content. | |
| replace | No | Replacement text (single mode). Empty = not set. | |
| new_string | No | Alias of `replace` (#151). Prefer `replace`. | |
| old_string | No | Alias of `find` (#151). Prefer `find`. | |
| idempotency_key | No | Optional at-most-once token. If set, a retry with the same key is a no-op after the first apply (ADR-013). Empty (default) disables idempotency. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, idempotentHint=false, destructiveHint=false), the description discloses critical behavior: auto git commit, 3-pass cascading match, uniqueness requirement, and atomic failure semantics ('If any patch fails validation, no changes are written'). It also references the durability contract in vault_write, providing valuable context.
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 compact and front-loaded with a one-sentence summary, followed by a short bulleted list of usage rules and matching behavior. Every sentence earns its place, and technical details are grouped logically.
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?
With 9 parameters, rich schema descriptions, an output schema, and annotations, the description still contributes the essential behavioral contract: validation atomicity, matching cascades, and commit durability. The reference to the vault_write docstring for the durability contract avoids duplication while pointing to the needed detail.
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 already has 100% descriptive coverage, so the baseline is 3; the description adds value by clarifying the two mutually exclusive modes (find/replace vs patches), the 'applied in sequence' semantics, and the uniqueness rule that governs patch validation. It does not need to repeat every schema field, but it explains the relationships between parameters.
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 opens with a specific verb+resource: 'Surgical find-and-replace in a vault file with auto git commit,' clearly distinguishing it from siblings like vault_write, vault_delete, and vault_commit. It further specifies single/multi modes and matching algorithm, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete conditions for use: single vs multi replacement, 'Do not mix both modes,' the requirement that each find appear exactly once, and all-or-nothing validation. It does not explicitly name sibling alternatives with 'use X instead,' but the context makes it obvious this is the targeted-edit tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_queryARead-onlyIdempotent
Read content from a vault project — use instead of direct filesystem access.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Relative path to a specific .md file within the project. Overrides section. (Use `path` for a file, not `identifier` — `identifier` is accepted as an alias.) | |
| project | Yes | Project slug (directory under 10_projects/), or '_meta' for 00_meta/. | |
| section | No | Shortcut name (context, tasks, roadmap, lessons). Ignored if path is set. | context |
| max_lines | No | Maximum lines to return. 0 = unlimited. | |
| identifier | No | Alias of `path` (#151). Prefer `path`; for a section shortcut use `section` instead. | |
| include_metadata | No | Prepend a structured metadata line from YAML frontmatter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description's 'Read content' aligns. No additional behavioral details beyond what annotations provide, which is acceptable for a safe read operation.
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?
A single concise sentence that front-loads the purpose. Could be slightly expanded for completeness but is efficient and clear.
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 has 6 parameters, annotations, and an output schema, the description is minimal. It doesn't mention return format or error handling, but for a straightforward read tool this is adequate but not comprehensive.
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%, so the schema already documents each parameter's meaning. The description text does not add extra parameter context, but the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read content from a vault project', specifying a verb (read) and resource (vault project). It also distinguishes from file system access and implicitly from siblings like vault_write and vault_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?
Explicitly says 'use instead of direct filesystem access', providing context for when to use. Does not explicitly list when not to use or compare to vault_list/search, but the sibling names and purpose make alternatives clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_searchARead-onlyIdempotent
Search the vault: full-text, ranked, or recent changes.
Default mode: flat full-text search across all vault files. Ranked mode (ranked=True): results scored by relevance. Recent mode (since_days>0): files changed in the last N days. rank_by mode (rank_by != 'bm25'): lessons-only, ranked by usage.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Alias of `max_results` (#202). Prefer `max_results`. When both are given the tighter (smaller) cap wins; 0 = unset. | |
| query | No | Text to search for (case-insensitive). | |
| regex | No | Alias of `use_regex` (#151). Prefer `use_regex`. To narrow by location use `scope` / `project`, not `path_filter` / `path_prefix`. | |
| scope | No | Restrict search to a scope (e.g. 'work', 'projects'). Empty = all. | |
| ranked | No | Score results by relevance. Default False. | |
| project | No | Filter to this project (recent mode only). | |
| rank_by | No | Lesson ranking ('bm25' default keeps current behaviour; 'reinforcements', 'confidence', 'hybrid' filter to 90-lessons.md only and rank by usage signal). | bm25 |
| max_lines | No | Maximum output lines. Default 500. | |
| use_regex | No | Treat query as regex. Default False. (Use `use_regex`, not `regex` — `regex` is accepted as an alias.) | |
| since_days | No | Show recent changes (0 = disabled). Default 0. | |
| tag_filter | No | Only files that have this frontmatter tag. | |
| max_results | No | Max result files. Default 10. Caps the file count in all modes (flat, ranked, recent); in flat/recent the cap is by path order (alphabetical) — use ranked=True for relevance order. | |
| type_filter | No | Only files whose frontmatter type matches. | |
| status_filter | No | Only files whose frontmatter status matches. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds behavioral details about modes, aliases (regex, limit), and cap interactions without contradicting annotations.
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 (4 lines) yet comprehensive, using clear bullet-like phrasing to convey modes and key behaviors without extraneous text.
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 all modes, parameter interactions, and aliases. With an output schema present, return values need not be described. Sufficient for a complex 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?
Schema coverage is 100%. The description adds value by explaining aliases (regex vs use_regex, limit vs max_results) and mode-specific parameter effects.
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 searches vault files with multiple modes (full-text, ranked, recent), distinguishing it from sibling tools like vault_query or vault_list.
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 when to use each mode (default, ranked, recent, rank_by) but does not explicitly exclude alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_writeA
Write to the vault: append, replace a section, or create a new file.
Modes:
append/replace: Update a project section. Requires section.
create: Create a new file with auto-generated frontmatter. Requires path; doc_type defaults to "note". Inferred automatically when you pass a path with no section, so operation may be omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Relative path for the file. Setting this with no section creates the file (create mode). | |
| commit | No | If True, commit synchronously before returning — the escape hatch for a caller that needs the commit to exist by the time the call ends. Defaults to False, which queues the path for the reconciler to commit on its next tick (a few seconds). Durability contract: the file is persisted to disk regardless; only the *commit* is deferred, so a crash before the next flush loses the commit, not the content. | |
| content | Yes | Markdown content to write (body only for create mode). | |
| project | Yes | Project slug or '_meta' for cross-project content. | |
| section | No | Section shortcut (context, tasks, roadmap, lessons). For append/replace. | |
| doc_type | No | Document type for frontmatter (create mode). Optional; defaults to "note". | |
| operation | No | 'append', 'replace', or 'create'. Default 'append'. 'create' is inferred when path is set and section is empty. | append |
| idempotency_key | No | Optional at-most-once token. If set, a retry with the same key is a no-op (safe for transparent retries after a daemon restart cuts an in-flight write — ADR-013). Empty (default) disables idempotency. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations indicating a non-read-only, non-idempotent, non-destructive write, the description adds behavior: auto-generated frontmatter, doc_type defaulting to 'note', and automatic mode inference. It does not mention deferred commit, but that is disclosed in the schema, and the description's extra mode semantics exceed what annotations alone provide.
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?
Four short lines, bulleted modes, no filler. 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 an 8-param tool with rich schema and output schema, the description provides the necessary high-level behavioral map: modes, requirements, and default inference. It is complete enough for selection and correct invocation.
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 baseline is 3. Description adds cross-parameter semantics: which modes require which params, that operation can be omitted when path has no section, and doc_type defaulting. This goes beyond individual schema entries.
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 opens with 'Write to the vault' and lists three concrete modes: append, replace, and create a new file. This clearly identifies the resource and operation and distinguishes it from vault_list/vault_query/vault_search siblings.
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?
Modes explicitly state requirements: append/replace requires a section, create requires a path, and operation is inferred when path is passed without section. It gives clear within-tool mode-selection context, though it does not name sibling alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
worker_statusARead-onlyIdempotent
Show worker health: configuration, reachability, model, and usage.
HIVE-384 reshaped this tool, and the reshape is the point rather than a side effect. The old output led with a dollar budget and reported two providers by configuration: it said "Ollama: offline / OpenRouter: no API key" for an unknown length of time while every caller treated the worker as a working capability. A status surface that cannot distinguish "configured" from "answers" is how a dead backend stays invisible.
So reachability is probed, not inferred, and reported separately from configuration. The dollar figures are gone: on a flat subscription they would read zero forever, and a gauge that always says the same thing looks like a working gauge.
| Name | Required | Description | Default |
|---|---|---|---|
| include_models | No | Probe the provider for its model list. Default True. Set False to report configuration without a network call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description explains that reachability is actively probed rather than inferred, and that configuration is reported separately from availability. It also notes removed dollar figures and the reasoning behind them, giving the agent crucial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is succinct and front-loaded, but the rest is a long narrative about HIVE-384, the old output, and design rationale. Most of that detail is not necessary for an AI agent to invoke the tool correctly, so the description is wordier than needed.
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 is behaviorally rich and, together with the output schema and annotations, gives the agent a complete picture. It explains what the tool measures, what is intentionally excluded, and how reachability is resolved, leaving no critical gap for invocation.
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%, so the include_models parameter is already fully documented in the schema. The tool description adds no parameter-specific detail beyond mentioning 'model' as one health dimension, so the baseline 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 opens with 'Show worker health: configuration, reachability, model, and usage,' which is a specific verb plus resource and outcome. It clearly distinguishes the tool's focus from the vault_* siblings by naming its unique scope of worker health.
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 conveys when to use the tool—when worker health/status is needed—but does not explicitly state when not to use it or point to alternatives. The context is clear enough for a watchful agent, but the guidance is implied rather than explicit.
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 tool update
v4.1.0- Changed
delegate_task2 fields changed- added
Input schema / properties / structuredAdded value: +{ + "default": false, + "description": "Return a JSON record instead of prose. Prose is the\ndefault so every existing caller's contract is unchanged; the\ndispatcher asks for JSON because it needs the status as a\nVALUE. Exception types do not survive the JSON-RPC boundary\nbetween the daemon and its clients, so \"the pool refused\" and\n\"the worker answered badly\" cannot be told apart by type on the\nfar side — and a dispatcher that cannot tell them apart turns a\nrate limit into a silent retry against a different model.", + "type": "boolean" +} - added
Input schema / properties / timeout_sAdded value: +{ + "default": 0, + "description": "Per-dispatch deadline in seconds. 0 uses the ambient\ntool timeout. A value ABOVE the ambient one raises the ceiling\nrather than being clamped by it — a deadline a 60s default can\nsilently cap is not a deadline (HIVE-384 AC3).", + "type": "number" +}
2 tool updates
v4.0.0- Changed
delegate_task3 fields changed- removed
Input schema / properties / max_cost_per_requestRemoved value: -{ - "default": 0, - "description": "Max USD. 0 = free models only.", - "type": "number" -} - changed
Input schema / properties / model / defaultPrevious value: -"auto"New value: +"" - changed
Input schema / properties / model / descriptionPrevious value: -"'auto', 'ollama', 'openrouter-free', 'openrouter' (paid), or model ID."New value: +"Concrete model id. Empty uses the configured worker model.\nThe 4.0.0 removal retired 'auto', 'ollama', 'openrouter-free'\nand 'openrouter'; passing one is rejected rather than ignored."
- Changed
worker_status1 field changed- changed
Input schema / properties / include_models / descriptionPrevious value: -"Include available model list from all providers. Default True."New value: +"Probe the provider for its model list. Default True.\nSet False to report configuration without a network call."
3 tool updates
v3.0.0- Changed
vault_delete1 field changed- changed
Input schema / properties / commit / descriptionPrevious value: -"If True (default), stage + commit the deletion. If False,\nunlink on disk but leave the removal staged for a later\n``vault_commit`` (or obsidian-git). Same durability contract as\n``vault_write``."New value: +"Must be True (the default). Unlike ``vault_write``, this\ntool has no deferred mode: it neither uses the commit queue\n(a delete and a recreate inside one tick would collapse to a\nsingle state) nor leaves the removal uncommitted, which is\nthe indefinite deferral ADR-018 §4 removed. ``commit=False``\nis rejected with an explanation rather than silently\nupgraded — see the ADR's 2026-08-09 amendment."
- Changed
vault_patch2 fields changed- changed
Input schema / properties / commit / defaultPrevious value: -trueNew value: +false - changed
Input schema / properties / commit / descriptionPrevious value: -"If True (default), auto-commit. If False, write to disk\nwithout committing — useful for batching many patches into\none ``vault_commit`` flush. See ``vault_write`` docstring for\nthe durability contract."New value: +"If True, commit synchronously before returning.\nDefaults to False, which queues the path for the reconciler.\nSee ``vault_write`` docstring for the durability contract."
- Changed
vault_write2 fields changed- changed
Input schema / properties / commit / defaultPrevious value: -trueNew value: +false - changed
Input schema / properties / commit / descriptionPrevious value: -"If True (default), auto-commit to git. If False, write to\ndisk but leave the file dirty so the caller can batch many\nwrites into one commit via the ``vault_commit`` tool, or let\nobsidian-git's auto-commit pick it up. Durability contract:\nfiles are persisted to disk regardless; only the *commit* is\ndeferred. A crash before the next flush loses the commit, not\nthe file content."New value: +"If True, commit synchronously before returning — the\nescape hatch for a caller that needs the commit to exist by\nthe time the call ends. Defaults to False, which queues the\npath for the reconciler to commit on its next tick (a few\nseconds). Durability contract: the file is persisted to disk\nregardless; only the *commit* is deferred, so a crash before\nthe next flush loses the commit, not the content."
4 tool updates
v1.41.1- Added
vault_ask - Added
vault_delete - Changed
vault_search2 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 0, + "description": "Alias of `max_results` (#202). Prefer `max_results`. When\nboth are given the tighter (smaller) cap wins; 0 = unset.", + "type": "integer" +} - changed
Input schema / properties / max_results / descriptionPrevious value: -"Max files when ranked. Default 10."New value: +"Max result files. Default 10. Caps the file count in\nall modes (flat, ranked, recent); in flat/recent the cap is by\npath order (alphabetical) — use ranked=True for relevance order."
- Changed
vault_write3 fields changed- changed
Input schema / properties / doc_type / descriptionPrevious value: -"Document type for frontmatter. For create mode."New value: +"Document type for frontmatter (create mode). Optional;\ndefaults to \"note\"." - changed
Input schema / properties / operation / descriptionPrevious value: -"'append', 'replace', or 'create'. Default 'append'."New value: +"'append', 'replace', or 'create'. Default 'append'.\n'create' is inferred when path is set and section is empty." - changed
Input schema / properties / path / descriptionPrevious value: -"Relative path for new file. For create mode."New value: +"Relative path for the file. Setting this with no section\ncreates the file (create mode)."
2 tool updates
v1.32.2- Changed
vault_patch1 field changed- added
Input schema / properties / idempotency_keyAdded value: +{ + "default": "", + "description": "Optional at-most-once token. If set, a retry with\nthe same key is a no-op after the first apply (ADR-013). Empty\n(default) disables idempotency.", + "type": "string" +}
- Changed
vault_write1 field changed- added
Input schema / properties / idempotency_keyAdded value: +{ + "default": "", + "description": "Optional at-most-once token. If set, a retry with\nthe same key is a no-op (safe for transparent retries after a\ndaemon restart cuts an in-flight write — ADR-013). Empty\n(default) disables idempotency.", + "type": "string" +}
6 tool updates
v1.23.0- Changed
session_briefing1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Project slug (directory under 10_projects/). Empty =\nlist available projects so the caller can pick one."New value: +"Project slug (directory under 10_projects/). Empty =\nlist available projects so the caller can pick one. This is the\nonly parameter — there is no `days` argument (the briefing\nwindow is fixed)."
- Changed
vault_commit1 field changed- changed
Input schema / properties / message / descriptionPrevious value: -"Commit message. Empty defaults to \"vault: batch update\"."New value: +"Commit message. Empty defaults to \"vault: batch update\".\nThis is the only parameter — there is no `project` argument;\nthe commit spans the whole vault working tree."
- Changed
vault_list2 fields changed- changed
Input schema / properties / path / descriptionPrevious value: -"Subdirectory within the project. Empty = project root."New value: +"Subdirectory within the project. Empty = project root.\n(Use `path`, not `subpath` — `subpath` is accepted as an alias.)" - added
Input schema / properties / subpathAdded value: +{ + "default": "", + "description": "Alias of `path` (#151). Prefer `path`. Note: there is no\n`scope` parameter here — `scope` lives on `vault_search`.", + "type": "string" +}
- Changed
vault_patch3 fields changed- changed
Input schema / properties / find / descriptionPrevious value: -"Exact text to find (single mode). Empty = not set."New value: +"Exact text to find (single mode). Empty = not set.\n(Use `find`/`replace`, NOT `old_string`/`new_string` — those\nare accepted as aliases.)" - added
Input schema / properties / new_stringAdded value: +{ + "default": "", + "description": "Alias of `replace` (#151). Prefer `replace`.", + "type": "string" +} - added
Input schema / properties / old_stringAdded value: +{ + "default": "", + "description": "Alias of `find` (#151). Prefer `find`.", + "type": "string" +}
- Changed
vault_query2 fields changed- added
Input schema / properties / identifierAdded value: +{ + "default": "", + "description": "Alias of `path` (#151). Prefer `path`; for a section\nshortcut use `section` instead.", + "type": "string" +} - changed
Input schema / properties / path / descriptionPrevious value: -"Relative path to a specific .md file within the project. Overrides section."New value: +"Relative path to a specific .md file within the project. Overrides section.\n(Use `path` for a file, not `identifier` — `identifier` is accepted as an alias.)"
- Changed
vault_search2 fields changed- added
Input schema / properties / regexAdded value: +{ + "default": false, + "description": "Alias of `use_regex` (#151). Prefer `use_regex`. To narrow\nby location use `scope` / `project`, not `path_filter` /\n`path_prefix`.", + "type": "boolean" +} - changed
Input schema / properties / use_regex / descriptionPrevious value: -"Treat query as regex. Default False."New value: +"Treat query as regex. Default False. (Use `use_regex`,\nnot `regex` — `regex` is accepted as an alias.)"
TDQS
Most tools have a distinct role, but several retrieval paths overlap: vault_query, vault_search, vault_ask, and delegate_task can all be used to read or summarize vault content, and vault_search's lessons-only mode overlaps capture_lesson's lookup mode. vault_write/replace and vault_patch also offer close update paths, so the boundaries are clear only with careful reading.
The vault_* tools form a clear, consistent namespace and all names are readable snake_case. The set is not perfectly uniform, though: session_briefing and worker_status use domain-plus-noun, while capture_lesson and delegate_task use verb-first names, so the naming convention is cohesive but mixed.
Thirteen tools is a well-scoped size for this domain: content CRUD, search, git commits, health, session context, lesson capture, and worker visibility are all represented without obvious bloat. Each tool appears to earn its place.
The vault surface covers create, read, update, patch, delete, commit, search, health, session startup, lessons, and worker status, which is strong for the stated domain. Minor gaps remain for direct lesson edit/delete operations and file renames/moves, but those can be worked around with the existing vault write/delete tools.
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
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
shared AI-context layer for teams — persistent memory your agents search and update over MCP
- WauldoOAuthcom.wauldo
Stateless agentic tools over MCP: concept extraction, long-context, knowledge graph, planning.
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceThis is a connector to allow Claude Desktop (or any MCP client) to read and search any directory containing Markdown notes (such as an Obsidian vault).1,4441,352AGPL 3.0
- AlicenseAqualityFmaintenanceThis project implements a Model Context Protocol (MCP) server for connecting AI models with Obsidian knowledge bases. Through this server, AI models can directly access and manipulate Obsidian notes, including reading, creating, updating, and deleting notes, as well as managing folder structures.11104312MIT
- AlicenseNot gradedqualityDmaintenanceContext Portal (ConPort): A memory bank MCP server building a project-specific knowledge graph to supercharge AI assistants. Enables powerful Retrieval Augmented Generation (RAG) for context-aware development in your IDE.765Apache 2.0
- AlicenseAqualityFmaintenanceA Model Context Protocol (MCP) server that provides AI assistants with secure access to Obsidian vaults. Enables reading, writing, searching, and managing notes without requiring Obsidian to be running.505,784Apache 2.0
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/mlorentedev/hive'
If you have feedback or need assistance with the MCP directory API, please join our Discord server