{"_id":"obsidian-mcp","_rev":"12-167e5f487ae047ba60ce523c3719f73a","name":"obsidian-mcp","dist-tags":{"next":"2.0.0-beta.4","latest":"2.0.1"},"versions":{"1.0.0":{"name":"obsidian-mcp","version":"1.0.0","keywords":["obsidian","mcp","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@1.0.0","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"build/main.js"},"dist":{"shasum":"5934f23712093a4842775f7025132676faff6f96","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-1.0.0.tgz","fileCount":47,"integrity":"sha512-ASFPg0iPB51+lQkFyPrKb7bCFRz9tyhc4TYz0ESff6qxT+kPwD6CboWQdomaISPyUiEfvBVWIvc/RB2/aHGRjw==","signatures":[{"sig":"MEYCIQCa6OxEVrYUnqUl/TolIh5d0WQnatVOo3EsXY65Pz3PdQIhAL5dFxSyw1oX1bPKTin2hbiO1DmOq9WvuMNb5vKW/4sY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":226558},"main":"build/main.js","type":"module","engines":{"node":">=16"},"gitHead":"f54247704554ba0bbb3e65318da168ae0b0a574a","scripts":{"build":"tsc && node -e \"require('fs').chmodSync('build/main.js', 0o755)\"","start":"node build/main.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.5.1","description":"MCP server for AI assistants to interact with Obsidian vaults","directories":{},"_nodeVersion":"22.0.0","dependencies":{"zod":"^3.22.4","yaml":"^2.6.1","zod-to-json-schema":"^3.24.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.0.4"},"peerDependencies":{"@modelcontextprotocol/sdk":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_1.0.0_1734971121021_0.7450300803813246","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"obsidian-mcp","version":"1.0.1","keywords":["obsidian","mcp","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@1.0.1","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"build/main.js"},"dist":{"shasum":"3ee5c1c5700d6bd994341e13a86a481bc3500e1b","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-1.0.1.tgz","fileCount":47,"integrity":"sha512-7zRCvBCy4RBCAxNNjInkjb+Hc73OYmt458JD9zMShV+EGjeeu0LWyUBKAzyQawuaSmVdPnLEt3paAHSPaKCvtQ==","signatures":[{"sig":"MEQCIEVjtnuzWxYi5VNWhtkHO/3nT84ldBN6H9SHdFkL2WncAiAkRacvZ0RsbWQjBs2f2qe98Z+ScNgytPKiIp1Vn+TMuQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":227672},"main":"build/main.js","type":"module","engines":{"node":">=16"},"gitHead":"f7e50fb7fd585f98f7209283b28cf5ceb02e1188","scripts":{"build":"tsc && node -e \"require('fs').chmodSync('build/main.js', 0o755)\"","start":"node build/main.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.5.1","description":"MCP server for AI assistants to interact with Obsidian vaults","directories":{},"_nodeVersion":"22.0.0","dependencies":{"zod":"^3.22.4","yaml":"^2.6.1","zod-to-json-schema":"^3.24.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.0.4"},"peerDependencies":{"@modelcontextprotocol/sdk":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_1.0.1_1734971754860_0.4128555009881645","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"obsidian-mcp","version":"1.0.2","keywords":["obsidian","mcp","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@1.0.2","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"build/main.js"},"dist":{"shasum":"414e5ad002341cd1eeace277585623c86d03159b","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-1.0.2.tgz","fileCount":49,"integrity":"sha512-cjMGsNZbyCCmfgZDubfctoNDvJjczRH3OSj10wvW3ZrtZVFUqP1PTnFv1M4jIHxvsq0GTCB0nCkYbe8QgGiNww==","signatures":[{"sig":"MEUCIQCC1fUGXDljOhnOYKBhGQZtW7hBziqatNWegxgprTdupQIgDFTdluLOMxdUyJc54fpYIrytoNmIPXLoOMVFMnsELBY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":234225},"main":"build/main.js","type":"module","engines":{"node":">=16"},"gitHead":"d9fd77acd78843659a4287dc8c38fb575e926931","scripts":{"build":"tsc && node -e \"require('fs').chmodSync('build/main.js', 0o755)\"","start":"node build/main.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.5.1","description":"MCP server for AI assistants to interact with Obsidian vaults","directories":{},"_nodeVersion":"22.0.0","dependencies":{"zod":"^3.22.4","yaml":"^2.6.1","zod-to-json-schema":"^3.24.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.0.4"},"peerDependencies":{"@modelcontextprotocol/sdk":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_1.0.2_1734972848266_0.7673094694160063","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"obsidian-mcp","version":"1.0.3","keywords":["obsidian","mcp","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@1.0.3","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"build/main.js"},"dist":{"shasum":"57780648be4f563ab85a47b6df2793b572dc2a97","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-1.0.3.tgz","fileCount":63,"integrity":"sha512-aXl/wF4PbryZbNqhOWZ8F24PF4j8ZFXB2RdtN9XxGh8sy9/8lEvt3ayORufRcms8l6In8a0XyxbDpQH5JDO5kA==","signatures":[{"sig":"MEQCIFNl5BqEFxo/Fd1tWPntox+oCKoeorvIP0J0XLDrUHNeAiBF0K21YD0FBhjHh4EUxFYdK6iBui2M/35rEvQlPw29nQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":294349},"main":"build/main.js","type":"module","engines":{"node":">=16"},"exports":{".":"./build/main.js","./utils/*":"./build/utils/*.js","./resources/*":"./build/resources/*.js"},"gitHead":"996d99dff5b303dea9d46a9a301fb72d79173e37","scripts":{"build":"tsc && chmod +x build/main.js","start":"node build/main.js","inspect":"npx @modelcontextprotocol/inspector node ./build/main.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.5.1","description":"MCP server for AI assistants to interact with Obsidian vaults","directories":{},"_nodeVersion":"22.0.0","dependencies":{"zod":"^3.22.4","yaml":"^2.6.1","zod-to-json-schema":"^3.24.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.0.4"},"peerDependencies":{"@modelcontextprotocol/sdk":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_1.0.3_1735674529085_0.19118928188314088","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"obsidian-mcp","version":"1.0.4","keywords":["obsidian","mcp","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@1.0.4","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"build/main.js"},"dist":{"shasum":"0ac3fda05090ea24b318c09dd5cd5a3d361d1985","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-1.0.4.tgz","fileCount":67,"integrity":"sha512-vbhey4DSTrwYHd83Cyto0RBsyzN72wHv2tkRmhMOnq55yEFaEpo5NOETjaro0+w+3ht68qwLys/v+sIiLuLFcw==","signatures":[{"sig":"MEUCIQDBg8tK4FMDBoyWHd9c/wJcEQ1zw9ih6LhBSSnONOg98AIgETew95RpzlQGmhZQ/YlYgvgLyaBdX5RkzmP2dldTf2c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":810696},"main":"build/main.js","type":"module","engines":{"node":">=16"},"exports":{".":"./build/main.js","./utils/*":"./build/utils/*.js","./resources/*":"./build/resources/*.js"},"gitHead":"f1234d69a483fa961f2d43c7965b18e75900028b","scripts":{"build":"bun build ./src/main.ts --outdir build --target node && chmod +x build/main.js","start":"bun build/main.js","inspect":"bunx @modelcontextprotocol/inspector bun ./build/main.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.5.1","description":"MCP server for AI assistants to interact with Obsidian vaults","directories":{},"_nodeVersion":"22.0.0","dependencies":{"zod":"^3.22.4","yaml":"^2.6.1","zod-to-json-schema":"^3.24.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.0.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.0.4"},"peerDependencies":{"@modelcontextprotocol/sdk":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_1.0.4_1735748261733_0.1368850118653051","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"obsidian-mcp","version":"1.0.5","keywords":["obsidian","mcp","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@1.0.5","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"build/main.js"},"dist":{"shasum":"d9122edcce0226df61d85649da92cf9746390179","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-1.0.5.tgz","fileCount":67,"integrity":"sha512-l8KS1giVttQfTjcI95gJT0eXsXTmNAFk9rJgy2KY8DqixUA1rWM89l3bVmfS1uzFBeVLpYQdNo57mIoNzBT6XQ==","signatures":[{"sig":"MEQCIGoZ/lM/PDiqeQNlfNq89OsAd8ejNGB/zrgHBLKrTYN6AiAvldhN5AUQu1tocwfPT42RY4Ju6Hc70DW7rdCwTQXoKQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":811546},"main":"build/main.js","type":"module","engines":{"node":">=16"},"exports":{".":"./build/main.js","./utils/*":"./build/utils/*.js","./resources/*":"./build/resources/*.js"},"gitHead":"8873da8254adc472bd9748b2f1ea10f59680c3c9","scripts":{"build":"bun build ./src/main.ts --outdir build --target node && chmod +x build/main.js","start":"bun build/main.js","inspect":"bunx @modelcontextprotocol/inspector bun ./build/main.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.5.1","description":"MCP server for AI assistants to interact with Obsidian vaults","directories":{},"_nodeVersion":"22.0.0","dependencies":{"zod":"^3.22.4","yaml":"^2.6.1","zod-to-json-schema":"^3.24.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.0.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.0.4"},"peerDependencies":{"@modelcontextprotocol/sdk":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_1.0.5_1735860424650_0.40123386150801466","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"obsidian-mcp","version":"1.0.6","keywords":["obsidian","mcp","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@1.0.6","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"build/main.js"},"dist":{"shasum":"9910c1cb8a22f0aa069c085bf93d8e57cf8c27af","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-1.0.6.tgz","fileCount":4,"integrity":"sha512-wE3qTkYftHx7IpG1MHzBQ7wLe5Xb2mFxi5/d83+bEEE/FkpdiwBBQlXLpW4wqDeLoJl3NILS3sRETTf3eJaxlA==","signatures":[{"sig":"MEYCIQCm1qu17q2b8cM66DX3CROYxX0vMky99D3YYQwm1nO26gIhAOHxV9e9fPePZon+JeXJ4k/+ULYsrx7BSU5bb0GJZZjx","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":531254},"main":"build/main.js","type":"module","engines":{"node":">=16"},"exports":{".":"./build/main.js","./utils/*":"./build/utils/*.js","./resources/*":"./build/resources/*.js"},"gitHead":"d3c0619c9643d739c58c8f625de3118bda59d391","scripts":{"build":"bun build ./src/main.ts --outdir build --target node && chmod +x build/main.js","start":"bun build/main.js","inspect":"bunx @modelcontextprotocol/inspector bun ./build/main.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.9.0","description":"MCP server for AI assistants to interact with Obsidian vaults","directories":{},"_nodeVersion":"23.1.0","dependencies":{"zod":"^3.22.4","yaml":"^2.6.1","zod-to-json-schema":"^3.24.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","typescript":"^5.0.0","@types/node":"^20.0.0","@modelcontextprotocol/sdk":"^1.0.4"},"peerDependencies":{"@modelcontextprotocol/sdk":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_1.0.6_1736631498510_0.939257959303633","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-beta.1":{"name":"obsidian-mcp","version":"2.0.0-beta.1","keywords":["obsidian","mcp","model-context-protocol","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@2.0.0-beta.1","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"dist/main.js"},"dist":{"shasum":"104c1c3e5ee0161aeeeb06c9690219fe39854477","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-2.0.0-beta.1.tgz","fileCount":133,"integrity":"sha512-h/JKKjhJMDI+tSVFGn7NtVwrCWE30oawnx/VSqMEMQtis9MbuB2TArTfGxtsm52DLvjE5B25wb+eVODn1ptioQ==","signatures":[{"sig":"MEUCIQDsXnAz3BSZ8zpZHQV+pfeR6e5A3nF0ZEPhj1wkuKYEVwIgJFM4lZH9n+BW/kX6VY2FrizlkRRiVx/8MAN4gsC/vHo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272592},"main":"dist/main.js","type":"module","types":"./dist/main.d.ts","engines":{"node":">=22"},"exports":{".":"./dist/main.js"},"gitHead":"f66099b4d51ddac435d8cacbc465b32452cdf626","scripts":{"ci":"npm run typecheck && npm run lint && npm run format:check && npm test && npm run eval:validate && npm run package:check","lint":"eslint src","test":"node --import tsx --test test/*.test.ts test/**/*.test.ts","build":"npm run clean && tsc -p tsconfig.json && node scripts/make-executable.mjs","clean":"node scripts/clean.mjs","start":"node dist/main.js serve","prepack":"npm run build","pretest":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","eval:validate":"node scripts/validate-evaluations.mjs","package:check":"node scripts/check-package.mjs","test:coverage":"node --import tsx --test --experimental-test-coverage test/*.test.ts test/**/*.test.ts","test:integration":"node --import tsx --test test/integration/**/*.test.ts"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.9.0","description":"A safe, local MCP server for working with Obsidian vaults","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.2.0","yaml":"^2.8.1","@modelcontextprotocol/server":"^2.0.0"},"publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.0","eslint":"^9.0.0","prettier":"^3.6.0","@eslint/js":"^9.0.0","typescript":"^5.9.0","@types/node":"^24.13.3","typescript-eslint":"^8.0.0","@modelcontextprotocol/client":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_2.0.0-beta.1_1786652517357_0.4320020012681729","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-beta.2":{"name":"obsidian-mcp","version":"2.0.0-beta.2","keywords":["obsidian","mcp","model-context-protocol","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@2.0.0-beta.2","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"dist/main.js"},"dist":{"shasum":"1c9e896472bffbc96d116f7e51a786fec10f96b7","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-2.0.0-beta.2.tgz","fileCount":133,"integrity":"sha512-yrQDX08ccYwH+8ChuWdYXMmLMjs/pH5AtMQEvl4M0YjeLJ/ptfU3P4v6vbbHLSo/fpvRrkvLoHggiGnb5MboTw==","signatures":[{"sig":"MEQCIDwi0fsJvmzk7P2Sn9Xe9/+Y6fYrn7S9KPd18/6h9TRfAiBc+0Zn5fS93NNjmCZIfGBHyWoLRKL1MZjvPSBDmmVtAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":313355},"main":"dist/main.js","type":"module","types":"./dist/main.d.ts","engines":{"node":">=22"},"exports":{".":"./dist/main.js"},"gitHead":"c14ac9263d73beb6f451883f0de8178ce88dcd97","scripts":{"ci":"npm run typecheck && npm run lint && npm run format:check && npm test && npm run eval:validate && npm run package:check","lint":"eslint src","test":"node --import tsx --test test/*.test.ts test/**/*.test.ts","build":"npm run clean && tsc -p tsconfig.json && node scripts/make-executable.mjs","clean":"node scripts/clean.mjs","start":"node dist/main.js serve","prepack":"npm run build","pretest":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","eval:validate":"node scripts/validate-evaluations.mjs","package:check":"node scripts/check-package.mjs","test:coverage":"node --import tsx --test --experimental-test-coverage test/*.test.ts test/**/*.test.ts","test:integration":"node --import tsx --test test/integration/**/*.test.ts"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.9.0","description":"A safe, local MCP server for working with Obsidian vaults","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.2.0","yaml":"^2.8.1","@modelcontextprotocol/server":"^2.0.0"},"publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.0","eslint":"^9.0.0","prettier":"^3.6.0","@eslint/js":"^9.0.0","typescript":"^5.9.0","@types/node":"^24.13.3","typescript-eslint":"^8.0.0","@modelcontextprotocol/client":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_2.0.0-beta.2_1786655846739_0.11605854016444006","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-beta.4":{"name":"obsidian-mcp","version":"2.0.0-beta.4","keywords":["obsidian","mcp","model-context-protocol","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@2.0.0-beta.4","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"dist/main.js"},"dist":{"shasum":"603c3e2d33cc41f43d11d3786f46c65ef1250ee1","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-2.0.0-beta.4.tgz","fileCount":141,"integrity":"sha512-0UYY5kkycgNfXJrwpRSQRPqc2fdYv3kEerWycSkrAkb3XsQLIFwOb1fTgrkT1ovf6V8XjafXosVaIZMkqDXAnQ==","signatures":[{"sig":"MEYCIQCUQK2lFERKEV5GuxbSGVgBpnYM55eZMDrnhQ7RZ0YkUQIhAKgRno9CCcWNBbZS8a3qyRNH7xWSXDQlYqX1g2SIRgso","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":354299},"main":"dist/main.js","type":"module","types":"./dist/main.d.ts","engines":{"node":">=22"},"exports":{".":"./dist/main.js"},"gitHead":"3beef3e0bcd7d3fce3b9e9b6327693bfb1e9d8ce","scripts":{"ci":"npm run typecheck && npm run lint && npm run format:check && npm test && npm run eval:validate && npm run package:check","lint":"eslint src","test":"node --import tsx --test test/*.test.ts test/**/*.test.ts","build":"npm run clean && tsc -p tsconfig.json && node scripts/make-executable.mjs","clean":"node scripts/clean.mjs","start":"node dist/main.js serve","prepack":"npm run build","pretest":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","eval:validate":"node scripts/validate-evaluations.mjs","package:check":"node scripts/check-package.mjs","test:coverage":"node --import tsx --test --experimental-test-coverage test/*.test.ts test/**/*.test.ts","test:integration":"node --import tsx --test test/integration/**/*.test.ts"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.9.0","description":"A safe, local MCP server for working with Obsidian vaults","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.2.0","yaml":"^2.8.1","@modelcontextprotocol/server":"^2.0.0"},"publishConfig":{"tag":"next","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.20.0","eslint":"^9.0.0","prettier":"^3.6.0","@eslint/js":"^9.0.0","typescript":"^5.9.0","@types/node":"^24.13.3","typescript-eslint":"^8.0.0","@modelcontextprotocol/client":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_2.0.0-beta.4_1786662381435_0.41261442692159744","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"obsidian-mcp","version":"2.0.0","keywords":["obsidian","mcp","model-context-protocol","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","_id":"obsidian-mcp@2.0.0","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"bin":{"obsidian-mcp":"dist/main.js"},"dist":{"shasum":"37b69470dea1edf3197e44eac284041c4a1b539e","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-2.0.0.tgz","fileCount":141,"integrity":"sha512-P8atney3sFEaV1FIchlfzVoADp3R3Drq+E47De/NMe45trRi8HL8Rou3q0EsWPN3kN/KPh+IPfmHThxZU/rDvQ==","signatures":[{"sig":"MEYCIQDTSvQmTh8McoEvsYNwV1Ysy7855PXFmC7pTPgPhc4VLwIhAKZd2gctWzRMaSbtWcNbdpgxWATix2MLMhHpQRWU245b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":354253},"main":"dist/main.js","type":"module","types":"./dist/main.d.ts","engines":{"node":">=22"},"exports":{".":"./dist/main.js"},"gitHead":"b6589d4b3e0efe56093cfbf4f3a8f48da5288a91","scripts":{"ci":"npm run typecheck && npm run lint && npm run format:check && npm test && npm run eval:validate && npm run package:check","lint":"eslint src","test":"node --import tsx --test test/*.test.ts test/**/*.test.ts","build":"npm run clean && tsc -p tsconfig.json && node scripts/make-executable.mjs","clean":"node scripts/clean.mjs","start":"node dist/main.js serve","prepack":"npm run build","pretest":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","eval:validate":"node scripts/validate-evaluations.mjs","package:check":"node scripts/check-package.mjs","test:coverage":"node --import tsx --test --experimental-test-coverage test/*.test.ts test/**/*.test.ts","test:integration":"node --import tsx --test test/integration/**/*.test.ts"},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"repository":{"url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git","type":"git"},"_npmVersion":"10.9.0","description":"A safe, local MCP server for working with Obsidian vaults","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"^4.2.0","yaml":"^2.8.1","@modelcontextprotocol/server":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","eslint":"^9.0.0","prettier":"^3.6.0","@eslint/js":"^9.0.0","typescript":"^5.9.0","@types/node":"^24.13.3","typescript-eslint":"^8.0.0","@modelcontextprotocol/client":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/obsidian-mcp_2.0.0_1786665513615_0.9114316710342725","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"obsidian-mcp","version":"2.0.1","description":"A safe, local MCP server for working with Obsidian vaults","type":"module","main":"dist/main.js","bin":{"obsidian-mcp":"dist/main.js"},"exports":{".":"./dist/main.js"},"scripts":{"clean":"node scripts/clean.mjs","build":"npm run clean && tsc -p tsconfig.json && node scripts/make-executable.mjs","typecheck":"tsc -p tsconfig.json --noEmit","lint":"eslint src","format:check":"prettier --check .","pretest":"npm run build","test":"node --import tsx --test test/*.test.ts test/**/*.test.ts","test:coverage":"node --import tsx --test --experimental-test-coverage test/*.test.ts test/**/*.test.ts","test:integration":"node --import tsx --test test/integration/**/*.test.ts","eval:validate":"node scripts/validate-evaluations.mjs","package:check":"node scripts/check-package.mjs","ci":"npm run typecheck && npm run lint && npm run format:check && npm test && npm run eval:validate && npm run package:check","start":"node dist/main.js serve","prepack":"npm run build"},"keywords":["obsidian","mcp","model-context-protocol","ai","notes","knowledge-management"],"author":{"name":"Steven Stavrakis"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git"},"publishConfig":{"access":"public"},"engines":{"node":">=22"},"dependencies":{"@modelcontextprotocol/server":"^2.0.0","yaml":"^2.8.1","zod":"^4.2.0"},"devDependencies":{"@eslint/js":"^9.0.0","@modelcontextprotocol/client":"^2.0.0","@types/node":"^24.13.3","eslint":"^9.0.0","prettier":"^3.6.0","tsx":"^4.20.0","typescript":"^5.9.0","typescript-eslint":"^8.0.0"},"_id":"obsidian-mcp@2.0.1","types":"./dist/main.d.ts","bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","_integrity":"sha512-OCTsRGKXc3SNI3xCph1hsGgmUmdhfOPRgIHpO5u5593cgQw/0upMTRK5P8IFpLLo4Q1c3i8IxNwl9Ny4p1RoYg==","_resolved":"/private/tmp/obsidian-mcp-release.1KM2Um/obsidian-mcp-2.0.1.tgz","_from":"file:/private/tmp/obsidian-mcp-release.1KM2Um/obsidian-mcp-2.0.1.tgz","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-OCTsRGKXc3SNI3xCph1hsGgmUmdhfOPRgIHpO5u5593cgQw/0upMTRK5P8IFpLLo4Q1c3i8IxNwl9Ny4p1RoYg==","shasum":"b12680120857c94168a43bf4a694fa002f3a7452","tarball":"https://registry.npmjs.org/obsidian-mcp/-/obsidian-mcp-2.0.1.tgz","fileCount":141,"unpackedSize":356566,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD82+DkQ+3QkPpQXfGql+MqkzLB4PrK12w+45cfPoJkhwIhAOzkNvgSYaGXonHq69PF45l2nMXBrTdV7eLWo4iTHxAE"}]},"_npmUser":{"name":"steve_s","email":"s.a.stavrakis@gmail.com"},"directories":{},"maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/obsidian-mcp_2.0.1_1786670753511_0.0030087400213525406"},"_hasShrinkwrap":false}},"time":{"created":"2024-12-23T16:25:21.020Z","modified":"2026-08-14T01:25:53.829Z","1.0.0":"2024-12-23T16:25:21.266Z","1.0.1":"2024-12-23T16:35:55.033Z","1.0.2":"2024-12-23T16:54:08.448Z","1.0.3":"2024-12-31T19:48:49.314Z","1.0.4":"2025-01-01T16:17:41.997Z","1.0.5":"2025-01-02T23:27:04.895Z","1.0.6":"2025-01-11T21:38:18.707Z","2.0.0-beta.1":"2026-08-13T20:21:57.511Z","2.0.0-beta.2":"2026-08-13T21:17:26.872Z","2.0.0-beta.4":"2026-08-13T23:06:21.617Z","2.0.0":"2026-08-13T23:58:33.802Z","2.0.1":"2026-08-14T01:25:53.654Z"},"bugs":{"url":"https://github.com/StevenStavrakis/obsidian-mcp/issues"},"author":{"name":"Steven Stavrakis"},"license":"MIT","homepage":"https://github.com/StevenStavrakis/obsidian-mcp#readme","keywords":["obsidian","mcp","model-context-protocol","ai","notes","knowledge-management"],"repository":{"type":"git","url":"git+https://github.com/StevenStavrakis/obsidian-mcp.git"},"description":"A safe, local MCP server for working with Obsidian vaults","maintainers":[{"name":"steve_s","email":"s.a.stavrakis@gmail.com"}],"readme":"# Obsidian MCP\n\nA local [Model Context Protocol](https://modelcontextprotocol.io/) server that lets MCP-compatible assistants safely read and modify explicitly configured Obsidian vaults.\n\nVersion 2 supports both MCP `2026-07-28` and 2025-era clients by default, and requires Node.js 22 or newer. It works directly with Markdown files, so Obsidian does not need to be open. Legacy protocol and v1 positional-path compatibility are deprecated and print exact migration instructions to stderr.\n\n> [!IMPORTANT]\n> MCP clients can invoke destructive tools. Back up important vaults, review client permission prompts, and use revision preconditions for concurrently edited notes.\n\n## Quick start\n\nNode.js 22 or newer is required:\n\n```bash\nnode --version # v22 or newer\n```\n\nRun with `npx` without installing the package globally. Pinning the major version receives compatible 2.x updates without automatically crossing a future major version:\n\n```bash\nnpx -y obsidian-mcp@2 serve --vault notes=/absolute/path/to/vault\n```\n\nConfigure an MCP client to launch the same command over stdio:\n\n```json\n{\n  \"mcpServers\": {\n    \"obsidian\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"obsidian-mcp@2\", \"serve\", \"--vault\", \"notes=/absolute/path/to/vault\"]\n    }\n  }\n}\n```\n\nAlternatively, install the package globally and use `\"command\": \"obsidian-mcp\"` with the same arguments beginning at `\"serve\"`:\n\n```bash\nnpm install -g obsidian-mcp@2\n```\n\nEach vault must already contain an `.obsidian` directory and must be configured using an absolute path.\n\nBoth protocol eras are served from the same tool definitions. After confirming that your MCP client negotiates `2026-07-28`, you may opt into modern-only mode by adding `\"--legacy\", \"reject\"` to `args`.\n\nVault ids use lowercase letters, digits, `_`, and `-`, must begin with a letter, and are the values assistants pass to tools. Up to ten vaults may be configured. Repeat `--vault` to expose more than one vault:\n\n```bash\nobsidian-mcp serve \\\n  --vault work=/Users/me/Documents/WorkVault \\\n  --vault personal=/Users/me/Documents/PersonalVault\n```\n\nNetwork, removable, hidden, and synced locations are allowed because an explicit `--vault` is treated as authorization; the same containment protections apply to every location.\n\n## Design principles\n\n- Vault access is explicitly allowlisted at process startup.\n- Every tool path is vault-relative, segment-checked, and blocked from symlinks and reserved state.\n- File mutations are journaled, conflict-checked, atomically replaced, and rolled back as one transaction.\n- The server never listens on a network interface or sends telemetry.\n- stdout is reserved exclusively for MCP messages; structured diagnostics go to stderr.\n- Results are bounded, paginated where appropriate, and available as both text and structured content.\n\n## Tools\n\n| Tool                        | Purpose                                                                       |\n| --------------------------- | ----------------------------------------------------------------------------- |\n| `obsidian_list_vaults`      | List configured vault ids without exposing host paths.                        |\n| `obsidian_read_note`        | Read a bounded page of a note and return its SHA-256 `etag`.                  |\n| `obsidian_create_note`      | Atomically create a note without overwriting.                                 |\n| `obsidian_edit_note`        | Append, prepend, or replace exact note content.                               |\n| `obsidian_delete_note`      | Move a note to MCP trash or permanently delete it with explicit confirmation. |\n| `obsidian_move_note`        | Move or rename a note and update unambiguous backlinks transactionally.       |\n| `obsidian_create_directory` | Transactionally create a directory inside a vault.                            |\n| `obsidian_search_vault`     | Search content, filenames, or tags with bounded cursor pagination.            |\n| `obsidian_add_tags`         | Add tags to one or more notes atomically.                                     |\n| `obsidian_remove_tags`      | Remove exact, nested, or wildcard-selected tags atomically.                   |\n| `obsidian_rename_tag`       | Rename a tag across the vault atomically.                                     |\n| `obsidian_manage_tags`      | Unified add/remove tag workflow using the same implementation.                |\n\nAll schemas are strict JSON Schema 2020-12 contracts generated from Zod. Mutating results include a transaction id; tool failures return `isError: true` with an actionable error code.\n\n### Reading and concurrency\n\n`obsidian_read_note` returns an `etag`. Pass it as `if_match` to edit, move, or delete when avoiding lost updates matters. Batch tag operations accept an `expected_etags` map. A changed note returns `REVISION_CONFLICT` rather than being overwritten.\n\nLarge notes are paginated using an opaque cursor bound to the path and `etag`. Search uses an opaque cursor bound to the query and options. Tool text responses are capped at 25,000 characters.\n\n### Deletion and recovery\n\nTrash is the default. Deleted note bytes and metadata are stored separately under `.obsidian-mcp/trash`; metadata is never injected into the note. Permanent deletion requires `confirm_path` to exactly match the canonical relative path.\n\nTransactions and recovery snapshots live in `.obsidian-mcp/transactions`. Completed data is retained for 30 days and pruned oldest-first above 1 GiB by default:\n\n```bash\nobsidian-mcp serve --vault work=/path \\\n  --recovery-days 14 \\\n  --recovery-max-bytes 536870912\n```\n\nInspect or restore a completed transaction while the MCP server is stopped:\n\n```bash\nobsidian-mcp recovery list --vault work=/path\nobsidian-mcp recovery restore --vault work=/path --id <transaction-id>\n```\n\nRecovery refuses to overwrite content changed since the selected transaction. Permanent deletion snapshots are purged after commit and cannot be restored.\n\n## Path and filesystem safety\n\nThe server:\n\n- canonicalizes configured vault roots and rejects duplicate or nested roots;\n- rejects absolute, UNC, Windows-drive, NUL, backslash, empty, and dot-segment tool paths;\n- reserves `.obsidian`, `.obsidian-mcp`, `.git`, `.backup`, and `.trash` from tool access;\n- checks existing targets and the nearest existing ancestor for new targets;\n- rejects symlinks, junctions, and reparse-point paths, and skips them during scans;\n- performs no shell execution for filesystem validation;\n- strictly decodes UTF-8 and does not silently replace invalid bytes.\n\nThe process needs read and write access to each configured vault. `obsidian-mcp doctor --vault id=/path` validates startup readiness and recovery state.\n\n## Link and tag behavior\n\nMoves recognize Obsidian Wikilinks, embeds, Markdown links, aliases, URL-encoded destinations, headings, and block anchors. A link is rewritten only when it resolves unambiguously to the source note; ambiguous links are reported and left unchanged. Deletion preserves backlinks unless `backlink_action: \"mark_broken\"` is requested.\n\nTags follow Obsidian's case-insensitive rules and support Unicode, emoji, `_`, `-`, `/`, and nested tags. Frontmatter tags are written as YAML lists. Inline tag processing ignores fenced/inline code and HTML comments. Wildcards use a bounded matcher rather than regular expressions.\n\n## Development\n\n```bash\nnpm ci\nnpm run typecheck\nnpm test\nnpm run build\nnpm run ci\n```\n\nEach tool owns a typed definition under `src/tools/<tool>/index.ts`; the small registry in `src/tools/index.ts` applies shared MCP registration and response behavior. Filesystem, transaction, Markdown, link, and search behavior live in reusable utilities. A new tool must use `VaultFs` for every path, `TransactionManager` for mutations, strict input/output schemas, structured results, annotations, and security/integration tests.\n\nSee [MIGRATING.md](MIGRATING.md) for the 1.x migration and [SECURITY.md](SECURITY.md) for vulnerability reporting.\n\nStartup errors and compatibility warnings are written only to stderr with a stable code, the detected problem, an exact fix, a verification step, and a link to the matching migration section. If the server does not appear, find the code in the MCP client logs and use the [diagnostic reference](MIGRATING.md#diagnostic-reference).\n\n## License\n\nMIT\n","readmeFilename":"README.md"}