Skip to main content
Glama
marwansaab

obsidian-modified-mcp-server

by marwansaab

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
OBSIDIAN_HOSTNoObsidian REST API host127.0.0.1
OBSIDIAN_PORTNoObsidian REST API port27124
GRAPH_CACHE_TTLNoGraph cache TTL in seconds300
OBSIDIAN_API_KEYNoAPI key from Local REST API plugin settings (used when multi-vault JSON is not supplied)
OBSIDIAN_PROTOCOLNohttp or httpshttps
OBSIDIAN_VAULT_PATHNoPath to vault (required for graph tools)
OBSIDIAN_VAULTS_FILENoPath to a JSON file describing one or more vaults (same shape as OBSIDIAN_VAULTS_JSON).
OBSIDIAN_VAULTS_JSONNoJSON string describing one or more vaults. Overrides the single OBSIDIAN_API_KEY style config.
OBSIDIAN_DEFAULT_VAULTNoName/ID of the vault to use when a tool call omits vaultId.
SMART_CONNECTIONS_PORTNoPort for Smart Connections API

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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