Alcove
Alcove is an MCP server that gives AI coding agents on-demand, scoped access to private project documentation — enabling search, retrieval, validation, and management without context bloat.
Browse project docs overview (
get_project_docs_overview): List all documentation files for the current project with sizes and classifications (core, supplementary, public, reference).Search documentation (
search_project_docs): BM25-ranked or grep-based search within the current project or globally across all projects.Read doc files (
get_doc_file): Retrieve full or paginated content of a specific doc file via offset/limit.List all projects (
list_projects): See every project with documentation stored in Alcove.Audit project docs (
audit_project): Cross-repo audit comparing the Alcove doc-repo and project repo, suggesting moves or generation of public docs.Configure per-project settings (
configure_project): Create or update project-specific overrides for diagram format, required core/team/public files.Initialize new project docs (
init_project): Scaffold internal (and optionally external) documentation from templates.Validate documentation (
validate_docs): Check docs against team policy (policy.toml) for required files, sections, and unfilled template placeholders.Rebuild search index (
rebuild_index): Build or fully rebuild the BM25 full-text search index across all projects.Check doc changes (
check_doc_changes): Detect added, modified, or deleted docs since the last index build, with an option to auto-trigger a rebuild.
Additional capabilities include an optional persistent HTTP RAG server to eliminate cold-start latency, support for independent knowledge base vaults, external content promotion (e.g., from Obsidian), and seamless integration with MCP-compatible agents like Claude Code and Cursor.
Alcove is an HTTP API server that gives AI coding agents on-demand access to your private project docs — BM25 + vector hybrid search for precision retrieval, tree-sitter code indexing so agents understand your codebase structure, and policy enforcement for doc consistency. No context bloat, no leaking docs into public repos, no per-project config for every agent.
Demo

Claude, Codex — search · switch projects · global search · validate & generate. One setup.

