Agent-Native Calendar
Agent-Native Google Calendar - manage events, sync, and public booking
作者提供的说明(英文原文)
Read-only semantic search MCP server for Obsidian vaults using local Ollama embeddings.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
OBSIDIAN_VAULT_ROOT, OBSIDIAN_SEMANTIC_MCP_HOME, OBSIDIAN_EMBED_MODEL, OLLAMA_BASE_URL, OBSIDIAN_SEMANTIC_STARTUP_INDEX, OBSIDIAN_SEMANTIC_ALLOW_SENSITIVE, OBSIDIAN_SEMANTIC_EXCLUDE, OBSIDIAN_SEMANTIC_SENSITIVE_PATHS你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"obsidian-semantic": {
"command": "npx",
"args": [
"-y",
"@dalecb/obsidian-semantic-mcp"
],
"env": {
"OBSIDIAN_VAULT_ROOT": "your-value",
"OBSIDIAN_SEMANTIC_MCP_HOME": "your-value",
"OBSIDIAN_EMBED_MODEL": "your-value",
"OLLAMA_BASE_URL": "your-value",
"OBSIDIAN_SEMANTIC_STARTUP_INDEX": "your-value",
"OBSIDIAN_SEMANTIC_ALLOW_SENSITIVE": "your-value",
"OBSIDIAN_SEMANTIC_EXCLUDE": "your-value",
"OBSIDIAN_SEMANTIC_SENSITIVE_PATHS": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add obsidian-semantic --env OBSIDIAN_VAULT_ROOT=your-value --env OBSIDIAN_SEMANTIC_MCP_HOME=your-value --env OBSIDIAN_EMBED_MODEL=your-value --env OLLAMA_BASE_URL=your-value --env OBSIDIAN_SEMANTIC_STARTUP_INDEX=your-value --env OBSIDIAN_SEMANTIC_ALLOW_SENSITIVE=your-value --env OBSIDIAN_SEMANTIC_EXCLUDE=your-value --env OBSIDIAN_SEMANTIC_SENSITIVE_PATHS=your-value -- npx -y @dalecb/obsidian-semantic-mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"obsidian-semantic": {
"command": "npx",
"args": [
"-y",
"@dalecb/obsidian-semantic-mcp"
],
"env": {
"OBSIDIAN_VAULT_ROOT": "your-value",
"OBSIDIAN_SEMANTIC_MCP_HOME": "your-value",
"OBSIDIAN_EMBED_MODEL": "your-value",
"OLLAMA_BASE_URL": "your-value",
"OBSIDIAN_SEMANTIC_STARTUP_INDEX": "your-value",
"OBSIDIAN_SEMANTIC_ALLOW_SENSITIVE": "your-value",
"OBSIDIAN_SEMANTIC_EXCLUDE": "your-value",
"OBSIDIAN_SEMANTIC_SENSITIVE_PATHS": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"obsidian-semantic": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@dalecb/obsidian-semantic-mcp"
],
"env": {
"OBSIDIAN_VAULT_ROOT": "your-value",
"OBSIDIAN_SEMANTIC_MCP_HOME": "your-value",
"OBSIDIAN_EMBED_MODEL": "your-value",
"OLLAMA_BASE_URL": "your-value",
"OBSIDIAN_SEMANTIC_STARTUP_INDEX": "your-value",
"OBSIDIAN_SEMANTIC_ALLOW_SENSITIVE": "your-value",
"OBSIDIAN_SEMANTIC_EXCLUDE": "your-value",
"OBSIDIAN_SEMANTIC_SENSITIVE_PATHS": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
OBSIDIAN_SEMANTIC_MCP_HOME envOBSIDIAN_EMBED_MODEL envOLLAMA_BASE_URL envOBSIDIAN_SEMANTIC_STARTUP_INDEX envOBSIDIAN_SEMANTIC_ALLOW_SENSITIVE envOBSIDIAN_SEMANTIC_EXCLUDE envOBSIDIAN_SEMANTIC_SENSITIVE_PATHS env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 DalecB 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:OBSIDIAN_VAULT_ROOT
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.2.1)于5个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Agent-Native Google Calendar - manage events, sync, and public booking
Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Obsidian Semantic Search MCP
Read-only semantic retrieval for agents that need to find the right Obsidian note without write access.
한국어 · Quick Start · Why This Exists · How It Works
Your Obsidian vault is useful only if your agent can find the right note.
Keyword search misses context. Full write-capable Obsidian MCP servers expose more power than a retrieval agent needs. Obsidian plugins are great inside Obsidian, but they are not always the right boundary for Codex, Claude Desktop, Cursor, or any other MCP client.
This project is the narrow version:
local Obsidian vault -> read-only scanner -> local SQLite index -> MCP search/read tools
No note writes. No cloud embeddings by default. No Obsidian plugin runtime. No sync service.
Status:
0.3.1early preview. The server is usable today, but ranking behavior and tool schemas may change before1.0.
| Need | What this server does |
|---|---|
| Find the note an agent should read | Hybrid semantic + keyword search over Markdown notes |
| Keep the vault safe | Exposes search/read/index/status only; no write, patch, move, rename, or delete tools |
| Stay local-first | Uses Ollama embeddings and stores the index on your machine |
| Make results agent-friendly | Returns file-level matches with headings, snippets, and line ranges |
| Avoid plugin state | Reads the vault directly from the filesystem; Obsidian does not need to be running |
Example result shape:
{
"path": "02_Projects/RealtimeAPI/05_Interview_QA.md", "title": "Interview Q&A", "score": 0.7431, "matched_sections": [ { "heading": "Level 4 > Redis Lua atomicity", "lines": [266, 305], "reason": "semantic=1, keyword=0.5565, metadata=0.6" } ] }
Requirements:
>= 24Install the embedding model:
ollama pull bge-m3
curl http://localhost:11434/api/tags
Print setup guidance:
npx -y --package @dalecb/obsidian-semantic-mcp obsidian-semantic-mcp-setup
Add this to ~/.codex/config.toml:
[mcp_servers.obsidian_semantic]
command = "npx" args = ["-y", "@dalecb/obsidian-semantic-mcp"]
[mcp_servers.obsidian_semantic.env] OBSIDIAN_VAULT_ROOT = "/path/to/your/Obsidian Vault" OBSIDIAN_SEMANTIC_MCP_HOME = "/Users/you/.obsidian-semantic-mcp" OLLAMA_BASE_URL = "http://localhost:11434" OBSIDIAN_EMBED_MODEL = "bge-m3" OBSIDIAN_SEMANTIC_AUTO_INDEX = "true"
Restart Codex, then run:
obsidian_semantic.index_status
obsidian_semantic.search_notes { "query": "Redis Lua atomicity", "limit": 5 }
Add the server at user scope so the personal vault path stays out of project .mcp.json files:
claude mcp add obsidian_semantic --scope user \
--env OBSIDIAN_VAULT_ROOT="/path/to/your/Obsidian Vault" \ --env OBSIDIAN_SEMANTIC_MCP_HOME="/Users/you/.obsidian-semantic-mcp" \ --env OLLAMA_BASE_URL="http://localhost:11434" \ --env OBSIDIAN_EMBED_MODEL="bge-m3" \ --env OBSIDIAN_SEMANTIC_AUTO_INDEX="true" \ -- npx -y @dalecb/obsidian-semantic-mcp
claude mcp get obsidian_semantic
Start a new Claude Code session and run /mcp to confirm the server is connected. On native Windows, use -- cmd /c npx -y @dalecb/obsidian-semantic-mcp after the environment flags.
See Anthropic's Claude Code MCP documentation for scope and command details.
In Claude Desktop, open Settings → Developer → Edit Config. This opens ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows. Merge the following server into mcpServers:
{
"mcpServers": { "obsidian_semantic": { "command": "npx", "args": ["-y", "@dalecb/obsidian-semantic-mcp"], "env": { "OBSIDIAN_VAULT_ROOT": "/path/to/your/Obsidian Vault", "OBSIDIAN_SEMANTIC_MCP_HOME": "/Users/you/.obsidian-semantic-mcp", "OLLAMA_BASE_URL": "http://localhost:11434", "OBSIDIAN_EMBED_MODEL": "bge-m3", "OBSIDIAN_SEMANTIC_AUTO_INDEX": "true" } } } }
Fully quit and restart Claude Desktop. Cursor and other JSON-style stdio MCP clients can use the same mcpServers entry. On Windows, if npx is not found, use "command": "cmd" and prepend "/c", "npx" to args.
See the official local MCP server guide for Claude Desktop configuration and logs.
This isn't aiming to be the most powerful Obsidian automation server. It aims to be the safest retrieval tool you can hand an agent.
Here's how it stacks up against the two tools it usually comes down to — a full-permission Obsidian MCP server (Local REST API based) and GBrain (a broader knowledge-compilation platform):
| This project | Full-permission Obsidian MCP | GBrain | |
|---|---|---|---|
| Access model | Read-only: search / read / index | Read + write + edit + delete | Read + write; compiles notes into its own model |
| Touches your vault | Never | Yes | Yes — restructures content |
| Obsidian must run | No — reads files directly | Yes — needs the REST API plugin | No |
| Required local runtime | Node.js + Ollama | Obsidian + plugin | Standalone platform |
| Embeddings & data | Local Ollama by default; remote URL is configurable | Local API; embeddings vary by setup | Built-in pipeline; optional sync |
| Storage | One SQLite file you can delete and rebuild | Plugin-managed | Its own store / migration |
| Best for | A small read-only retrieval boundary for agents | Full vault automation and editing | Building a compiled knowledge base across sources |
That trade is on purpose: give up writing, editing, and running inside Obsidian, and you get fewer moving parts and a smaller blast radius in return.
Use this if your agent should answer:
Do not use this if you want an Obsidian UI plugin, automatic note generation, or write-capable vault automation.
index_statusReturns index metadata and safety settings.
index_vaultBuilds or updates the external SQLite index.
{ "mode": "incremental" }
Specific files:
{
"mode": "incremental", "paths": ["02_Projects/My Note.md"] }
search_notesSearches notes with hybrid semantic and keyword ranking.
{
"query": "live coding notes", "limit": 8, "mode": "hybrid" }
Modes:
hybrid: semantic vector + SQLite FTS5 + metadata boostssemantic: vector-first searchkeyword: FTS5 keyword search without embedding the queryread_noteReads a note or line range by vault-relative path.
{
"path": "02_Projects/My Note.md", "start_line": 10, "end_line": 40 }
index_vault
-> scan Markdown files under OBSIDIAN_VAULT_ROOT -> block denied paths and symlink escapes -> split notes by Markdown headings -> create one summary chunk per file -> embed chunks with Ollama bge-m3 -> store notes, chunks, FTS rows, and vectors in SQLite
search_notes -> incrementally index on first search or first search after a Markdown change -> embed the query with Ollama -> score vector similarity -> score SQLite FTS5 keyword matches -> apply title/path/heading metadata boosts -> regroup chunk matches into file-level results
Default storage:
~/.obsidian-semantic-mcp/
data/semantic.sqlite
The vault remains the source of truth. The SQLite database is a derived index and can be deleted/rebuilt.
The server reads your vault and never writes to it. Three layers decide what an agent can see.
1. Always denied (system / tooling). Never indexed, no override:
.obsidian/, .smart-env/, .claude/, .codex-*/.)node_modules, cache, logs2. Sensitive — denied by default, unlockable. Stays blocked even when a tool call passes include_sensitive: true, unless the server is started with OBSIDIAN_SEMANTIC_ALLOW_SENSITIVE=true. Defaults to 08_PersonalInfo/. Override the list with OBSIDIAN_SEMANTIC_SENSITIVE_PATHS (comma- or newline-separated folders):
OBSIDIAN_SEMANTIC_SENSITIVE_PATHS = "08_PersonalInfo, 09_Finance"
3. Your own excludes — always denied. Folders you never want indexed, searched, or read. No unlock flag:
OBSIDIAN_SEMANTIC_EXCLUDE = "03_Journal, Private, Clients/Acme"
Which one do you want?
OBSIDIAN_SEMANTIC_EXCLUDEOBSIDIAN_SEMANTIC_SENSITIVE_PATHS + OBSIDIAN_SEMANTIC_ALLOW_SENSITIVEAdditional guards:
realpath.
search_notesandread_noteenforce the current exclusion settings on every call. With automatic indexing enabled, the next search also removes excluded stale rows from the index. Confirm the active lists withindex_status.
The local index stores snippets and embedding vectors. Treat it as a derived copy of your vault. See PRIVACY.md.
The default is action-driven, not timer-based:
search_notes after server start.search_notes after a Markdown create, update, delete, or rename event.search_notes after the embedding model or index format changes; this triggers a full rebuild.index_vault call.The filesystem watcher only marks the index dirty. Indexing runs once, immediately before the next search, and concurrent searches share that work. If recursive watching is unavailable, the server falls back to an incremental scan before every search.
Disable automatic indexing with:
OBSIDIAN_SEMANTIC_AUTO_INDEX = "false"
Then call index_vault { "mode": "incremental" } yourself. The legacy OBSIDIAN_SEMANTIC_STARTUP_INDEX=true remains supported, but is not the default because it does work even when no search follows.
Create a JSON file containing queries and expected paths to compare keyword, semantic, and hybrid modes under the same conditions:
[
{ "query": "strong consistency at 1000 TPS", "expected_paths": ["03_Knowledge/QnA/Strong-Consistency-at-1000TPS.md"] } ]
npm run evaluate --只显示了开头部分;其余内容请在仓库中阅读