create_or_update_note
Create or update a note with content and frontmatter. Performs upsert operation - creates if doesn't exist, updates if it does.
Read, write and search an Obsidian vault through its local REST API, with tools shaped around notes rather than files.
LABSCO SUMMARY
The difference shows in create_or_update_note and get_daily_note: both remove a decision the assistant would otherwise get wrong — does this note exist, and what is today's note actually called. find_related_notes is the one that pays off on a mature vault, because it uses the links you already made rather than keyword luck.
An MCP server that talks to a locally running Obsidian REST API. Alongside plain file operations it exposes vault-level ideas: daily notes, recently modified notes, frontmatter keys, and notes related by tags or links.
Obsidian with the Local REST API running and reachable at an address you configure. A bearer token is optional and only needed if that API asks for one. Runs on Node or Bun.
One command — npx obsidian-local-rest-api-mcp
USE CASES
Fetch the daily note for a date, then append to it — the naming convention is handled for you.
Upsert the note with content and frontmatter in one call instead of checking first.
Search content, filenames and tags together, then pull the note that matches.
Start from one note and surface the ones sharing its tags, links or backlinks.
List which frontmatter keys exist, then see every value used for one of them.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
create_or_update_noteCreate or update a note with content and frontmatter. Performs upsert operation - creates if doesn't exist, updates if it does.
delete_itemDelete a file or directory from the vault
find_related_notesFind notes related to a given note based on shared tags, links, or backlinks
get_daily_noteGet daily note for a specific date. Handles common daily note naming conventions and file locations.
get_metadata_keysGet all available frontmatter keys from notes
get_metadata_valuesGet all unique values for a specific frontmatter key
get_noteGet a specific note with its content and metadata (legacy)
get_recent_notesGet recently modified notes, ordered by modification time
list_directoryList directory contents with pagination to prevent context overflow. Shows immediate contents by default.
list_notesList all notes in the vault with optional search filter (legacy with search support)
read_fileRead content of a specific file from the vault
search_vaultSearch vault content across files, filenames, and metadata with advanced filtering
write_fileWrite file content with different modes: overwrite (default), append, or prepend. Handles both create and update operations.
BEFORE YOU INSTALL
13 tools when we connected.
CONTEXT COST
Rated by the size of the 13 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npx obsidian-local-rest-api-mcpSet OBSIDIAN_API_URL to the address of your running Obsidian Local REST API: http://obsidian-local-rest-api.test only works for a Laravel Valet setup — otherwise use your own address, such as http://localhost:8000. Leave out OBSIDIAN_API_KEY if your API does not require a key:
{
"mcpServers": {
"obsidian-vault": {
"command": "npx",
"args": [
"obsidian-local-rest-api-mcp"
],
"env": {
"OBSIDIAN_API_URL": "http://obsidian-local-rest-api.test",
"OBSIDIAN_API_KEY": "<YOUR_OBSIDIAN_API_KEY>"
}
}
}
}Set OBSIDIAN_API_URL to the address of your running Obsidian Local REST API: http://obsidian-local-rest-api.test only works for a Laravel Valet setup — otherwise use your own address, such as http://localhost:8000. Leave out OBSIDIAN_API_KEY if your API does not require a key:
{
"Name": "obsidian-vault",
"Type": "Standard Input/Output (stdio)",
"Command": "npx",
"Arguments": "obsidian-local-rest-api-mcp",
"Environment Variables": {
"OBSIDIAN_API_URL": "http://obsidian-local-rest-api.test",
"OBSIDIAN_API_KEY": "<YOUR_OBSIDIAN_API_KEY>"
}
}