alcove search· project switch ·--scope global·alcove validate
Related MCP server: mcp-context
The problem
Your AI agent starts every session from zero.
It doesn't know your architecture. It ignores constraints from decisions you already made. It asks you to explain the same things every session.
The context window is the bottleneck. Every token costs money and attention. Loading 10 architecture docs into context wastes 50K+ tokens on every run — and Anthropic's own docs warn that bloated config files make agents ignore your actual instructions.
So you have three bad options:
Stuff everything into agent config — every file loads into context on every run. 10 docs = context bloat = slower, more expensive, less accurate responses.
Copy-paste into every chat — works once, doesn't scale past one session.
Don't bother — your agent invents requirements you already documented, ignores constraints from decisions you already made, and you re-explain the same architecture every Monday morning.
Now multiply it across 5 projects and 3 agents. Every time you switch, you lose context.
How Alcove solves this
Alcove doesn't inject your docs. Agents search for what they need, when they need it.
~/projects/my-app $ claude "/alcove how is auth implemented?"
→ Alcove detects project: my-app
→ BM25 search: "auth" → ARCHITECTURE.md (score: 0.94), DECISIONS.md (score: 0.71)
→ Agent gets the 2 most relevant docs, not all 12~/projects/my-api $ codex "/alcove review the API design"
→ Alcove detects project: my-api
→ Same doc structure, same access pattern
→ Different project, zero reconfigurationSwitch agents anytime. Switch projects anytime. The document layer stays standardized.
Why Alcove
Alcove gives your agents a memory that survives between sessions.
Agents don't load your docs into context. They search for what they need, when they need it. Architecture docs, design decisions, runbooks, constraints — all in one place, searchable, never in your public repo.
Agent config is for agent behavior. Alcove is for project knowledge.
Agent config files ← agent rules, coding conventions, recurring corrections
~/.alcove/docs/my-app/
ARCHITECTURE.md ← tech stack, data model, system design
DECISIONS.md ← why X was chosen over Y
DEBT.md ← known issues, workarounds
... ← agent searches here when it needs contextWithout a doc layer | With Alcove |
Docs in agent config bloat context on every run | Hybrid search (BM25 + RAG) — agents pull only what they need, ranked by relevance |
Agent only sees text docs, not code structure | Tree-sitter code indexing — agents understand modules, functions, and types across 12 languages |
Internal docs scattered across Notion, Google Docs, local files | One doc-repo, structured by project |
Each AI agent configured separately for doc access | One setup, all agents share the same access |
Switching projects means re-explaining context | CWD auto-detection, instant project switch |
Agent search returns random matching lines | Ranked results — best matches first, one result per file |
"Search all my notes about OAuth" — impossible | Global search across every project in one query |
Sensitive docs sitting in project repos | Private docs on your machine, never in public repos |
Doc structure differs per project and team member |
|
No way to check if docs are complete |
|
Stale docs with broken links or WIP markers go unnoticed |
|
Notes from Obsidian or other tools stay siloed |
|
Quick start
Required: Run
alcove setuponce after installation to configure your docs root and enable full functionality. Plugins start the API server automatically, but Alcove cannot search or index documents untilsetuphas been run.Using Obsidian? See the Ecosystem section for the docs structure and vault configuration.
Claude Code
/plugin marketplace add epicsagas/plugins
/plugin install alcove@epicsagasAuto-installs the binary and starts the API server on next session start.
alcove setup # run once after plugin installUpdates with claude plugin update alcove@epicsagas.
Codex CLI
codex plugin marketplace add epicsagas/pluginsAuto-installs the skill and starts the API server. Available immediately — no further steps needed.
Updates with codex plugin update alcove@epicsagas.
macOS (Apple Silicon only)
brew install epicsagas/tap/alcoveNo Homebrew? Use the installer script:
curl --proto '=https' --tlsv1.2 -LsSf \
https://github.com/epicsagas/alcove/releases/latest/download/alcove-installer.sh | shLinux (x86_64)
curl --proto '=https' --tlsv1.2 -LsSf \
https://github.com/epicsagas/alcove/releases/latest/download/alcove-installer.sh | shWindows (x86_64 / ARM64)
Pre-built Windows binaries are not currently published. Build from source:
cargo install alcove --features full-crossAntigravity (Gemini CLI)
agy plugins install https://github.com/epicsagas/alcoveAuto-installs the plugin (API server, skill, hooks) and starts it on next session start.
alcove setup # run once after plugin installVia Rust toolchain
cargo binstall alcove # pre-built binary, includes hybrid search
cargo install alcove --features full-macos # build from source (macOS)
cargo install alcove --features full-cross # build from source (Linux/Windows)Note:
cargo binstalldownloads a pre-built binary with hybrid search (vector + BM25) included. When building from source,--features full-macosor--features full-crossis required for hybrid search support. Without features, only BM25 (keyword) search is available.
First-time setup (required)
After installing via any method above, run:
alcove setup
alcove --version
alcove doctorsetup walks you through everything interactively:
Where your docs live
Which document categories to track
Preferred diagram format
Embedding model for hybrid search
Background server — eliminate cold-start on every session (macOS login item)
Which AI agents to configure (skill files — Claude Code and Codex are handled by their plugin systems)
Re-run alcove setup anytime to change settings. It remembers your previous choices.
Optional dependencies
Tool | Purpose | Install |
| Full PDF text extraction — required for PDF search | macOS: |
Without pdftotext, Alcove falls back to a built-in PDF parser which may fail on some files. Run alcove doctor to check your setup.
Troubleshooting
Agent can't find Alcove tools
Run alcove setup again — it reconfigures the API server for all configured agents. Then start a new agent session (changes take effect on next session start).
Search returns no results
The index may not be built yet. Run alcove index to build it, then try again.
403 Unauthorized from background server
ALCOVE_TOKEN is not set in your shell. Run alcove token to print it, then add export ALCOVE_TOKEN="..." to your shell profile and reload.
alcove doctor reports issues
Follow the suggestions printed by doctor — it checks binary location, API server status, index state, and optional dependencies like pdftotext.
Usage
CLI Search
Search through your documents directly from the terminal. By default, it searches across all projects (global scope).
# Basic search (global scope)
alcove search "authentication"
# Limit search to the current project (auto-detected via CWD)
alcove search "auth flow" --scope project
# Force grep mode (exact substring match)
alcove search "TODO" --mode grep
# Force ranked mode (BM25/Hybrid)
alcove search "data model" --mode ranked
# Adjust result limit
alcove search "deployment" --limit 5Coding Agents (HTTP API)
AI coding agents use Alcove through a local HTTP API. The URL and auth token are resolved once per session with alcove api env:
eval $(alcove api env)
# sets ALCOVE_URL=http://127.0.0.1:<port>
# sets ALCOVE_TOKEN=<token> (only if configured)Agents can verify connectivity with the verify or rag status argument — it checks the daemon, resolves the URL, and calls /health automatically. You don't usually need to call these yourself; the agent will invoke them when you ask questions about your project.
Endpoint | Method | Description |
| GET | Health check — verify the API server is running |
| GET | Search documentation (query parameter) |
| POST | Search with JSON body (supports scope, limit, mode) |
| GET | List all projects in the doc-repo |
| POST | Initialize a new project from templates |
| GET | List docs for a project with sizes and classification |
| GET | Audit doc health (missing, outdated, misplaced) |
| GET | Validate docs against policy.toml |
| PUT | Update project settings in alcove.toml |
| GET | Read a specific doc file (query: |
| POST | Update search index (incremental, all projects) |
| POST | Update search index (single project) |
| GET | Check changed files since last index (query: |
| GET | Lint docs — broken links, orphans, stale markers (query: |
| GET | List all knowledge base vaults |
| GET | Search vaults (query: |
| POST | Git snapshot of vault state |
| POST | Import a file into the doc-repo |
| POST | Index source code via tree-sitter |
| POST | JSON-RPC proxy for all 16 MCP tools (legacy) |
Note: MCP is still available — see
registry/mcp.jsonfor manual MCP setup if you prefer stdio-based access.
Example API calls:
# Health check
curl http://localhost:58301/health
# Search docs
curl "http://localhost:58301/search?q=authentication+flow"
# Advanced search with JSON body
curl -X POST http://localhost:58301/v1/search \
-H "Content-Type: application/json" \
-d '{"query": "api endpoint", "scope": "global", "limit": 5}'Example agent interaction:
User: "/alcove How do I add a new API endpoint?" Agent: (calls
POST /v1/searchwithquery="add api endpoint") Agent: (reads the most relevant doc viaGET /docs/{path}?project=...) Agent: "According toARCHITECTURE.md, you need to..."
How it works
flowchart LR
subgraph Projects["Your projects"]
A1["my-app/\n src/ ..."]
A2["my-api/\n src/ ..."]
end
subgraph Docs["Your private docs (one repo)"]
D1["my-app/\n PRD.md\n ARCH.md"]
D2["my-api/\n PRD.md\n ..."]
P1["policy.toml"]
end
subgraph Agents["Any AI agent"]
AG["Claude Code · Cursor\nCodex · Copilot\n+4 more"]
end
subgraph API["Alcove HTTP API server"]
T["search · get_file\noverview · audit\ninit · validate"]
end
A1 -- "CWD detected" --> D1
A2 -- "CWD detected" --> D2
Agents -- "HTTP :58301" --> API
API -- "scoped access" --> DocsYour docs are organized in a separate directory (DOCS_ROOT), one folder per project. Alcove manages docs there and serves them to any AI agent over HTTP on port 58301.
API Endpoints
Endpoint | Method | What it does |
| GET | Health check — verify the API server is running |
| GET | Search documentation (query parameter) |
| POST | Search with JSON body (scope, limit, mode) |
| GET | List all projects |
| POST | Initialize a new project |
| GET | List docs for a project |
| GET | Audit doc health |
| GET | Validate docs against policy |
| PUT | Update project settings |
| GET | Read a doc file |
| POST | Rebuild search index |
| GET | Check changed files |
| GET | Lint docs |
| GET | List vaults |
| GET | Search vaults |
| POST | Backup vault |
| POST | Import file into doc-repo |
| POST | Index code structure |
| POST | JSON-RPC proxy (legacy MCP) |
Note: MCP is still available for manual setup — see
registry/mcp.jsonfor stdio-based access.
CLI
alcove Start API server (agents call this)
alcove setup Interactive setup — re-run anytime to reconfigure
alcove doctor Check the health of your alcove installation
alcove validate Validate docs against policy (--format json, --exit-code)
alcove lint Semantic lint — broken links, orphans, stale markers (--format json)
alcove promote Bring a file from an external vault into your doc-repo
alcove index Update the search index (incremental — only changed files)
alcove rebuild Rebuild the search index from scratch (use after schema changes)
alcove search Search docs from the terminal
alcove bench Search quality benchmark [--corpus] (precision, latency, regression detection)
alcove index-code Generate code structure index from source [--language LANG] [--source PATH]
alcove token Print the bearer token (for background server auth)
alcove uninstall Remove skills, config, and legacy files
alcove mcp <CMD> Manage background API server lifecycle (start, stop, status, enable, disable)
alcove vault create Create a new knowledge base vault
alcove vault link Link an external directory as a vault (e.g., Obsidian)
alcove vault list List all vaults with document counts
alcove vault remove Remove a vault (symlinks: remove link only)
alcove vault add Add a document to a vault
alcove vault index Build search index for vaults
alcove vault rebuild Rebuild vault search index from scratchCode Indexing
Parse source files with tree-sitter and generate CODE_INDEX.md — a module-level markdown summary of your codebase that integrates with the Tantivy search pipeline.
# Index the current project's source (auto-detects all languages)
alcove index-code --source ./src
# Monorepo: index a directory with multiple languages at once
alcove index-code --source ./
# Restrict to a single language (useful when only one language should be indexed)
alcove index-code --source ./src --language typescript
alcove index-code --source ./src --language rustSupported languages:
Language | Feature flag | File extensions |
Rust |
|
|
Python |
|
|
TypeScript |
|
|
JavaScript |
|
|
Go |
|
|
Java |
|
|
Kotlin |
|
|
C |
|
|
C++ |
|
|
Swift |
|
|
Ruby |
|
|
C# |
|
|
All 12 parsers are enabled in official binaries (lang-all feature). When no --language flag is given, all recognized extensions are indexed automatically — safe for monorepos.
The --language flag accepts both canonical names and common aliases: ts → TypeScript, cpp → C++, csharp → C#, py → Python, js → JavaScript, kt → Kotlin, rb → Ruby.
Lint
# Lint the current project (auto-detected from CWD)
alcove lint
# Lint a specific project by name
alcove lint --project my-app
# Machine-readable output for CI
alcove lint --format jsonLint checks four things:
Check | What it catches |
|
|
| Files that no other document links to |
| WIP / TODO / FIXME / DRAFT / DEPRECATED markers |
| Year mentions that are 2+ years old (e.g. "as of 2022") |
Promote
# Copy a note from Obsidian into your doc-repo (auto-routes to matching project)
alcove promote ~/my-brain/Projects/auth-notes.md
# Route to a specific project
alcove promote ~/my-brain/Projects/auth-notes.md --project my-app
# Move instead of copy
alcove promote ~/my-brain/Projects/auth-notes.md --mvFiles with no matching project land in inbox/ for manual review.
Benchmark
Measure and track search quality with built-in IR metrics and regression detection.
Isolated corpus mode (--corpus) uses a self-contained test dataset (19 synthetic documents, 25 queries) for fast, reproducible CI benchmarks — no real docs needed, completes in under 60 seconds.
# Run against the built-in eval corpus (recommended for CI)
alcove bench --corpus --baseline benches/corpus/baseline.json
# Update the corpus baseline after intentional changes
alcove bench --corpus --save-baseline benches/corpus/baseline.json
# Run against your real docs (50 queries across 10 categories)
alcove bench --metrics precision
# Save as baseline for future comparison
alcove bench --output json --save-baseline benches/baseline.json
# Compare against baseline — detect regressions in CI
alcove bench --baseline benches/baseline.json
# Markdown report
alcove bench --output markdown --output-file bench-report.mdMetric | What it measures |
Precision@K | Fraction of top-K results that are relevant |
Recall@K | Fraction of relevant docs found in top-K |
NDCG@K | Ranking quality with position discounting |
MAP@K | Mean average precision across queries |
MRR | Reciprocal rank of first relevant result |
Chunk accuracy | Whether retrieved chunks fall within correct sections |
Regression thresholds: precision >5%, latency >20%, throughput >15%. Warnings at half the threshold.
Background Server
Running a persistent background server eliminates cold-start latency on every new agent session. alcove setup enables this by default (macOS login item).
alcove mcp enable --now # Enable and start (persists across reboots)
alcove mcp stop / start / restart / status
alcove mcp disable # Disable and remove login itemWhen the background server is running, the stdio process acts as a thin proxy — forwarding requests to the warm server instead of loading the search engine each session. On startup, the stdio process checks GET /health and enters proxy mode automatically.
Note: MCP is still available for users who prefer stdio-based access. See
registry/mcp.jsonfor manual MCP configuration.
Search
Alcove automatically picks the best search strategy. When the search index exists, it uses BM25 ranked search (powered by tantivy) for relevance-scored results. When it doesn't, it falls back to grep. You never have to think about it.
Hybrid Search (RAG)
Alcove supports Hybrid Search which combines BM25 with Vector Similarity Search (powered by fastembed).
During alcove setup, you can choose an embedding model and download it immediately. You can also manage models manually:
# Set and download an embedding model
alcove model set ArcticEmbedXS
alcove model download
# Check model status
alcove model statusChoosing a model
Model | Disk | Dim | Context | Languages | Best for | Peak RAM |
| 90 MB | 384 | 512 | Multilingual | Best default — size/quality | ~400 MB |
| 90 MB | 384 | 512 | Multilingual | Quantized, smaller download | ~400 MB |
| 470 MB | 384 | 512 | 100+ langs | Best Korean/CJK support | ~1.2 GB |
| 600 MB | 1024 | 8192 | 100+ langs | Premium — Dense+Sparse+ColBERT | ~2 GB |
| 430 MB | 768 | 8192 | Multilingual | Long documents | ~1.5 GB |
| 550 MB | 768 | 8192 | Code+English | Code-optimized | ~1.5 GB |
The default model is ArcticEmbedXS (90 MB, multilingual). It offers the best balance of size and quality for most projects.
Embedding models are provided by fastembed-rs (ONNX Runtime) and run entirely locally. To use a different model, set it in config.toml:
[embedding]
model = "BGEM3" # any Variable name from the model docsFor the full list of 40+ supported models with dimensions, context length, and language coverage, see EMBEDDING_MODELS.md.
Once a model is downloaded and ready, Alcove will automatically use Hybrid Search for both CLI search and agent-based MCP tools. This is particularly effective for multilingual projects and complex semantic queries.
# Search the current project (auto-detected from CWD)
alcove search "authentication flow"
# Force grep mode if you want exact substring matching
alcove search "FR-023" --mode grepThe index builds automatically in the background when the API server starts, and rebuilds when it detects file changes. No cron jobs, no manual steps.
How it works for agents: agents just call search_project_docs with a query. Alcove handles the rest — ranking, deduplication (one result per file), cross-project search, and fallback. The agent never needs to choose a search mode.
Index lifecycle
Understanding when to run alcove index vs alcove rebuild:
Command | What it does | When to use |
| Incremental update — only processes new/changed files | Default: run after adding or editing docs |
| Full rebuild — drops and recreates all index data | After changing embedding models, or after index corruption |
First-time setup:
# Step 1: BM25 search is ready immediately after setup
alcove index # builds full-text index (no model needed)
# Step 2: Enable Hybrid Search (optional)
alcove model set ArcticEmbedXS
alcove model download # ~90 MB download
# Step 3: Build vector index for all existing docs
alcove rebuild # one-time full rebuild with embeddings
# ⚠ peak RAM = model size + corpus vectors (see note below)
# After this: incremental updates just work
alcove index # fast — only re-embeds changed filesSwitching models:
alcove model set BGEM3 # change model
alcove rebuild # required: vectors are model-specificMemory during rebuild:
Peak RAM varies by model — see the "Peak RAM" column in the table above. Larger models (BGEM3, ArcticEmbedMLong) can use 1.5–2 GB during rebuild. After rebuild completes, steady-state drops to ~50–200 MB depending on your [memory] config. You can reduce steady-state further with lower max_hnsw_cache and shorter model_unload_secs.
Global search
Every architecture decision, every runbook, every project note — searchable across all your projects at once.
# Search across ALL projects
alcove search "rate limiting patterns" --scope global
alcove search "OAuth token refresh" --scope globalAgents can do the same with scope: "global" in search_project_docs. One query, every project.
Project detection
By default, Alcove detects the current project from your terminal's working directory (CWD). You can override this with the MCP_PROJECT_NAME environment variable:
MCP_PROJECT_NAME=my-api alcoveThis is useful when your CWD doesn't match a project name in your docs repo.
Document policy
Define team-wide documentation standards with policy.toml in your docs repo:
[policy]
enforce = "strict" # strict | warn
[[policy.required]]
name = "PRD.md"
aliases = ["prd.md", "product-requirements.md"]
[[policy.required]]
name = "ARCHITECTURE.md"
[[policy.required.sections]]
heading = "## Overview"
required = true
[[policy.required.sections]]
heading = "## Components"
required = true
min_items = 2Policy files are resolved with priority: project (<project>/.alcove/policy.toml) > team (DOCS_ROOT/.alcove/policy.toml) > built-in default (from your config.toml core files). This ensures consistent doc quality across all your projects while allowing per-project overrides.
Document classification
Alcove classifies docs into tiers:
Classification | Where it lives | Examples |
doc-repo-required | Alcove (private) | PRD, Architecture, Decisions, Conventions |
doc-repo-supplementary | Alcove (private) | Deployment, Onboarding, Testing, Runbook |
reference | Alcove | Audit reports, benchmarks, analysis |
project-repo | Your GitHub repo (public) | README, CHANGELOG, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, LICENSE, QUICKSTART |
The audit tool scans both your doc-repo and local project directory, then suggests actions — like generating a public README from your private PRD, or pulling misplaced reports back into Alcove.
Configuration
Config lives at ~/.config/alcove/config.toml:
docs_root = "/Users/you/documents"
[core]
files = ["PRD.md", "ARCHITECTURE.md", "PROGRESS.md", "DECISIONS.md", "CONVENTIONS.md", "SECRETS_MAP.md", "DEBT.md"]
[team]
files = ["ENV_SETUP.md", "ONBOARDING.md", "DEPLOYMENT.md", "TESTING.md", ...]
[public]
files = ["README.md", "CHANGELOG.md", "CONTRIBUTING.md", "SECURITY.md", ...]
[diagram]
format = "mermaid"
[server]
host = "127.0.0.1" # bind address (0.0.0.0 for all interfaces)
port = 57384 # listen port
token = "alcove-a3f7b2..." # auto-generated bearer token
[memory]
reader_ttl_secs = 300 # evict idle IndexReader after N seconds (0 = never)
max_cached_readers = 1 # max concurrent IndexReader instances in RAM
model_unload_secs = 600 # unload embedding model after N seconds of inactivity (0 = never)
max_hnsw_cache = 3 # max HNSW graphs held in memory simultaneouslyAll of this is set interactively via alcove setup. You can also edit the file directly.
Memory usage note: During initial indexing or a full rebuild, Alcove loads the embedding model (~235–500 MB) and holds all document vectors in RAM while constructing the HNSW graph — peak usage scales with corpus size and is unavoidable for that operation. The [memory] settings above control steady-state RAM after indexing is complete.
File lists are fully customizable — add any filename to any category, or move files between categories to match your team's workflow:
[core]
files = ["PRD.md", "ARCHITECTURE.md", "DECISIONS.md", "MY_SPEC.md"] # added custom doc
[public]
files = ["README.md", "CHANGELOG.md", "PRD.md"] # PRD exposed as public for this projectSupported agents
Agent | Access | Skill |
Claude Code |
|
|
Cursor |
|
|
Claude Desktop | platform config | — |
Cline (VS Code) | VS Code globalStorage |
|
OpenCode |
|
|
Codex CLI |
|
|
Copilot CLI |
|
|
Antigravity |
| — |
/alcove Summarize current project docs and status
/alcove search auth flow Search docs for a specific topic
/alcove what conventions apply? Ask a doc question directlySupported languages
The CLI automatically detects your system locale. You can also override it with the ALCOVE_LANG environment variable.
Language | Code |
English |
|
한국어 |
|
简体中文 |
|
日本語 |
|
Español |
|
हिन्दी |
|
Português (Brasil) |
|
Deutsch |
|
Français |
|
Русский |
|
# Override language
ALCOVE_LANG=ko alcove setupUpdating
Method | Command |
Homebrew |
|
curl installer | Re-run the install script above |
cargo binstall |
|
cargo install |
|
Claude Code Plugin |
|
alcove --versionUninstall
alcove uninstall # remove skills & config
cargo uninstall alcove # remove binaryKnowledge Base Vaults
Beyond project documentation, Alcove supports independent knowledge base vaults for research notes, reference materials, and curated knowledge that LLMs can search.
# Create a vault for AI research notes
alcove vault create ai-research
# Link an existing Obsidian vault (no copying — indexes in place)
alcove vault link my-obsidian ~/Obsidian/research
# Add a document
alcove vault add ai-research ~/Downloads/transformer-survey.md
# Build the vault search index
alcove vault index
# List all vaults
alcove vault list
# areas (8 docs) → (linked)
# resources (71 docs) → (linked)
# zettelkasten (17 docs) → (linked)
# Search from CLI
alcove search "attention mechanism" --vault ai-research
# Agents search via MCP
search_vault(query="attention mechanism", vault="ai-research")
# Search ALL vaults at once
search_vault(query="transformer", vault="*")Vaults are completely isolated from project docs — separate indexes, separate caches, separate search. Your coding agent's project doc search is never affected by vault activity.
Feature | Project docs | Vaults |
Purpose | Per-project documentation | General knowledge base |
Storage |
|
|
Index | Shared project index | Independent per-vault index |
Cache |
|
|
Search |
|
|
Symlink | No | Yes (link external dirs) |
Vault Configuration
By default, vaults are stored in ~/.alcove/vaults/. You can change this in your config.toml:
[vaults]
root = "/path/to/your/vaults"Refer to the Configuration section for more details on config.toml.
Ecosystem
obsidian-forge
Alcove pairs naturally with obsidian-forge, an Obsidian vault generator and automation daemon. For the best integration, your alcove docs_root should point to the obsidian-forge project archives.
1. Set Documents Root Point your primary docs to the obsidian-forge project directory (directly or via symlink):
# During alcove setup, set docs_root to:
~/Obsidian/SecondBrain/99-Archives/projects2. Link Knowledge Areas as Vaults
Link the other three obsidian-forge categories as independent alcove vaults. This creates symlinks in ~/.alcove/vaults/:
# Link obsidian-forge categories
alcove vault link areas ~/Obsidian/SecondBrain/02-Areas
alcove vault link resources ~/Obsidian/SecondBrain/03-Resources
alcove vault link zettelkasten ~/Obsidian/SecondBrain/10-ZettelkastenNow your agents have structured access:
search_project_docs: Searches archived project knowledge (PRDs, etc.)search_vault: Searches your broader knowledge areas and research notes.
You can verify the physical storage mapping by checking the symlinks in ~/.alcove/vaults/.
FAQ
Why not just use ripgrep as an MCP tool?
Ripgrep returns entire files. If your agent searches for "auth" and hits 5 files averaging 200 lines each, that's ~10K tokens injected into context — most of it irrelevant. Alcove chunks documents, ranks the chunks, and returns only the most relevant passages. It also provides semantic search (vector embeddings) that ripgrep cannot — a query like "how is the deployment pipeline structured" won't match any keyword in your DEPLOYMENT.md, but Alcove's vector search will find it.
Does this replace CLAUDE.md / AGENTS.md?
No — they serve different purposes. Agent config files (CLAUDE.md, AGENTS.md) define behavioral rules: commit style, language preferences, safety constraints. Alcove manages institutional knowledge: architecture decisions, progress tracking, coding conventions, code structure. Agent config is for how the agent should act. Alcove is for what the agent should know.
Why Rust?
Single binary, no runtime dependency. Tantivy is best-in-class BM25. fastembed (ONNX Runtime) gives us local vector embeddings without Python. One cargo install or curl — no Docker, no Node.js, no virtualenv.
What about context windows getting bigger?
Bigger windows don't solve the relevance problem. Even a 200K-token window filled with irrelevant docs degrades agent output quality — Anthropic's own documentation warns that bloated config files cause agents to ignore actual instructions. The goal isn't more context, it's the right context at the right time.
Roadmap
Multi-user remote access — team doc sharing over LAN/VPN (bearer token auth, rate limiting already implemented). Requires: write API, concurrent index coordination, project lifecycle management.
Contributing
Bug reports, feature requests, and pull requests are welcome. Please open an issue on GitHub to start a discussion.
Acknowledgments
The temporal validity model (valid_until / last_verified with query-time expiry exclusion) was informed by the lifecycle schema of Data Olympus by @ajdelaguila (discussion in #37).
License
Apache-2.0
Available Tools
15 toolsaudit_projectA
Audit documentation health across both the alcove doc-repo (private/internal) and the project repository (public-facing).
Use this tool when the user wants to know what docs are missing, outdated, or misplaced — for example: 'audit my docs', 'what docs am I missing?', 'check my documentation health'.
Scans two locations:
alcove doc-repo: checks for missing required internal docs
project repo root + docs/: checks for missing public-facing docs
Suggests actions such as generating missing public docs from internal content, or incorporating project repo materials into alcove. NEVER suggests exposing raw internal docs to the project repo.
IMPORTANT: This tool only reports findings. Always present the results to the user and ask which actions to proceed with before calling init_project or configure_project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly explains that the tool only reports findings and scans two locations, suggesting actions but not executing them. It also includes an important caution about not exposing raw internal docs. However, without annotations, it could be more explicit about being read-only, though the description implies it.
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 sections and bullet points, but it is slightly verbose. Every sentence adds value, and the main purpose is front-loaded. A minor trim could achieve a 5.
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 parameters and no output schema, the description fully explains the tool's purpose, usage, behavior, and caveats. There is no missing information for an agent to understand and invoke the tool 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?
There are no parameters, so the schema provides full coverage. The description adds significant meaning by detailing the two scan locations and the tool's reporting nature, which is valuable 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 audits documentation health across two specific locations (alcove doc-repo and project repo). It uses a specific verb 'audit' and resource 'documentation health', and distinguishes from sibling tools like init_project and configure_project by noting it only reports findings.
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 states when to use the tool (when user wants to know missing/outdated/misplaced docs) with example queries. It also provides guidance on what not to do (never suggest exposing raw internal docs) and directs the agent to always ask the user before proceeding with init_project or configure_project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backup_vaultA
Create a git commit snapshot of a vault's current state.
Use this tool when the user asks to back up, sync, or save the current state of their knowledge base vault. Runs git add -A && git commit with a conventional commit message containing a timestamp.
If vault_name is provided, backs up only that vault. If omitted, backs up all vaults.
If the vault directory is not a git repository, it will be initialized automatically. If there are no changes to commit, returns a 'no_changes' status rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| vault_name | No | Name of the vault to back up. Omit to back up all vaults. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It clearly explains the tool runs git commands, automatically initializes a git repo if missing, and returns a 'no_changes' status instead of an error when there are no changes. This adequately informs the agent of side effects and edge cases.
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 exceptionally concise, with the main purpose stated in the first sentence. Subsequent details are logically organized: use case, behavior with vs without parameter, auto-init, and no-change response. Every sentence adds value 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 the tool has no output schema, the description fully compensates by detailing return behavior (including the 'no_changes' status), git operations, and initialization logic. This covers all essential aspects a developer or AI agent would need to invoke the tool 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% as the only parameter 'vault_name' is documented. The description adds value by explaining the effect of omitting the parameter (backs up all vaults), which goes beyond the schema description that merely states 'omit to back up all vaults.' This provides actionable insight.
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 'Create a git commit snapshot of a vault's current state,' which clearly specifies the verb ('create snapshot'), resource ('vault'), and mechanism ('git commit'). This distinguishes it from sibling tools like 'audit_project' or 'check_doc_changes' which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'when the user asks to back up, sync, or save the current state.' It also explains the behavior for vault_name provided vs omitted, guiding usage. However, it does not mention when not to use it or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_doc_changesA
Check which documentation files have been added, modified, or deleted since the last index build.
Use this tool before search_project_docs when you want to ensure the index is up to date, or when the user asks whether docs have changed recently. It is safe to call at any time — without auto_rebuild it is read-only and has no side effects.
Compares current file timestamps against the stored index metadata. Returns a list of changed files grouped by status: added, modified, deleted.
Set auto_rebuild=true to automatically trigger rebuild_index if any changes are detected, avoiding a separate tool call. If no index exists yet, reports all files as new.
| Name | Required | Description | Default |
|---|---|---|---|
| auto_rebuild | No | Automatically rebuild the index if changes are detected (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the comparison mechanism, return format (grouped by status), and the effect of auto_rebuild. Discloses that without auto_rebuild it is read-only with no side effects. 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?
Concise, well-structured sentences. No wasted words; each sentence adds value. Front-loaded with purpose, followed by usage, mechanism, return, and parameter details.
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?
Completely describes what the tool does, when to use, mechanism, return value, and parameter behavior. Adequate for a single-parameter tool with no 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?
Input schema has 100% coverage with a clear description. The description adds usage context for the auto_rebuild parameter, justifying a score above baseline.
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 checks for added, modified, or deleted documentation files since the last index build. It uses a specific verb and resource, and distinguishes from siblings like rebuild_index and search_project_docs.
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 to use before search_project_docs to ensure index freshness or when user asks about changes. Also states it is safe without auto_rebuild, providing clear when-to-use and safety guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_projectA
Create or update per-project settings in alcove.toml. Each project can override global defaults for: diagram format, required core docs, team docs, and public docs. Only the fields you specify are changed; unmentioned settings are preserved. Run init_project first if the project does not yet exist.
| Name | Required | Description | Default |
|---|---|---|---|
| core_files | No | Required internal docs for this project (overrides global core list) | |
| diagram_format | No | Diagram syntax to use in this project's docs (e.g. "mermaid", "plantuml") | |
| project_name | Yes | Name of the project to configure | |
| public_files | No | Public-facing docs recognized for this project | |
| team_files | No | Supplementary team docs recognized for this project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool is a create-or-update operation that only modifies specified fields, leaving others intact. However, it does not mention potential side effects like file locking, authorization requirements, or error conditions. For a configuration tool, this is adequate but not exhaustive.
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 consists of four concise sentences, each providing essential information: what the tool does, what settings can be overridden, the partial update behavior, and the prerequisite. There is no redundant or extraneous content, and the structure front-loads the core purpose.
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 moderate complexity of a configuration tool with 5 parameters and no output schema, the description covers purpose, usage, and parameter overview. However, it does not indicate what the tool returns (e.g., success/failure confirmation), which is a gap that could hinder the agent's understanding of the tool's outcome.
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 high description coverage (100%) for all parameters, providing clear definitions. The description adds an overview of parameter categories but does not introduce new semantic nuances beyond what is in the schema. Therefore, the value added is minimal, and a 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 the verb 'Create or update' and the resource 'per-project settings in alcove.toml', specifying the fields that can be overridden. It distinguishes from the sibling tool 'init_project' by explicitly requiring it as a prerequisite, ensuring the agent knows when to use which.
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 when-to-use guidance and a clear precondition: 'Run init_project first if the project does not yet exist.' It also explains partial updates: 'Only the fields you specify are changed; unmentioned settings are preserved.' This helps the agent decide when and how to invoke the tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_doc_fileA
Read the full content of a specific documentation file by its relative path.
Use this tool when you know the exact file to read — typically after get_project_docs_overview or search_project_docs has identified the relevant file. It is read-only and has no side effects.
For large files, use offset and limit to read in chunks and avoid exceeding context limits. offset is a character (not line) position. Omit both to read the entire file.
Returns an error if the file does not exist or the path is outside the doc root.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max characters to return (default: entire file). Use together with offset to read in chunks. | |
| offset | No | Character offset to start reading from (default: 0). Use for paginating large files. | |
| relative_path | Yes | Path relative to the project doc root (e.g. "PRD.md" or "reports/weekly.md") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description fully covers behavioral traits: declares read-only with 'no side effects,' explains chunking behavior, and documents error conditions (file not found or path out of bounds).
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 (5 sentences) with no filler. Purpose is front-loaded, usage guidance follows, and technical details are efficiently presented. 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 tool with 3 parameters and no output schema, the description covers all essential aspects: purpose, when to use, parameter semantics, chunking, and error handling. The agent has sufficient information to invoke the tool 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% with good descriptions, but the description adds crucial context: explains that offset is character-based, describes default behaviors, and clarifies the omit-to-read-entire-file pattern, going beyond what the 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 starts with a clear verb+resource: 'Read the full content of a specific documentation file by its relative path.' It distinguishes itself from siblings like search_project_docs and get_project_docs_overview by focusing on reading a known file.
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 states when to use: 'when you know the exact file to read' and provides a typical workflow after using other tools. Also addresses large file handling with offset/limit, giving clear guidance on chunking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_docs_overviewA
List all documentation files for the current project with file sizes and classification labels.
Call this tool first when the user asks what docs exist, wants a summary of project documentation, or before deciding which files to read. It is read-only and has no side effects.
Scans two locations: the alcove doc-repo (private/internal docs) and the project repository root + docs/ (public-facing docs).
Classification labels:
doc-repo-required: core internal docs required by policy (e.g. PRD, ARCHITECTURE)
doc-repo-supplementary: optional internal extras
project-repo: public-facing docs in the project repo (e.g. README, CHANGELOG)
reference: reports and reference materials
unrecognized: files not matching any known category
Returns an empty list if no docs exist yet. Use init_project to create initial docs.
| 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 fully discloses behavior: scans two locations, classification labels, empty list return, and read-only nature. 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?
Well-structured and concise: first sentence states purpose, then usage advice, then details about locations and classifications. Front-loaded with key information; 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?
Covers all needed information: purpose, when to use, where it scans, classification labels, edge case (empty list), and reference to related tool. No missing details given lack of 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?
There are no parameters, so schema coverage is 100%. Baseline for 0 params is 4. The description adds no parameter info, which 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?
Clearly states it lists documentation files with sizes and classification labels. The verb 'List' and resource 'documentation files for the current project' are precise, and the description distinguishes from siblings like get_doc_file and init_project.
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 advises to call this tool first when the user asks about docs or wants a summary. It notes it is read-only with no side effects. While it does not explicitly list when not to use it, it provides clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_projectA
Initialize documentation for a new project from alcove templates. Creates internal docs (PRD, Architecture, etc.) in the alcove doc-repo. When project_path is provided, also creates external docs (README, CHANGELOG, QUICKSTART) in the project repository. Use the 'files' parameter to create only specific documents. Without 'files', creates all missing internal required docs.
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | Specific files to create (e.g. ["PRD.md", "ARCHITECTURE.md"]). If omitted, creates all Tier 1 docs. | |
| overwrite | No | Overwrite existing files (default: false) | |
| project_name | Yes | Name of the project to initialize docs for | |
| project_path | No | Absolute path to the project repository (for creating external docs like README) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description fully discloses behavior: it creates files in specific locations, handles missing docs automatically, and respects the overwrite parameter. No contradictions or hidden effects are implied.
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, using three sentences that efficiently convey the tool's purpose, customization options, and behavior. Every sentence adds value 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 main functionality, customization via parameters, and conditional behavior. It lacks details about return values or error handling, but given the tool's complexity and lack of output schema, it is largely complete for an initialization 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 meaningful context beyond the schema: it explains the dual purpose of project_path (external docs) and that omitting 'files' triggers creation of all missing internal required docs. This adds value above 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 states the tool initializes documentation for a new project using templates, specifying internal (PRD, Architecture) and external (README, CHANGELOG, QUICKSTART) docs. This distinguishes it from sibling tools like lint or validate.
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 context: when project_path is given, external docs are also created; the 'files' parameter selects specific documents; without 'files', all missing internal required docs are created. However, it does not explicitly mention when not to use this tool or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_projectA
Lint project documentation for semantic issues: broken links, orphaned files, stale markers (WIP/TODO/FIXME/DRAFT/DEPRECATED), and stale year references.
Use this tool when the user asks to check doc quality beyond policy compliance, find broken internal links, locate TODO/WIP content, or audit doc hygiene.
Checks:
broken-link (warning): wikilinks [[target]] or markdown links text that resolve to no file
orphan (info): files not linked from any other document (index/readme/moc excluded)
stale-marker (warning): files containing WIP, TODO, FIXME, DRAFT, DEPRECATED, DO NOT USE, OUTDATED
stale-date (info): files mentioning a year that is 2+ years in the past
Optionally filter by project name. If omitted, scans all projects.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Project name to lint (omit for all projects) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although no annotations are provided, the description clearly conveys that the tool is read-only (linting) and lists the checks performed. It does not explicitly state that it does not modify files, but the context implies analysis. It could be improved by confirming no side effects.
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: first sentence states purpose, followed by usage context, then a bullet list of checks, and finally the optional parameter. Every sentence adds value, and the information 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 there is no output schema, the description adequately explains what the tool returns (checks with type) and covers all necessary aspects: purpose, when to use, what it checks, and parameter usage. It is complete for a lint 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 schema provides full coverage (100%) for the single parameter 'project'. The description adds value by explaining the effect of omitting the parameter (scans all projects), which goes beyond the schema's description. Hence, above baseline.
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: linting project documentation for semantic issues. It lists specific check types (broken links, orphan files, stale markers, stale dates) which distinguishes it from sibling tools like audit_project or validate_docs that focus on other aspects.
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 states when to use this tool (e.g., check doc quality, find broken links, audit hygiene) and mentions the optional project filter. However, it lacks explicit when-not-to-use guidance or alternatives, which would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
List all projects that have documentation stored in the alcove doc-repo.
Use this tool when:
The user asks which projects are available or tracked in alcove
You need to verify a project exists before calling get_project_docs_overview or search_project_docs
The user wants to switch project context or compare projects
Before using scope="global" in search_project_docs to understand what will be searched
It is read-only and has no side effects. Does not require any parameters.
Returns an array of project names derived from subdirectory names in the alcove doc-repo. Returns an empty array if no projects have been initialized yet — use init_project to create one. Project names are case-sensitive and match the directory names exactly.
| 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: read-only, no side effects, no parameters, returns array of project names, empty array if no projects, case-sensitive. This is 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 structured with a purpose statement, bullet list of use cases, and behavioral details. Every sentence is meaningful, and it is concise 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 list tool with no parameters and no output schema, the description is fully complete: it explains what is returned, the source, case sensitivity, and empty case behavior.
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 has no parameters, and the description confirms 'Does not require any parameters.' Since schema coverage is 100% trivially, the description adds value by clarifying the lack of parameters. Baseline 4 for 0-parameter tools.
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 'List all projects that have documentation stored in the alcove doc-repo', providing a specific verb and resource. It distinguishes from sibling tools by focusing on listing vs. other operations like search, init, 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?
The description lists four explicit scenarios when to use the tool, such as verifying project existence before calling get_project_docs_overview, and mentions using it before scope='global' search. It provides clear when-to-use and alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vaultsA
List all knowledge base vaults with their document counts.
| 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 implies a read operation but does not disclose potential behaviors like authentication needs, rate limits, or pagination. For a simple list operation, the transparency is adequate but not rich.
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 a single sentence, front-loaded with the verb and resource. It is concise and contains 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 simplicity of the tool (no parameters, no output schema, no annotations), the description is largely complete. It explains the scope 'all' and the inclusion of document counts. Missing details like sorting or pagination are acceptable for a basic list all operation.
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% with zero parameters. The description does not need to add parameter info. It does not provide any additional meaning beyond the schema, which is empty.
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 uses a specific verb 'List' and a clear resource 'knowledge base vaults', and adds 'with their document counts' for extra detail. It clearly distinguishes from sibling tools like backup_vault or search_vault which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states that it lists all vaults, providing clear context for when to use. However, it does not explicitly mention when not to use or contrast with alternatives like search_vault for searching within vaults.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
promote_documentA
Promote a document from an external vault (e.g. Obsidian) into the alcove doc-repo.
Use this tool when the user wants to import, migrate, or copy a file from outside alcove into the appropriate project directory.
If 'project' is not specified, the target project is auto-detected by matching the file name and content keywords against known project directory names. Falls back to the 'inbox/' directory if no match is found.
By default, the file is copied (safe). Set copy=false to move it instead.
| Name | Required | Description | Default |
|---|---|---|---|
| copy | No | Copy the file (true, default) or move it (false) | |
| project | No | Target project name (auto-detected if omitted) | |
| source | Yes | Absolute path to the source file to promote |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses auto-detection of project, fallback to inbox, and copy vs move behavior. No annotations exist, so description carries full burden. It provides sufficient transparency beyond simple mutation.
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 succinct sentences: purpose, usage, auto-detection, copy/move default. Front-loaded with no redundant 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?
Covers key behaviors and parameters. Lacks output specification, but for a simple import tool this is acceptable. Could hint at return value (e.g., confirmation 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?
Schema coverage is 100% but description adds meaning: copy default true, project auto-detected, source absolute path. Each parameter gets extra context beyond schema descriptions.
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: 'Promote a document from an external vault (e.g. Obsidian) into the alcove doc-repo.' This distinguishes it from sibling tools like get_doc_file or search_vault, which deal with internal documents.
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 this tool when the user wants to import, migrate, or copy a file from outside alcove.' Provides context but does not explicitly list when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rebuild_indexA
Trigger an incremental index update in the background. Returns immediately — the agent is not blocked while indexing runs. Run this after adding or updating documents. Search results will reflect the new documents once indexing completes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavior: returns immediately without blocking, and search results reflect changes after completion. No annotations provided, so description carries burden; it does so well for a simple async 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?
Three concise sentences, each providing essential information: action, blocking behavior, usage trigger, and effect. No superfluous 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?
Covers purpose, when to use, and async behavior. Lacks mention of idempotency or error conditions, but given simplicity and absence of output schema, completeness is adequate.
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?
No parameters exist; schema coverage is 100%. Description adds no parameter info, which is acceptable for a tool with zero inputs. Baseline score of 4 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 'Trigger an incremental index update' with a specific verb and resource. It distinguishes itself from sibling tools like search_project_docs or list_projects by focusing on background indexing.
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 'Run this after adding or updating documents,' providing clear usage context. Omits mention of when not to use or alternatives, but the sibling set does not offer a similar rebuild tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_project_docsA
Search documentation files for a keyword or phrase. Automatically uses BM25 ranked search when index is available, falls back to grep (substring match) otherwise.
scope="project" (default): current project only, based on CWD. scope="global": search across ALL projects in the doc repository.
Use global scope when the user:
does not specify a project, or says 'all projects', 'everywhere', 'across projects'
references previously saved notes, knowledge, or past decisions
wants to compare how different projects handle the same topic
uses words like 'find everywhere', 'search everything', 'all docs'
asks in Korean: '전체', '모든 프로젝트', '다른 프로젝트에서는'
Use project scope (default) when the user asks about the current project context.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default: 20) | |
| mode | No | Override search mode. Options: "grep" (regex-only search, skips BM25 index). Omit for default hybrid search. | |
| query | Yes | Search query | |
| scope | No | Search scope: 'project' (default, current project only) or 'global' (all projects). Omit or set to 'project' for current project. |
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 automatic BM25 fallback to grep and scope behavior. However, it doesn't describe what the output looks like (e.g., file names, snippets) or mention any rate limits or auth requirements, which would enhance transparency.
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 bullet points for scope guidance, and the main purpose is front-loaded. While every sentence adds value, it could be slightly more streamlined. Overall, it's appropriately sized 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 no output schema and 4 parameters, the description thoroughly explains search behavior and scope usage. It does not describe the return format or what happens with no results, but for a search tool, it covers the essential aspects for 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%, and the description adds significant value beyond the schema: it explains the default scope derived from CWD, provides concrete examples of when to use each scope (including Korean), and clarifies the mode parameter's effect (skipping BM25 index).
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 searches documentation files for a keyword/phrase, specifying two search mechanisms (BM25 ranked and grep) and two scopes (project and global). It distinguishes itself from sibling tools like 'search_vault' by targeting project docs specifically.
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 and actionable guidance on when to use global vs project scope, including specific user language examples (e.g., 'all projects', 'everywhere', Korean phrases). It also implies default behavior for project scope. Though it doesn't mention alternatives like 'search_vault', the sibling list makes the differentiation clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vaultA
Search knowledge base vaults for a query. Use this to find information in research notes, reference materials, and curated knowledge bases — separate from project documentation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default: 20) | |
| query | Yes | Search query | |
| vault | No | Vault name to search. Omit or use '*' to search all vaults. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry burden. It does not mention any side effects, authentication needs, or rate limits. However, as a search tool, it is likely read-only and safe. A mention of read-only nature would improve transparency.
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 redundancy. The first sentence states purpose, the second adds usage context. 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 3 parameters, all described in schema, and no output schema, the description is sufficient. It provides the key context of separation from project documentation. Could mention return format but not critical.
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 baseline is 3. Description adds context on usage but does not elaborate on parameter semantics beyond what schema already provides (limit, query, vault). Adequate but no added value for parameter 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?
Clearly states action (search), resource (knowledge base vaults), and distinguishes from project documentation by explicitly saying 'separate from project documentation', which helps differentiate from sibling tool search_project_docs.
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?
Tells when to use: for research notes, reference materials, curated knowledge bases. Implicitly says not to use for project documentation. Also mentions option to search all vaults by omitting vault parameter or using '*', providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_docsA
Validate the current project's documentation against the team policy defined in policy.toml.
Use this tool when the user asks to check doc quality, run a policy check, or verify docs before a release. It is read-only and does not modify any files.
Checks performed:
Required files exist
Template placeholders (e.g. TODO, FIXME) have been filled in
Required section headings are present
Lists meet minimum item counts defined in policy
Returns a pass/warn/fail status per file with specific details about each violation. If no policy.toml exists, returns a message indicating policy is not configured. Use configure_project or init_project to set up policy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, description discloses read-only nature, checks performed, and fallback behavior for missing policy. Only minor omission is potential scope of doc scanning, but overall 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?
Description is structured front-loaded with purpose and usage, then detailed checks and return. Sentences are efficient, though slightly verbose but not excessive.
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 no annotations, description covers key aspects: purpose, usage, checks, and return format. Slight gap in exact output structure, but sufficient for agent understanding.
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 no parameters (0 params), so baseline is 4. Description adds context about validation without needing parameter details.
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 verb 'validate' and the resource 'current project's documentation against policy.toml'. It distinguishes from siblings like lint_project by emphasizing policy compliance checks.
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 when to use: 'user asks to check doc quality, run a policy check, or verify docs before a release'. Also advises use of configure_project if policy missing, providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.8.6- Added
backup_vault
6 tool updates
v0.7.9- Changed
get_doc_file2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max characters to return (default: all)"New value: +"Max characters to return (default: entire file). Use together with offset to read in chunks." - changed
Input schema / properties / offset / descriptionPrevious value: -"Character offset to start reading from (default: 0)"New value: +"Character offset to start reading from (default: 0). Use for paginating large files."
- Added
lint_project - Added
list_vaults - Added
promote_document - Changed
search_project_docs1 field changed- added
Input schema / properties / modeAdded value: +{ + "description": "Override search mode. Options: \"grep\" (regex-only search, skips BM25 index). Omit for default hybrid search.", + "enum": [ + "grep" + ], + "type": "string" +}
- Added
search_vault
10 tool updates
v0.7.10- First observed
audit_project - First observed
check_doc_changes - First observed
configure_project - First observed
get_doc_file - First observed
get_project_docs_overview - First observed
init_project - First observed
list_projects - First observed
rebuild_index - First observed
search_project_docs - First observed
validate_docs
TDQS
Scored across 15 tools
Most tools have distinct purposes (audit vs. validate vs. lint could overlap, but descriptions clarify: audit focuses on missing/outdated, validate on policy, lint on semantic issues). Some overlap exists between search_vault and search_project_docs, but scope separation is clear.
Most tools follow a verb_noun pattern (get_project_docs_overview, search_project_docs, list_projects, configure_project). Minor deviations like 'promote_document' and 'check_doc_changes' are still consistent in style. Slight inconsistency in count (some use 'docs' vs 'document').
15 tools is well-scoped for a documentation management server, covering viewing, searching, initialization, configuration, validation, linting, indexing, and vault operations. Each tool serves a clear purpose without feeling excessive.
Covers the main lifecycle: init (init_project), read (get_doc_file, search_project_docs), update (import via promote_document, rebuild_index), and quality checks (audit, validate, lint). Minor gaps include no direct doc editing/update tool and no delete tool, but agents can use file system tools externally.
Maintenance
Related MCP Connectors
An MCP server that gives your AI access to the source code and docs of all public github repos
Hosted MCP memory: save sessions/decisions once, search from Claude, Cursor, ChatGPT. EU-hosted FTS.
DocBase MCP server for AI agents
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP Server for persistent code indexing. Gives AI assistants (Claude, Gemini, Copilot, Cursor) instant access to your codebase. 50x less context than grep.22141 npm43MIT
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that provides semantic search (RAG) over code repositories, enabling AI clients like Claude and Gemini to access project context without manual re-upload.-
- AlicenseNot gradedqualityBmaintenanceA local MCP server that gives AI coding assistants retrieval access to your personal knowledge base of books, standards, and docs, grounding their answers in sources you trust.MIT
- AlicenseAqualityDmaintenanceA local-first document retrieval MCP server that enables AI coding tools like Codex to search private local documents via semantic search and keyword boost, supporting ingestion of PDF, DOCX, TXT, Markdown, and HTML files.7MIT