obsidian-mcp-pro 1.7.2 → 1.8.0
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/README.md +213 -40
- package/build/index.d.ts.map +1 -1
- package/build/index.js +55 -4
- package/build/index.js.map +1 -1
- package/build/lib/bases.d.ts +81 -0
- package/build/lib/bases.d.ts.map +1 -0
- package/build/lib/bases.js +277 -0
- package/build/lib/bases.js.map +1 -0
- package/build/lib/chunker.d.ts +18 -0
- package/build/lib/chunker.d.ts.map +1 -0
- package/build/lib/chunker.js +168 -0
- package/build/lib/chunker.js.map +1 -0
- package/build/lib/embedding-providers.d.ts +42 -0
- package/build/lib/embedding-providers.d.ts.map +1 -0
- package/build/lib/embedding-providers.js +182 -0
- package/build/lib/embedding-providers.js.map +1 -0
- package/build/lib/embedding-store.d.ts +75 -0
- package/build/lib/embedding-store.d.ts.map +1 -0
- package/build/lib/embedding-store.js +306 -0
- package/build/lib/embedding-store.js.map +1 -0
- package/build/lib/errors.d.ts.map +1 -1
- package/build/lib/errors.js +5 -0
- package/build/lib/errors.js.map +1 -1
- package/build/lib/index-cache.d.ts +32 -0
- package/build/lib/index-cache.d.ts.map +1 -0
- package/build/lib/index-cache.js +310 -0
- package/build/lib/index-cache.js.map +1 -0
- package/build/lib/link-rewriter.d.ts.map +1 -1
- package/build/lib/link-rewriter.js +2 -2
- package/build/lib/link-rewriter.js.map +1 -1
- package/build/lib/markdown.js +1 -1
- package/build/lib/mime.d.ts +20 -0
- package/build/lib/mime.d.ts.map +1 -0
- package/build/lib/mime.js +71 -0
- package/build/lib/mime.js.map +1 -0
- package/build/lib/permissions.d.ts +33 -0
- package/build/lib/permissions.d.ts.map +1 -0
- package/build/lib/permissions.js +94 -0
- package/build/lib/permissions.js.map +1 -0
- package/build/lib/progress.d.ts +42 -0
- package/build/lib/progress.d.ts.map +1 -0
- package/build/lib/progress.js +51 -0
- package/build/lib/progress.js.map +1 -0
- package/build/lib/sections.d.ts +93 -0
- package/build/lib/sections.d.ts.map +1 -0
- package/build/lib/sections.js +262 -0
- package/build/lib/sections.js.map +1 -0
- package/build/lib/tag-rewriter.d.ts +33 -0
- package/build/lib/tag-rewriter.d.ts.map +1 -0
- package/build/lib/tag-rewriter.js +219 -0
- package/build/lib/tag-rewriter.js.map +1 -0
- package/build/lib/vault.d.ts +26 -2
- package/build/lib/vault.d.ts.map +1 -1
- package/build/lib/vault.js +134 -42
- package/build/lib/vault.js.map +1 -1
- package/build/tools/attachments.d.ts +3 -0
- package/build/tools/attachments.d.ts.map +1 -0
- package/build/tools/attachments.js +322 -0
- package/build/tools/attachments.js.map +1 -0
- package/build/tools/bases.d.ts +3 -0
- package/build/tools/bases.d.ts.map +1 -0
- package/build/tools/bases.js +155 -0
- package/build/tools/bases.js.map +1 -0
- package/build/tools/prompts.d.ts +15 -0
- package/build/tools/prompts.d.ts.map +1 -0
- package/build/tools/prompts.js +194 -0
- package/build/tools/prompts.js.map +1 -0
- package/build/tools/read.d.ts.map +1 -1
- package/build/tools/read.js +323 -6
- package/build/tools/read.js.map +1 -1
- package/build/tools/sections.d.ts +3 -0
- package/build/tools/sections.d.ts.map +1 -0
- package/build/tools/sections.js +240 -0
- package/build/tools/sections.js.map +1 -0
- package/build/tools/semantic.d.ts +5 -0
- package/build/tools/semantic.d.ts.map +1 -0
- package/build/tools/semantic.js +302 -0
- package/build/tools/semantic.js.map +1 -0
- package/build/tools/tags.d.ts.map +1 -1
- package/build/tools/tags.js +102 -12
- package/build/tools/tags.js.map +1 -1
- package/build/tools/write.d.ts.map +1 -1
- package/build/tools/write.js +37 -0
- package/build/tools/write.js.map +1 -1
- package/package.json +10 -3
package/README.md
CHANGED
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
[](https://github.com/rps321321/obsidian-mcp-pro)
|
|
16
16
|
[](https://opensource.org/licenses/MIT)
|
|
17
17
|
[](https://nodejs.org/)
|
|
18
|
-
[](https://github.com/rps321321/obsidian-mcp-pro)
|
|
19
|
+
[](https://glama.ai/mcp/servers/rps321321/obsidian-mcp-pro)
|
|
20
20
|
|
|
21
|
-
Give AI assistants deep, structured access to your Obsidian knowledge base. Read, write, search, tag, analyze links, traverse graphs,
|
|
21
|
+
Give AI assistants deep, structured access to your Obsidian knowledge base. Read, write, search, tag, analyze links, traverse graphs, manipulate canvases, query Bases, edit by heading or block reference, run semantic search, and pull binary attachments. All through the [Model Context Protocol](https://modelcontextprotocol.io/).
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
**41 tools, 5 prompts, 3 resources.** Every tool ships with rich descriptions, typed schemas, human-readable titles, and safety annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`) so your agent picks the right tool, passes the right arguments, and handles results correctly. The original 23 tools earned an average 4.40/5 score and all-A grades on [Glama's quality index](https://glama.ai/mcp/servers/rps321321/obsidian-mcp-pro); the 18 newer ones follow the same authoring conventions documented in [docs/TOOL_AUTHORING.md](./docs/TOOL_AUTHORING.md).
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
@@ -46,22 +46,25 @@ Every one of the 23 tools ships with rich descriptions, typed schemas, human-rea
|
|
|
46
46
|
## Features
|
|
47
47
|
|
|
48
48
|
### Read & Search
|
|
49
|
-
- Full-text search across all vault notes
|
|
50
|
-
- Read individual notes
|
|
49
|
+
- Full-text search across all vault notes (cached: re-runs only re-read changed files)
|
|
50
|
+
- Read individual notes whole, or as a fragment by heading path, block id, or line range
|
|
51
51
|
- List and filter notes by folder, date, or pattern
|
|
52
52
|
- Search by frontmatter fields and values
|
|
53
|
-
- Retrieve daily notes automatically
|
|
53
|
+
- Retrieve daily notes automatically using the vault's configured filename format
|
|
54
|
+
- `get_recent_notes` orders by mtime; `get_vault_stats` reports counts, words, tag coverage; `resolve_alias` translates a display name to a real note path
|
|
54
55
|
|
|
55
56
|
### Write & Modify
|
|
56
57
|
- Create new notes with frontmatter and content
|
|
57
58
|
- Append or prepend content to existing notes
|
|
58
|
-
- Update frontmatter properties programmatically (
|
|
59
|
-
- Move and rename notes (
|
|
60
|
-
- Delete notes safely
|
|
59
|
+
- Update frontmatter properties programmatically (merge: unlisted keys are preserved)
|
|
60
|
+
- Move and rename notes (rewrites every wikilink, markdown link, and canvas reference across the vault by default)
|
|
61
|
+
- Delete notes safely; moved to the vault's `.trash` folder by default, with an optional permanent flag and elicitation-based confirmation
|
|
62
|
+
- Surgical edits by heading: `update_section`, `insert_at_section`, `list_sections`, plus single-note `replace_in_note` (regex with match-count guard) and `edit_block` for paragraphs tagged with `^id`
|
|
61
63
|
|
|
62
64
|
### Tags
|
|
63
|
-
- Build and query a complete tag index
|
|
65
|
+
- Build and query a complete tag index (incremental: cached across runs)
|
|
64
66
|
- Search notes by single or multiple tags
|
|
67
|
+
- `rename_tag` rewrites both inline `#tag` occurrences and frontmatter `tags:` arrays vault-wide; hierarchical mode also rebases nested sub-tags (`project/alpha` follows `project`)
|
|
65
68
|
|
|
66
69
|
### Links & Graph
|
|
67
70
|
- Get backlinks (what links *to* a note)
|
|
@@ -76,10 +79,40 @@ Every one of the 23 tools ships with rich descriptions, typed schemas, human-rea
|
|
|
76
79
|
- Add edges between canvas nodes
|
|
77
80
|
- List all canvases in the vault
|
|
78
81
|
|
|
82
|
+
### Bases (Obsidian 1.10+)
|
|
83
|
+
- `list_bases` enumerates `.base` files
|
|
84
|
+
- `read_base` returns the parsed YAML (filters, properties, views)
|
|
85
|
+
- `query_base` runs the filter DSL against the vault and returns matching notes; supports `taggedWith()`, `file.hasTag()`, `file.inFolder()`, comparison operators, and `and`/`or`/`not` combinators
|
|
86
|
+
|
|
87
|
+
### Attachments
|
|
88
|
+
- `list_attachments` enumerates every non-md/canvas/base file with a per-extension count summary
|
|
89
|
+
- `find_unused_attachments` flags assets no note references via embeds or markdown links; optional reclaimable-bytes report
|
|
90
|
+
- `get_attachment` returns image / audio / blob bytes inline as MCP content blocks (5 MB default cap, 50 MB hard cap)
|
|
91
|
+
|
|
92
|
+
### Semantic Search (optional, Ollama or OpenAI)
|
|
93
|
+
- `index_vault` chunks each note (heading-aware), embeds via the configured provider, persists vectors to `<vault>/.obsidian/cache/`, and incrementally re-embeds only changed notes
|
|
94
|
+
- `search_semantic` ranks notes by cosine similarity against an embedded query
|
|
95
|
+
- `find_similar_notes` reuses an existing note's embeddings to surface neighbors without a live API call
|
|
96
|
+
|
|
79
97
|
### MCP Resources
|
|
80
|
-
- `obsidian://note/{path}`
|
|
81
|
-
- `obsidian://tags`
|
|
82
|
-
- `obsidian://daily`
|
|
98
|
+
- `obsidian://note/{path}` reads any note by its vault-relative path
|
|
99
|
+
- `obsidian://tags` retrieves the full tag index as JSON
|
|
100
|
+
- `obsidian://daily` gets today's daily note content
|
|
101
|
+
|
|
102
|
+
### MCP Prompts
|
|
103
|
+
The server exposes five starter prompts that clients (Claude Desktop, Cursor) surface in their slash-command palette:
|
|
104
|
+
|
|
105
|
+
- `daily-review` walks today's daily note, surfaces unchecked tasks, and proposes follow-ups
|
|
106
|
+
- `weekly-rollup` aggregates the last seven daily notes into themes / decisions / open tasks
|
|
107
|
+
- `find-stale-notes` locates untouched notes and clusters them as orphaned vs. broken-linked vs. still-linked
|
|
108
|
+
- `extract-action-items` pulls all `- [ ] …` lines from a note (or every note matching a tag) into a checklist
|
|
109
|
+
- `build-moc` generates a Map of Content (MOC) for a tag or folder
|
|
110
|
+
|
|
111
|
+
### Operational features
|
|
112
|
+
- **Folder-scoped permissions**: `OBSIDIAN_READ_PATHS` / `OBSIDIAN_WRITE_PATHS` allowlists gate every tool at the path-resolution choke point
|
|
113
|
+
- **Persistent mtime cache** at `<vault>/.obsidian/cache/mcp-pro-index-cache.json` survives restarts; subsequent vault scans serve from cache after one stat-pass
|
|
114
|
+
- **Progress notifications** (`notifications/progress`) on `rename_tag`, `find_unused_attachments`, and `index_vault` when the client subscribes via `_meta.progressToken`
|
|
115
|
+
- **Elicitation** prompts the user to retype the note path on `delete_note(permanent: true)` when the client supports it
|
|
83
116
|
|
|
84
117
|
---
|
|
85
118
|
|
|
@@ -257,9 +290,44 @@ Auto-detection works on **macOS**, **Windows**, and **Linux** by reading the pla
|
|
|
257
290
|
|
|
258
291
|
Unrecognized tokens pass through unchanged. Local time is used (matching Obsidian's rendering).
|
|
259
292
|
|
|
293
|
+
### Folder-Scoped Permissions
|
|
294
|
+
|
|
295
|
+
Restrict the tools' read/write surface to specific folders without exposing the rest of the vault:
|
|
296
|
+
|
|
297
|
+
| Env var | Purpose |
|
|
298
|
+
|---------|---------|
|
|
299
|
+
| `OBSIDIAN_READ_PATHS` | Comma- or colon-separated list of folders that read tools may access. Unset means unrestricted. Use `.` to mean the vault root. |
|
|
300
|
+
| `OBSIDIAN_WRITE_PATHS` | Same shape, but for mutations (create / append / update / delete / move / surgical edits). |
|
|
301
|
+
|
|
302
|
+
Read and write are independent, so an audit account can be read-only on most of the vault but write-only to a `Drafts/` folder. The startup log line and `--help` advertise the active scope. The allowlist is enforced at a single path-resolution choke point so every tool inherits it.
|
|
303
|
+
|
|
304
|
+
### Persistent Caches
|
|
305
|
+
|
|
306
|
+
Two caches live under `<vault>/.obsidian/cache/`:
|
|
307
|
+
|
|
308
|
+
| File | Purpose |
|
|
309
|
+
|------|---------|
|
|
310
|
+
| `mcp-pro-index-cache.json` | mtime-keyed snapshot of recently read notes. The next process start hydrates from this and stat-passes against the live filesystem; only changed notes are re-read. |
|
|
311
|
+
| `mcp-pro-embeddings.json` | Persisted embeddings for semantic search (only present once `index_vault` has run). Vault-relocation safe via an embedded `vaultRoot` check; switching providers / models invalidates entries automatically. |
|
|
312
|
+
|
|
313
|
+
Both are vault-local, are excluded from vault scans (`.obsidian/` is pruned), and can be deleted at any time. Persistence can be turned off entirely with `OBSIDIAN_CACHE_DISABLED=1`.
|
|
314
|
+
|
|
315
|
+
### Semantic Search Provider
|
|
316
|
+
|
|
317
|
+
The semantic-search tools (`index_vault`, `search_semantic`, `find_similar_notes`) need an embedding provider. Configure via env:
|
|
318
|
+
|
|
319
|
+
| Env var | Default | Notes |
|
|
320
|
+
|---------|---------|-------|
|
|
321
|
+
| `OBSIDIAN_EMBEDDING_PROVIDER` | `ollama` | `ollama`, `openai`, or `none` to disable. |
|
|
322
|
+
| `OBSIDIAN_EMBEDDING_MODEL` | `nomic-embed-text` (Ollama), `text-embedding-3-small` (OpenAI) | Provider-specific model identifier. |
|
|
323
|
+
| `OBSIDIAN_EMBEDDING_URL` | `http://localhost:11434` (Ollama), `https://api.openai.com/v1` (OpenAI) | Base URL. |
|
|
324
|
+
| `OBSIDIAN_EMBEDDING_API_KEY` | `OPENAI_API_KEY` falls back if unset | Required for hosted providers. |
|
|
325
|
+
|
|
326
|
+
For local Ollama: install [Ollama](https://ollama.com/), then `ollama pull nomic-embed-text`. The semantic tools register even when no provider is configured, so they're discoverable; calls return a configuration hint until set up.
|
|
327
|
+
|
|
260
328
|
### Observability
|
|
261
329
|
|
|
262
|
-
Logs stream to stderr as either plain text (default) or single-line JSON
|
|
330
|
+
Logs stream to stderr as either plain text (default) or single-line JSON, controlled by `LOG_LEVEL` (`debug`/`info`/`warn`/`error`/`silent`) and `LOG_FORMAT` (`text`/`json`).
|
|
263
331
|
|
|
264
332
|
The server also declares the MCP [`logging` capability](https://modelcontextprotocol.io/specification), so every log line is forwarded to the connected client as a `notifications/message` frame alongside tool responses. Clients that honor `logging/setLevel` can filter server-side logs at runtime without restarting. Claude Desktop surfaces these in its MCP DevTools pane; most other clients currently ignore them, so this is useful primarily for self-hosters and tooling authors.
|
|
265
333
|
|
|
@@ -293,32 +361,92 @@ Tag extraction is similarly case-tolerant: `tags`, `Tags`, `TAGS`, `tag`, and `T
|
|
|
293
361
|
|
|
294
362
|
## Tool Reference
|
|
295
363
|
|
|
364
|
+
### Read
|
|
365
|
+
|
|
296
366
|
| Tool | Description | Key Parameters |
|
|
297
367
|
|------|-------------|----------------|
|
|
298
|
-
| `search_notes` | Full-text search across all notes | `query`, `caseSensitive`, `maxResults`, `folder` |
|
|
299
|
-
| `get_note` | Read a note
|
|
368
|
+
| `search_notes` | Full-text search across all notes (cached) | `query`, `caseSensitive`, `maxResults`, `folder` |
|
|
369
|
+
| `get_note` | Read a note whole, or by `section` / `block` / `lines` | `path`, `section`, `block`, `lines` |
|
|
300
370
|
| `list_notes` | List notes in the vault or a folder | `folder`, `limit` |
|
|
301
371
|
| `get_daily_note` | Get today's (or a specific date's) daily note | `date` |
|
|
302
372
|
| `search_by_frontmatter` | Find notes by frontmatter property values | `property`, `value`, `folder` |
|
|
373
|
+
| `get_recent_notes` | Notes sorted by mtime; optional ISO-or-relative `since` filter | `limit`, `since`, `folder` |
|
|
374
|
+
| `get_vault_stats` | Vault counts, bytes, words, tag coverage, most-recent note | `folder` |
|
|
375
|
+
| `resolve_alias` | Translate frontmatter alias (or basename) to note path | `name`, `includeBasename` |
|
|
376
|
+
|
|
377
|
+
### Write
|
|
378
|
+
|
|
379
|
+
| Tool | Description | Key Parameters |
|
|
380
|
+
|------|-------------|----------------|
|
|
303
381
|
| `create_note` | Create a new note with content and frontmatter | `path`, `content`, `frontmatter` |
|
|
304
382
|
| `append_to_note` | Append content to an existing note | `path`, `content`, `ensureNewline` |
|
|
305
383
|
| `prepend_to_note` | Prepend content after frontmatter | `path`, `content` |
|
|
306
384
|
| `update_frontmatter` | Update frontmatter properties on a note | `path`, `properties` |
|
|
307
385
|
| `create_daily_note` | Create today's daily note from template | `date`, `content`, `templatePath` |
|
|
308
386
|
| `move_note` | Move or rename a note; rewrites references across the vault | `oldPath`, `newPath`, `updateLinks` |
|
|
309
|
-
| `delete_note` | Delete a note (trash by default);
|
|
387
|
+
| `delete_note` | Delete a note (trash by default); optional elicitation on permanent | `path`, `permanent`, `removeReferences` |
|
|
388
|
+
|
|
389
|
+
### Section-level edits
|
|
390
|
+
|
|
391
|
+
| Tool | Description | Key Parameters |
|
|
392
|
+
|------|-------------|----------------|
|
|
393
|
+
| `update_section` | Replace the body under a heading path (heading kept) | `path`, `section`, `newBody` |
|
|
394
|
+
| `insert_at_section` | Insert at `before` / `after-heading` / `append` of a section | `path`, `section`, `content`, `position` |
|
|
395
|
+
| `list_sections` | Return the heading outline of a note as an indented tree | `path` |
|
|
396
|
+
| `replace_in_note` | Find/replace within one note (literal or regex, with match-count guard) | `path`, `find`, `replace`, `regex`, `flags`, `expectedCount` |
|
|
397
|
+
| `edit_block` | Replace content of a paragraph tagged `^id` (anchor preserved) | `path`, `block`, `newContent` |
|
|
398
|
+
|
|
399
|
+
### Tags
|
|
400
|
+
|
|
401
|
+
| Tool | Description | Key Parameters |
|
|
402
|
+
|------|-------------|----------------|
|
|
310
403
|
| `get_tags` | Get all tags and their usage counts | `sortBy` |
|
|
311
404
|
| `search_by_tag` | Find all notes with a specific tag | `tag`, `includeContent` |
|
|
405
|
+
| `rename_tag` | Rewrite inline + frontmatter occurrences vault-wide; hierarchical | `oldName`, `newName`, `hierarchical`, `dryRun` |
|
|
406
|
+
|
|
407
|
+
### Links & graph
|
|
408
|
+
|
|
409
|
+
| Tool | Description | Key Parameters |
|
|
410
|
+
|------|-------------|----------------|
|
|
312
411
|
| `get_backlinks` | Get all notes that link to a given note | `path` |
|
|
313
412
|
| `get_outlinks` | Get all links from a given note | `path` |
|
|
314
413
|
| `find_orphans` | Find notes with no links in or out | `includeOutlinksCheck` |
|
|
315
414
|
| `find_broken_links` | Detect links pointing to non-existent notes | `folder` |
|
|
316
415
|
| `get_graph_neighbors` | Get notes connected within N link hops | `path`, `depth`, `direction` |
|
|
317
|
-
|
|
416
|
+
|
|
417
|
+
### Canvas
|
|
418
|
+
|
|
419
|
+
| Tool | Description | Key Parameters |
|
|
420
|
+
|------|-------------|----------------|
|
|
421
|
+
| `list_canvases` | List all `.canvas` files in the vault | (none) |
|
|
318
422
|
| `read_canvas` | Read a `.canvas` file's nodes and edges | `path` |
|
|
319
423
|
| `add_canvas_node` | Add a node to a canvas | `canvasPath`, `type`, `content`, `x`, `y` |
|
|
320
424
|
| `add_canvas_edge` | Add an edge between two canvas nodes | `canvasPath`, `fromNode`, `toNode` |
|
|
321
425
|
|
|
426
|
+
### Bases
|
|
427
|
+
|
|
428
|
+
| Tool | Description | Key Parameters |
|
|
429
|
+
|------|-------------|----------------|
|
|
430
|
+
| `list_bases` | Enumerate `.base` files in the vault | (none) |
|
|
431
|
+
| `read_base` | Parse a Base file (filters, properties, views) | `path` |
|
|
432
|
+
| `query_base` | Run a Base's filter DSL against the vault | `path`, `view`, `limit`, `includeFrontmatter` |
|
|
433
|
+
|
|
434
|
+
### Attachments
|
|
435
|
+
|
|
436
|
+
| Tool | Description | Key Parameters |
|
|
437
|
+
|------|-------------|----------------|
|
|
438
|
+
| `list_attachments` | Enumerate every non-md/canvas/base file | `extension`, `limit` |
|
|
439
|
+
| `find_unused_attachments` | Attachments not referenced via embeds or markdown links | `limit`, `includeBytes` |
|
|
440
|
+
| `get_attachment` | Return image / audio / blob content (5 MB default cap) | `path`, `maxBytes` |
|
|
441
|
+
|
|
442
|
+
### Semantic search
|
|
443
|
+
|
|
444
|
+
| Tool | Description | Key Parameters |
|
|
445
|
+
|------|-------------|----------------|
|
|
446
|
+
| `index_vault` | Build / refresh the embedding index (incremental, progress events) | `force`, `folder` |
|
|
447
|
+
| `search_semantic` | Cosine search the embedding index for a natural-language query | `query`, `limit`, `folder`, `includeSnippet` |
|
|
448
|
+
| `find_similar_notes` | Surface notes most similar to a source note (no live API call) | `path`, `limit` |
|
|
449
|
+
|
|
322
450
|
---
|
|
323
451
|
|
|
324
452
|
## MCP Resources
|
|
@@ -399,29 +527,54 @@ OBSIDIAN_VAULT_PATH=/path/to/vault npm start
|
|
|
399
527
|
|
|
400
528
|
```
|
|
401
529
|
src/
|
|
402
|
-
index.ts
|
|
403
|
-
config.ts
|
|
404
|
-
http-server.ts
|
|
405
|
-
install.ts
|
|
406
|
-
types.ts
|
|
530
|
+
index.ts # Server entry, CLI parser, resource + prompt registration
|
|
531
|
+
config.ts # Vault detection, daily-notes config loader
|
|
532
|
+
http-server.ts # Streamable HTTP transport, Bearer auth, session TTL
|
|
533
|
+
install.ts # `install` subcommand (Claude Desktop / Cursor)
|
|
534
|
+
types.ts # Shared TypeScript interfaces
|
|
407
535
|
lib/
|
|
408
|
-
vault.ts
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
536
|
+
vault.ts # Core vault ops (read, search, list, per-file locks,
|
|
537
|
+
# symlink boundary, canvas + base + attachment round-trip)
|
|
538
|
+
permissions.ts # OBSIDIAN_READ_PATHS / OBSIDIAN_WRITE_PATHS allowlist
|
|
539
|
+
markdown.ts # Frontmatter, wikilinks, tags, alias-aware resolver
|
|
540
|
+
sections.ts # Heading parser, block-id parser, section bounds
|
|
541
|
+
tag-rewriter.ts # Vault-wide tag rewriting (inline + frontmatter)
|
|
542
|
+
link-rewriter.ts # Plan/apply edit pipeline used by move + delete
|
|
543
|
+
bases.ts # Bases YAML parser + filter DSL evaluator
|
|
544
|
+
chunker.ts # Heading-aware chunking for embeddings
|
|
545
|
+
embedding-providers.ts# Ollama + OpenAI providers
|
|
546
|
+
embedding-store.ts # Persistent vector index, cosine search
|
|
547
|
+
index-cache.ts # mtime-keyed content cache (in-memory + on-disk)
|
|
548
|
+
progress.ts # MCP progress-notification helper
|
|
549
|
+
mime.ts # extension -> MIME map for attachments
|
|
550
|
+
dates.ts # Moment-style date format for daily-note filenames
|
|
551
|
+
errors.ts # sanitizeError: strips absolute paths from fs errors
|
|
552
|
+
concurrency.ts # Bounded-concurrency fan-out helper
|
|
553
|
+
logger.ts # Leveled stderr logger (text + JSON modes)
|
|
415
554
|
tools/
|
|
416
|
-
read.ts
|
|
417
|
-
write.ts
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
555
|
+
read.ts # search, get, list, daily, frontmatter, recent, stats, alias
|
|
556
|
+
write.ts # create, append, prepend, update_frontmatter, move, delete
|
|
557
|
+
sections.ts # update_section, insert_at_section, list_sections,
|
|
558
|
+
# replace_in_note, edit_block
|
|
559
|
+
tags.ts # get_tags, search_by_tag, rename_tag
|
|
560
|
+
links.ts # backlinks, outlinks, orphans, broken, graph_neighbors
|
|
561
|
+
canvas.ts # list, read, add_node, add_edge
|
|
562
|
+
bases.ts # list_bases, read_base, query_base
|
|
563
|
+
attachments.ts # list_attachments, find_unused_attachments, get_attachment
|
|
564
|
+
semantic.ts # index_vault, search_semantic, find_similar_notes
|
|
565
|
+
prompts.ts # daily-review, weekly-rollup, find-stale-notes,
|
|
566
|
+
# extract-action-items, build-moc
|
|
421
567
|
__tests__/
|
|
422
|
-
vault.test.ts
|
|
423
|
-
security.test.ts
|
|
424
|
-
logger.test.ts
|
|
568
|
+
vault.test.ts markdown.test.ts tools.test.ts
|
|
569
|
+
security.test.ts http-server.test.ts semantics.test.ts
|
|
570
|
+
logger.test.ts sections.test.ts tag-rewriter.test.ts
|
|
571
|
+
bases.test.ts permissions.test.ts index-cache.test.ts
|
|
572
|
+
chunker.test.ts embedding-store.test.ts errors.test.ts
|
|
573
|
+
link-rewriter.test.ts
|
|
574
|
+
handlers/
|
|
575
|
+
read.test.ts write.test.ts tags.test.ts
|
|
576
|
+
links.test.ts canvas.test.ts attachments.test.ts
|
|
577
|
+
semantic.test.ts harness.ts
|
|
425
578
|
```
|
|
426
579
|
|
|
427
580
|
---
|
|
@@ -432,12 +585,32 @@ src/
|
|
|
432
585
|
npm test
|
|
433
586
|
```
|
|
434
587
|
|
|
435
|
-
|
|
588
|
+
438 tests covering vault operations, atomic writes + concurrent-mutation races, markdown parsing (frontmatter, wikilinks, tags, fenced + indented code blocks, multi-backtick inline code), section / block-id parsing, tag rewriting (inline + frontmatter, hierarchical sub-tags), Bases filter DSL, attachment classification, semantic chunking + cosine ranking + persistent embedding store, moment-token date formatting, canvas round-trip fidelity, HTTP transport (Bearer auth, oversize-body, CORS allowlist with `Vary: Origin`, per-IP rate limiting, `/version`), leveled logger (text + JSON output), folder-permission allowlist, mtime-cache rehydration across simulated restarts, vault-wide link rewriting on `move_note` and `delete_note` (TOCTOU correctness, control-char injection escape), and security regression guards (symlink escape, case-only rename, path-leak sanitization, cross-process exclusive-create). Handler tests exercise every tool through a real MCP client/server pair via `InMemoryTransport`.
|
|
589
|
+
|
|
590
|
+
```bash
|
|
591
|
+
npm run lint # eslint v9 + typescript-eslint v8 (flat config)
|
|
592
|
+
npm run lint:fix # auto-fix
|
|
593
|
+
```
|
|
436
594
|
|
|
437
595
|
---
|
|
438
596
|
|
|
439
597
|
## What's New
|
|
440
598
|
|
|
599
|
+
**Unreleased** brings the largest feature drop since v1.0:
|
|
600
|
+
|
|
601
|
+
- **Surgical edits by heading and block id.** `update_section`, `insert_at_section`, `list_sections`, `replace_in_note`, `edit_block`, plus fragment retrieval modes on `get_note` (`section`, `block`, `lines`).
|
|
602
|
+
- **Bases support.** `list_bases`, `read_base`, `query_base` for Obsidian's database-view files. First filesystem-only MCP server to ship native Bases.
|
|
603
|
+
- **Semantic search.** `index_vault`, `search_semantic`, `find_similar_notes` backed by Ollama (default) or OpenAI. Persistent vector index with content-hash incremental updates.
|
|
604
|
+
- **Attachments.** `list_attachments`, `find_unused_attachments`, `get_attachment` (returns image / audio / blob bytes inline).
|
|
605
|
+
- **Tag renames vault-wide.** `rename_tag` rewrites both inline `#tag` and frontmatter `tags:` (hierarchical mode rebases nested sub-tags).
|
|
606
|
+
- **Folder-scoped permissions.** `OBSIDIAN_READ_PATHS` / `OBSIDIAN_WRITE_PATHS` allowlists.
|
|
607
|
+
- **Persistent mtime cache.** Vault-wide scans (`get_tags`, `search_notes`, `search_by_tag`) hydrate from `<vault>/.obsidian/cache/mcp-pro-index-cache.json` after a restart and stat-pass against current state, only re-reading changed notes.
|
|
608
|
+
- **Quick wins.** `get_recent_notes`, `get_vault_stats`, `resolve_alias`.
|
|
609
|
+
- **MCP prompts.** `daily-review`, `weekly-rollup`, `find-stale-notes`, `extract-action-items`, `build-moc`.
|
|
610
|
+
- **Progress notifications** on `rename_tag`, `find_unused_attachments`, `index_vault`.
|
|
611
|
+
- **Elicitation** on `delete_note(permanent: true)` for clients that support it.
|
|
612
|
+
- **eslint** wired up with typescript-eslint flat config; `npm run lint` and `lint:fix`.
|
|
613
|
+
|
|
441
614
|
**v1.7.0** — `delete_note` reference handling:
|
|
442
615
|
|
|
443
616
|
- **`delete_note` can strip references vault-wide** when `permanent: true` is paired with `removeReferences: true`. Wikilinks fall back to alias-or-basename, markdown links fall back to visible text, embeds drop entirely, fragments are discarded. Trash-mode (default) leaves references intact since trashed files stay recoverable.
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AA4KtF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAgJvE;AAqFD,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -7,6 +7,8 @@ import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mc
|
|
|
7
7
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
8
8
|
import { getVaultConfig, getDailyNoteConfig } from "./config.js";
|
|
9
9
|
import { resolveVaultPathSafe, listNotes, readNote } from "./lib/vault.js";
|
|
10
|
+
import { describePermissions } from "./lib/permissions.js";
|
|
11
|
+
import { flushAllCachesAsync } from "./lib/index-cache.js";
|
|
10
12
|
import { mapConcurrent } from "./lib/concurrency.js";
|
|
11
13
|
import { extractTags } from "./lib/markdown.js";
|
|
12
14
|
import { log, configureLogger } from "./lib/logger.js";
|
|
@@ -17,6 +19,11 @@ import { registerWriteTools } from "./tools/write.js";
|
|
|
17
19
|
import { registerTagTools } from "./tools/tags.js";
|
|
18
20
|
import { registerLinkTools } from "./tools/links.js";
|
|
19
21
|
import { registerCanvasTools } from "./tools/canvas.js";
|
|
22
|
+
import { registerSectionTools } from "./tools/sections.js";
|
|
23
|
+
import { registerBaseTools } from "./tools/bases.js";
|
|
24
|
+
import { registerAttachmentTools } from "./tools/attachments.js";
|
|
25
|
+
import { registerSemanticTools } from "./tools/semantic.js";
|
|
26
|
+
import { registerPrompts } from "./tools/prompts.js";
|
|
20
27
|
import { startHttpServer } from "./http-server.js";
|
|
21
28
|
import { runInstall } from "./install.js";
|
|
22
29
|
function parseArgs(argv) {
|
|
@@ -154,6 +161,8 @@ Install options:
|
|
|
154
161
|
Env vars:
|
|
155
162
|
OBSIDIAN_VAULT_PATH Vault to serve (else auto-detected from Obsidian config)
|
|
156
163
|
OBSIDIAN_VAULT_NAME Select a named vault when multiple exist
|
|
164
|
+
OBSIDIAN_READ_PATHS Comma/colon list of folders read tools may access
|
|
165
|
+
OBSIDIAN_WRITE_PATHS Comma/colon list of folders write tools may modify
|
|
157
166
|
MCP_HTTP_TOKEN Default bearer token for --transport=http
|
|
158
167
|
LOG_LEVEL debug|info|warn|error|silent (default: info)
|
|
159
168
|
LOG_FORMAT text|json (default: text)
|
|
@@ -180,8 +189,10 @@ export function buildMcpServer(vaultPath) {
|
|
|
180
189
|
// to filter server-side logs at runtime, and lets the server push
|
|
181
190
|
// structured `notifications/message` events alongside tool responses.
|
|
182
191
|
// Logger forwarding is wired up by callers via `configureLogger` once
|
|
183
|
-
// the server instance is available.
|
|
184
|
-
|
|
192
|
+
// the server instance is available. `prompts` advertises that the
|
|
193
|
+
// server hosts callable starter templates (registered via
|
|
194
|
+
// `registerPrompts`).
|
|
195
|
+
capabilities: { logging: {}, prompts: { listChanged: false } },
|
|
185
196
|
});
|
|
186
197
|
const noVaultError = "No Obsidian vault configured. Set OBSIDIAN_VAULT_PATH environment variable.";
|
|
187
198
|
// --- MCP Resources ---
|
|
@@ -290,6 +301,11 @@ export function buildMcpServer(vaultPath) {
|
|
|
290
301
|
registerTagTools(server, vaultForTools);
|
|
291
302
|
registerLinkTools(server, vaultForTools);
|
|
292
303
|
registerCanvasTools(server, vaultForTools);
|
|
304
|
+
registerSectionTools(server, vaultForTools);
|
|
305
|
+
registerBaseTools(server, vaultForTools);
|
|
306
|
+
registerAttachmentTools(server, vaultForTools);
|
|
307
|
+
registerSemanticTools(server, vaultForTools);
|
|
308
|
+
registerPrompts(server);
|
|
293
309
|
if (!vaultPath) {
|
|
294
310
|
log.warn(`Tools registered but vault unconfigured — calls will return errors`);
|
|
295
311
|
}
|
|
@@ -350,7 +366,12 @@ async function main() {
|
|
|
350
366
|
buildMcpServer: () => buildMcpServer(vaultPath),
|
|
351
367
|
version: readPackageVersion(),
|
|
352
368
|
});
|
|
353
|
-
|
|
369
|
+
const perms = describePermissions();
|
|
370
|
+
log.info(`Vault configured`, {
|
|
371
|
+
vault: vaultPath ?? "(not configured)",
|
|
372
|
+
readPaths: perms.read,
|
|
373
|
+
writePaths: perms.write,
|
|
374
|
+
});
|
|
354
375
|
return;
|
|
355
376
|
}
|
|
356
377
|
const server = buildMcpServer(vaultPath);
|
|
@@ -361,7 +382,12 @@ async function main() {
|
|
|
361
382
|
configureLogger({ mcpServer: server });
|
|
362
383
|
const transport = new StdioServerTransport();
|
|
363
384
|
await server.connect(transport);
|
|
364
|
-
|
|
385
|
+
const perms = describePermissions();
|
|
386
|
+
log.info(`Server started (stdio)`, {
|
|
387
|
+
vault: vaultPath ?? "(not configured)",
|
|
388
|
+
readPaths: perms.read,
|
|
389
|
+
writePaths: perms.write,
|
|
390
|
+
});
|
|
365
391
|
}
|
|
366
392
|
export { startHttpServer } from "./http-server.js";
|
|
367
393
|
// Only auto-run as CLI when this file is the entrypoint. Library consumers
|
|
@@ -401,6 +427,31 @@ function installProcessErrorHandlers() {
|
|
|
401
427
|
log.error("Uncaught exception", { err });
|
|
402
428
|
process.exit(1);
|
|
403
429
|
});
|
|
430
|
+
// Flush the index cache to disk on graceful shutdown so the next run can
|
|
431
|
+
// skip re-reading every note. `beforeExit` is the right hook for clean
|
|
432
|
+
// exits; SIGINT/SIGTERM handlers re-raise after the flush so the process
|
|
433
|
+
// still terminates with the expected exit code. We do NOT flush from
|
|
434
|
+
// `uncaughtException` — the process is in undefined state and writing
|
|
435
|
+
// could corrupt the snapshot.
|
|
436
|
+
let flushed = false;
|
|
437
|
+
const flush = async () => {
|
|
438
|
+
if (flushed)
|
|
439
|
+
return;
|
|
440
|
+
flushed = true;
|
|
441
|
+
try {
|
|
442
|
+
await flushAllCachesAsync();
|
|
443
|
+
}
|
|
444
|
+
catch { /* best-effort */ }
|
|
445
|
+
};
|
|
446
|
+
process.on("beforeExit", () => { void flush(); });
|
|
447
|
+
for (const sig of ["SIGINT", "SIGTERM"]) {
|
|
448
|
+
process.on(sig, async () => {
|
|
449
|
+
await flush();
|
|
450
|
+
// Restore default behavior so the second signal terminates promptly.
|
|
451
|
+
process.removeAllListeners(sig);
|
|
452
|
+
process.kill(process.pid, sig);
|
|
453
|
+
});
|
|
454
|
+
}
|
|
404
455
|
}
|
|
405
456
|
if (isCliEntry()) {
|
|
406
457
|
installProcessErrorHandlers();
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal Obsidian Bases (`.base` file) support.
|
|
3
|
+
*
|
|
4
|
+
* A Bases file is YAML describing filters, properties, and view definitions
|
|
5
|
+
* over the vault's notes. Real Obsidian implements a richer DSL than we
|
|
6
|
+
* support here — this module covers the subset that's reliably useful for
|
|
7
|
+
* an MCP-driven query path:
|
|
8
|
+
*
|
|
9
|
+
* filters:
|
|
10
|
+
* and: # also: or, not, root-level array (= and)
|
|
11
|
+
* - taggedWith(file, "project")
|
|
12
|
+
* - file.hasTag("active")
|
|
13
|
+
* - status == "in-progress"
|
|
14
|
+
* - priority != "low"
|
|
15
|
+
* - file.name contains "2026"
|
|
16
|
+
*
|
|
17
|
+
* Unsupported filter expressions are surfaced as parse warnings and treated
|
|
18
|
+
* as `true` (i.e. permissive) so a partial Base still returns plausible
|
|
19
|
+
* rows. Callers can inspect `warnings` to see which clauses were skipped.
|
|
20
|
+
*/
|
|
21
|
+
export interface BaseDocument {
|
|
22
|
+
filters?: BaseFilter | BaseFilter[];
|
|
23
|
+
properties?: Record<string, BasePropertySpec>;
|
|
24
|
+
views?: BaseView[];
|
|
25
|
+
/** Catch-all for fields we don't model. */
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
export interface BasePropertySpec {
|
|
29
|
+
displayName?: string;
|
|
30
|
+
[key: string]: unknown;
|
|
31
|
+
}
|
|
32
|
+
export interface BaseView {
|
|
33
|
+
type: string;
|
|
34
|
+
name?: string;
|
|
35
|
+
filters?: BaseFilter | BaseFilter[];
|
|
36
|
+
order?: string[];
|
|
37
|
+
[key: string]: unknown;
|
|
38
|
+
}
|
|
39
|
+
export type BaseFilter = string | {
|
|
40
|
+
and: BaseFilter[];
|
|
41
|
+
} | {
|
|
42
|
+
or: BaseFilter[];
|
|
43
|
+
} | {
|
|
44
|
+
not: BaseFilter;
|
|
45
|
+
};
|
|
46
|
+
export interface ParsedBase {
|
|
47
|
+
doc: BaseDocument;
|
|
48
|
+
warnings: string[];
|
|
49
|
+
}
|
|
50
|
+
export declare function parseBaseFile(raw: string): ParsedBase;
|
|
51
|
+
/** A single row in a query result: a note path plus its frontmatter and tags. */
|
|
52
|
+
export interface BaseRow {
|
|
53
|
+
path: string;
|
|
54
|
+
frontmatter: Record<string, unknown>;
|
|
55
|
+
tags: string[];
|
|
56
|
+
}
|
|
57
|
+
export interface QueryResult {
|
|
58
|
+
rows: BaseRow[];
|
|
59
|
+
warnings: string[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build a row for a single note. Pre-parsing once per note keeps the filter
|
|
63
|
+
* evaluator fast across large vaults.
|
|
64
|
+
*/
|
|
65
|
+
export declare function buildRow(path: string, content: string): BaseRow;
|
|
66
|
+
interface EvaluationContext {
|
|
67
|
+
warnings: string[];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Evaluate a Base filter against a single row. Unrecognized clauses log a
|
|
71
|
+
* warning and short-circuit to `true` so the row is included rather than
|
|
72
|
+
* silently dropped.
|
|
73
|
+
*/
|
|
74
|
+
export declare function evaluateFilter(row: BaseRow, filter: BaseFilter | undefined, ctx: EvaluationContext): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Apply Base filters across a set of pre-built rows. Returns matching rows
|
|
77
|
+
* plus any warnings emitted by unrecognized filter clauses.
|
|
78
|
+
*/
|
|
79
|
+
export declare function queryBase(rows: readonly BaseRow[], base: BaseDocument, viewName?: string): QueryResult;
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=bases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bases.d.ts","sourceRoot":"","sources":["../../src/lib/bases.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,2CAA2C;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAClB,MAAM,GACN;IAAE,GAAG,EAAE,UAAU,EAAE,CAAA;CAAE,GACrB;IAAE,EAAE,EAAE,UAAU,EAAE,CAAA;CAAE,GACpB;IAAE,GAAG,EAAE,UAAU,CAAA;CAAE,CAAC;AAExB,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,YAAY,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAcrD;AAED,iFAAiF;AACjF,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAO/D;AAED,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAQD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAQT;AAkLD;;;GAGG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,IAAI,EAAE,YAAY,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,CAoCb"}
|