@gopherine/obsidian-mcp 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/LICENSE +661 -0
  3. package/README.md +235 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +805 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/brainstorm.d.ts +9 -0
  8. package/dist/commands/brainstorm.js +37 -0
  9. package/dist/commands/brainstorm.js.map +1 -0
  10. package/dist/commands/brainstorm.test.d.ts +1 -0
  11. package/dist/commands/brainstorm.test.js +110 -0
  12. package/dist/commands/brainstorm.test.js.map +1 -0
  13. package/dist/commands/context.d.ts +18 -0
  14. package/dist/commands/context.js +88 -0
  15. package/dist/commands/context.js.map +1 -0
  16. package/dist/commands/context.test.d.ts +1 -0
  17. package/dist/commands/context.test.js +230 -0
  18. package/dist/commands/context.test.js.map +1 -0
  19. package/dist/commands/decide.d.ts +12 -0
  20. package/dist/commands/decide.js +40 -0
  21. package/dist/commands/decide.js.map +1 -0
  22. package/dist/commands/decide.test.d.ts +1 -0
  23. package/dist/commands/decide.test.js +109 -0
  24. package/dist/commands/decide.test.js.map +1 -0
  25. package/dist/commands/graph.d.ts +15 -0
  26. package/dist/commands/graph.js +89 -0
  27. package/dist/commands/graph.js.map +1 -0
  28. package/dist/commands/graph.test.d.ts +1 -0
  29. package/dist/commands/graph.test.js +215 -0
  30. package/dist/commands/graph.test.js.map +1 -0
  31. package/dist/commands/init.d.ts +11 -0
  32. package/dist/commands/init.js +256 -0
  33. package/dist/commands/init.js.map +1 -0
  34. package/dist/commands/learn.d.ts +25 -0
  35. package/dist/commands/learn.js +92 -0
  36. package/dist/commands/learn.js.map +1 -0
  37. package/dist/commands/learn.test.d.ts +1 -0
  38. package/dist/commands/learn.test.js +241 -0
  39. package/dist/commands/learn.test.js.map +1 -0
  40. package/dist/commands/prune.d.ts +58 -0
  41. package/dist/commands/prune.js +246 -0
  42. package/dist/commands/prune.js.map +1 -0
  43. package/dist/commands/read.d.ts +8 -0
  44. package/dist/commands/read.js +7 -0
  45. package/dist/commands/read.js.map +1 -0
  46. package/dist/commands/read.test.d.ts +1 -0
  47. package/dist/commands/read.test.js +48 -0
  48. package/dist/commands/read.test.js.map +1 -0
  49. package/dist/commands/resume.d.ts +20 -0
  50. package/dist/commands/resume.js +138 -0
  51. package/dist/commands/resume.js.map +1 -0
  52. package/dist/commands/resume.test.d.ts +1 -0
  53. package/dist/commands/resume.test.js +243 -0
  54. package/dist/commands/resume.test.js.map +1 -0
  55. package/dist/commands/search.d.ts +8 -0
  56. package/dist/commands/search.js +25 -0
  57. package/dist/commands/search.js.map +1 -0
  58. package/dist/commands/search.test.d.ts +1 -0
  59. package/dist/commands/search.test.js +61 -0
  60. package/dist/commands/search.test.js.map +1 -0
  61. package/dist/commands/session.d.ts +22 -0
  62. package/dist/commands/session.js +79 -0
  63. package/dist/commands/session.js.map +1 -0
  64. package/dist/commands/session.test.d.ts +1 -0
  65. package/dist/commands/session.test.js +185 -0
  66. package/dist/commands/session.test.js.map +1 -0
  67. package/dist/commands/skill/index.d.ts +30 -0
  68. package/dist/commands/skill/index.js +61 -0
  69. package/dist/commands/skill/index.js.map +1 -0
  70. package/dist/commands/skill/index.test.d.ts +1 -0
  71. package/dist/commands/skill/index.test.js +137 -0
  72. package/dist/commands/skill/index.test.js.map +1 -0
  73. package/dist/commands/skill/install.d.ts +14 -0
  74. package/dist/commands/skill/install.js +107 -0
  75. package/dist/commands/skill/install.js.map +1 -0
  76. package/dist/commands/skill/install.test.d.ts +1 -0
  77. package/dist/commands/skill/install.test.js +225 -0
  78. package/dist/commands/skill/install.test.js.map +1 -0
  79. package/dist/commands/skill/list.d.ts +6 -0
  80. package/dist/commands/skill/list.js +5 -0
  81. package/dist/commands/skill/list.js.map +1 -0
  82. package/dist/commands/skill/list.test.d.ts +1 -0
  83. package/dist/commands/skill/list.test.js +101 -0
  84. package/dist/commands/skill/list.test.js.map +1 -0
  85. package/dist/commands/skill/schema.d.ts +27 -0
  86. package/dist/commands/skill/schema.js +55 -0
  87. package/dist/commands/skill/schema.js.map +1 -0
  88. package/dist/commands/skill/schema.test.d.ts +1 -0
  89. package/dist/commands/skill/schema.test.js +142 -0
  90. package/dist/commands/skill/schema.test.js.map +1 -0
  91. package/dist/commands/skill/validate.d.ts +10 -0
  92. package/dist/commands/skill/validate.js +39 -0
  93. package/dist/commands/skill/validate.js.map +1 -0
  94. package/dist/commands/skill/validate.test.d.ts +1 -0
  95. package/dist/commands/skill/validate.test.js +171 -0
  96. package/dist/commands/skill/validate.test.js.map +1 -0
  97. package/dist/commands/task.d.ts +34 -0
  98. package/dist/commands/task.js +160 -0
  99. package/dist/commands/task.js.map +1 -0
  100. package/dist/commands/task.test.d.ts +1 -0
  101. package/dist/commands/task.test.js +395 -0
  102. package/dist/commands/task.test.js.map +1 -0
  103. package/dist/commands/todo.d.ts +15 -0
  104. package/dist/commands/todo.js +99 -0
  105. package/dist/commands/todo.js.map +1 -0
  106. package/dist/commands/todo.test.d.ts +1 -0
  107. package/dist/commands/todo.test.js +324 -0
  108. package/dist/commands/todo.test.js.map +1 -0
  109. package/dist/commands/write.d.ts +12 -0
  110. package/dist/commands/write.js +40 -0
  111. package/dist/commands/write.js.map +1 -0
  112. package/dist/commands/write.test.d.ts +1 -0
  113. package/dist/commands/write.test.js +79 -0
  114. package/dist/commands/write.test.js.map +1 -0
  115. package/dist/config.d.ts +15 -0
  116. package/dist/config.js +48 -0
  117. package/dist/config.js.map +1 -0
  118. package/dist/config.test.d.ts +1 -0
  119. package/dist/config.test.js +147 -0
  120. package/dist/config.test.js.map +1 -0
  121. package/dist/core/executor.d.ts +11 -0
  122. package/dist/core/executor.js +42 -0
  123. package/dist/core/executor.js.map +1 -0
  124. package/dist/core/executor.test.d.ts +1 -0
  125. package/dist/core/executor.test.js +206 -0
  126. package/dist/core/executor.test.js.map +1 -0
  127. package/dist/core/middleware/error-handler.d.ts +2 -0
  128. package/dist/core/middleware/error-handler.js +29 -0
  129. package/dist/core/middleware/error-handler.js.map +1 -0
  130. package/dist/core/middleware/index.d.ts +2 -0
  131. package/dist/core/middleware/index.js +3 -0
  132. package/dist/core/middleware/index.js.map +1 -0
  133. package/dist/core/middleware/logging.d.ts +2 -0
  134. package/dist/core/middleware/logging.js +18 -0
  135. package/dist/core/middleware/logging.js.map +1 -0
  136. package/dist/core/registry.d.ts +12 -0
  137. package/dist/core/registry.js +407 -0
  138. package/dist/core/registry.js.map +1 -0
  139. package/dist/core/registry.test.d.ts +1 -0
  140. package/dist/core/registry.test.js +162 -0
  141. package/dist/core/registry.test.js.map +1 -0
  142. package/dist/core/types.d.ts +38 -0
  143. package/dist/core/types.js +2 -0
  144. package/dist/core/types.js.map +1 -0
  145. package/dist/integration/coordination.test.d.ts +1 -0
  146. package/dist/integration/coordination.test.js +286 -0
  147. package/dist/integration/coordination.test.js.map +1 -0
  148. package/dist/integration/project-artifacts.test.d.ts +1 -0
  149. package/dist/integration/project-artifacts.test.js +275 -0
  150. package/dist/integration/project-artifacts.test.js.map +1 -0
  151. package/dist/integration/registry-graph.test.d.ts +1 -0
  152. package/dist/integration/registry-graph.test.js +157 -0
  153. package/dist/integration/registry-graph.test.js.map +1 -0
  154. package/dist/integration/vault-lifecycle.test.d.ts +1 -0
  155. package/dist/integration/vault-lifecycle.test.js +183 -0
  156. package/dist/integration/vault-lifecycle.test.js.map +1 -0
  157. package/dist/lib/auto-number.d.ts +10 -0
  158. package/dist/lib/auto-number.js +33 -0
  159. package/dist/lib/auto-number.js.map +1 -0
  160. package/dist/lib/auto-number.test.d.ts +1 -0
  161. package/dist/lib/auto-number.test.js +88 -0
  162. package/dist/lib/auto-number.test.js.map +1 -0
  163. package/dist/lib/escape-regex.d.ts +4 -0
  164. package/dist/lib/escape-regex.js +7 -0
  165. package/dist/lib/escape-regex.js.map +1 -0
  166. package/dist/lib/escape-regex.test.d.ts +1 -0
  167. package/dist/lib/escape-regex.test.js +27 -0
  168. package/dist/lib/escape-regex.test.js.map +1 -0
  169. package/dist/lib/frontmatter.d.ts +34 -0
  170. package/dist/lib/frontmatter.js +74 -0
  171. package/dist/lib/frontmatter.js.map +1 -0
  172. package/dist/lib/frontmatter.test.d.ts +1 -0
  173. package/dist/lib/frontmatter.test.js +192 -0
  174. package/dist/lib/frontmatter.test.js.map +1 -0
  175. package/dist/lib/project-detector.d.ts +12 -0
  176. package/dist/lib/project-detector.js +123 -0
  177. package/dist/lib/project-detector.js.map +1 -0
  178. package/dist/lib/project-detector.test.d.ts +1 -0
  179. package/dist/lib/project-detector.test.js +117 -0
  180. package/dist/lib/project-detector.test.js.map +1 -0
  181. package/dist/lib/safe-external-path.d.ts +10 -0
  182. package/dist/lib/safe-external-path.js +46 -0
  183. package/dist/lib/safe-external-path.js.map +1 -0
  184. package/dist/lib/safe-external-path.test.d.ts +1 -0
  185. package/dist/lib/safe-external-path.test.js +99 -0
  186. package/dist/lib/safe-external-path.test.js.map +1 -0
  187. package/dist/lib/search-engine.d.ts +19 -0
  188. package/dist/lib/search-engine.js +157 -0
  189. package/dist/lib/search-engine.js.map +1 -0
  190. package/dist/lib/search-engine.test.d.ts +1 -0
  191. package/dist/lib/search-engine.test.js +120 -0
  192. package/dist/lib/search-engine.test.js.map +1 -0
  193. package/dist/lib/session-registry.d.ts +59 -0
  194. package/dist/lib/session-registry.js +230 -0
  195. package/dist/lib/session-registry.js.map +1 -0
  196. package/dist/lib/session-registry.test.d.ts +1 -0
  197. package/dist/lib/session-registry.test.js +199 -0
  198. package/dist/lib/session-registry.test.js.map +1 -0
  199. package/dist/lib/skill-registry.d.ts +13 -0
  200. package/dist/lib/skill-registry.js +76 -0
  201. package/dist/lib/skill-registry.js.map +1 -0
  202. package/dist/lib/token-estimator.d.ts +19 -0
  203. package/dist/lib/token-estimator.js +58 -0
  204. package/dist/lib/token-estimator.js.map +1 -0
  205. package/dist/lib/token-estimator.test.d.ts +1 -0
  206. package/dist/lib/token-estimator.test.js +65 -0
  207. package/dist/lib/token-estimator.test.js.map +1 -0
  208. package/dist/lib/vault-fs.d.ts +39 -0
  209. package/dist/lib/vault-fs.js +183 -0
  210. package/dist/lib/vault-fs.js.map +1 -0
  211. package/dist/lib/vault-fs.test.d.ts +1 -0
  212. package/dist/lib/vault-fs.test.js +210 -0
  213. package/dist/lib/vault-fs.test.js.map +1 -0
  214. package/dist/mcp-server.d.ts +2 -0
  215. package/dist/mcp-server.js +385 -0
  216. package/dist/mcp-server.js.map +1 -0
  217. package/dist/test-helpers.d.ts +20 -0
  218. package/dist/test-helpers.js +46 -0
  219. package/dist/test-helpers.js.map +1 -0
  220. package/dist/test-helpers.test.d.ts +1 -0
  221. package/dist/test-helpers.test.js +90 -0
  222. package/dist/test-helpers.test.js.map +1 -0
  223. package/package.json +72 -0
