vault-health-mcp
Allows checking and repairing Obsidian vault structural health, including broken wikilinks, orphaned notes, and missing frontmatter.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vault-health-mcpcheck my vault for broken links and orphans"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
vault-health-mcp
MCP server for Obsidian vault structural health checks.
Find broken wikilinks, orphaned notes, and missing frontmatter — then auto-repair them. Works with any Obsidian vault, no plugins required.
Install
pip install vault-health-mcpRelated MCP server: obsidian-markdown-lint-mcp-server
Usage
Claude Code
claude mcp add vault-health -- vault-health-mcp --vault ~/my-vaultClaude Desktop
{
"mcpServers": {
"vault-health": {
"command": "uvx",
"args": ["vault-health-mcp", "--vault", "/path/to/vault"]
}
}
}MCP Tools
Tool | Tier | Description |
| Free | Point the server at a vault at runtime |
| Free | Full structural scan: broken links, orphans, missing frontmatter |
| Free | List all structurally disconnected leaf notes |
| Free | List all wikilinks pointing to non-existent files |
| Free | File count, link count, orphan %, frontmatter coverage |
| Pro | Auto-fix safe issues (add-only, never deletes) |
How auto-repair works (Pro)
repair_vault only makes additive changes:
Broken
[[links]]→ replaced with plain text (the link text is preserved)Missing frontmatter → adds a default YAML block with title and type
It never deletes files, removes content, or modifies existing frontmatter values.
Pro tier
The free tier detects every category of vault rot. The Pro tier unlocks repair_vault — one call to fix the safe categories automatically.
License activation — any one of these works:
# 1. Environment variable
export VAULT_HEALTH_LICENSE="eyJhbGc..."
# 2. CLI flag
vault-health-mcp --license-key "eyJhbGc..." --vault ~/my-vault
# 3. Config file
echo "eyJhbGc..." > ~/.vault-health-mcp/license.jwtLicenses are verified fully offline — no phone-home, no activation server. Get a license: [coming soon — Dodo Payments storefront in verification].
Requirements
Python 3.10+
An Obsidian vault (any size)
License
MIT
Available Tools
6 toolscheck_vault_healthARead-only
Scan the vault for structural issues: broken wikilinks, orphaned notes, missing frontmatter. Returns a categorized list of all issues found.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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=true, so description adds that it scans and returns a categorized list of issues, consistent with read-only behavior. No description of auth needs, rate limits, or side effects beyond what annotations provide. Description adds specificity about issue types but does not significantly augment annotation information.
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 two sentences, front-loaded with action and scope, then output format. No redundant words, every sentence adds value. Highly 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?
Tool has no parameters and output schema exists, so description need not explain return values. It covers purpose and scope adequately. Sibling tools exist but are not explicitly contrasted; however, given the tool's simplicity and the presence of sibling list, completeness is sufficient. Slight lack of differentiation prevents 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?
No parameters exist, so schema coverage is 100%. Description adds meaning beyond schema by explaining the tool's action (scan for structural issues) and output (categorized list of issues). With 0 parameters, baseline is 4, and description meets it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly specifies verb 'Scan' and resource 'vault for structural issues', listing specific issue types (broken wikilinks, orphaned notes, missing frontmatter). Differentiates from sibling tools which focus on subsets (find_orphans, find_broken_links) or repair (repair_vault) or statistics (vault_statistics).
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?
Description implies diagnostic use but does not explicitly state when to use this tool versus siblings like find_orphans or find_broken_links. No guidance on prerequisites or when not to use. Sibling names provide implicit context but description lacks explicit guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_vaultA
Configure the vault path for this server. Call this first if the server started without a --vault argument.
| Name | Required | Description | Default |
|---|---|---|---|
| vault_path | Yes |
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=false. The description adds the key behavioral insight that this is a first-step configuration action. It does not elaborate on side effects or prerequisites, but the essential 'call first' behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The first states the action, the second adds a usage guideline. No wasted words, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input (one string param) and presence of both annotations and an output schema, the description covers what the tool does and when to use it. It lacks details about permissions or consequences, but it's still fairly complete for its simplicity.
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 0%, and the description only mentions 'vault path' without explaining format, constraints, or example. The single parameter is simple, but the description does not compensate for the lack of 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 verb 'configure' with resource 'vault path' is specific. The description also provides context that this tool should be called first if the server started without a --vault argument. Sibling tools (e.g., check_vault_health, repair_vault) have distinct purposes, so no confusion.
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?
Explicit guidance: 'Call this first if the server started without a --vault argument.' This clearly indicates when to use it and implies that if the server started with --vault, this may not be needed. No alternatives are mentioned, but siblings cover unrelated tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_broken_linksARead-only
Find all broken wikilinks — [[targets]] that don't resolve to any file in the vault. Excludes wikilinks inside code spans.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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=true, so no need to restate. The description adds behavioral detail about excluding wikilinks inside code spans. It lacks disclosure of potential performance implications, but for a simple read operation, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant information. It is front-loaded and every word serves a 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 tool has no parameters and an output schema exists (not shown), the description covers the essential behavior. It does not mention pagination or large vault handling, but for a simple listing tool, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. The rubric gives a baseline of 4 for zero parameters, and the description does not need to add parameter semantics.
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 finds broken wikilinks, specifies what constitutes a broken wikilink (targets that don't resolve to any file), and distinguishes from siblings like find_orphans by focusing on links rather than orphan notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or avoid this tool. The description implies it's for checking link health, but does not mention alternatives or when not to use, e.g., if a vault is large and performance is a concern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_orphansARead-only
Find all orphaned leaf notes — notes typed as 'leaf' in frontmatter that are not linked from any hub or branch file.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and description adds specific criteria for orphaned notes, going beyond annotations. 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?
Single sentence with precise definition, no wasted words. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, read-only annotation, and output schema present, the description fully covers what the tool does and what it finds. Complete for its context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters (schema coverage 100%), but description adds value by explaining the filtering criteria. For zero parameters, baseline is 4, and description justifies it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool finds orphaned leaf notes, defines 'orphaned' as notes typed 'leaf' in frontmatter not linked from any hub or branch file. Specific verb+resource distinguishes from siblings like find_broken_links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives, but the purpose is clear and distinct from sibling tools. Implied usage for identifying unlinked leaf notes, but lacks guidance on when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repair_vaultA
[Pro] Auto-repair safe structural issues. Only adds content (frontmatter, plain text replacements for broken links). Never deletes files or content. Requires Pro license.
| Name | Required | Description | Default |
|---|---|---|---|
| fix_frontmatter | No | ||
| fix_broken_links | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds that the tool only adds content and never deletes, aligning with non-destructive behavior and providing safety guarantees beyond the 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?
Two sentences, each serving a purpose: first states action and safety, second clarifies behavior and license. No unnecessary words; front-loaded with key 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?
For a simple tool with two booleans and an output schema, the description covers purpose, safety, license, and implicitly parameters. It lacks explicit prerequisites (e.g., vault must be open) but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no parameter descriptions). The description mentions fixing frontmatter and broken links, which maps to the two boolean parameters, but does not explicitly explain their meaning or usage. Adequate but not detailed.
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 repairs safe structural issues, distinguishes itself from siblings like check_vault_health or find_broken_links by focusing on auto-repair, and specifies it only adds content without deletion.
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 when to use (structural issues with frontmatter or broken links) and notes the Pro license requirement. It does not explicitly state when not to use or name alternatives, but sibling context provides differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vault_statisticsARead-only
Vault-level analytics: file count, link count, orphans, broken links, frontmatter coverage percentage.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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=true, and the description adds value by listing the specific analytics provided. No additional behavioral context needed for this simple read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that effectively communicates the tool's output. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and an output schema, the description adequately covers the return values. It lists all key metrics, so an agent can understand what to expect.
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, so the description cannot add meaning beyond the schema. Baseline of 4 applies per guidelines for zero 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?
The description specifies 'Vault-level analytics' and lists specific metrics (file count, link count, orphans, broken links, frontmatter coverage percentage). It clearly distinguishes from sibling tools like find_orphans and find_broken_links by providing an aggregated summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus siblings. While the aggregated nature is implied, there is no mention of alternatives or exclusions (e.g., when to use find_orphans instead).
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.
6 tool updates
v0.2.0- First observed
check_vault_health - First observed
configure_vault - First observed
find_broken_links - First observed
find_orphans - First observed
repair_vault - First observed
vault_statistics
TDQS
Scored across 6 tools
Tools are mostly distinct, but find_orphans and find_broken_links overlap with check_vault_health which also finds these issues. This could cause confusion about which tool to use.
All tools use snake_case with verb_noun pattern except vault_statistics (noun_noun). Consistent style, but one minor deviation.
6 tools is well-scoped for a vault health MCP: configuration, comprehensive check, repair, statistics, and specific queries. No excess or deficiency.
Core operations (configure, check, repair, statistics) are covered. Minor gap: no tool to individually fix a specific broken link without Pro license, but repair_vault handles auto-fix.
Maintenance
Related MCP Connectors
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
Scan any MCP server for tool-poisoning, security, auth & license. Trust score before install.
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
Related MCP Servers
- AlicenseAqualityAmaintenanceThe most feature-complete MCP server for Obsidian vaults. 23 tools and 3 resources for search, read, write, tags, link analysis, graph traversal, and canvas support.4148 npm30MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that lints, validates, and renders your Obsidian vault markdown — all inside Docker.2MIT
- FlicenseBqualityDmaintenanceA lightweight MCP server for intelligent, non-invasive analysis of Obsidian vaults.4-
- FlicenseCqualityCmaintenanceMCP server to query and modify an Obsidian vault or any folder of markdown files. It provides search, tag filtering, backlinks, and CRUD operations on notes, with path traversal protection.11-