obsidian-modified-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OBSIDIAN_HOST | No | Obsidian REST API host | 127.0.0.1 |
| OBSIDIAN_PORT | No | Obsidian REST API port | 27124 |
| GRAPH_CACHE_TTL | No | Graph cache TTL in seconds | 300 |
| OBSIDIAN_API_KEY | No | API key from Local REST API plugin settings (used when multi-vault JSON is not supplied) | |
| OBSIDIAN_PROTOCOL | No | http or https | https |
| OBSIDIAN_VAULT_PATH | No | Path to vault (required for graph tools) | |
| OBSIDIAN_VAULTS_FILE | No | Path to a JSON file describing one or more vaults (same shape as OBSIDIAN_VAULTS_JSON). | |
| OBSIDIAN_VAULTS_JSON | No | JSON string describing one or more vaults. Overrides the single OBSIDIAN_API_KEY style config. | |
| OBSIDIAN_DEFAULT_VAULT | No | Name/ID of the vault to use when a tool call omits vaultId. | |
| SMART_CONNECTIONS_PORT | No | Port for Smart Connections API |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_vaultsA | List all configured Obsidian vaults with their IDs and capabilities. |
| list_files_in_vaultA | Lists all files and directories in the root of your Obsidian vault. |
| list_files_in_dirA | Lists all files and directories in a specific directory within your Obsidian vault. |
| get_file_contentsA | Returns the content of a single file in your vault. |
| batch_get_file_contentsA | Return the contents of multiple files concatenated with headers. |
| delete_fileA | Delete a file or directory from the vault. When the path refers to a directory, the deletion is recursive: every contained file and subdirectory is removed before the directory itself is deleted, in a single tool call. The caller does not need to empty the directory beforehand. On a transport-layer timeout the wrapper performs a single direct-path verification query before reporting outcome, so the response always reflects the actual post-condition on the vault. |
| append_contentA | Append content to a file. Creates the file if it does not exist. |
| put_contentA | Overwrite the entire content of a file. Creates the file if it does not exist. |
| patch_contentA | Insert content relative to a heading, block, or frontmatter in a file. For heading targets, the value MUST be the full path of the heading: at least two non-empty segments separated by "::" (i.e., the H1::H2[::H3...] form). Top-level headings (no parent) are unreachable through this tool — use get_file_contents + put_content for those edits. Headings whose literal text contains "::" are also unreachable through this tool (the validator treats every "::" as a path separator and there is no escape syntax). |
| searchC | Performs a keyword search across all files in the vault. |
| complex_searchB | Search using JsonLogic query. Supports glob and regexp operators for pattern matching. |
| pattern_searchB | Regex pattern extraction with context. Use for structured data mining, format analysis, content auditing. |
| get_periodic_noteC | Get the current periodic note for a specified period. |
| get_recent_periodic_notesB | Get most recent periodic notes for a specified period type. |
| get_recent_changesB | Get recently modified files in the vault. |
| get_active_fileA | Get the currently active file in Obsidian. |
| open_fileC | Open a file in Obsidian. |
| list_commandsA | List all available commands in Obsidian. For commands that operate on notes, open a note first. |
| execute_commandA | Execute one or more Obsidian commands in order. For commands that operate on notes, open a note first. |
| get_vault_statsA | Get overview statistics about the vault: total notes, links, orphans, tags, clusters. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault. |
| get_vault_structureA | Get the folder tree structure of the vault. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault. |
| find_orphan_notesA | Find notes with no incoming or outgoing links. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault. |
| get_note_connectionsA | Get all connections for a note: outgoing links, backlinks, tags. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault. Returns a precondition-style error 'note not found: ' when the target note is not present in the vault — distinct from 'found but no connections'/'no path between endpoints'. |
| find_path_between_notesA | Find the shortest link path between two notes. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault. Returns a precondition-style error 'note not found: ' when the target note is not present in the vault — distinct from 'found but no connections'/'no path between endpoints'. |
| get_most_connected_notesA | Get the most connected notes by link count or PageRank. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault. |
| detect_note_clustersA | Detect communities/clusters of related notes using graph analysis. Requires OBSIDIAN_VAULT_PATH to be set for the targeted vault. |
| semantic_searchB | Concept-based search via Smart Connections. Finds conceptually related content using meaning/context similarity rather than keyword matching. |
| find_similar_notesB | Find notes semantically similar to a given note. |
| get_heading_contentsA | Returns the raw markdown body content under the targeted heading. Frontmatter, tags, and file metadata are not included — use get_file_contents for the whole note or get_frontmatter_field for individual frontmatter values. Heading targets MUST use the full path of the heading: at least two non-empty segments separated by "::" (i.e., the H1::H2[::H3...] form). Top-level headings (no parent) are unreachable through this tool — use get_file_contents and slice the note client-side. Headings whose literal text contains "::" are also unreachable through this tool (the validator treats every "::" as a path separator and there is no escape syntax) — use get_file_contents in that case as well. |
| get_frontmatter_fieldA | Returns the named frontmatter field's value with its original type preserved — string, number, boolean, array, object, or null. If the field or the note does not exist, the upstream's 4xx error is propagated unchanged. To read all frontmatter fields at once, use get_file_contents. |
| list_tagsA | List every tag present in the vault, together with its usage count. The result is sourced from Obsidian's own tag index via the Local REST API plugin's GET /tags/ endpoint, so it includes both inline (#tag) and YAML frontmatter tags and excludes tag-shaped strings that appear inside fenced code blocks — making it more accurate than text or frontmatter search for tag enumeration. Hierarchical tags (e.g., work/tasks) contribute counts to every parent prefix (e.g., work), matching how Obsidian's own tag sidebar displays them. |
| find_and_replaceA | Find and replace text vault-wide across every .md file in the targeted vault. DESTRUCTIVE: this tool rewrites notes in-place. Run with dryRun: true first to preview matches; commit with dryRun: false. The vault SHOULD be in a clean git working tree (or otherwise backed up) before mutations — dry-run is the safety net. Concurrency posture is last-write-wins: if Obsidian (or a sync plugin) writes a note in the gap between the tool's read and write, the tool overwrites that external edit without warning. Close Obsidian or pause sync plugins before running mutations on important content. pathPrefix matching is case-sensitive on all platforms (including Windows) and is a directory-segment prefix (no glob expansion). Files in dot-prefixed directories (e.g., .obsidian/, .trash/) are excluded; the per-file size cap is 5 MB on both input and output. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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/marwansaab/obsidian-modified-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server