obsidian-mcp-server 3.7.1 → 3.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.
Files changed (117) hide show
  1. package/AGENTS.md +28 -13
  2. package/CLAUDE.md +28 -13
  3. package/Dockerfile +7 -0
  4. package/README.md +43 -99
  5. package/changelog/3.7.x/3.7.2.md +34 -0
  6. package/changelog/3.8.x/3.8.0.md +38 -0
  7. package/dist/config/server-config.d.ts +1 -0
  8. package/dist/config/server-config.d.ts.map +1 -1
  9. package/dist/config/server-config.js +24 -15
  10. package/dist/config/server-config.js.map +1 -1
  11. package/dist/index.js +6 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/instructions.d.ts.map +1 -1
  14. package/dist/instructions.js +21 -7
  15. package/dist/instructions.js.map +1 -1
  16. package/dist/mcp-server/resources/definitions/index.d.ts +2 -2
  17. package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts +3 -2
  18. package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts.map +1 -1
  19. package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js +6 -5
  20. package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js.map +1 -1
  21. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.d.ts +2 -2
  22. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js +2 -2
  23. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js.map +1 -1
  24. package/dist/mcp-server/tools/definitions/_shared/markdown.d.ts +14 -0
  25. package/dist/mcp-server/tools/definitions/_shared/markdown.d.ts.map +1 -0
  26. package/dist/mcp-server/tools/definitions/_shared/markdown.js +17 -0
  27. package/dist/mcp-server/tools/definitions/_shared/markdown.js.map +1 -0
  28. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts +8 -1
  29. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts.map +1 -1
  30. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js +17 -6
  31. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js.map +1 -1
  32. package/dist/mcp-server/tools/definitions/index.d.ts +18 -18
  33. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts +2 -2
  34. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts.map +1 -1
  35. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js +5 -4
  36. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js.map +1 -1
  37. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts +7 -6
  38. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts.map +1 -1
  39. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js +9 -8
  40. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js.map +1 -1
  41. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.d.ts.map +1 -1
  42. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js +2 -1
  43. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js.map +1 -1
  44. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts +2 -2
  45. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts.map +1 -1
  46. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js +38 -28
  47. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js.map +1 -1
  48. package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.d.ts.map +1 -1
  49. package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.js +7 -4
  50. package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.js.map +1 -1
  51. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts +6 -6
  52. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts.map +1 -1
  53. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js +15 -14
  54. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js.map +1 -1
  55. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.d.ts +4 -4
  56. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.d.ts.map +1 -1
  57. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js +9 -8
  58. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js.map +1 -1
  59. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts +2 -2
  60. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts.map +1 -1
  61. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js +9 -7
  62. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js.map +1 -1
  63. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts +2 -2
  64. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts.map +1 -1
  65. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js +7 -5
  66. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js.map +1 -1
  67. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts +2 -2
  68. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts.map +1 -1
  69. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js +4 -3
  70. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js.map +1 -1
  71. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts +2 -2
  72. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts.map +1 -1
  73. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js +5 -4
  74. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js.map +1 -1
  75. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts +2 -2
  76. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts.map +1 -1
  77. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js +10 -4
  78. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js.map +1 -1
  79. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts +46 -12
  80. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts.map +1 -1
  81. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js +93 -43
  82. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js.map +1 -1
  83. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts +2 -2
  84. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts.map +1 -1
  85. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js +5 -4
  86. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js.map +1 -1
  87. package/dist/services/obsidian/jsonlogic-evaluator.d.ts +33 -8
  88. package/dist/services/obsidian/jsonlogic-evaluator.d.ts.map +1 -1
  89. package/dist/services/obsidian/jsonlogic-evaluator.js +171 -32
  90. package/dist/services/obsidian/jsonlogic-evaluator.js.map +1 -1
  91. package/dist/services/obsidian/jsonlogic-worker.d.ts +6 -5
  92. package/dist/services/obsidian/jsonlogic-worker.d.ts.map +1 -1
  93. package/dist/services/obsidian/jsonlogic-worker.js +7 -5
  94. package/dist/services/obsidian/jsonlogic-worker.js.map +1 -1
  95. package/dist/services/obsidian/obsidian-service.d.ts +38 -22
  96. package/dist/services/obsidian/obsidian-service.d.ts.map +1 -1
  97. package/dist/services/obsidian/obsidian-service.js +293 -99
  98. package/dist/services/obsidian/obsidian-service.js.map +1 -1
  99. package/dist/services/obsidian/patch-instruction.d.ts +4 -1
  100. package/dist/services/obsidian/patch-instruction.d.ts.map +1 -1
  101. package/dist/services/obsidian/patch-instruction.js +5 -2
  102. package/dist/services/obsidian/patch-instruction.js.map +1 -1
  103. package/dist/services/obsidian/path-policy.d.ts +67 -23
  104. package/dist/services/obsidian/path-policy.d.ts.map +1 -1
  105. package/dist/services/obsidian/path-policy.js +183 -80
  106. package/dist/services/obsidian/path-policy.js.map +1 -1
  107. package/dist/services/obsidian/section-extractor.d.ts +6 -1
  108. package/dist/services/obsidian/section-extractor.d.ts.map +1 -1
  109. package/dist/services/obsidian/section-extractor.js +106 -11
  110. package/dist/services/obsidian/section-extractor.js.map +1 -1
  111. package/dist/services/obsidian/simple-search.d.ts +62 -0
  112. package/dist/services/obsidian/simple-search.d.ts.map +1 -0
  113. package/dist/services/obsidian/simple-search.js +264 -0
  114. package/dist/services/obsidian/simple-search.js.map +1 -0
  115. package/manifest.json +10 -2
  116. package/package.json +8 -7
  117. package/server.json +19 -7
