@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.
- package/CHANGELOG.md +60 -0
- package/LICENSE +661 -0
- package/README.md +235 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +805 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/brainstorm.d.ts +9 -0
- package/dist/commands/brainstorm.js +37 -0
- package/dist/commands/brainstorm.js.map +1 -0
- package/dist/commands/brainstorm.test.d.ts +1 -0
- package/dist/commands/brainstorm.test.js +110 -0
- package/dist/commands/brainstorm.test.js.map +1 -0
- package/dist/commands/context.d.ts +18 -0
- package/dist/commands/context.js +88 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/context.test.d.ts +1 -0
- package/dist/commands/context.test.js +230 -0
- package/dist/commands/context.test.js.map +1 -0
- package/dist/commands/decide.d.ts +12 -0
- package/dist/commands/decide.js +40 -0
- package/dist/commands/decide.js.map +1 -0
- package/dist/commands/decide.test.d.ts +1 -0
- package/dist/commands/decide.test.js +109 -0
- package/dist/commands/decide.test.js.map +1 -0
- package/dist/commands/graph.d.ts +15 -0
- package/dist/commands/graph.js +89 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/graph.test.d.ts +1 -0
- package/dist/commands/graph.test.js +215 -0
- package/dist/commands/graph.test.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.js +256 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/learn.d.ts +25 -0
- package/dist/commands/learn.js +92 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/learn.test.d.ts +1 -0
- package/dist/commands/learn.test.js +241 -0
- package/dist/commands/learn.test.js.map +1 -0
- package/dist/commands/prune.d.ts +58 -0
- package/dist/commands/prune.js +246 -0
- package/dist/commands/prune.js.map +1 -0
- package/dist/commands/read.d.ts +8 -0
- package/dist/commands/read.js +7 -0
- package/dist/commands/read.js.map +1 -0
- package/dist/commands/read.test.d.ts +1 -0
- package/dist/commands/read.test.js +48 -0
- package/dist/commands/read.test.js.map +1 -0
- package/dist/commands/resume.d.ts +20 -0
- package/dist/commands/resume.js +138 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/commands/resume.test.d.ts +1 -0
- package/dist/commands/resume.test.js +243 -0
- package/dist/commands/resume.test.js.map +1 -0
- package/dist/commands/search.d.ts +8 -0
- package/dist/commands/search.js +25 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/search.test.d.ts +1 -0
- package/dist/commands/search.test.js +61 -0
- package/dist/commands/search.test.js.map +1 -0
- package/dist/commands/session.d.ts +22 -0
- package/dist/commands/session.js +79 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/session.test.d.ts +1 -0
- package/dist/commands/session.test.js +185 -0
- package/dist/commands/session.test.js.map +1 -0
- package/dist/commands/skill/index.d.ts +30 -0
- package/dist/commands/skill/index.js +61 -0
- package/dist/commands/skill/index.js.map +1 -0
- package/dist/commands/skill/index.test.d.ts +1 -0
- package/dist/commands/skill/index.test.js +137 -0
- package/dist/commands/skill/index.test.js.map +1 -0
- package/dist/commands/skill/install.d.ts +14 -0
- package/dist/commands/skill/install.js +107 -0
- package/dist/commands/skill/install.js.map +1 -0
- package/dist/commands/skill/install.test.d.ts +1 -0
- package/dist/commands/skill/install.test.js +225 -0
- package/dist/commands/skill/install.test.js.map +1 -0
- package/dist/commands/skill/list.d.ts +6 -0
- package/dist/commands/skill/list.js +5 -0
- package/dist/commands/skill/list.js.map +1 -0
- package/dist/commands/skill/list.test.d.ts +1 -0
- package/dist/commands/skill/list.test.js +101 -0
- package/dist/commands/skill/list.test.js.map +1 -0
- package/dist/commands/skill/schema.d.ts +27 -0
- package/dist/commands/skill/schema.js +55 -0
- package/dist/commands/skill/schema.js.map +1 -0
- package/dist/commands/skill/schema.test.d.ts +1 -0
- package/dist/commands/skill/schema.test.js +142 -0
- package/dist/commands/skill/schema.test.js.map +1 -0
- package/dist/commands/skill/validate.d.ts +10 -0
- package/dist/commands/skill/validate.js +39 -0
- package/dist/commands/skill/validate.js.map +1 -0
- package/dist/commands/skill/validate.test.d.ts +1 -0
- package/dist/commands/skill/validate.test.js +171 -0
- package/dist/commands/skill/validate.test.js.map +1 -0
- package/dist/commands/task.d.ts +34 -0
- package/dist/commands/task.js +160 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/task.test.d.ts +1 -0
- package/dist/commands/task.test.js +395 -0
- package/dist/commands/task.test.js.map +1 -0
- package/dist/commands/todo.d.ts +15 -0
- package/dist/commands/todo.js +99 -0
- package/dist/commands/todo.js.map +1 -0
- package/dist/commands/todo.test.d.ts +1 -0
- package/dist/commands/todo.test.js +324 -0
- package/dist/commands/todo.test.js.map +1 -0
- package/dist/commands/write.d.ts +12 -0
- package/dist/commands/write.js +40 -0
- package/dist/commands/write.js.map +1 -0
- package/dist/commands/write.test.d.ts +1 -0
- package/dist/commands/write.test.js +79 -0
- package/dist/commands/write.test.js.map +1 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.js +48 -0
- package/dist/config.js.map +1 -0
- package/dist/config.test.d.ts +1 -0
- package/dist/config.test.js +147 -0
- package/dist/config.test.js.map +1 -0
- package/dist/core/executor.d.ts +11 -0
- package/dist/core/executor.js +42 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/executor.test.d.ts +1 -0
- package/dist/core/executor.test.js +206 -0
- package/dist/core/executor.test.js.map +1 -0
- package/dist/core/middleware/error-handler.d.ts +2 -0
- package/dist/core/middleware/error-handler.js +29 -0
- package/dist/core/middleware/error-handler.js.map +1 -0
- package/dist/core/middleware/index.d.ts +2 -0
- package/dist/core/middleware/index.js +3 -0
- package/dist/core/middleware/index.js.map +1 -0
- package/dist/core/middleware/logging.d.ts +2 -0
- package/dist/core/middleware/logging.js +18 -0
- package/dist/core/middleware/logging.js.map +1 -0
- package/dist/core/registry.d.ts +12 -0
- package/dist/core/registry.js +407 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/registry.test.d.ts +1 -0
- package/dist/core/registry.test.js +162 -0
- package/dist/core/registry.test.js.map +1 -0
- package/dist/core/types.d.ts +38 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/integration/coordination.test.d.ts +1 -0
- package/dist/integration/coordination.test.js +286 -0
- package/dist/integration/coordination.test.js.map +1 -0
- package/dist/integration/project-artifacts.test.d.ts +1 -0
- package/dist/integration/project-artifacts.test.js +275 -0
- package/dist/integration/project-artifacts.test.js.map +1 -0
- package/dist/integration/registry-graph.test.d.ts +1 -0
- package/dist/integration/registry-graph.test.js +157 -0
- package/dist/integration/registry-graph.test.js.map +1 -0
- package/dist/integration/vault-lifecycle.test.d.ts +1 -0
- package/dist/integration/vault-lifecycle.test.js +183 -0
- package/dist/integration/vault-lifecycle.test.js.map +1 -0
- package/dist/lib/auto-number.d.ts +10 -0
- package/dist/lib/auto-number.js +33 -0
- package/dist/lib/auto-number.js.map +1 -0
- package/dist/lib/auto-number.test.d.ts +1 -0
- package/dist/lib/auto-number.test.js +88 -0
- package/dist/lib/auto-number.test.js.map +1 -0
- package/dist/lib/escape-regex.d.ts +4 -0
- package/dist/lib/escape-regex.js +7 -0
- package/dist/lib/escape-regex.js.map +1 -0
- package/dist/lib/escape-regex.test.d.ts +1 -0
- package/dist/lib/escape-regex.test.js +27 -0
- package/dist/lib/escape-regex.test.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +34 -0
- package/dist/lib/frontmatter.js +74 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/frontmatter.test.d.ts +1 -0
- package/dist/lib/frontmatter.test.js +192 -0
- package/dist/lib/frontmatter.test.js.map +1 -0
- package/dist/lib/project-detector.d.ts +12 -0
- package/dist/lib/project-detector.js +123 -0
- package/dist/lib/project-detector.js.map +1 -0
- package/dist/lib/project-detector.test.d.ts +1 -0
- package/dist/lib/project-detector.test.js +117 -0
- package/dist/lib/project-detector.test.js.map +1 -0
- package/dist/lib/safe-external-path.d.ts +10 -0
- package/dist/lib/safe-external-path.js +46 -0
- package/dist/lib/safe-external-path.js.map +1 -0
- package/dist/lib/safe-external-path.test.d.ts +1 -0
- package/dist/lib/safe-external-path.test.js +99 -0
- package/dist/lib/safe-external-path.test.js.map +1 -0
- package/dist/lib/search-engine.d.ts +19 -0
- package/dist/lib/search-engine.js +157 -0
- package/dist/lib/search-engine.js.map +1 -0
- package/dist/lib/search-engine.test.d.ts +1 -0
- package/dist/lib/search-engine.test.js +120 -0
- package/dist/lib/search-engine.test.js.map +1 -0
- package/dist/lib/session-registry.d.ts +59 -0
- package/dist/lib/session-registry.js +230 -0
- package/dist/lib/session-registry.js.map +1 -0
- package/dist/lib/session-registry.test.d.ts +1 -0
- package/dist/lib/session-registry.test.js +199 -0
- package/dist/lib/session-registry.test.js.map +1 -0
- package/dist/lib/skill-registry.d.ts +13 -0
- package/dist/lib/skill-registry.js +76 -0
- package/dist/lib/skill-registry.js.map +1 -0
- package/dist/lib/token-estimator.d.ts +19 -0
- package/dist/lib/token-estimator.js +58 -0
- package/dist/lib/token-estimator.js.map +1 -0
- package/dist/lib/token-estimator.test.d.ts +1 -0
- package/dist/lib/token-estimator.test.js +65 -0
- package/dist/lib/token-estimator.test.js.map +1 -0
- package/dist/lib/vault-fs.d.ts +39 -0
- package/dist/lib/vault-fs.js +183 -0
- package/dist/lib/vault-fs.js.map +1 -0
- package/dist/lib/vault-fs.test.d.ts +1 -0
- package/dist/lib/vault-fs.test.js +210 -0
- package/dist/lib/vault-fs.test.js.map +1 -0
- package/dist/mcp-server.d.ts +2 -0
- package/dist/mcp-server.js +385 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/test-helpers.d.ts +20 -0
- package/dist/test-helpers.js +46 -0
- package/dist/test-helpers.js.map +1 -0
- package/dist/test-helpers.test.d.ts +1 -0
- package/dist/test-helpers.test.js +90 -0
- package/dist/test-helpers.test.js.map +1 -0
- 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
|
+
[](https://www.gnu.org/licenses/agpl-3.0)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](https://www.typescriptlang.org/)
|
|
8
|
+
[](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