package/README.md ADDED
@@ -0,0 +1,235 @@
1
+ # obsidian-mcp
2
+
3
+ **Universal Agentic Knowledge Base** — A CLI tool and MCP server backed by an Obsidian vault that serves as shared memory for AI coding tools.
4
+
5
+ [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL%203.0-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
6
+ [![Node.js](https://img.shields.io/badge/Node.js-%3E%3D20.0.0-green.svg)](https://nodejs.org/)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue.svg)](https://www.typescriptlang.org/)
8
+ [![Release](https://img.shields.io/github/v/release/gopherine/obsidian-mcp)](https://github.com/gopherine/obsidian-mcp/releases)
9
+
10
+ ## Features
11
+
12
+ - **MCP Server** — Works as an MCP server for Claude Desktop, Cursor, OpenCode, and any MCP-compatible client
13
+ - **CLI Tool** — Full CLI interface for manual vault operations
14
+ - **Project Auto-Discovery** — Detects projects from CWD via git root and project-map.json
15
+ - **Knowledge Management** — Tasks, decisions (ADRs), learnings, sessions, brainstorms
16
+ - **Full-Text Search** — Powered by ripgrep
17
+ - **Skill Installer** — Install and manage AI skills from git repos, local files, or URLs
18
+ - **Multi-Agent Coordination** — Session registry for agent swarms
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ npm install -g @gopherine/obsidian-mcp
24
+ ```
25
+
26
+ Or use directly with npx (no install needed):
27
+ ```bash
28
+ npx @gopherine/obsidian-mcp
29
+ ```
30
+
31
+ Or clone and build:
32
+ ```bash
33
+ git clone https://github.com/gopherine/obsidian-mcp.git
34
+ cd obsidian-mcp
35
+ npm install && npm run build
36
+ ```
37
+
38
+ > **Note:** The default binary runs the MCP server. The CLI is available as `obsidian-mcp-cli`.
39
+
40
+ ## Quick Start
41
+
42
+ ```bash
43
+ # MCP server (add to your MCP client config — see below)
44
+ npx @gopherine/obsidian-mcp
45
+
46
+ # CLI tool
47
+ npx @gopherine/obsidian-mcp-cli --help
48
+ ```
49
+
50
+ ## CLI Commands
51
+
52
+ | Shorthand | Full Command | Description |
53
+ |-----------|--------------|-------------|
54
+ | `r` | `read <path>` | Read a vault note |
55
+ | `w` | `write <path>` | Write/create a vault note |
56
+ | `s` | `search <query>` | Search the vault |
57
+ | `c` | `context` | Get project context |
58
+ | `i` | `init <path>` | Initialize project context |
59
+ | `d` | `decide` | Log an architecture decision |
60
+ | `t` | `task` | Manage tasks |
61
+ | `t add` | `task add` | Add a task |
62
+ | `t ls` | `task list` | List tasks |
63
+ | `t b` | `task board` | Show kanban board |
64
+ | `l` | `learn` | Manage learnings |
65
+ | `l add` | `learn add` | Capture a learning |
66
+ | `l ls` | `learn list` | List learnings |
67
+ | `sk i` | `skill install` | Install a skill |
68
+ | `sk ls` | `skill list` | List installed skills |
69
+ | `sk rm` | `skill delete` | Remove a skill |
70
+
71
+ ## MCP Setup
72
+
73
+ ### Claude Code
74
+
75
+ Add to your project's `CLAUDE.md` or run:
76
+ ```bash
77
+ claude mcp add obsidian-mcp -- npx -y @gopherine/obsidian-mcp
78
+ ```
79
+
80
+ Or add to `~/.claude.json`:
81
+ ```json
82
+ {
83
+ "mcpServers": {
84
+ "obsidian-mcp": {
85
+ "command": "npx",
86
+ "args": ["-y", "@gopherine/obsidian-mcp"]
87
+ }
88
+ }
89
+ }
90
+ ```
91
+
92
+ Set your vault path:
93
+ ```bash
94
+ claude mcp add obsidian-mcp -e VAULT_PATH=~/Vaults/ai -- npx -y @gopherine/obsidian-mcp
95
+ ```
96
+
97
+ ### Claude Desktop
98
+
99
+ Add to your Claude config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, or `%APPDATA%\Claude\claude_desktop_config.json` on Windows):
100
+
101
+ ```json
102
+ {
103
+ "mcpServers": {
104
+ "obsidian-mcp": {
105
+ "command": "npx",
106
+ "args": ["-y", "@gopherine/obsidian-mcp"],
107
+ "env": {
108
+ "VAULT_PATH": "~/Vaults/ai"
109
+ }
110
+ }
111
+ }
112
+ }
113
+ ```
114
+
115
+ ### Cursor
116
+
117
+ Add to your `.cursor/mcp.json`:
118
+
119
+ ```json
120
+ {
121
+ "mcpServers": {
122
+ "obsidian-mcp": {
123
+ "command": "npx",
124
+ "args": ["-y", "@gopherine/obsidian-mcp"]
125
+ }
126
+ }
127
+ }
128
+ ```
129
+
130
+ ### OpenCode
131
+
132
+ Add to your MCP configuration:
133
+
134
+ ```json
135
+ {
136
+ "mcpServers": {
137
+ "obsidian-mcp": {
138
+ "type": "stdio",
139
+ "command": "npx",
140
+ "args": ["-y", "@gopherine/obsidian-mcp"]
141
+ }
142
+ }
143
+ }
144
+ ```
145
+
146
+ ### OpenAI Codex
147
+
148
+ Add to your MCP configuration:
149
+
150
+ ```json
151
+ {
152
+ "mcpServers": {
153
+ "obsidian-mcp": {
154
+ "command": "npx",
155
+ "args": ["-y", "@gopherine/obsidian-mcp"]
156
+ }
157
+ }
158
+ }
159
+ ```
160
+
161
+ ## Configuration
162
+
163
+ | Environment Variable | Default | Description |
164
+ |---------------------|---------|-------------|
165
+ | `VAULT_PATH` | `~/Vaults/ai` | Path to Obsidian vault |
166
+ | `MAX_INJECT_TOKENS` | `1500` | Max tokens for context injection |
167
+ | `SESSION_TTL_HOURS` | `2` | Session heartbeat TTL |
168
+
169
+ ## Vault Structure
170
+
171
+ ```
172
+ ~/Vaults/ai/
173
+ ├── project-map.json # Path → slug mappings
174
+ ├── coordination/
175
+ │ ├── session-registry.json # Active agent sessions
176
+ │ └── locks/ # PID lockfiles
177
+ ├── skills/
178
+ │ ├── installed/ # Installed skills
179
+ │ └── registry.json # Skill metadata
180
+ └── projects/<slug>/
181
+ ├── context.md # Project overview
182
+ ├── decisions/ # Architecture Decision Records
183
+ ├── tasks/ # Task files
184
+ ├── learnings/ # Learning captures
185
+ ├── sessions/ # Session notes
186
+ ├── brainstorms/ # Brainstorm documents
187
+ └── _archive/ # Pruned content
188
+ ```
189
+
190
+ ## MCP Tools
191
+
192
+ | Tool | Description |
193
+ |------|-------------|
194
+ | `vault_read` | Read file or directory |
195
+ | `vault_write` | Write/append/prepend content |
196
+ | `vault_search` | Full-text search |
197
+ | `vault_project_context` | Get project context |
198
+ | `vault_init` | Generate draft context.md |
199
+ | `vault_decide` | Log architecture decision |
200
+ | `vault_task` | Manage tasks (add/list/update/board) |
201
+ | `vault_learn` | Capture/list learnings |
202
+ | `vault_session` | Register/heartbeat/complete sessions |
203
+ | `vault_skill_*` | Skill installer operations |
204
+ | `vault_prune` | Archive/delete stale content |
205
+ | `vault_stats` | Content statistics |
206
+ | `vault_resume` | Resume context for continuing work |
207
+ | `vault_deprecate` | Mark items as deprecated |
208
+
209
+ ## Testing
210
+
211
+ ```bash
212
+ # Run all tests with Vitest
213
+ npm test
214
+
215
+ # Run with coverage (target: 90%+)
216
+ npm run test:coverage
217
+
218
+ # Run specific test file
219
+ npm test src/commands/task.test.ts
220
+
221
+ # Watch mode
222
+ npm run test:watch
223
+ ```
224
+
225
+ Tests use **table-driven pattern** for comprehensive coverage. All test files are `*.test.ts` alongside source files.
226
+
227
+ ## Documentation
228
+
229
+ - [Contributing](./CONTRIBUTING.md)
230
+ - [Code of Conduct](./CODE_OF_CONDUCT.md)
231
+ - [Changelog](./CHANGELOG.md)
232
+
233
+ ## License
234
+
235
+ AGPL-3.0 — See [LICENSE](./LICENSE)
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};