Semantic Notes Vault MCP
Memory server
Created by Aaron Bockelie
Published in aaronsb/obsidian-mcp-plugin. Publisher page
468 GitHub stars
What it is
Read, write, search, and traverse your vault from Claude Desktop and any AI assistant — via a built-in MCP server, no external server to run.
AutoGineer overview, from the brain’s own files
Semantic Notes Vault MCP transforms your Obsidian vault into a persistent, intelligent memory layer for AI agents. By running an MCP server directly within the Obsidian application, it eliminates the need for external processes or complex API bridges. The plugin exposes eight tool families that allow AI assistants to perform comprehensive vault operations, including file management, graph traversal, and semantic search. It is designed to respect user-defined security permissions, ensuring that AI interactions remain within controlled boundaries while enabling deep, context-aware knowledge synthesis.
How it works
Memory model: Knowledge graph
AutoGineer overview, from the brain’s own files
The plugin functions as a built-in Model Context Protocol (MCP) server inside Obsidian. It uses a direct Obsidian API integration to read, write, and traverse your notes. It organizes your data into a knowledge graph, allowing AI to navigate links, tags, and backlinks. The system includes a security layer for path validation and permissions, and it supports Dataview queries and database views for advanced data retrieval.
| Folder | Role | Files |
|---|---|---|
| .github | agent-config | 11 |
| docs | docs | 34 |
| scripts | scripts | 9 |
| src | source-code | 79 |
| tests | tests | 74 |
| wiki | wiki | 1 |
| .claude-github | folder | 2 |
| mcpb | folder | 2 |
The agent reads
- scripts/scorecard.mjs evidence: CLAUDE.md
- manifest.json evidence: CLAUDE.md
The agent writes
- package.json evidence: CLAUDE.md
- sync-version.mjs evidence: CLAUDE.md
- manifest.json evidence: CLAUDE.md
Requirements
Apps: Obsidian
Runtimes: Node.js
API keys (by name): YOUR_API_KEY
Works with: Claude Code, OpenCode
Set it up
This brain runs code automatically: 1 plugin code item (obsidian), 1 script. Review Makefile, manifest.json before opening the folder in Claude Code. No step below turns a hook on for you.
Makefile:npm installmanifest.json:runs inside Obsidian once the plugin is enabled
- Download main.js, manifest.json and styles.css of release 0.13.0: https://github.com/aaronsb/obsidian-mcp-plugin/releases/tag/0.13.0
Check main.js against the SHA-256 AutoGineer recorded:
curl -fsSLO https://github.com/aaronsb/obsidian-mcp-plugin/releases/download/0.13.0/main.js && shasum -a 256 main.js # expect 47da0b5aa8880e21d50bb7c883c976d8563d19694620ae8f3a3f84ead28d65b8Copy the three files into <vault>/.obsidian/plugins/semantic-vault-mcp/ and enable the plugin in Settings → Community plugins.
You will install release 0.13.0, which AutoGineer scanned (main.js SHA-256 47da0b5aa8880e21d50bb7c883c976d8563d19694620ae8f3a3f84ead28d65b8).
- Not scanned by AutoGineerObsidian installs the plugin’s current release; AutoGineer scanned release 0.13.0 (2026-11-12). https://obsidian.md/plugins?id=semantic-vault-mcp
Created by Aaron Bockelie. Published in aaronsb/obsidian-mcp-plugin. Licence: MIT License.
Usage
AutoGineer overview, from the brain’s own files
- Connect Claude Desktop to your Obsidian vault for direct note interaction.
- Enable AI agents to perform complex research by traversing your note graph.
- Automate note creation and organization based on existing knowledge structures.
- Execute Dataview queries via AI prompts to summarize or analyze your vault data.
- “What are my recent thoughts on project X?”
- The AI searches your vault for notes related to project X and synthesizes your recent entries.
- “Find connections between my psychology and philosophy notes”
- The AI traverses your knowledge graph to identify shared concepts and bridge notes between the two domains.
Documentation by Aaron Bockelie
Semantic Notes Vault MCP
Image: GitHub stars Image: GitHub forks Image: Downloads Image: Latest Release Image: License
📦 Available in the Obsidian Community Plugin directory →
Read, write, search, and traverse your Obsidian vault from any AI assistant — through an MCP server that runs inside Obsidian.
No external Node process to launch, no separate REST-API plugin to bridge through: the server is the plugin. Setup is a drag-and-drop — drop the .mcpb bundle onto Claude Desktop, paste your key, done.
It exposes 8 powerful tools — each a whole family of operations, not a single call (the vault tool alone handles 13: list, read, create, search, move, split, combine, and more) — with first-class Dataview and Bases support plus graph traversal across links, tags, and backlinks. And every operation respects the permissions you set — a read-only mode, per-operation controls, and path allow/block lists — so the AI only ever does what you've allowed, not unrestricted run of your vault.
Works with any MCP-compatible client — Claude Desktop, Claude Code, Cline, Continue.dev, and anything that speaks local MCP.
New to MCP? The Model Context Protocol is the open standard that lets AI assistants interact with external tools and data. You don't need to understand it to use this — the Quick Start is three steps.
Quick Start
Prerequisites: an MCP-compatible AI client like Claude Desktop, Claude Code, or Continue.dev.
📦 ──drag──▶ 🤖💬
Download the
.mcpbbundle from the plugin's config page → drag it onto Claude Desktop → paste your key. Done.
For most people that's the entire setup. The numbered steps below spell it out, then cover other MCP clients.
1. Install the Plugin
Via Obsidian Community Plugins
Open Settings → Community plugins → Browse
Search for "Semantic Notes Vault MCP"
Install and enable — or install straight from the plugin listing
Via BRAT (for beta testing)
Install BRAT
Add beta plugin:
aaronsb/obsidian-mcp-plugin
2. Configure Your AI Client
Three onboarding paths, ordered by audience. All three are also shown in the plugin's Settings tab with copy-ready values.
📦 → 🤖 Claude Desktop — one-click .mcpb install (recommended)
Download obsidian-mcp-<version>.mcpb — either from the plugin's Settings tab (button right on the config page) or the latest release — then either drag it onto the Claude Desktop window or double-click it. Claude Desktop opens an install dialog with two fields — paste the URL and API key shown in the plugin's Settings tab, hit Save, and you're done.
Cross-platform note:
.mcpbfiles install via Claude Desktop's bundled handler. If double-click doesn't trigger Claude on your system, drag the file onto Claude Desktop's window instead, or right-click → "Open with…" and pick Claude Desktop (then "always open with" if your OS asks). Behavior varies by platform: macOS usually auto-associates, Windows may need a one-time association, Linux varies by desktop environment.
Claude Code — one command (copy the ready-made version with your API key from the plugin's Settings tab):
claude mcp add --transport http obsidian http://localhost:3001/mcp --header "Authorization: Bearer YOUR_API_KEY"For HTTPS, use https://localhost:3443/mcp instead — see Trusting the self-signed certificate below. Claude Code runs on Bun, which does not read the macOS system keychain, so you will need to set NODE_EXTRA_CA_CERTS.
Other MCP clients (Cline, Continue, custom integrations, multi-vault setups)
Add an entry to the client's MCP config file — one entry per vault if you run multiple Obsidian instances on different ports:
{
"mcpServers": {
"obsidian-vault": {
"transport": {
"type": "http",
"url": "http://localhost:3001/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
}Advanced: custom .mcpb per vault
For multi-vault setups that want one-click install per vault, clone this repo and run the maker:
node scripts/make-mcpb.mjs
# Prompts for display name, URL, and API key
# Outputs obsidian-mcp-<slug>.mcpb with everything pre-filledDrop the resulting bundle into Claude Desktop and click Install — no fields to type.
Trusting the self-signed certificate
The plugin's HTTPS server uses a self-signed certificate auto-generated on first start and stored under .obsidian/plugins/semantic-vault-mcp/certificates/default.crt inside your vault. MCP clients reject self-signed certificates by default, so you need to explicitly trust it before connecting over HTTPS. Pick the method that matches your client runtime.
macOS Keychain (for clients that use the system trust store — Claude Desktop, browser-based tools, Node with --use-system-ca):
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain \
/path/to/vault/.obsidian/plugins/semantic-vault-mcp/certificates/default.crtNODE_EXTRA_CA_CERTS (required for Claude Code and other Bun-based runtimes):
Bun does not consult the macOS system keychain for TLS trust, so trusting the certificate via Keychain Access alone has no effect — this is almost always the real reason an HTTPS connection from Claude Code fails. Bun only honors certificates listed in NODE_EXTRA_CA_CERTS:
# Point directly at the plugin cert, or append it to an existing CA bundle:
export NODE_EXTRA_CA_CERTS=/path/to/vault/.obsidian/plugins/semantic-vault-mcp/certificates/default.crt
# Propagate to GUI apps launched from the macOS dock (including Claude Code):
launchctl setenv NODE_EXTRA_CA_CERTS /path/to/vault/.obsidian/plugins/semantic-vault-mcp/certificates/default.crtRe-run these whenever the plugin regenerates its certificate (e.g. after the 1-year validity expires).
Avoid
NODE_TLS_REJECT_UNAUTHORIZED=0. It disables TLS verification process-wide — for every HTTPS connection the client makes, not just this plugin — and masks legitimate certificate problems (expired, revoked, tampered). Trust the certificate explicitly instead.
3. Start Using
Once connected, simply chat with your AI assistant about your notes! For example:
"What are my recent thoughts on project X?"
"Find connections between my psychology and philosophy notes"
"Summarize my meeting notes from this week"
"Create a new note linking my ideas about Y"
Your AI assistant now has these capabilities:
Navigate your vault's link structure
Search and rank across all notes
Read, edit, and create notes
Analyze your knowledge graph
Work with Dataview queries (if installed)
Manage Obsidian Bases (database views)
Why It's Different
Traditional file access gives AI a narrow view — one document at a time. This plugin gives it the whole connected picture:
Graph Navigation: AI follows links between notes, understanding relationships and context
Concept Discovery: Search and graph traversal surface related ideas across your vault
Contextual Awareness: AI understands where information lives in your knowledge structure
Intelligent Synthesis: Combine fragments from multiple notes to answer complex questions
Core Tools
The plugin provides 8 powerful tools that give AI comprehensive vault access — each one a family of related operations, all subject to the permissions you set:
| Tool | Purpose | Key Actions |
|---|---|---|
| 📁 vault | File operations | list, read, create, search, move, split, combine |
| ✏️ edit | Content modification | window editing, append, patch sections |
| 👁️ view | Content display | view files, windows, active note |
| 🕸️ graph | Link navigation | traverse, find paths, analyze connections |
| 💡 workflow | Contextual hints | suggest next actions based on state |
| 📊 dataview | Query notes | Execute DQL queries (if installed) |
| 🗃️ bases | Database views | Query and export Bases (if available) |
| ℹ️ system | Vault info | Server status, commands, web fetch (off by default), running allowlisted commands (off by default) |
Documentation
Detailed documentation for each tool and feature:
📁 Vault Operations - File management and search
🕸️ Graph Navigation - Link traversal and analysis
ℹ️ System Operations - Server info, web fetch, and gated command execution
🔧 Configuration - Server settings and options
❓ Troubleshooting - Common issues and solutions
In Practice
This plugin doesn't just give AI access to files — it lets AI work across your vault as a connected whole:
Example: Research Assistant
User: "Summarize my research on machine learning optimization"
AI uses these tools to:
1. Search for notes with ML optimization concepts
2. Traverse graph to find related papers and techniques
3. Follow backlinks to discover applications
4. Synthesize findings from multiple connected notesExample: Knowledge Explorer
User: "What connections exist between my notes on philosophy and cognitive science?"
AI uses graph tools to:
1. Find notes tagged with both topics
2. Analyze shared concepts via graph traversal
3. Identify bridge notes that connect domains
4. Map the conceptual overlapFeatures
Full-Text Search
Advanced query operators:
tag:,path:,content:Regular expressions and phrase matching
Relevance ranking and snippet extraction
Graph Intelligence
Multi-hop traversal with depth control
Backlink and forward-link analysis
Path finding between concepts
Tag-based navigation
Content Operations
Fuzzy text matching for edits
Structure-aware modifications (headings, blocks)
Batch operations (split, combine, move)
Template support
Integration
Dataview query execution
Bases database operations
Web content fetching
Read-only mode for safety
Plugin Settings
Access settings via: Settings → Community plugins → Semantic Notes Vault MCP
Key configuration options:
Server Ports: HTTP (3001) and HTTPS (3443)
Authentication: API key protection
Security: Path validation and permissions
Performance: Connection pooling and caching
Support
Issues: GitHub Issues
Discussions: GitHub Discussions
Sponsor: GitHub Sponsors
License
CODE_OF_CONDUCT.md
Contributor Covenant Code of Conduct
Our Pledge
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
Our Standards
Examples of behavior that contributes to a positive environment for our community include:
Demonstrating empathy and kindness toward other people
Being respectful of differing opinions, viewpoints, and experiences
Giving and gracefully accepting constructive feedback
Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
Focusing on what is best not just for us as individuals, but for the overall community
Examples of unacceptable behavior include:
The use of sexualized language or imagery, and sexual attention or advances of any kind
Trolling, insulting or derogatory comments, and personal or political attacks
Public or private harassment
Publishing others' private information, such as a physical or email address, without their explicit permission
Other conduct which could reasonably be considered inappropriate in a professional setting
Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
Scope
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at e-mail address on the upstream page. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
1. Correction
Community Impact: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
Consequence: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
2. Warning
Community Impact: A violation through a single incident or series of actions.
Consequence: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
3. Temporary Ban
Community Impact: A serious violation of community standards, including sustained inappropriate behavior.
Consequence: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
4. Permanent Ban
Community Impact: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
Consequence: A permanent ban from any sort of public interaction within the community.
Attribution
This Code of Conduct is adapted from the Contributor Covenant, version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder.
For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.
236 files · 218 not served here
- .claude-github/design.md (not served here)
- .claude-github/issue-32-response.md (not served here)
- .github-tracking (not served here)
- .github/FUNDING.yml (not served here)
- .github/ISSUE_TEMPLATE/bug_report.md (not served here)
- .github/ISSUE_TEMPLATE/feature_request.md (not served here)
- .github/dependabot.yml (not served here)
- .github/pull_request_template.md (not served here)
- .github/workflows/build.yml (not served here)
- .github/workflows/feature-release.yml (not served here)
- .github/workflows/release.yml (not served here)
- .github/workflows/scorecard-watch.yml (not served here)
- .github/workflows/security.yml (not served here)
- .github/workflows/test.yml (not served here)
- .gitignore (not served here)
- ATTRIBUTION.md
- AUTOGINEER-RUNS.md
- CHANGELOG.md
- CLAUDE.md
- CODE_OF_CONDUCT.md
- CONTRIBUTING.md
- LICENSE
- Makefile (not served here)
- README.md
- SECURITY.md
- docs/PROJECT_STRUCTURE.md
- docs/Plugin_UI_July_2025.png (not served here)
- docs/SECURITY-IMPLEMENTATION.md
- docs/adr/ADR-001-adopting-adr-format.md (not served here)
- docs/adr/ADR-002-search-facade-architecture.md (not served here)
- docs/adr/ADR-003-presentation-facade.md (not served here)
- docs/architecture/INDEX.md (not served here)
- docs/architecture/adr.yaml (not served here)
- docs/architecture/core/ADR-100-remove-concurrent-mode-toggle-and-simplify-connection-setup.md (not served here)
- docs/architecture/core/ADR-101-tree-based-mcp-tool-visibility-gating.md (not served here)
- docs/architecture/core/ADR-102-ship-mcpb-bundle-as-primary-claude-desktop-onboarding.md (not served here)
- docs/architecture/core/ADR-103-tls-certificate-and-key-storage-strategy-for-localhost-https.md (not served here)
- docs/architecture/core/ADR-104-offload-cpu-bound-semantic-operations-to-worker-threads-and-deconflict-the-sse-route.md (not served here)
- docs/architecture/core/ADR-105-remove-dormant-worker-offload-path-partial-reversal-of-adr-104.md (not served here)
- docs/architecture/core/ADR-106-client-driven-session-re-initialization-via-spec-compliant-http-404.md (not served here)
- docs/architecture/core/ADR-107-network-exposure-modes-as-a-classified-state-machine.md (not served here)
- docs/architecture/core/ADR-108-consolidate-read-only-enforcement-onto-the-security-layer-and-make-it-live.md (not served here)
- docs/architecture/core/ADR-109-outbound-web-fetch-is-off-by-default-and-range-filtered-when-enabled.md (not served here)
- docs/architecture/delivery/ADR-300-single-branch-release-strategy-with-prerelease-promote.md (not served here)
- docs/architecture/tools/ADR-200-close-cli-parity-gaps-add-daily-notes-tasks-templates-and-properties-operations.md (not served here)
- docs/architecture/tools/ADR-201-replace-new-function-with-a-sandboxed-expression-evaluator-for-bases.md (not served here)
- docs/architecture/tools/ADR-202-split-semantic-router-monolith-into-per-operation-modules.md (not served here)
- docs/architecture/tools/ADR-203-faithful-by-default-content-reads-concise-by-default-tool-results.md (not served here)
- docs/architecture/tools/ADR-204-gated-command-palette-execution.md (not served here)
- docs/bases-implementation-fixes.md
- docs/bases-implementation-status.md
- docs/bases-implementation.md
- docs/bases-mcp-reference.md
- docs/graph-traversal.md
- docs/scripts/adr (not served here)
- docs/tools/graph.md (not served here)
- docs/tools/system.md (not served here)
- docs/tools/vault.md (not served here)
- docs/troubleshooting.md
- esbuild.config.mjs (not served here)
- eslint.config.mts (not served here)
- jest.config.js (not served here)
- manifest.json
- mcpb/manifest.json (not served here)
- mcpb/server.js (not served here)
- package-lock.json (not served here)
- package.json (not served here)
- scripts/build-mcpb.mjs (not served here)
- scripts/coverage-map.mjs (not served here)
- scripts/make-mcpb.mjs (not served here)
- scripts/scorecard-baseline.json (not served here)
- scripts/scorecard-baseline.mjs (not served here)
- scripts/scorecard-findings.mjs (not served here)
- scripts/scorecard-gate.mjs (not served here)
- scripts/scorecard.mjs (not served here)
- scripts/set-description.mjs (not served here)
- src/config/response-limits.json (not served here)
- src/config/workflow-schema.json (not served here)
- src/config/workflows.json (not served here)
- src/formatters/dataview.ts (not served here)
- src/formatters/graph.ts (not served here)
- src/formatters/index.ts (not served here)
- src/formatters/search.ts (not served here)
- src/formatters/system.ts (not served here)
- src/formatters/utils.ts (not served here)
- src/formatters/vault.ts (not served here)
- src/formatters/view.ts (not served here)
- src/indexing/adaptive-index.ts (not served here)
- src/indexing/fragment-retriever.ts (not served here)
- src/indexing/proximity-index.ts (not served here)
- src/indexing/semantic-chunk-index.ts (not served here)
- src/main.ts (not served here)
- src/mcp-server.ts (not served here)
- src/plugin-settings.ts (not served here)
- src/security/http-auth.ts (not served here)
- src/security/index.ts (not served here)
- src/security/mcp-ignore-manager.ts (not served here)
- src/security/path-validator.ts (not served here)
- src/security/safe-fetch.ts (not served here)
- src/security/secure-obsidian-api.ts (not served here)
- src/security/url-validator.ts (not served here)
- src/security/vault-security-manager.ts (not served here)
- src/semantic/operations/bases.ts (not served here)
- src/semantic/operations/edit.ts (not served here)
- src/semantic/operations/graph.ts (not served here)
- src/semantic/operations/router-context.ts (not served here)
- src/semantic/operations/shared.ts (not served here)
- src/semantic/operations/system.ts (not served here)
- src/semantic/operations/vault.ts (not served here)
- src/semantic/operations/view.ts (not served here)
- src/semantic/operations/workflow.ts (not served here)
- src/semantic/router.ts (not served here)
- src/semantic/state-tokens.ts (not served here)
- src/tools/dataview-tool.ts (not served here)
- src/tools/fetch.ts (not served here)
- src/tools/graph-search-tag-traversal.ts (not served here)
- src/tools/graph-search-tool.ts (not served here)
- src/tools/graph-search-traversal.ts (not served here)
- src/tools/graph-search.ts (not served here)
- src/tools/graph-tag-tool.ts (not served here)
- src/tools/semantic-tools.ts (not served here)
- src/tools/window-edit.ts (not served here)
- src/types/bases-yaml.ts (not served here)
- src/types/bases.ts (not served here)
- src/types/fragment.ts (not served here)
- src/types/obsidian.ts (not served here)
- src/types/semantic.ts (not served here)
- src/utils/__tests__/response-limiter.test.ts (not served here)
- src/utils/advanced-search.ts (not served here)
- src/utils/bases-api.ts (not served here)
- src/utils/bases-reference.ts (not served here)
- src/utils/certificate-manager.ts (not served here)
- src/utils/connection-pool.ts (not served here)
- src/utils/content-buffer.ts (not served here)
- src/utils/content-handler.ts (not served here)
- src/utils/debug.ts (not served here)
- src/utils/expression-evaluator.ts (not served here)
- src/utils/file-lock.ts (not served here)
- src/utils/file-reader.ts (not served here)
- src/utils/formula-engine.ts (not served here)
- src/utils/fuzzy-match.ts (not served here)
- src/utils/graph-traversal.ts (not served here)
- src/utils/image-handler.ts (not served here)
- src/utils/mcp-server-pool.ts (not served here)
- src/utils/network-classifier.ts (not served here)
- src/utils/obsidian-api.ts (not served here)
- src/utils/obsidian-commands.ts (not served here)
- src/utils/plugin-detector.ts (not served here)
- src/utils/response-limiter.ts (not served here)
- src/utils/search-core.ts (not served here)
- src/utils/search-facade.ts (not served here)
- src/utils/session-manager.ts (not served here)
- src/utils/yaml-bridge.ts (not served here)
- src/validation/input-validator.ts (not served here)
- src/version.ts (not served here)
- styles.css (not served here)
- sync-version.mjs (not served here)
- test-concurrent.js (not served here)
- tests/__mocks__/obsidian.ts (not served here)
- tests/bases-expression-evaluator.test.ts (not served here)
- tests/bases-router-dispatch.test.ts (not served here)
- tests/bases-yaml.test.ts (not served here)
- tests/bridge-bootstrap.test.ts (not served here)
- tests/bridge-self-heal.test.ts (not served here)
- tests/combine-inline-router.test.ts (not served here)
- tests/combine-inline.test.ts (not served here)
- tests/dataview-integration.test.ts (not served here)
- tests/dispatch-param-guards.test.ts (not served here)
- tests/edit-router-dispatch.test.ts (not served here)
- tests/file-lock-edit-serialization.test.ts (not served here)
- tests/fixtures/base-corpus.ts (not served here)
- tests/fixtures/scorecard-page.html (not served here)
- tests/formatters/graph-vault-stats.test.ts (not served here)
- tests/formatters/path-fidelity.test.ts (not served here)
- tests/formatters/read-frontmatter-dedup.test.ts (not served here)
- tests/formatters/search-signal-honesty.test.ts (not served here)
- tests/formatters/summary-footer.test.ts (not served here)
- tests/formatters/system-commands.test.ts (not served here)
- tests/fragments-path-scope.test.ts (not served here)
- tests/fuzzy-match.test.ts (not served here)
- tests/graph-ignore-exclusion.test.ts (not served here)
- tests/graph-node-title.test.ts (not served here)
- tests/graph-router-dispatch.test.ts (not served here)
- tests/graph-search-traversal.test.ts (not served here)
- tests/graph-search.test.ts (not served here)
- tests/graph-statistics-vault-wide.test.ts (not served here)
- tests/list-files-recursive.test.ts (not served here)
- tests/mcp-server-pool-tool-timeout.test.ts (not served here)
- tests/mcp-server.test.ts (not served here)
- tests/mcp-session-reinit.test.ts (not served here)
- tests/network-classifier.test.ts (not served here)
- tests/network-exposure-integration.test.ts (not served here)
- tests/patch-operations.test.ts (not served here)
- tests/plugin-settings.test.ts (not served here)
- tests/read-only-mode.test.ts (not served here)
- tests/recursive-copy.test.ts (not served here)
- tests/scorecard-gate.test.ts (not served here)
- tests/scorecard.test.ts (not served here)
- tests/search-tag-operator.test.ts (not served here)
- tests/security/active-file-path-checks.test.ts (not served here)
- tests/security/config-dir-protection.test.ts (not served here)
- tests/security/fetch-tool-gate.test.ts (not served here)
- tests/security/fetch-web-enumeration.test.ts (not served here)
- tests/security/http-auth.test.ts (not served here)
- tests/security/mcp-ignore-manager.test.ts (not served here)
- tests/security/mcpignore-readonly.test.ts (not served here)
- tests/security/param-validation.test.ts (not served here)
- tests/security/path-validator.test.ts (not served here)
- tests/security/read-only-action-matrix.test.ts (not served here)
- tests/security/read-only-liveness.test.ts (not served here)
- tests/security/safe-fetch.test.ts (not served here)
- tests/security/session-api-enforcement.test.ts (not served here)
- tests/security/system-execute.test.ts (not served here)
- tests/security/tls-cert-verification.test.ts (not served here)
- tests/security/tls-min-version.test.ts (not served here)
- tests/security/tool-list-liveness.test.ts (not served here)
- tests/security/tool-visibility.test.ts (not served here)
- tests/security/url-validator.test.ts (not served here)
- tests/security/vault-security-manager.test.ts (not served here)
- tests/security/write-path-containment.test.ts (not served here)
- tests/server-info-version.test.ts (not served here)
- tests/setup.ts (not served here)
- tests/sse-socket-timeout.test.ts (not served here)
- tests/system-router-dispatch.test.ts (not served here)
- tests/test-contract.test.ts (not served here)
- tests/validation/input-validator.test.ts (not served here)
- tests/vault-read-fidelity.test.ts (not served here)
- tests/vault-rename-extension.test.ts (not served here)
- tests/vault-replace.test.ts (not served here)
- tests/view-router-dispatch.test.ts (not served here)
- tests/web-fetch-large-response.test.ts (not served here)
- tests/workflow-router-dispatch.test.ts (not served here)
- tsconfig.json (not served here)
- version-bump.mjs (not served here)
- versions.json (not served here)
- wiki/Design.md (not served here)
Advantages
- No external Node process to launch, no separate REST-API plugin to bridge through: the server is the plugin. evidence: README.md
- Every operation respects the permissions you set — a read-only mode, per-operation controls, and path allow/block lists. evidence: README.md
Limitations
- MCP clients reject self-signed certificates by default, so you need to explicitly trust it before connecting over HTTPS. evidence: README.md
Security
Risk level: Medium risk
This brain runs
Agent instructions that run or fetch something (42)
CLAUDE.md:Test locally with `npm run build`CLAUDE.md:Click **Run workflow**CLAUDE.md:Click **Run**CLAUDE.md:git tag -d X.Y.Z && git push origin :refs/tags/X.Y.Z· uses the networkCLAUDE.md:Users install via: `aaronsb/obsidian-mcp-plugin` in BRATCLAUDE.md:**Pre-releases**: All releases ship as prereleases by default (`make release-patch` etc.)CLAUDE.md:**Promoting to stable**: When a release is bounded and proven, run `make promote` (or `make promote TAG=X.Y.Z`) to flip it from prerelease → stable and mark it as GitHub's "Latest" release.CLAUDE.md:"package": "npm run build && npm run test && node package-release.js"CLAUDE.md:**ALWAYS run these commands before pushing to GitHub:**CLAUDE.md:npm run buildCLAUDE.md:# 2. Run linting to ensure code qualityCLAUDE.md:npm run lintCLAUDE.md:# 3. Run tests to catch regressionsCLAUDE.md:npm testCLAUDE.md:git add -A && git commit -m "..."CLAUDE.md:git push origin main· uses the networkCLAUDE.md:npm run build && npm run lint && npm test && echo "✅ All checks passed!"CLAUDE.md:npm supply-chain attacks have been ticking up — malicious package versions get published, ingested by automation, then discovered/yanked days later.CLAUDE.md:The exemption exists because the hold otherwise fights our own freshness goal: it delays exactly the vuln patches that Obsidian's plugin review (and `npm audit`) flag, leaving us knowingly exposed to a *named, real* CVE to guard against a *hypothetical* malicious republish.CLAUDE.md:**Security fix → land it now.** If a dependabot/manual upgrade resolves a flagged vulnerability (dependabot security PR, `npm audit` advisory, or an Obsidian-review dependency warning), merge as soon as it's green regardless of version age.CLAUDE.md:The same split applies to manual `npm install` / `npm update`: security fixes immediately, routine pins to versions older than 7 days.CLAUDE.md:Re-run `npm audit` after each merge batch to see what residual exposure remains.CLAUDE.md:This is not zero-risk — an ESLint plugin executes on the maintainer's machine during `npm run lint`, so the exposure moves from users to the developer rather than disappearing.CLAUDE.md:Install scripts are blocked pending approval (`npm install-scripts ls` shows what is waiting), but that is **npm 12+ default behaviour, not something this repo enforces** — there is no `.npmrc` or `package.json` setting pinning it.CLAUDE.md:Approve install scripts one package at a time and never with `--all`;CLAUDE.md:Consequence: after a plugin is approved/updated on the portal, there is a **propagation lag** before it appears in the in-app browser search — the mirror bot has to run, then the app refreshes its cached list (a restart helps *only after* the mirror includes you).CLAUDE.md:`make promote` now auto-updates **real users**, not just BRAT testers.CLAUDE.md:`versions.json` must contain a `"<version>": "<minAppVersion>"` entry matching `manifest.json` (`make release-*` maintains this).CLAUDE.md:Run `make promote` to flip the proven release to stable + "Latest".CLAUDE.md:The developer portal offers a **"preview a branch scan"** that accepts a branch, tag, or commit SHA — use it to confirm a release candidate passes Obsidian's checks *before* running `make promote`.CLAUDE.md:Treat it as a validation/dry-run tool: end-user installs and updates still come from the matching stable release tag's assets, not from a scanned branch.CLAUDE.md:make scorecard # prose + freshness delta, for readingCLAUDE.md:node scripts/scorecard.mjs --json # one JSON line, for diffing across releasesCLAUDE.md:The **dependency** scan *does* run, so treat a regression there as real, not a disclosure.CLAUDE.md:The portal scan and local `npm audit` **can diverge**, and the local audit is the leading indicator — it sees advisories published since the last portal scan.CLAUDE.md:Re-run `npm audit` before reading a portal result as current.CLAUDE.md:**`npm audit --omit=dev` is the number that gates a release.** Anything it reports reaches users through `main.js`.CLAUDE.md:**If that is zero, the bare count is not a release problem.** Confirm the remainder is dev-only rather than assuming it: `npm ls <pkg> --omit=dev` shows whether a package is in the production tree at all, and a production copy can sit *outside* an advisory's range while an older nested …[+41 chars]CLAUDE.md:Plain `npm audit fix` (lockfile-only, no `package.json` change) is the tool for this job.CLAUDE.md:When ours lags, `npm run lint` passes while the portal reports warnings we cannot reproduce — findings then arrive *after* a release is already cut.CLAUDE.md:node -e "console.log(require('eslint-plugin-obsidianmd/package.json').version)"CLAUDE.md:npm view eslint-plugin-obsidianmd version
Install scripts (1)
Makefile(make install):npm install
Plugin code (1)
manifest.json:runs inside Obsidian once the plugin is enabled
- Medium risk: runs-instruction-instruction-network (CLAUDE.md:136)
- Medium risk: runs-instruction-instruction-network (CLAUDE.md:202)
- Low risk: scripts-present (esbuild.config.mjs)
- Low risk: scripts-present (scripts/build-mcpb.mjs)
- Low risk: scripts-present (scripts/scorecard-findings.mjs)
- Low risk: scripts-present (scripts/scorecard.mjs)
- Low risk: scripts-present (src/formatters/dataview.ts)
- Low risk: scripts-present (src/formatters/graph.ts)
- Low risk: scripts-present (src/formatters/index.ts)
- Low risk: scripts-present (src/formatters/search.ts)
- Low risk: scripts-present (src/formatters/system.ts)
- Low risk: scripts-present (src/formatters/utils.ts)
- Low risk: scripts-present (src/formatters/vault.ts)
- Low risk: scripts-present (src/formatters/view.ts)
- Low risk: scripts-present (src/indexing/adaptive-index.ts)
- Low risk: scripts-present (src/indexing/fragment-retriever.ts)
- Low risk: scripts-present (src/indexing/proximity-index.ts)
- Low risk: scripts-present (src/indexing/semantic-chunk-index.ts)
- Low risk: scripts-present (src/main.ts)
- Low risk: scripts-present (src/mcp-server.ts)
- Low risk: scripts-present (src/plugin-settings.ts)
- Low risk: scripts-present (src/security/http-auth.ts)
- Low risk: scripts-present (src/security/index.ts)
- Low risk: scripts-present (src/security/mcp-ignore-manager.ts)
- Low risk: scripts-present (src/security/path-validator.ts)
- Low risk: scripts-present (src/security/safe-fetch.ts)
- Low risk: scripts-present (src/security/secure-obsidian-api.ts)
- Low risk: scripts-present (src/security/url-validator.ts)
- Low risk: scripts-present (src/security/vault-security-manager.ts)
- Low risk: scripts-present (src/semantic/operations/bases.ts)
- Low risk: scripts-present (src/semantic/operations/edit.ts)
- Low risk: scripts-present (src/semantic/operations/graph.ts)
- Low risk: scripts-present (src/semantic/operations/router-context.ts)
- Low risk: scripts-present (src/semantic/operations/shared.ts)
- Low risk: scripts-present (src/semantic/operations/system.ts)
- Low risk: scripts-present (src/semantic/operations/vault.ts)
- Low risk: scripts-present (src/semantic/operations/view.ts)
- Low risk: scripts-present (src/semantic/operations/workflow.ts)
- Low risk: scripts-present (src/semantic/router.ts)
- Low risk: scripts-present (src/semantic/state-tokens.ts)
- Low risk: scripts-present (src/tools/dataview-tool.ts)
- Low risk: scripts-present (src/tools/fetch.ts)
- Low risk: scripts-present (src/tools/graph-search-tag-traversal.ts)
- Low risk: scripts-present (src/tools/graph-search-tool.ts)
- Low risk: scripts-present (src/tools/graph-search-traversal.ts)
- Low risk: scripts-present (src/tools/graph-search.ts)
- Low risk: scripts-present (src/tools/graph-tag-tool.ts)
- Low risk: scripts-present (src/tools/semantic-tools.ts)
- Low risk: scripts-present (src/tools/window-edit.ts)
- Low risk: scripts-present (src/types/bases-yaml.ts)
The plugin you install is release 0.13.0, which AutoGineer scanned.
Attribution and licence
- Created by
- Aaron Bockelie
- Declared authors
- Aaron Bockelie (declared in package.json)
- Aaron Bockelie (declared in manifest.json)
- Publisher
- Aaron Bockelie (Community)
- Source
- aaronsb/obsidian-mcp-plugin · commit 103ee96
- Licence
- MIT License (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Aaron Bockelie.
Install from source
218 of its files are not served here, so there is no ZIP. aaronsb/obsidian-mcp-plugin at 103ee96