Agent-Native Calendar
Agent-Native Google Calendar - manage events, sync, and public booking
Description from the maker (original English)
Read, write, search, and surgically edit Obsidian notes, tags, and frontmatter via MCP.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
You need
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": [
"-y",
"obsidian-mcp-server"
],
"env": {
"OBSIDIAN_API_KEY": "your-value",
"OBSIDIAN_BASE_URL": "your-value",
"OBSIDIAN_VERIFY_SSL": "your-value",
"OBSIDIAN_REQUEST_TIMEOUT_MS": "your-value",
"OBSIDIAN_ENABLE_COMMANDS": "your-value",
"OBSIDIAN_READ_PATHS": "your-value",
"OBSIDIAN_WRITE_PATHS": "your-value",
"OBSIDIAN_DENY_PATHS": "your-value",
"OBSIDIAN_READ_ONLY": "your-value",
"OBSIDIAN_DELETE_ELICITATION": "your-value",
"OBSIDIAN_OMNISEARCH_URL": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}Run this in your terminal
claude mcp add obsidian --env OBSIDIAN_API_KEY=your-value --env OBSIDIAN_BASE_URL=your-value --env OBSIDIAN_VERIFY_SSL=your-value --env OBSIDIAN_REQUEST_TIMEOUT_MS=your-value --env OBSIDIAN_ENABLE_COMMANDS=your-value --env OBSIDIAN_READ_PATHS=your-value --env OBSIDIAN_WRITE_PATHS=your-value --env OBSIDIAN_DENY_PATHS=your-value --env OBSIDIAN_READ_ONLY=your-value --env OBSIDIAN_DELETE_ELICITATION=your-value --env OBSIDIAN_OMNISEARCH_URL=your-value --env MCP_LOG_LEVEL=your-value -- npx -y obsidian-mcp-serverPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": [
"-y",
"obsidian-mcp-server"
],
"env": {
"OBSIDIAN_API_KEY": "your-value",
"OBSIDIAN_BASE_URL": "your-value",
"OBSIDIAN_VERIFY_SSL": "your-value",
"OBSIDIAN_REQUEST_TIMEOUT_MS": "your-value",
"OBSIDIAN_ENABLE_COMMANDS": "your-value",
"OBSIDIAN_READ_PATHS": "your-value",
"OBSIDIAN_WRITE_PATHS": "your-value",
"OBSIDIAN_DENY_PATHS": "your-value",
"OBSIDIAN_READ_ONLY": "your-value",
"OBSIDIAN_DELETE_ELICITATION": "your-value",
"OBSIDIAN_OMNISEARCH_URL": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}Paste into .vscode/mcp.json in your project
{
"servers": {
"obsidian": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"obsidian-mcp-server"
],
"env": {
"OBSIDIAN_API_KEY": "your-value",
"OBSIDIAN_BASE_URL": "your-value",
"OBSIDIAN_VERIFY_SSL": "your-value",
"OBSIDIAN_REQUEST_TIMEOUT_MS": "your-value",
"OBSIDIAN_ENABLE_COMMANDS": "your-value",
"OBSIDIAN_READ_PATHS": "your-value",
"OBSIDIAN_WRITE_PATHS": "your-value",
"OBSIDIAN_DENY_PATHS": "your-value",
"OBSIDIAN_READ_ONLY": "your-value",
"OBSIDIAN_DELETE_ELICITATION": "your-value",
"OBSIDIAN_OMNISEARCH_URL": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}OBSIDIAN_BASE_URL envOBSIDIAN_VERIFY_SSL envOBSIDIAN_REQUEST_TIMEOUT_MS envOBSIDIAN_ENABLE_COMMANDS envOBSIDIAN_READ_PATHS envOBSIDIAN_WRITE_PATHS envOBSIDIAN_DENY_PATHS envOBSIDIAN_READ_ONLY envOBSIDIAN_DELETE_ELICITATION envOBSIDIAN_OMNISEARCH_URL envMCP_LOG_LEVEL envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 5, 2026
The registry name was verified with the GitHub account cyanheads, which owns the repo
Code last changed 5 days ago
Uses Apache-2.0
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Needs the server’s tool list first; this check starts in the next step
Compared only with servers in this prototype, not the whole registry.
It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: OBSIDIAN_API_KEY
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed 5 days ago, and the latest version (3.8.0) reached the registry 5 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Agent-Native Google Calendar - manage events, sync, and public booking
Lets AI create and edit Excel files itself, including formulas, charts and PivotTables, without Excel installed.
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
obsidian-mcp-server Read, write, search, and surgically edit Obsidian vault notes, tags, and frontmatter via MCP. STDIO or Streamable HTTP. 14 Tools • 3 Resources
Your Obsidian vault, through the Local REST API plugin. Read, search, and write notes, edit a single heading, block, or frontmatter field in place, and manage tags, with folder-scoped read/write permissions built in.
| Tool | Description |
|---|---|
obsidian_get_note | Read a note as raw content, full structured form, document map, or a single section |
obsidian_list_notes | List notes and folders under a vault path, recursively, with extension and name filters |
obsidian_list_tags | List vault tags with usage counts, most-used first |
obsidian_search_notes | Search by text, JSONLogic, or BM25-ranked Omnisearch when that plugin is reachable |
obsidian_write_note | Create a note, replace one section, or overwrite a whole file with overwrite: true |
obsidian_append_to_note | Append to a note (creating it if missing) or to one heading, block, or frontmatter field |
obsidian_patch_note | Append, prepend, or replace against one heading, block reference, or frontmatter field |
obsidian_replace_in_note | Literal or regex search-replace inside one note, body-only by default |
obsidian_manage_frontmatter | Get, set, or delete one frontmatter key |
obsidian_manage_tags | Add, remove, or list a note's tags in frontmatter, inline, or both |
obsidian_delete_note | Permanently delete a note, optionally after the user confirms (OBSIDIAN_DELETE_ELICITATION) |
obsidian_open_in_ui | Open a file in the Obsidian app, optionally in a new pane |
obsidian_list_commands | List command-palette commands (opt-in via OBSIDIAN_ENABLE_COMMANDS) |
obsidian_execute_command | Run a command-palette command by ID (opt-in via OBSIDIAN_ENABLE_COMMANDS) |
| Resource | Description |
|---|---|
obsidian://vault/{+path} | A note's content, frontmatter, tags, and file metadata |
obsidian://tags | Every vault tag with its usage count, as an uncapped snapshot |
obsidian://status | Plugin reachability, auth status, versions, and registered API extensions |
Note and tag data are also reachable through tools (obsidian_get_note, obsidian_list_tags); obsidian://status has no tool equivalent.
obsidian_get_note tooltarget is a vault path, the active file, or a periodic note (daily through yearly, optional date); format is content, full, document-map, or section, and full takes includeLinks: true for vault-internal outgoing linksresult.format discriminates the payload; a section read that matches several headings returns the first and lists every full path in candidatespath with no exact match but one case-insensitive match in its folder reads that file: result.path is the real name, requestedPath the one sent, and a notice names bothobsidian_list_notes toolpath (default vault root) to depth 1–20 (default 2), filtered by extension and nameRegex (≤256 chars); a folder that fails nameRegex is not walkedentries[] (file / directory), totals, and appliedFilters; the walk stops at 1,000 entries with excluded.reason: "entry_cap", and a folder the depth limit stopped carries truncated: trueOBSIDIAN_READ_PATHS or OBSIDIAN_DENY_PATHS set, a listing holds only readable entries and the folders leading to the scope; those folders are walked and accepted as path, and a denied folder is absent at every depthobsidian_list_tags toolnameRegex (≤256 chars) and minCount narrow the set, then tags are ranked by count and capped at limit (default 200, max 10000); hierarchical parents count (work/tasks adds to work)truncated, shown, and capOBSIDIAN_READ_PATHS or OBSIDIAN_DENY_PATHS set, only tags from readable notes are listed, and count is the number of readable notes carrying the tag or a tag nested under itobsidian_search_notes toolmode: "text" requires every space-separated token of query as a case-insensitive substring of the filename or body (quotes are literal), shaped by contextLength (default 100), pathPrefix, and maxMatchesPerHit (default 10); mode: "jsonlogic" evaluates a logic tree over path, content, frontmatter. , tags, and stat (plus links, backlinks, and unresolvedLinks on plugin versions that provide them, and not under OBSIDIAN_READ_PATHS or OBSIDIAN_DENY_PATHS), with glob / regexp taking [PATTERN, VALUE]result.mode discriminates the payload; every mode reports totalCount and pages via nextCursor, and a text hit clipped to maxMatchesPerHit carries truncated and totalMatchesmode: "omnisearch" (BM25 ranking, quoted phrases, -exclusion, path: / ext: filters) is offered only when the Omnisearch plugin answered at startup. It keeps its top 50 hits; path:, ext:, and plain terms apply before that cap, quoted phrases and -exclusion after it. truncated: true marks a result the cap may have cut, with truncatedReason cap_reached, filtered_after_cap, or read_scope; under OBSIDIAN_READ_PATHS or OBSIDIAN_DENY_PATHS it is always true, and a hit's membership and score still depend on the whole vaultobsidian_write_note tooltarget and content, with optional section and contentType (markdown / json); a whole-file write to an existing note fails with file_exists unless overwrite: truecase_variant_exists and writes nothing; existingPath names that note when the parent folder's listing shows exactly one case match, and is omitted when several match or when a file Obsidian does not index (a dot-file) sits at the pathsection, replaces only that heading, block, or frontmatter field and keeps the heading line; output reports created, sectionTargeted, and the resolved sectionTargetobsidian_append_to_note toolsection, appends to the file or creates it (created: true); with section, appends to that heading, block, or frontmatter field of an existing note, and createTargetIfMissing: true creates the sectioncontent_preexists; block targets add no separator, so start content with a newline if you want onecase_variant_exists on a case-insensitive filesystem, with existingPath naming that note when the parent folder's listing shows exactly one case matchobsidian_patch_note tooloperation: "append" | "prepend" | "replace" against one section of an existing note; patchOptions takes createTargetIfMissing, applyIfContentPreexists, and trimTargetWhitespace (plugin v4.x only)section and operation; a repeat of content already at the target fails with content_preexists unless applyIfContentPreexists: trueobsidian_replace_in_note toolreplacements[] run in order, each over the previous one's output; each takes useRegex (≤1024 chars), caseSensitive (default true), wholeWord, flexibleWhitespace (literal mode only), and replaceAll (default true)totalReplacements and perReplacement[] with bodyCount / frontmatterCountscope: "body" (default) leaves frontmatter byte-identical; "frontmatter" and "both" re-parse the YAML afterward and write nothing if it breaks (frontmatter_invalid)obsidian_manage_frontmatter tooloperation: "get" | "set" | "delete" on one key; set requires a JSON-typed valueget returns exists and value (null when absent); set and delete return the full frontmatter after the change, and a delete against unparseable YAML fails with frontmatter_invalid without writingobsidian_manage_tags tooloperation: "add" | "remove" | "list" with tags; location: "frontmatter" (default, the tags: array), "inline" (body #tag; add appends at end of file), or "both"add / remove report applied, skipped, and the resulting tags; list returns frontmatter, inline, and all%% … %% comments are readobsidian_delete_note tooltarget (path, active file, or periodic note) and checks it against the write scope first; a folder path fails with path_is_directory. There is no API-level undo, only Obsidian's local trashnote_missing before anything is deleted, naming the near matches in suggestionsOBSIDIAN_WRITE_PATHS, OBSIDIAN_DENY_PATHS, and OBSIDIAN_READ_ONLY bound what it can reachOBSIDIAN_DELETE_ELICITATION=true, the first call answers with a confirmation request naming the path and byte size, and the note is deleted only after the user accepts. Declining fails with cancelled, and a client without elicitation support cannot delete