Obsidian MCP Server
Enables seamless interaction with Obsidian vaults to perform file operations, search content, manage metadata, and execute UI commands such as opening the graph view or specific files via the Local REST API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Obsidian MCP Serversearch for all notes tagged with #research in my personal vault"
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.
Obsidian MCP Server
Enables MCP clients (e.g., Claude Desktop) to interact with Obsidian vaults seamlessly.
Features
Multi-Vault Support: Access unlimited Obsidian vaults without per-vault configuration
Auto-Discovery: Automatically discovers REST API credentials from plugin configuration
Concurrent-Safe: File locking prevents data corruption during simultaneous access
Hybrid Access: Filesystem operations (always available) + REST API integration (optional)
Security-First: Path validation, rate limiting, command allowlist, and secure credential handling
Zero-Config: Works immediately with filesystem access; REST API features activate when plugin is installed
Related MCP server: Obsidian MCP Server
Installation
From Source (Current)
Currently, installation from source is required:
git clone <repository-url>
cd obsidian-mcp-server
npm install
npm run buildVia NPM (Coming Soon)
Once published to npm, you'll be able to install globally:
npm install -g obsidian-mcp-serverNote: The package is not yet published. Use "From Source" installation for now.
Quick Start
1. Basic Setup (Filesystem Access Only)
The server automatically detects and configures your Obsidian vaults on first run! No manual configuration needed.
What happens automatically:
Config file is created at
~/.config/mcp-obsidian/config.json(macOS/Linux) or%APPDATA%/mcp-obsidian/config.json(Windows)Server scans common locations (Documents, Dropbox, iCloud, etc.) for Obsidian vaults
Discovered vault paths are automatically added to the configuration
Ready to use immediately!
Common locations scanned:
~/Documents/Obsidian~/Dropboxand subdirectories~/Library/CloudStorage/Dropbox(macOS)~/Library/Mobile Documents/iCloud~md~obsidian(macOS)~/OneDrive/Documents/Obsidian(Windows)
Note: You can override the config location by setting the MCP_OBSIDIAN_CONFIG environment variable.
This enables immediate access to all discovered vaults using filesystem operations.
2. Enable REST API Features (Optional)
Install the Obsidian Local REST API plugin in your vault:
Open Obsidian Settings → Community Plugins
Browse and install "Local REST API"
Enable the plugin
The plugin will generate an API key automatically
No additional configuration needed - the server will auto-discover the credentials.
3. Connect to Claude
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/path/to/obsidian-mcp-server/dist/index.js"]
}
}
}Note: The env section is optional. If omitted, the server uses the default config location (~/.config/mcp-obsidian/config.json). Only add it if you want to use a custom config path:
{
"mcpServers": {
"obsidian": {
"command": "node",
"args": ["/path/to/obsidian-mcp-server/dist/index.js"],
"env": {
"MCP_OBSIDIAN_CONFIG": "/custom/path/to/config.json"
}
}
}
}Restart Claude Desktop.
Configuration
Most users don't need to configure anything! The server auto-detects your vaults on first run.
Manual Configuration (Optional)
If you need to customize settings or add vaults in non-standard locations, edit ~/.config/mcp-obsidian/config.json:
Minimal Configuration:
{
"defaultVaultPath": "/Users/yourname/Documents/Obsidian"
}Full Configuration:
See config.example.json for a complete configuration with all options:
defaultVaultPath: Base directory containing your vaults
vaults: Named vault mappings for easy access
security: Path restrictions, rate limits, allowed hosts/ports
features: File locking, caching, file watching settings
logging: Log level and sensitive data sanitization
Named Vaults
For easier access, define named vaults in your config:
{
"defaultVaultPath": "/Users/yourname/Documents/Obsidian",
"vaults": {
"personal": "PersonalVault",
"work": "WorkVault"
}
}Then reference them by name in Claude: "vault": "personal" instead of full paths.
Available Tools
File Operations
list_vaults: List all accessible vaults
get_vault_info: Get vault metadata (file count, plugin status)
list_files: List files in a vault (supports recursive, hidden files)
get_file: Read file content with optional frontmatter parsing
write_file: Write or update files with conflict detection
append_content: Append content to existing files
search_files: Search with regex, case sensitivity, context
get_metadata: Extract frontmatter, tags, links, word count
Obsidian Integration (Requires REST API Plugin)
execute_command: Execute whitelisted Obsidian commands
open_file: Open files in Obsidian UI
get_active_file: Get currently active file
open_graph: Open graph view
Allowed Commands
For security, only these Obsidian commands are allowed:
graph:open,graph:open-localeditor:toggle-sourceapp:go-back,app:go-forwardglobal-search:openworkspace:new-file,file-explorer:reveal-active-fileworkspace:split-vertical,workspace:split-horizontal
Testing
Test with Claude Desktop
Restart Claude Desktop after configuration
Open a conversation and try:
List my Obsidian vaultsExpected response: List of discovered vaults with metadata.
Read the file "Daily Notes/2026-01-14.md" from my Personal vaultExpected response: File content with metadata.
Search for "project" in my Work vaultExpected response: Search results with context.
Test with MCP Inspector
npx @modelcontextprotocol/inspector dist/index.jsThis opens a web interface to test all tools interactively.
Verify File Locking
Open a file in Obsidian and simultaneously have Claude read/write it. The server will handle concurrent access safely with file locking.
Verify Auto-Discovery
Install the REST API plugin in a vault, then:
Get info about my Personal vaultExpected response should include "hasRestApi": true and "pluginVersion": "1.x.x".
Architecture
Hybrid Provider System
Operation Request
↓
Router Decision
↓
┌───┴───┐
↓ ↓
Filesystem REST API
Provider Provider
↓ ↓
Direct Plugin
File I/O CommandsFilesystem Provider: Always available, handles read/write/search
REST API Provider: Optional, handles UI integration and commands
Operation Router: Intelligently selects the appropriate provider
Security Layers
Path Validation: Prevents directory traversal, validates symlinks
Rate Limiting: Global, per-vault, and per-operation limits
Command Allowlist: Only whitelisted Obsidian commands allowed
Credential Security: Memory-only cache, no disk serialization
Concurrent Access Handling
File Locking: Read locks (shared) and write locks (exclusive)
Conflict Detection: Timestamp verification before writes
Atomic Writes: Write to temp file, then rename
Lock Timeout: Automatic cleanup of expired locks
Troubleshooting
Vaults Not Found
Problem: list_vaults returns empty array
Solutions:
First check: Restart Claude Desktop to trigger auto-detection
Verify
defaultVaultPathin config points to correct directoryEnsure vaults have
.obsidiandirectory (valid Obsidian vaults)Check
security.allowedVaultPathsincludes the vault locationIf your vaults are in a non-standard location, manually add the path to
allowedVaultPathsin the config
REST API Features Not Working
Problem: "REST API required but plugin not installed"
Solutions:
Install "Local REST API" plugin in Obsidian
Enable the plugin in Obsidian settings
Verify plugin created
data.jsonin.obsidian/plugins/obsidian-local-rest-api/Clear credential cache: restart the MCP server
File Lock Timeout
Problem: "Could not acquire write lock"
Solutions:
Close files in Obsidian that are being edited
Wait for ongoing operations to complete
Increase
features.fileLocking.timeoutin configCheck for stuck locks: restart the server
Rate Limit Exceeded
Problem: "Rate limit exceeded"
Solutions:
Wait before retrying
Increase rate limits in config if legitimate usage
Check for loops in your Claude interactions
Permission Denied
Problem: "Vault path not in allowed directories"
Solutions:
First try: Delete
~/.config/mcp-obsidian/config.jsonand restart to trigger auto-detectionManually add vault path to
security.allowedVaultPathsin the configUse absolute paths, not relative paths
Check symlink targets are also in allowed paths
Ensure the path exists and is accessible
Security Considerations
Threat Model
This server operates locally and assumes:
The local machine is trusted
Claude Desktop is trusted
Only you have access to the MCP server process
Protections Implemented
Path Traversal Prevention: Rejects
..and~patterns, validates all pathsAPI Key Security: Credentials stored only in memory, never logged
Command Injection Prevention: Explicit allowlist of safe commands only
Rate Limiting: Prevents abuse and DoS scenarios
Symlink Validation: Resolves and validates symlink targets
Host/Port Validation: Only localhost connections allowed
What This Does NOT Protect Against
Malicious code in your Obsidian vault (markdown files can't execute code)
Attacks on Obsidian itself
Physical access to your machine
Compromised Claude Desktop application
Development
Build
npm run buildWatch Mode
npm run watchRun Tests
npm testLint
npm run lintContributing
Contributions welcome! Please:
Follow existing code style (TypeScript, ESLint, Prettier)
Add tests for new features
Update documentation
Ensure security best practices
License
MIT
Support
For issues, questions, or feature requests, please open an issue on the repository.
Credits
Built with:
gray-matter for frontmatter parsing
axios for HTTP requests
Available Tools
12 toolsappend_contentC
Append content to an existing file
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier | |
| filepath | Yes | Path to the file | |
| content | Yes | Content to append |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('append') but doesn't cover critical aspects like whether this requires specific permissions, how it handles errors (e.g., if file doesn't exist), if it's idempotent, or what the response looks like. For a mutation tool with zero annotation coverage, this is a significant gap.
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, efficient sentence with zero waste. It's front-loaded with the core purpose and appropriately sized for the tool's complexity.
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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain behavioral traits, error handling, or return values, which are critical for an agent to use it correctly. The description alone is inadequate for a tool that modifies files.
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 description coverage is 100%, so all parameters are documented in the schema itself. The description doesn't add any meaning beyond what the schema provides (e.g., it doesn't explain 'vault' or 'filepath' further). Baseline 3 is appropriate when the schema does the heavy lifting.
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 action ('append content') and target resource ('to an existing file'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'write_file' or 'open_file', which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'write_file' or 'open_file'. It doesn't mention prerequisites (e.g., file must exist) or exclusions, leaving the agent to infer usage context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_commandC
Execute an Obsidian command (requires REST API plugin)
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier | |
| commandId | Yes | Command ID | |
| args | No | Command arguments (optional) |
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 of behavioral disclosure. It mentions a prerequisite ('requires REST API plugin'), which is helpful context. However, it doesn't describe what happens during execution—such as whether it's a read-only or destructive operation, potential side effects, error handling, or what the response looks like. For a tool that executes commands with no annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose and a key prerequisite. It's front-loaded with the main action and avoids unnecessary details, making it easy to parse quickly. Every word earns its place 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 complexity of executing commands in Obsidian, the lack of annotations, and no output schema, the description is incomplete. It doesn't explain what types of commands can be executed, potential risks or side effects, or what the tool returns. For a tool that could perform various operations (from reads to writes), more context is needed to ensure safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all three parameters (vault, commandId, args) with descriptions. The description doesn't add any additional meaning or context about these parameters beyond what the schema provides, such as examples of command IDs or typical argument structures. This meets the baseline score when schema coverage is high.
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 action ('Execute') and resource ('an Obsidian command'), making the purpose understandable. However, it doesn't differentiate this tool from its siblings like 'append_content' or 'write_file', which also perform actions in Obsidian. The mention of 'requires REST API plugin' adds useful context but doesn't specifically distinguish the tool's unique function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It mentions a prerequisite ('requires REST API plugin'), but doesn't explain scenarios where executing a command is appropriate compared to other tools like 'write_file' or 'search_files'. There are no explicit when/when-not instructions or named alternatives provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_fileB
Get the currently active file in Obsidian (requires REST API plugin)
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier |
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 a prerequisite (REST API plugin) and that it retrieves the 'currently active' file, which adds some behavioral context. However, it doesn't cover other important traits like whether it's read-only, what happens if no file is active, error handling, or response format, leaving significant gaps for a tool with no annotation coverage.
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, efficient sentence that states the purpose and a key prerequisite. It's appropriately sized and front-loaded with the main action, though it could be slightly more structured by separating the prerequisite into a second sentence for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is incomplete. It mentions a prerequisite but lacks details on behavior, error cases, or return values. For a tool that retrieves stateful information (the active file), more context is needed to understand how it operates and what to expect, making it inadequate for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single parameter 'vault' with its description. The description doesn't add any meaning beyond what the schema provides, such as explaining what a 'vault identifier' is or how it relates to the active file. Baseline 3 is appropriate when the schema does the heavy lifting.
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 action ('Get') and resource ('currently active file in Obsidian'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_file' or 'open_file', which likely retrieve or open files differently, so it misses full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the active file is needed, and mentions a prerequisite ('requires REST API plugin'), providing some context. But it doesn't explicitly state when to use this tool versus alternatives like 'get_file' or 'open_file', leaving usage guidelines partially implied rather than fully clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fileC
Read a file from a vault
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier | |
| filepath | Yes | Path to the file | |
| parseFrontmatter | No | Parse YAML frontmatter (default: false) |
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 of behavioral disclosure. It states this is a read operation, which implies it's non-destructive, but doesn't mention other traits like error handling (e.g., what happens if the file doesn't exist), authentication needs, rate limits, or return format. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence ('Read a file from a vault') that front-loads the core purpose without unnecessary words. It avoids redundancy and wastes no space, making it highly concise and well-structured for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a read operation with 3 parameters) and the lack of annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., file content, metadata, or errors), behavioral aspects like error conditions, or how it differs from siblings. For a tool with no structured output information, the description should provide more context to be fully helpful.
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 100% description coverage, providing clear documentation for all three parameters (vault, filepath, parseFrontmatter). The description adds no additional meaning beyond what's in the schema, such as explaining the format of 'vault' or 'filepath' or detailing the effects of 'parseFrontmatter'. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.
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 action ('Read') and resource ('a file from a vault'), making the purpose immediately understandable. It distinguishes this from siblings like 'write_file' (write vs. read) and 'list_files' (list vs. read), though it doesn't explicitly differentiate from 'get_active_file' (which likely reads the currently active file). The description is specific but could be more precise about sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'get_file' over 'get_active_file' (for reading a specific file vs. the active one) or 'list_files' (for listing vs. reading content), nor does it specify prerequisites like needing a valid vault identifier. Usage is implied by the name and purpose but lacks explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metadataB
Get metadata for a file (frontmatter, tags, links, word count)
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier | |
| filepath | Yes | Path to the file |
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 of behavioral disclosure. It states the tool retrieves metadata, implying a read-only operation, but doesn't mention any behavioral traits such as permissions required, error handling, or performance considerations. This leaves gaps in understanding how the tool behaves beyond its basic function.
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, efficient sentence that directly states the tool's purpose and elaborates on the metadata components. It is front-loaded with the core action and avoids any unnecessary words, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 parameters, no output schema, no annotations), the description is adequate but has clear gaps. It covers what metadata is retrieved but lacks details on behavioral aspects and usage context. For a read operation with no annotations, it should ideally provide more guidance on when and how to use it relative to siblings, making it minimally viable but incomplete.
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 100% description coverage, with clear documentation for both parameters ('vault' and 'filepath'). The description adds no additional meaning beyond what the schema provides, as it doesn't explain parameter usage or constraints. According to the rules, with high schema coverage, the baseline is 3, which is appropriate here.
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 with a specific verb ('Get') and resource ('metadata for a file'), and it elaborates on what metadata includes (frontmatter, tags, links, word count). However, it doesn't explicitly differentiate this tool from siblings like 'get_file' or 'get_active_file', which might also retrieve file-related information, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_file' and 'get_active_file' that likely handle file data, there's no indication of whether this tool is for metadata-only retrieval or how it differs in context, leaving the agent to infer usage without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vault_infoC
Get information about a specific vault
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier (name or path) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but offers minimal information. It doesn't indicate whether this is a read-only operation, what permissions might be required, what format the information is returned in, or potential error conditions. The description merely restates the basic function without adding meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose without unnecessary words. It's appropriately sized for a simple tool with one parameter and gets straight to the point. Every word earns its place in this minimal but functional description.
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 annotations and no output schema, the description is insufficiently complete. It doesn't explain what information is returned, what format it's in, or any behavioral characteristics. While the schema covers the single input parameter well, the overall context for using this tool effectively is lacking given the absence of structured metadata about outputs and 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 100% description coverage, with the single parameter 'vault' clearly documented as 'Vault identifier (name or path)'. The description adds no additional parameter information beyond what the schema provides, which is acceptable given the comprehensive schema coverage. The baseline score of 3 reflects adequate but not enhanced parameter documentation.
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 action ('Get information') and target resource ('about a specific vault'), making the purpose immediately understandable. It distinguishes itself from sibling tools like 'list_vaults' by focusing on a single vault rather than listing multiple. However, it doesn't specify what type of information is retrieved, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites like needing to know the vault identifier first, nor does it differentiate from similar tools like 'get_metadata' or 'get_file' that might also retrieve information. The agent must infer usage context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesC
List files in a vault
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier | |
| path | No | Subpath to list (optional) | |
| recursive | No | List recursively (default: false) | |
| includeHidden | No | Include hidden files (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions nothing about permissions needed, rate limits, pagination behavior, error conditions, or what format the file list returns. 'List files' implies a read operation, but lacks details about scope, performance, or constraints.
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, clear sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a straightforward listing tool.
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 4 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what constitutes a 'file' in this context, how results are structured, whether there are limitations on listing size, or how it differs from search capabilities. The agent would lack important operational 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?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description doesn't add any parameter-specific context beyond implying a vault context. This meets the baseline for high schema coverage but doesn't enhance understanding of parameter usage or relationships.
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 action ('List') and resource ('files in a vault'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'search_files' or 'list_vaults', which would require more specificity about scope or filtering capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'search_files' (for filtered searches) or 'list_vaults' (for listing vaults instead of files). The description only states what it does, not when it's appropriate compared to other options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vaultsB
List all accessible Obsidian vaults
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool lists vaults but doesn't explain what 'accessible' means (e.g., permissions, authentication needs), how results are returned (e.g., format, pagination), or any limitations (e.g., rate limits). For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that efficiently conveys the core purpose without any wasted words. It's front-loaded and appropriately sized for a simple tool, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate. It states what the tool does but lacks details on usage context, behavioral traits, or output format. For a list operation with no structured support, it should ideally provide more guidance on results and limitations to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% description coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here. A baseline of 4 is applied since there are no parameters to explain, and the description doesn't introduce unnecessary complexity.
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 action ('List') and resource ('all accessible Obsidian vaults'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this tool from sibling tools like 'get_vault_info' or 'list_files', which might also relate to vault operations, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_vault_info' and 'list_files' available, it's unclear if this tool is for high-level vault enumeration or if it overlaps with other functions. No explicit when/when-not instructions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_fileC
Open a file in Obsidian UI (requires REST API plugin)
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier | |
| filepath | Yes | Path to the file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the UI interaction aspect and a plugin requirement, but doesn't describe what 'open' actually does (e.g., does it bring the file to foreground, open in new tab, trigger visual effects?), whether it requires specific permissions, or what happens on failure. For a UI-interaction tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states the core purpose and a key requirement. It's appropriately sized and front-loaded with the main action. However, it could be slightly more structured by separating the requirement into a second sentence for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (UI interaction with prerequisites), no annotations, and no output schema, the description is minimally adequate. It covers the what and a key requirement, but lacks details on behavioral outcomes, error handling, or UI-specific effects. For a tool that interacts with a UI, more context about what 'open' entails would be beneficial.
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 both parameters ('vault' and 'filepath') clearly documented in the schema. The description doesn't add any parameter-specific information beyond what the schema provides, such as format examples or constraints. With high schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Open a file') and the target resource ('in Obsidian UI'), which provides a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from similar siblings like 'get_file' or 'get_active_file' in terms of UI vs. data retrieval functionality.
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 mentions a prerequisite ('requires REST API plugin'), which provides some context, but offers no guidance on when to use this tool versus alternatives like 'get_file' (which might retrieve file content without UI interaction) or 'open_graph' (which opens a different UI view). No explicit when/when-not or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_graphC
Open graph view in Obsidian (requires REST API plugin)
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier |
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 states the tool opens a graph view and requires a plugin, but lacks details on behavioral traits such as whether this is a read-only or interactive operation, what happens if the vault doesn't exist, or any side effects like UI changes. The description is minimal and leaves key behaviors unspecified.
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, efficient sentence that directly states the tool's purpose and a key requirement. It is front-loaded with the main action and has no wasted words, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no annotations, no output schema, and a simple input schema, the description is incomplete. It lacks information on what the tool returns (e.g., success/failure, graph data), error conditions, or detailed behavioral context. For a tool that likely interacts with a UI or system, more completeness is needed to guide effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'vault' documented as 'Vault identifier'. The description adds no additional meaning beyond this, such as explaining what a vault is or format examples. With high schema coverage, the baseline score of 3 is appropriate as the schema handles parameter documentation adequately.
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 action ('Open graph view') and target ('in Obsidian'), which is specific and understandable. However, it doesn't differentiate this tool from sibling tools like 'open_file' or 'get_active_file' that also interact with Obsidian files/views, missing explicit distinction.
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 mentions a prerequisite ('requires REST API plugin'), which provides some context, but offers no guidance on when to use this tool versus alternatives like 'open_file' or other sibling tools. There are no explicit when/when-not statements or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_filesC
Search for text in vault files
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier | |
| query | Yes | Search query | |
| path | No | Subpath to search (optional) | |
| caseSensitive | No | Case sensitive search (default: false) | |
| regex | No | Use regex (default: false) | |
| contextLength | No | Context length around matches (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Search for text') but doesn't mention critical aspects like whether this is a read-only operation, if it requires specific permissions, how results are returned (e.g., pagination, format), or potential rate limits. This is a significant gap for a search tool with multiple parameters.
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, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It's front-loaded and wastes no words, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, no annotations, no output schema), the description is insufficient. It doesn't explain what the search returns (e.g., file names, snippets, match counts), how results are structured, or any behavioral nuances. This leaves the agent with incomplete context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description doesn't add any parameter-specific information beyond what's already in the schema, which has 100% coverage with clear descriptions for all 6 parameters. This meets the baseline score of 3, as the schema adequately documents the inputs without needing extra explanation in the description.
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 'Search for text in vault files' clearly states the verb ('Search') and resource ('text in vault files'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_files' or 'get_file' which might also involve file operations, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_files' for browsing or 'get_file' for retrieving specific files. It lacks any mention of prerequisites, exclusions, or contextual recommendations, leaving the agent to infer usage based on the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_fileC
Write or update a file in a vault
| Name | Required | Description | Default |
|---|---|---|---|
| vault | Yes | Vault identifier | |
| filepath | Yes | Path to the file | |
| content | Yes | File content | |
| frontmatter | No | Optional YAML frontmatter | |
| createDirs | No | Create parent directories (default: true) | |
| expectedModTime | No | Expected modification time for conflict detection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('write or update') but lacks critical details: it doesn't specify if this overwrites existing files, requires authentication, has rate limits, or handles errors. For a mutation tool with zero annotation coverage, this is a significant gap in 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 extremely concise and front-loaded in a single sentence that directly states the tool's purpose. There is no wasted language or unnecessary elaboration, making it efficient and easy to parse at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation with 6 parameters, no annotations, and no output schema), the description is insufficiently complete. It doesn't cover behavioral aspects like side effects, error handling, or return values, leaving the agent with critical gaps in understanding how to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter-specific information beyond what's already in the schema, which has 100% coverage. It doesn't explain the semantics of parameters like 'frontmatter' (e.g., its format or use cases) or 'expectedModTime' (e.g., how conflict detection works). With high schema coverage, the baseline is 3, as the description doesn't compensate with extra insights.
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 ('write or update') and resource ('a file in a vault'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'append_content' (which might modify existing files differently) or 'get_file' (which reads files), missing full sibling distinction for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't mention when to choose 'write_file' over 'append_content' for modifying files, or prerequisites like needing write access to the vault. This lack of contextual direction leaves usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
12 tool updates
- First observed
append_content - First observed
execute_command - First observed
get_active_file - First observed
get_file - First observed
get_metadata - First observed
get_vault_info - First observed
list_files - First observed
list_vaults - First observed
open_file - First observed
open_graph - First observed
search_files - First observed
write_file
TDQS
Every tool has a clearly distinct purpose with no ambiguity. For example, 'get_file' reads file content while 'get_metadata' extracts structured data, and 'list_files' enumerates files whereas 'search_files' finds specific content. The actions (append, execute, get, list, open, search, write) are well-differentiated and target specific Obsidian operations.
All tool names follow a consistent verb_noun pattern using snake_case throughout, such as 'append_content', 'execute_command', 'get_active_file', and 'write_file'. This predictable naming convention makes it easy for agents to understand and select the right tool based on the intended action and target resource.
With 12 tools, the count is well-scoped for managing Obsidian vaults and files. Each tool earns its place by covering distinct aspects like file operations (read, write, append), metadata handling, vault management, UI interactions, and search capabilities, without being overly broad or sparse for the domain.
The tool set provides complete CRUD/lifecycle coverage for Obsidian vault and file management, including create (write_file), read (get_file, get_metadata), update (append_content, write_file), delete (implied via write/overwrite), and utility operations like listing, searching, and UI control. No obvious gaps exist for core workflows in this domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Related MCP Servers
- AlicenseBqualityFmaintenanceEnables comprehensive access to Obsidian vaults through MCP, supporting multi-vault management, knowledge graph analysis, canvas manipulation, dataview queries, template rendering, and periodic notes creation. Provides both local filesystem and remote API connectivity for complete Obsidian integration.295,78422Apache 2.0
- AlicenseBqualityDmaintenanceEnables interaction with Obsidian vaults through MCP, supporting note creation from templates, link management, backlink analysis, tag operations, and automatic Map of Contents generation.115,7841MIT
- FlicenseNot gradedqualityDmaintenanceEnables natural language interaction with Obsidian vaults through an MCP server, providing hybrid search, file management, and AI-powered analysis.2-
- AlicenseNot gradedqualityCmaintenanceMCP server for interacting with Obsidian via the Local REST API, enabling file operations, search, and content editing in your vault.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Victors081/obsidian-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server