@@ -131,14 +131,21 @@ export function sectionBody(content, path) {
131
131
  * The 1.x engine lexes the frontmatter-stripped body with its line endings
132
132
  * normalized, then applies the token offsets to the note's own bytes unmapped;
133
133
  * these offsets are computed the same way, so on a CRLF note they drift as the
134
- * engine's do.
134
+ * engine's do. They also sum the kept tokens alone, as the engine does, so
135
+ * after a definition `marked` drops (a repeated label) they fall short by its
136
+ * length as the engine's do. A label first defined inside a list item, or in
137
+ * a blockquote the scan leaves unlexed, is the exception: the scan keeps the
138
+ * later definition the engine drops, so the span there stays on the note's
139
+ * headings.
135
140
  */
136
141
  export function v1HeadingSpan(content, path) {
137
142
  const bodyStart = PLUGIN_FRONTMATTER.exec(content)?.[0].length ?? 0;
138
143
  const { normalized } = normalizeLineEndings(content.slice(bodyStart));
139
- const headings = [...topLevelTokens(normalized)].flatMap((top) => {
140
- const heading = headingOf(normalized, top);
141
- return heading ? [{ ...heading, raw: top.token.raw }] : [];
144
+ let kept = 0;
145
+ const headings = [...topLevelTokens(normalized)].flatMap(({ token }) => {
146
+ const heading = headingOf(normalized, { offset: kept, token });
147
+ kept += token.raw.length;
148
+ return heading ? [{ ...heading, raw: token.raw }] : [];
142
149
  });
143
150
  const h = headingPaths(headings).indexOf(path);
144
151
  const heading = headings[h];
@@ -157,15 +164,23 @@ export function blockKinds(markdown) {
157
164
  /**
158
165
  * The top-level block tokens `marked` reads in `markdown` (line endings
159
166
  * already `\n`), each with its offset — the running sum of the `raw` lengths
160
- * before it, which cover the input exactly.
167
+ * before it. Those lengths cover the input except where `marked` drops a
168
+ * definition, so each dropped definition's length joins the sum where the
169
+ * definition stood.
161
170
  */
162
171
  function* topLevelTokens(markdown) {
163
172
  const tokenizer = new HeadingScanTokenizer();
164
173
  const lexer = new Lexer({ ...getDefaults(), tokenizer });
165
174
  const { rules } = tokenizer;
166
175
  tokenizer.rules = { ...rules, block: { ...rules.block, paragraph: PARAGRAPH } };
176
+ const tokens = lexer.blockTokens(markdown);
177
+ const { droppedDefinitions } = tokenizer;
167
178
  let offset = 0;
168
- for (const token of lexer.blockTokens(markdown)) {
179
+ let dropped = 0;
180
+ for (const token of tokens) {
181
+ for (let gap = droppedDefinitions[dropped]; gap && markdown.length - gap.remaining === offset; gap = droppedDefinitions[++dropped]) {
182
+ offset += gap.length;
183
+ }
169
184
  yield { offset, token };
170
185
  offset += token.raw.length;
171
186
  }
@@ -211,9 +226,54 @@ const PARAGRAPH = (() => {
211
226
  * the whole blockquote whatever the lines hold, so its extent is known
212
227
  * without lexing it. The token then carries no child tokens, which nothing
213
228
  * here reads. Any other shape — a lazy continuation line — goes to the
214
- * stock rule, which still costs a pass per nesting level.
229
+ * stock rule, which costs a pass per nesting level and recurses a call
230
+ * deeper for each, until `MAX_LAZY_QUOTE_DEPTH` stock calls are open. Past
231
+ * that, a blockquote takes the rule's own match as its extent, unlexed: the
232
+ * lines right after innermost code then join the quote where stock `marked`
233
+ * ends it at the code, so a paragraph there becomes part of the quote, and
234
+ * a setext heading's text and underline drop out of the heading scan.
235
+ * - `list`: the stock rule fixes every item's `raw`, and the list's, before it
236
+ * lexes each item's content as a document of its own — one call deeper per
237
+ * nesting level, so a line of list markers costs time quadratic in their
238
+ * count and overflows the stack. That lex only fills child tokens and
239
+ * looseness, so it is skipped, leaving `lexer.state.top` true as the lex
240
+ * would. Definitions inside an item then go unregistered, as those inside
241
+ * an unlexed blockquote do, so a later top-level definition of the same
242
+ * label stays a `def` block where stock `marked` drops it.
243
+ * - `def`: `marked` drops a top-level definition whose label is already
244
+ * registered but still consumes its text. Each one is recorded in
245
+ * `droppedDefinitions`, so the scan's offsets cover the note exactly.
215
246
  */
216
247
  class HeadingScanTokenizer extends Tokenizer {
248
+ /**
249
+ * Each top-level definition `marked` drops, in order: the length of the
250
+ * source left when it was read — its position counted from the end — and
251
+ * its own length.
252
+ */
253
+ droppedDefinitions = [];
254
+ /** Stock blockquote calls open on the stack; only within one does a nested lex run. */
255
+ #quoteDepth = 0;
256
+ def(src) {
257
+ const token = super.def(src);
258
+ if (token && this.#quoteDepth === 0 && this.lexer.tokens.links[token.tag]) {
259
+ this.droppedDefinitions.push({ length: token.raw.length, remaining: src.length });
260
+ }
261
+ return token;
262
+ }
263
+ list(src) {
264
+ const { lexer } = this;
265
+ const { blockTokens } = lexer;
266
+ lexer.blockTokens = ((_src, tokens = []) => {
267
+ lexer.state.top = true;
268
+ return tokens;
269
+ });
270
+ try {
271
+ return super.list(src);
272
+ }
273
+ finally {
274
+ lexer.blockTokens = blockTokens;
275
+ }
276
+ }
217
277
  table(src) {
218
278
  const headerEnd = src.indexOf('\n');
219
279
  const delimiterEnd = headerEnd === -1 ? -1 : src.indexOf('\n', headerEnd + 1);
@@ -233,19 +293,43 @@ class HeadingScanTokenizer extends Tokenizer {
233
293
  end = lineEnd;
234
294
  next = lineEnd + 1;
235
295
  }
296
+ if (end === -1)
297
+ return super.blockquote(src);
236
298
  /**
237
299
  * A run of `>` lines that ends the note or meets an empty line is the whole
238
300
  * blockquote: only a non-empty line can continue it lazily.
239
301
  */
240
- if (end === -1 || (next < src.length && src[next] !== '\n'))
241
- return super.blockquote(src);
242
- const raw = src.slice(0, end);
302
+ let raw = src.slice(0, end);
303
+ if (next < src.length && src[next] !== '\n') {
304
+ if (this.#quoteDepth < MAX_LAZY_QUOTE_DEPTH) {
305
+ this.#quoteDepth++;
306
+ try {
307
+ return super.blockquote(src);
308
+ }
309
+ finally {
310
+ this.#quoteDepth--;
311
+ }
312
+ }
313
+ const cap = this.rules.block.blockquote.exec(src);
314
+ if (!cap)
315
+ return;
316
+ raw = trimTrailingLineFeeds(cap[0]);
317
+ }
243
318
  const text = raw
244
319
  .replace(blockquoteSetextReplace, '\n $1')
245
320
  .replace(blockquoteSetextReplace2, '');
246
321
  return { type: 'blockquote', raw, text, tokens: [] };
247
322
  }
248
323
  }
324
+ /**
325
+ * Stock blockquote calls the scan lets open at once. Each `>` level a lazy
326
+ * line reaches through opens one, and so does each return of a nested quote
327
+ * after a lazy line (`> > a`, `lazy`, `> > b`, …). Below the bound a lazily
328
+ * continued quote reads as in stock `marked`, at a cost of at most this many
329
+ * passes over its lines; past it only the lines right after innermost code
330
+ * read differently, joining the quote.
331
+ */
332
+ const MAX_LAZY_QUOTE_DEPTH = 16;
249
333
  /**
250
334
  * `text` with every `\r\n` and lone `\r` read as `\n` — what `marked` lexes —
251
335
  * and a map from an offset in that text back to the same position in `text`.
@@ -275,6 +359,17 @@ function normalizeLineEndings(text) {
275
359
  },
276
360
  };
277
361
  }
362
+ /**
363
+ * `text` less its trailing run of `\n`, as `/\n+$/` leaves it, found by a scan
364
+ * back from the end: the regex retries at every `\n` of a run that does not
365
+ * end the text, in time quadratic in the run.
366
+ */
367
+ function trimTrailingLineFeeds(text) {
368
+ let end = text.length;
369
+ while (text[end - 1] === '\n')
370
+ end--;
371
+ return text.slice(0, end);
372
+ }
278
373
  /**
279
374
  * Build the full `Parent::Child` path of every heading, in document order. A
280
375
  * heading's parent is the nearest preceding heading strictly shallower than it,
@@ -437,7 +532,7 @@ function extractHeading(content, target) {
437
532
  ? paths.filter((p) => p === resolved)
438
533
  : paths.filter((_, i) => headings[i]?.text === leaf);
439
534
  return {
440
- value: content.slice(hit.start, end?.start).replace(/\n+$/, ''),
535
+ value: trimTrailingLineFeeds(content.slice(hit.start, end?.start)),
441
536
  sectionTarget: resolved,
442
537
  ...(candidates.length > 1 ? { candidates } : {}),
443
538
  };
@@ -1 +1 @@
1
- {"version":3,"file":"section-extractor.js","sourceRoot":"","sources":["../../../src/services/obsidian/section-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"section-extractor.js","sourceRoot":"","sources":["../../../src/services/obsidian/section-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @fileoverview The Local REST API's `POST /search/simple/` run in-server, for
3
+ * text searches under a read scope: plugin 5.2.0's `simpleSearch` over
4
+ * Obsidian 1.14.5's `prepareSimpleSearch`. The query is lower-cased and split
5
+ * on single spaces; a note matches when every token occurs in its lower-cased
6
+ * `basename + "\n\n" + body`. Each token's occurrences are found by `indexOf`,
7
+ * resuming one character past the end of the last, so an occurrence that
8
+ * touches or overlaps the previous one is skipped; the occurrences of every
9
+ * token are sorted and merged where they overlap or touch. A merged range
10
+ * inside the basename is a `filename` span whose context is the basename, one
11
+ * inside the body a `content` span with a `contextLength` window either side,
12
+ * widened one code unit rather than split a surrogate pair, and one across the
13
+ * two is dropped. Offsets index the lower-cased text, and windows are cut from
14
+ * the original, as the plugin cuts them. Hits are ordered by Obsidian's score,
15
+ * highest first, ties in the order notes were added (the plugin's vault order).
16
+ * @module services/obsidian/simple-search
17
+ */
18
+ /** A span as `/search/simple/` reports it, plus where `match.start` sits in `context`. */
19
+ export interface SimpleSearchSpan {
20
+ context: string;
21
+ contextStart: number;
22
+ match: {
23
+ end: number;
24
+ source: 'content' | 'filename';
25
+ start: number;
26
+ };
27
+ }
28
+ /** A note's `/search/simple/` hit. */
29
+ export interface SimpleSearchHit {
30
+ filename: string;
31
+ matches: SimpleSearchSpan[];
32
+ score: number;
33
+ }
34
+ /**
35
+ * The query's tokens as `prepareSimpleSearch` reads them: lower-cased, split
36
+ * on single spaces (a tab or newline stays inside its token), empty pieces
37
+ * dropped. Repeats are dropped too: Obsidian scans a repeated token again, but
38
+ * its ranges coincide with the first scan's and merge away.
39
+ */
40
+ export declare function simpleSearchTokens(query: string): string[];
41
+ export declare const isHighSurrogate: (cu: number) => boolean;
42
+ export declare const isLowSurrogate: (cu: number) => boolean;
43
+ /**
44
+ * One text search over notes added in vault order, holding each hit's context
45
+ * windows. `maxResponseChars` bounds the plugin's response for those hits, its
46
+ * length as `JSON.stringify(hits, null, 2)` (see `HIT_FRAME`): every hit's
47
+ * filename and score, every span's offsets and escaped window, and the framing
48
+ * around each. The count grows span by span as each note is added, so the
49
+ * span that passes the bound fails the search with `context_length_too_large`
50
+ * at once, and no more spans are held than a response the plugin could send.
51
+ */
52
+ export declare class SimpleSearch {
53
+ #private;
54
+ /** The distinct non-empty tokens; a note matches only when it holds every one. */
55
+ readonly tokens: readonly string[];
56
+ constructor(query: string, contextLength: number, maxResponseChars?: number);
57
+ /** Match one note, `body` as Obsidian's `cachedRead` gives it. */
58
+ add(path: string, body: string): void;
59
+ /** The hits, highest score first; equal scores keep the order their notes were added. */
60
+ hits(): SimpleSearchHit[];
61
+ }
62
+ //# sourceMappingURL=simple-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-search.d.ts","sourceRoot":"","sources":["../../../src/services/obsidian/simple-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,0FAA0F;AAC1F,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAoCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE1D;AAYD,eAAO,MAAM,eAAe,OAAQ,MAAM,YAAiC,CAAC;AAC5E,eAAO,MAAM,cAAc,OAAQ,MAAM,YAAiC,CAAC;AAkH3E;;;;;;;;GAQG;AACH,qBAAa,YAAY;;IAMvB,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAEnC,YAAY,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,SAA2B,EAK5F;IAED,kEAAkE;IAClE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAiDpC;IAYD,yFAAyF;IACzF,IAAI,IAAI,eAAe,EAAE,CAExB;CACF"}
@@ -0,0 +1,264 @@
1
+ /**
2
+ * @fileoverview The Local REST API's `POST /search/simple/` run in-server, for
3
+ * text searches under a read scope: plugin 5.2.0's `simpleSearch` over
4
+ * Obsidian 1.14.5's `prepareSimpleSearch`. The query is lower-cased and split
5
+ * on single spaces; a note matches when every token occurs in its lower-cased
6
+ * `basename + "\n\n" + body`. Each token's occurrences are found by `indexOf`,
7
+ * resuming one character past the end of the last, so an occurrence that
8
+ * touches or overlaps the previous one is skipped; the occurrences of every
9
+ * token are sorted and merged where they overlap or touch. A merged range
10
+ * inside the basename is a `filename` span whose context is the basename, one
11
+ * inside the body a `content` span with a `contextLength` window either side,
12
+ * widened one code unit rather than split a surrogate pair, and one across the
13
+ * two is dropped. Offsets index the lower-cased text, and windows are cut from
14
+ * the original, as the plugin cuts them. Hits are ordered by Obsidian's score,
15
+ * highest first, ties in the order notes were added (the plugin's vault order).
16
+ * @module services/obsidian/simple-search
17
+ */
18
+ import { validationError } from '@cyanheads/mcp-ts-core/errors';
19
+ /**
20
+ * Lengths of the fixed parts of the plugin's response, which its Express app
21
+ * writes with `res.json` under `json spaces` 2, so `JSON.stringify(hits,
22
+ * null, 2)`:
23
+ *
24
+ * ```text
25
+ * [
26
+ * {
27
+ * "filename": "Folder/Note.md",
28
+ * "score": -1.2,
29
+ * "matches": [
30
+ * {
31
+ * "match": {
32
+ * "start": 12,
33
+ * "end": 17,
34
+ * "source": "content"
35
+ * },
36
+ * "context": "…"
37
+ * }
38
+ * ]
39
+ * }
40
+ * ]
41
+ * ```
42
+ *
43
+ * A hit or a span counts its separator, line break, and indentation, and its
44
+ * keys and braces. Its values are counted where they are known.
45
+ */
46
+ const RESPONSE_FRAME = 2;
47
+ const HIT_FRAME = 58;
48
+ /** A `matches` array with no span is `[]`; one with spans adds a line break and indentation before its `]`. */
49
+ const EMPTY_MATCHES = 2;
50
+ const MATCHES_FRAME = 6;
51
+ const SPAN_FRAME = 128;
52
+ /**
53
+ * The query's tokens as `prepareSimpleSearch` reads them: lower-cased, split
54
+ * on single spaces (a tab or newline stays inside its token), empty pieces
55
+ * dropped. Repeats are dropped too: Obsidian scans a repeated token again, but
56
+ * its ranges coincide with the first scan's and merge away.
57
+ */
58
+ export function simpleSearchTokens(query) {
59
+ return [...new Set(query.toLowerCase().split(' ').filter(Boolean))];
60
+ }
61
+ /**
62
+ * Obsidian's note basename (`TFile.basename`): the file name less its last
63
+ * `.extension`, the whole name when its only dot leads or trails it.
64
+ */
65
+ function noteBasename(path) {
66
+ const name = path.slice(path.lastIndexOf('/') + 1);
67
+ const dot = name.lastIndexOf('.');
68
+ return dot <= 0 || dot === name.length - 1 ? name : name.slice(0, dot);
69
+ }
70
+ export const isHighSurrogate = (cu) => cu >= 0xd800 && cu <= 0xdbff;
71
+ export const isLowSurrogate = (cu) => cu >= 0xdc00 && cu <= 0xdfff;
72
+ /**
73
+ * Upstream's `widenToCodePointBoundaries`: grow `[start, end)` by at most one
74
+ * code unit per side so neither edge splits a surrogate pair.
75
+ */
76
+ function widen(text, start, end) {
77
+ let from = start;
78
+ if (from > 0 && from < text.length && isLowSurrogate(text.charCodeAt(from)))
79
+ from -= 1;
80
+ let to = end;
81
+ if (to > 0 && to < text.length && isHighSurrogate(text.charCodeAt(to - 1)))
82
+ to += 1;
83
+ return [from, to];
84
+ }
85
+ /** Characters `JSON.stringify` writes for a whole number: its decimal digits. */
86
+ function digits(n) {
87
+ let count = 1;
88
+ for (let power = 10; power <= n; power *= 10)
89
+ count++;
90
+ return count;
91
+ }
92
+ /**
93
+ * Characters `JSON.stringify` adds escaping `text[i]`: one for `"`, `\`, and
94
+ * the controls with a short escape (`\b \t \n \f \r`), five for any other
95
+ * control or a lone surrogate (`\uXXXX`).
96
+ */
97
+ function escapeOverhead(text, i) {
98
+ const cu = text.charCodeAt(i);
99
+ if (cu === 0x22 || cu === 0x5c)
100
+ return 1;
101
+ if (cu < 0x20)
102
+ return cu >= 0x08 && cu <= 0x0d && cu !== 0x0b ? 1 : 5;
103
+ if (isHighSurrogate(cu))
104
+ return isLowSurrogate(text.charCodeAt(i + 1)) ? 0 : 5;
105
+ if (isLowSurrogate(cu))
106
+ return isHighSurrogate(text.charCodeAt(i - 1)) ? 0 : 5;
107
+ return 0;
108
+ }
109
+ /**
110
+ * Characters `JSON.stringify` adds escaping the window `text.slice(from, to)`,
111
+ * for windows given in note order, where neither edge moves back. Two running
112
+ * sums of `escapeOverhead` over the characters scanned so far, one per edge,
113
+ * give each window as their difference: what windows share is scanned once,
114
+ * and what no window covers is skipped. `escapeOverhead` reads a surrogate's
115
+ * partner in the note; an edge that cuts a pair the note holds whole (`widen`
116
+ * stops one code unit short when surrogates run three or more in a row)
117
+ * leaves that half lone in the window, escaped too.
118
+ */
119
+ function windowEscapes(text) {
120
+ let left = 0;
121
+ let leftSum = 0;
122
+ let right = 0;
123
+ let rightSum = 0;
124
+ return (from, to) => {
125
+ if (from >= to)
126
+ return 0;
127
+ if (from >= right) {
128
+ left = right = from;
129
+ leftSum = rightSum;
130
+ }
131
+ for (; left < from; left++)
132
+ leftSum += escapeOverhead(text, left);
133
+ for (; right < to; right++)
134
+ rightSum += escapeOverhead(text, right);
135
+ let sum = rightSum - leftSum;
136
+ if (isLowSurrogate(text.charCodeAt(from)) && isHighSurrogate(text.charCodeAt(from - 1))) {
137
+ sum += 5;
138
+ }
139
+ if (isHighSurrogate(text.charCodeAt(to - 1)) && isLowSurrogate(text.charCodeAt(to)))
140
+ sum += 5;
141
+ return sum;
142
+ };
143
+ }
144
+ /**
145
+ * The merged ranges `prepareSimpleSearch` reports for `text`, and its score;
146
+ * `undefined` when some token does not occur. With no tokens every text
147
+ * matches, with no ranges and a score of 0.
148
+ */
149
+ function prepareSimpleSearch(tokens, queryLength, text) {
150
+ const lower = text.toLowerCase();
151
+ const found = [];
152
+ for (const token of tokens) {
153
+ const before = found.length;
154
+ for (let at = lower.indexOf(token); at !== -1; at = lower.indexOf(token, at + token.length + 1)) {
155
+ found.push([at, at + token.length]);
156
+ }
157
+ if (found.length === before)
158
+ return;
159
+ }
160
+ // Array sort is stable, and ranges sharing a start merge alike in any order.
161
+ found.sort((a, b) => a[0] - b[0]);
162
+ const ranges = [];
163
+ for (const range of found) {
164
+ const last = ranges.at(-1);
165
+ if (last === undefined || last[1] < range[0])
166
+ ranges.push(range);
167
+ else if (last[1] < range[1])
168
+ last[1] = range[1];
169
+ }
170
+ return { ranges, score: score(ranges, queryLength, text.length) };
171
+ }
172
+ /** Obsidian's simple-search score, with its operations in its order so the result is bit-identical. */
173
+ function score(ranges, queryLength, textLength) {
174
+ const first = ranges[0];
175
+ const last = ranges.at(-1);
176
+ if (first === undefined || last === undefined)
177
+ return 0;
178
+ let s = 0;
179
+ s -= Math.max(0, ranges.length - 1);
180
+ s -= (last[1] - first[0] + 1 - queryLength) / 100;
181
+ s -= first[0] / 1e3;
182
+ s -= textLength / 1e4;
183
+ return s;
184
+ }
185
+ /**
186
+ * One text search over notes added in vault order, holding each hit's context
187
+ * windows. `maxResponseChars` bounds the plugin's response for those hits, its
188
+ * length as `JSON.stringify(hits, null, 2)` (see `HIT_FRAME`): every hit's
189
+ * filename and score, every span's offsets and escaped window, and the framing
190
+ * around each. The count grows span by span as each note is added, so the
191
+ * span that passes the bound fails the search with `context_length_too_large`
192
+ * at once, and no more spans are held than a response the plugin could send.
193
+ */
194
+ export class SimpleSearch {
195
+ #contextLength;
196
+ #hits = [];
197
+ #maxResponseChars;
198
+ #queryLength;
199
+ #responseChars = RESPONSE_FRAME;
200
+ /** The distinct non-empty tokens; a note matches only when it holds every one. */
201
+ tokens;
202
+ constructor(query, contextLength, maxResponseChars = Number.POSITIVE_INFINITY) {
203
+ this.tokens = simpleSearchTokens(query);
204
+ this.#queryLength = query.length;
205
+ this.#contextLength = contextLength;
206
+ this.#maxResponseChars = maxResponseChars;
207
+ }
208
+ /** Match one note, `body` as Obsidian's `cachedRead` gives it. */
209
+ add(path, body) {
210
+ const basename = noteBasename(path);
211
+ const prefix = `${basename}\n\n`;
212
+ const result = prepareSimpleSearch(this.tokens, this.#queryLength, prefix + body);
213
+ if (!result)
214
+ return;
215
+ this.#charge(HIT_FRAME + JSON.stringify(path).length + String(result.score).length + EMPTY_MATCHES);
216
+ const basenameJson = JSON.stringify(basename).length;
217
+ const escapes = windowEscapes(body);
218
+ const matches = [];
219
+ const chargeSpan = (start, end, source, contextJson) => this.#charge((matches.length === 0 ? MATCHES_FRAME - EMPTY_MATCHES : 0) +
220
+ SPAN_FRAME +
221
+ digits(start) +
222
+ digits(end) +
223
+ source.length +
224
+ 2 +
225
+ contextJson);
226
+ for (const [s, e] of result.ranges) {
227
+ if (s < prefix.length && e <= prefix.length) {
228
+ const end = Math.min(e, basename.length);
229
+ chargeSpan(s, end, 'filename', basenameJson);
230
+ matches.push({
231
+ context: basename,
232
+ contextStart: s,
233
+ match: { start: s, end, source: 'filename' },
234
+ });
235
+ }
236
+ else if (s >= prefix.length) {
237
+ const start = s - prefix.length;
238
+ const end = e - prefix.length;
239
+ const [from, widened] = widen(body, Math.max(start - this.#contextLength, 0), end + this.#contextLength);
240
+ const to = Math.min(widened, body.length);
241
+ const context = body.slice(from, to);
242
+ chargeSpan(start, end, 'content', 2 + context.length + escapes(from, to));
243
+ matches.push({
244
+ context,
245
+ contextStart: start - from,
246
+ match: { start, end, source: 'content' },
247
+ });
248
+ }
249
+ }
250
+ this.#hits.push({ filename: path, score: result.score, matches });
251
+ }
252
+ /** Add `chars` to the response, failing the search once it passes `maxResponseChars`. */
253
+ #charge(chars) {
254
+ this.#responseChars += chars;
255
+ if (this.#responseChars <= this.#maxResponseChars)
256
+ return;
257
+ throw validationError(`The matches for this search (contextLength ${this.#contextLength}) would take more than ${this.#maxResponseChars.toLocaleString('en-US')} characters to send across the readable notes, more than one response can carry. Each match costs its context window plus about 150 characters of offsets and framing, so the total tracks the number of matches as well as contextLength.`, { reason: 'context_length_too_large', contextLength: this.#contextLength });
258
+ }
259
+ /** The hits, highest score first; equal scores keep the order their notes were added. */
260
+ hits() {
261
+ return this.#hits.toSorted((a, b) => b.score - a.score);
262
+ }
263
+ }
264
+ //# sourceMappingURL=simple-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple-search.js","sourceRoot":"","sources":["../../../src/services/obsidian/simple-search.ts"],"names":[],"mappings":"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"}
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": "0.3",
3
3
  "name": "obsidian-mcp-server",
4
- "version": "3.7.1",
4
+ "version": "3.8.0",
5
5
  "description": "Read, write, search, and surgically edit Obsidian vault notes, tags, and frontmatter via MCP. STDIO or Streamable HTTP.",
6
6
  "author": {
7
7
  "name": "cyanheads",
@@ -31,6 +31,7 @@
31
31
  "OBSIDIAN_ENABLE_COMMANDS": "${user_config.OBSIDIAN_ENABLE_COMMANDS}",
32
32
  "OBSIDIAN_READ_PATHS": "${user_config.OBSIDIAN_READ_PATHS}",
33
33
  "OBSIDIAN_WRITE_PATHS": "${user_config.OBSIDIAN_WRITE_PATHS}",
34
+ "OBSIDIAN_DENY_PATHS": "${user_config.OBSIDIAN_DENY_PATHS}",
34
35
  "OBSIDIAN_READ_ONLY": "${user_config.OBSIDIAN_READ_ONLY}",
35
36
  "OBSIDIAN_DELETE_ELICITATION": "${user_config.OBSIDIAN_DELETE_ELICITATION}",
36
37
  "OBSIDIAN_OMNISEARCH_URL": "${user_config.OBSIDIAN_OMNISEARCH_URL}",
@@ -89,7 +90,14 @@
89
90
  },
90
91
  "OBSIDIAN_WRITE_PATHS": {
91
92
  "title": "Write Path Allowlist",
92
- "description": "Comma-separated vault-relative folder allowlist for writes. Unset = full vault, or the read scope when reads are restricted. Example: 'projects/,scratch/'.",
93
+ "description": "Comma-separated vault-relative folder allowlist for writes. Unset = full vault, or the read scope when reads are restricted; paths in OBSIDIAN_DENY_PATHS stay denied. Example: 'projects/,scratch/'.",
94
+ "type": "string",
95
+ "required": false,
96
+ "default": ""
97
+ },
98
+ "OBSIDIAN_DENY_PATHS": {
99
+ "title": "Denied Paths",
100
+ "description": "Comma-separated vault-relative paths withheld from reads and writes, overriding both allowlists. Unset = nothing denied. Example: 'private/,journal/therapy/'.",
93
101
  "type": "string",
94
102
  "required": false,
95
103
  "default": ""