obsidian-mcp-server 3.1.2 → 3.1.4

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 (66) hide show
  1. package/CLAUDE.md +3 -0
  2. package/README.md +3 -8
  3. package/changelog/3.1.x/3.1.3.md +23 -0
  4. package/changelog/3.1.x/3.1.4.md +25 -0
  5. package/dist/index.js +1 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/mcp-server/resources/definitions/index.d.ts +11 -1
  8. package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -1
  9. package/dist/mcp-server/resources/definitions/obsidian-status.resource.js +1 -1
  10. package/dist/mcp-server/resources/definitions/obsidian-status.resource.js.map +1 -1
  11. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.d.ts +12 -1
  12. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.d.ts.map +1 -1
  13. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js +17 -2
  14. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js.map +1 -1
  15. package/dist/mcp-server/tools/definitions/_shared/schemas.d.ts.map +1 -1
  16. package/dist/mcp-server/tools/definitions/_shared/schemas.js +4 -2
  17. package/dist/mcp-server/tools/definitions/_shared/schemas.js.map +1 -1
  18. package/dist/mcp-server/tools/definitions/index.d.ts +168 -52
  19. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts +26 -1
  21. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts.map +1 -1
  22. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js +32 -2
  23. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js.map +1 -1
  24. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts +3 -3
  25. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts.map +1 -1
  26. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js +3 -3
  27. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js.map +1 -1
  28. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js +2 -2
  29. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js.map +1 -1
  30. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts +11 -3
  31. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts.map +1 -1
  32. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js +60 -6
  33. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js.map +1 -1
  34. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts +2 -2
  35. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js +5 -5
  36. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js.map +1 -1
  37. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js +1 -1
  38. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js.map +1 -1
  39. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts +3 -3
  40. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts.map +1 -1
  41. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js +5 -5
  42. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js.map +1 -1
  43. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts +3 -3
  44. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js +4 -4
  45. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js.map +1 -1
  46. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts +1 -1
  47. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js +1 -1
  48. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js.map +1 -1
  49. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts +3 -3
  50. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts.map +1 -1
  51. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js +5 -5
  52. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js.map +1 -1
  53. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts +4 -4
  54. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts.map +1 -1
  55. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js +5 -5
  56. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js.map +1 -1
  57. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts +2 -2
  58. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts.map +1 -1
  59. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js +7 -12
  60. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js.map +1 -1
  61. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts +26 -1
  62. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts.map +1 -1
  63. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js +32 -2
  64. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js.map +1 -1
  65. package/package.json +12 -2
  66. package/server.json +3 -3
@@ -39,6 +39,7 @@ export declare const readToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
39
39
  }>;
40
40
  target: import("zod").ZodString;
41
41
  }, import("zod/v4/core").$strip>>;
42
+ includeLinks: import("zod").ZodDefault<import("zod").ZodBoolean>;
42
43
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
43
44
  result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
44
45
  format: import("zod").ZodLiteral<"content">;
@@ -55,6 +56,13 @@ export declare const readToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
55
56
  mtime: import("zod").ZodNumber;
56
57
  size: import("zod").ZodNumber;
57
58
  }, import("zod/v4/core").$strip>;
59
+ outgoingLinks: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
60
+ target: import("zod").ZodString;
61
+ type: import("zod").ZodEnum<{
62
+ markdown: "markdown";
63
+ wikilink: "wikilink";
64
+ }>;
65
+ }, import("zod/v4/core").$strip>>>;
58
66
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
59
67
  format: import("zod").ZodLiteral<"document-map">;
60
68
  path: import("zod").ZodString;
@@ -84,7 +92,7 @@ export declare const readToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
84
92
  readonly reason: "path_forbidden";
85
93
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
86
94
  readonly when: "The target path is outside OBSIDIAN_READ_PATHS (and OBSIDIAN_WRITE_PATHS, since write paths imply read access).";
87
- readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope; check the server startup banner for the active configuration.";
95
+ readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope.";
88
96
  }, {
89
97
  readonly reason: "note_missing";
90
98
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -94,7 +102,7 @@ export declare const readToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
94
102
  readonly reason: "no_active_file";
95
103
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
96
104
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
97
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
105
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
98
106
  }, {
99
107
  readonly reason: "periodic_not_found";
100
108
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -104,12 +112,12 @@ export declare const readToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
104
112
  readonly reason: "periodic_disabled";
105
113
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
106
114
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
107
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
115
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
108
116
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
109
117
  path: import("zod").ZodOptional<import("zod").ZodString>;
110
118
  extension: import("zod").ZodOptional<import("zod").ZodString>;
111
119
  nameRegex: import("zod").ZodOptional<import("zod").ZodString>;
112
- depth: import("zod").ZodOptional<import("zod").ZodNumber>;
120
+ depth: import("zod").ZodDefault<import("zod").ZodNumber>;
113
121
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
114
122
  path: import("zod").ZodString;
115
123
  entries: import("zod").ZodArray<import("zod").ZodObject<{
@@ -139,7 +147,7 @@ export declare const readToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
139
147
  readonly reason: "regex_invalid";
140
148
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
141
149
  readonly when: "The supplied `nameRegex` is not a valid ECMAScript regex.";
142
- readonly recovery: "Test the pattern (e.g. `^Project.*\\.md$`) in a JS regex tester, or omit nameRegex to disable filtering.";
150
+ readonly recovery: "Use a valid ECMAScript regex (e.g. `^Project.*\\.md$`), or omit nameRegex to disable filtering.";
143
151
  }, {
144
152
  readonly reason: "path_forbidden";
145
153
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
@@ -167,7 +175,7 @@ export declare const readToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
167
175
  readonly reason: "path_forbidden";
168
176
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
169
177
  readonly when: "The target path is outside OBSIDIAN_READ_PATHS (and OBSIDIAN_WRITE_PATHS, since write paths imply read access).";
170
- readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope; check the server startup banner for the active configuration.";
178
+ readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope.";
171
179
  }, {
172
180
  readonly reason: "note_missing";
173
181
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -181,9 +189,9 @@ export declare const readToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
181
189
  }>;
182
190
  query: import("zod").ZodOptional<import("zod").ZodString>;
183
191
  logic: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
184
- contextLength: import("zod").ZodOptional<import("zod").ZodNumber>;
192
+ contextLength: import("zod").ZodDefault<import("zod").ZodNumber>;
185
193
  pathPrefix: import("zod").ZodOptional<import("zod").ZodString>;
186
- maxMatchesPerHit: import("zod").ZodOptional<import("zod").ZodNumber>;
194
+ maxMatchesPerHit: import("zod").ZodDefault<import("zod").ZodNumber>;
187
195
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
188
196
  result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
189
197
  mode: import("zod").ZodLiteral<"text">;
@@ -280,7 +288,32 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
280
288
  readonly reason: "path_forbidden";
281
289
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
282
290
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
283
- readonly recovery: "Use a path inside the configured write scope, or unset OBSIDIAN_READ_ONLY. The error data echoes the active scope; check the server startup banner for the active configuration.";
291
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
292
+ }, {
293
+ readonly reason: "note_missing";
294
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
295
+ readonly when: "Section append targets a path that does not resolve to an existing note (PATCH requires the file to exist).";
296
+ readonly recovery: "Verify the path with obsidian_list_notes, or omit `section` to fall back to whole-file append (which creates the note if missing).";
297
+ }, {
298
+ readonly reason: "no_active_file";
299
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
300
+ readonly when: "Target was `active` but no file is currently open in Obsidian.";
301
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
302
+ }, {
303
+ readonly reason: "periodic_not_found";
304
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
305
+ readonly when: "Target was `periodic` but no matching periodic note exists.";
306
+ readonly recovery: "Create the periodic note first or pass an explicit path target.";
307
+ }, {
308
+ readonly reason: "periodic_disabled";
309
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
310
+ readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
311
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
312
+ }, {
313
+ readonly reason: "section_target_missing";
314
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
315
+ readonly when: "`section` was provided but the named heading/block/frontmatter field does not exist in the note.";
316
+ readonly recovery: "Call obsidian_get_note with format document-map to discover available targets, or pass createTargetIfMissing: true to bring it into existence.";
284
317
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
285
318
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
286
319
  type: import("zod").ZodLiteral<"path">;
@@ -305,7 +338,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
305
338
  readonly reason: "path_forbidden";
306
339
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
307
340
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
308
- readonly recovery: "Use a path inside the configured write scope, or unset OBSIDIAN_READ_ONLY. The error data echoes the active scope; check the server startup banner for the active configuration.";
341
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
309
342
  }, {
310
343
  readonly reason: "cancelled";
311
344
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidRequest;
@@ -320,7 +353,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
320
353
  readonly reason: "no_active_file";
321
354
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
322
355
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
323
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
356
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
324
357
  }, {
325
358
  readonly reason: "periodic_not_found";
326
359
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -330,7 +363,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
330
363
  readonly reason: "periodic_disabled";
331
364
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
332
365
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
333
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
366
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
334
367
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
335
368
  operation: import("zod").ZodEnum<{
336
369
  set: "set";
@@ -377,7 +410,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
377
410
  readonly reason: "path_forbidden";
378
411
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
379
412
  readonly when: "`get` requires the path to be readable; `set`/`delete` require it to be inside OBSIDIAN_WRITE_PATHS, with OBSIDIAN_READ_ONLY=false.";
380
- readonly recovery: "Use a path inside the configured scope, or unset OBSIDIAN_READ_ONLY for writes. The error data echoes the active scope; check the server startup banner for the active configuration.";
413
+ readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
381
414
  }, {
382
415
  readonly reason: "value_required";
383
416
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -392,7 +425,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
392
425
  readonly reason: "no_active_file";
393
426
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
394
427
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
395
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
428
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
396
429
  }, {
397
430
  readonly reason: "periodic_not_found";
398
431
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -402,7 +435,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
402
435
  readonly reason: "periodic_disabled";
403
436
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
404
437
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
405
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
438
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
406
439
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
407
440
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
408
441
  type: import("zod").ZodLiteral<"path">;
@@ -457,7 +490,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
457
490
  readonly reason: "path_forbidden";
458
491
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
459
492
  readonly when: "`list` requires the path to be readable; `add`/`remove` require it to be inside OBSIDIAN_WRITE_PATHS, with OBSIDIAN_READ_ONLY=false.";
460
- readonly recovery: "Use a path inside the configured scope, or unset OBSIDIAN_READ_ONLY for writes. The error data echoes the active scope; check the server startup banner for the active configuration.";
493
+ readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
461
494
  }, {
462
495
  readonly reason: "tags_required";
463
496
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -472,7 +505,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
472
505
  readonly reason: "no_active_file";
473
506
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
474
507
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
475
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
508
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
476
509
  }, {
477
510
  readonly reason: "periodic_not_found";
478
511
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -482,7 +515,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
482
515
  readonly reason: "periodic_disabled";
483
516
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
484
517
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
485
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
518
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
486
519
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
487
520
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
488
521
  type: import("zod").ZodLiteral<"path">;
@@ -542,7 +575,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
542
575
  readonly reason: "path_forbidden";
543
576
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
544
577
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
545
- readonly recovery: "Use a path inside the configured write scope, or unset OBSIDIAN_READ_ONLY. The error data echoes the active scope; check the server startup banner for the active configuration.";
578
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
546
579
  }, {
547
580
  readonly reason: "note_missing";
548
581
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -552,7 +585,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
552
585
  readonly reason: "no_active_file";
553
586
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
554
587
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
555
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
588
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
556
589
  }, {
557
590
  readonly reason: "periodic_not_found";
558
591
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -562,7 +595,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
562
595
  readonly reason: "periodic_disabled";
563
596
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
564
597
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
565
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
598
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
566
599
  }, {
567
600
  readonly reason: "section_target_missing";
568
601
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -605,12 +638,12 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
605
638
  readonly reason: "path_forbidden";
606
639
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
607
640
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes. (The pre-read also requires the path to be readable.)";
608
- readonly recovery: "Use a path inside the configured write scope, or unset OBSIDIAN_READ_ONLY. The error data echoes the active scope; check the server startup banner for the active configuration.";
641
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
609
642
  }, {
610
643
  readonly reason: "regex_invalid";
611
644
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
612
645
  readonly when: "A `useRegex: true` replacement supplied a `search` pattern that is not a valid ECMAScript regex.";
613
- readonly recovery: "Test the pattern in a JS regex tester, or set useRegex to false to match `search` as a literal string.";
646
+ readonly recovery: "Use a valid ECMAScript regex, or set useRegex to false to match `search` as a literal string.";
614
647
  }, {
615
648
  readonly reason: "note_missing";
616
649
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -620,7 +653,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
620
653
  readonly reason: "no_active_file";
621
654
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
622
655
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
623
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
656
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
624
657
  }, {
625
658
  readonly reason: "periodic_not_found";
626
659
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -630,7 +663,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
630
663
  readonly reason: "periodic_disabled";
631
664
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
632
665
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
633
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
666
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
634
667
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
635
668
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
636
669
  type: import("zod").ZodLiteral<"path">;
@@ -675,7 +708,32 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
675
708
  readonly reason: "path_forbidden";
676
709
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
677
710
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
678
- readonly recovery: "Use a path inside the configured write scope, or unset OBSIDIAN_READ_ONLY. The error data echoes the active scope; check the server startup banner for the active configuration.";
711
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
712
+ }, {
713
+ readonly reason: "note_missing";
714
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
715
+ readonly when: "Section replace targets a path that does not resolve to an existing note (PATCH requires the file to exist).";
716
+ readonly recovery: "Verify the path with obsidian_list_notes, or omit `section` to fall back to whole-file write (which creates the note when it is absent).";
717
+ }, {
718
+ readonly reason: "no_active_file";
719
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
720
+ readonly when: "Target was `active` but no file is currently open in Obsidian.";
721
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
722
+ }, {
723
+ readonly reason: "periodic_not_found";
724
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
725
+ readonly when: "Target was `periodic` but no matching periodic note exists.";
726
+ readonly recovery: "Create the periodic note first or pass an explicit path target.";
727
+ }, {
728
+ readonly reason: "periodic_disabled";
729
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
730
+ readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
731
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
732
+ }, {
733
+ readonly reason: "section_target_missing";
734
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
735
+ readonly when: "`section` was provided but the named heading/block/frontmatter field does not exist in the note.";
736
+ readonly recovery: "Call obsidian_get_note with format document-map to discover available targets.";
679
737
  }]>)[];
680
738
  /** Combined base set — preserves the previous registration order. */
681
739
  export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
@@ -716,7 +774,32 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
716
774
  readonly reason: "path_forbidden";
717
775
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
718
776
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
719
- readonly recovery: "Use a path inside the configured write scope, or unset OBSIDIAN_READ_ONLY. The error data echoes the active scope; check the server startup banner for the active configuration.";
777
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
778
+ }, {
779
+ readonly reason: "note_missing";
780
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
781
+ readonly when: "Section append targets a path that does not resolve to an existing note (PATCH requires the file to exist).";
782
+ readonly recovery: "Verify the path with obsidian_list_notes, or omit `section` to fall back to whole-file append (which creates the note if missing).";
783
+ }, {
784
+ readonly reason: "no_active_file";
785
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
786
+ readonly when: "Target was `active` but no file is currently open in Obsidian.";
787
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
788
+ }, {
789
+ readonly reason: "periodic_not_found";
790
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
791
+ readonly when: "Target was `periodic` but no matching periodic note exists.";
792
+ readonly recovery: "Create the periodic note first or pass an explicit path target.";
793
+ }, {
794
+ readonly reason: "periodic_disabled";
795
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
796
+ readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
797
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
798
+ }, {
799
+ readonly reason: "section_target_missing";
800
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
801
+ readonly when: "`section` was provided but the named heading/block/frontmatter field does not exist in the note.";
802
+ readonly recovery: "Call obsidian_get_note with format document-map to discover available targets, or pass createTargetIfMissing: true to bring it into existence.";
720
803
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
721
804
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
722
805
  type: import("zod").ZodLiteral<"path">;
@@ -741,7 +824,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
741
824
  readonly reason: "path_forbidden";
742
825
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
743
826
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
744
- readonly recovery: "Use a path inside the configured write scope, or unset OBSIDIAN_READ_ONLY. The error data echoes the active scope; check the server startup banner for the active configuration.";
827
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
745
828
  }, {
746
829
  readonly reason: "cancelled";
747
830
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidRequest;
@@ -756,7 +839,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
756
839
  readonly reason: "no_active_file";
757
840
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
758
841
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
759
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
842
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
760
843
  }, {
761
844
  readonly reason: "periodic_not_found";
762
845
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -766,7 +849,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
766
849
  readonly reason: "periodic_disabled";
767
850
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
768
851
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
769
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
852
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
770
853
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
771
854
  format: import("zod").ZodEnum<{
772
855
  content: "content";
@@ -798,6 +881,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
798
881
  }>;
799
882
  target: import("zod").ZodString;
800
883
  }, import("zod/v4/core").$strip>>;
884
+ includeLinks: import("zod").ZodDefault<import("zod").ZodBoolean>;
801
885
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
802
886
  result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
803
887
  format: import("zod").ZodLiteral<"content">;
@@ -814,6 +898,13 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
814
898
  mtime: import("zod").ZodNumber;
815
899
  size: import("zod").ZodNumber;
816
900
  }, import("zod/v4/core").$strip>;
901
+ outgoingLinks: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
902
+ target: import("zod").ZodString;
903
+ type: import("zod").ZodEnum<{
904
+ markdown: "markdown";
905
+ wikilink: "wikilink";
906
+ }>;
907
+ }, import("zod/v4/core").$strip>>>;
817
908
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
818
909
  format: import("zod").ZodLiteral<"document-map">;
819
910
  path: import("zod").ZodString;
@@ -843,7 +934,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
843
934
  readonly reason: "path_forbidden";
844
935
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
845
936
  readonly when: "The target path is outside OBSIDIAN_READ_PATHS (and OBSIDIAN_WRITE_PATHS, since write paths imply read access).";
846
- readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope; check the server startup banner for the active configuration.";
937
+ readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope.";
847
938
  }, {
848
939
  readonly reason: "note_missing";
849
940
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -853,7 +944,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
853
944
  readonly reason: "no_active_file";
854
945
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
855
946
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
856
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
947
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
857
948
  }, {
858
949
  readonly reason: "periodic_not_found";
859
950
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -863,12 +954,12 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
863
954
  readonly reason: "periodic_disabled";
864
955
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
865
956
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
866
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
957
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
867
958
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
868
959
  path: import("zod").ZodOptional<import("zod").ZodString>;
869
960
  extension: import("zod").ZodOptional<import("zod").ZodString>;
870
961
  nameRegex: import("zod").ZodOptional<import("zod").ZodString>;
871
- depth: import("zod").ZodOptional<import("zod").ZodNumber>;
962
+ depth: import("zod").ZodDefault<import("zod").ZodNumber>;
872
963
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
873
964
  path: import("zod").ZodString;
874
965
  entries: import("zod").ZodArray<import("zod").ZodObject<{
@@ -898,7 +989,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
898
989
  readonly reason: "regex_invalid";
899
990
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
900
991
  readonly when: "The supplied `nameRegex` is not a valid ECMAScript regex.";
901
- readonly recovery: "Test the pattern (e.g. `^Project.*\\.md$`) in a JS regex tester, or omit nameRegex to disable filtering.";
992
+ readonly recovery: "Use a valid ECMAScript regex (e.g. `^Project.*\\.md$`), or omit nameRegex to disable filtering.";
902
993
  }, {
903
994
  readonly reason: "path_forbidden";
904
995
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
@@ -960,7 +1051,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
960
1051
  readonly reason: "path_forbidden";
961
1052
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
962
1053
  readonly when: "`get` requires the path to be readable; `set`/`delete` require it to be inside OBSIDIAN_WRITE_PATHS, with OBSIDIAN_READ_ONLY=false.";
963
- readonly recovery: "Use a path inside the configured scope, or unset OBSIDIAN_READ_ONLY for writes. The error data echoes the active scope; check the server startup banner for the active configuration.";
1054
+ readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
964
1055
  }, {
965
1056
  readonly reason: "value_required";
966
1057
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -975,7 +1066,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
975
1066
  readonly reason: "no_active_file";
976
1067
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
977
1068
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
978
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
1069
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
979
1070
  }, {
980
1071
  readonly reason: "periodic_not_found";
981
1072
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -985,7 +1076,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
985
1076
  readonly reason: "periodic_disabled";
986
1077
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
987
1078
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
988
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
1079
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
989
1080
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
990
1081
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
991
1082
  type: import("zod").ZodLiteral<"path">;
@@ -1040,7 +1131,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1040
1131
  readonly reason: "path_forbidden";
1041
1132
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1042
1133
  readonly when: "`list` requires the path to be readable; `add`/`remove` require it to be inside OBSIDIAN_WRITE_PATHS, with OBSIDIAN_READ_ONLY=false.";
1043
- readonly recovery: "Use a path inside the configured scope, or unset OBSIDIAN_READ_ONLY for writes. The error data echoes the active scope; check the server startup banner for the active configuration.";
1134
+ readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
1044
1135
  }, {
1045
1136
  readonly reason: "tags_required";
1046
1137
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -1055,7 +1146,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1055
1146
  readonly reason: "no_active_file";
1056
1147
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1057
1148
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
1058
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
1149
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
1059
1150
  }, {
1060
1151
  readonly reason: "periodic_not_found";
1061
1152
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1065,7 +1156,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1065
1156
  readonly reason: "periodic_disabled";
1066
1157
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1067
1158
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
1068
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
1159
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
1069
1160
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1070
1161
  path: import("zod").ZodString;
1071
1162
  failIfMissing: import("zod").ZodDefault<import("zod").ZodBoolean>;
@@ -1078,7 +1169,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1078
1169
  readonly reason: "path_forbidden";
1079
1170
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1080
1171
  readonly when: "The target path is outside OBSIDIAN_READ_PATHS (and OBSIDIAN_WRITE_PATHS, since write paths imply read access).";
1081
- readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope; check the server startup banner for the active configuration.";
1172
+ readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope.";
1082
1173
  }, {
1083
1174
  readonly reason: "note_missing";
1084
1175
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1143,7 +1234,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1143
1234
  readonly reason: "path_forbidden";
1144
1235
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1145
1236
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
1146
- readonly recovery: "Use a path inside the configured write scope, or unset OBSIDIAN_READ_ONLY. The error data echoes the active scope; check the server startup banner for the active configuration.";
1237
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
1147
1238
  }, {
1148
1239
  readonly reason: "note_missing";
1149
1240
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1153,7 +1244,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1153
1244
  readonly reason: "no_active_file";
1154
1245
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1155
1246
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
1156
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
1247
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
1157
1248
  }, {
1158
1249
  readonly reason: "periodic_not_found";
1159
1250
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1163,7 +1254,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1163
1254
  readonly reason: "periodic_disabled";
1164
1255
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1165
1256
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
1166
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
1257
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
1167
1258
  }, {
1168
1259
  readonly reason: "section_target_missing";
1169
1260
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -1206,12 +1297,12 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1206
1297
  readonly reason: "path_forbidden";
1207
1298
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1208
1299
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes. (The pre-read also requires the path to be readable.)";
1209
- readonly recovery: "Use a path inside the configured write scope, or unset OBSIDIAN_READ_ONLY. The error data echoes the active scope; check the server startup banner for the active configuration.";
1300
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
1210
1301
  }, {
1211
1302
  readonly reason: "regex_invalid";
1212
1303
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1213
1304
  readonly when: "A `useRegex: true` replacement supplied a `search` pattern that is not a valid ECMAScript regex.";
1214
- readonly recovery: "Test the pattern in a JS regex tester, or set useRegex to false to match `search` as a literal string.";
1305
+ readonly recovery: "Use a valid ECMAScript regex, or set useRegex to false to match `search` as a literal string.";
1215
1306
  }, {
1216
1307
  readonly reason: "note_missing";
1217
1308
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1221,7 +1312,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1221
1312
  readonly reason: "no_active_file";
1222
1313
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1223
1314
  readonly when: "Target was `active` but no file is currently open in Obsidian.";
1224
- readonly recovery: "Open a note in Obsidian or pass an explicit path target instead.";
1315
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
1225
1316
  }, {
1226
1317
  readonly reason: "periodic_not_found";
1227
1318
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1231,7 +1322,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1231
1322
  readonly reason: "periodic_disabled";
1232
1323
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1233
1324
  readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
1234
- readonly recovery: "Enable the period in Obsidian's Periodic Notes plugin settings, or pass an explicit path target instead.";
1325
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
1235
1326
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1236
1327
  mode: import("zod").ZodEnum<{
1237
1328
  text: "text";
@@ -1240,9 +1331,9 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1240
1331
  }>;
1241
1332
  query: import("zod").ZodOptional<import("zod").ZodString>;
1242
1333
  logic: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
1243
- contextLength: import("zod").ZodOptional<import("zod").ZodNumber>;
1334
+ contextLength: import("zod").ZodDefault<import("zod").ZodNumber>;
1244
1335
  pathPrefix: import("zod").ZodOptional<import("zod").ZodString>;
1245
- maxMatchesPerHit: import("zod").ZodOptional<import("zod").ZodNumber>;
1336
+ maxMatchesPerHit: import("zod").ZodDefault<import("zod").ZodNumber>;
1246
1337
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1247
1338
  result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
1248
1339
  mode: import("zod").ZodLiteral<"text">;
@@ -1343,7 +1434,32 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1343
1434
  readonly reason: "path_forbidden";
1344
1435
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1345
1436
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
1346
- readonly recovery: "Use a path inside the configured write scope, or unset OBSIDIAN_READ_ONLY. The error data echoes the active scope; check the server startup banner for the active configuration.";
1437
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
1438
+ }, {
1439
+ readonly reason: "note_missing";
1440
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1441
+ readonly when: "Section replace targets a path that does not resolve to an existing note (PATCH requires the file to exist).";
1442
+ readonly recovery: "Verify the path with obsidian_list_notes, or omit `section` to fall back to whole-file write (which creates the note when it is absent).";
1443
+ }, {
1444
+ readonly reason: "no_active_file";
1445
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1446
+ readonly when: "Target was `active` but no file is currently open in Obsidian.";
1447
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
1448
+ }, {
1449
+ readonly reason: "periodic_not_found";
1450
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1451
+ readonly when: "Target was `periodic` but no matching periodic note exists.";
1452
+ readonly recovery: "Create the periodic note first or pass an explicit path target.";
1453
+ }, {
1454
+ readonly reason: "periodic_disabled";
1455
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1456
+ readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
1457
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
1458
+ }, {
1459
+ readonly reason: "section_target_missing";
1460
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1461
+ readonly when: "`section` was provided but the named heading/block/frontmatter field does not exist in the note.";
1462
+ readonly recovery: "Call obsidian_get_note with format document-map to discover available targets.";
1347
1463
  }]>)[];
1348
1464
  /** Command-palette tools — opt-in via `OBSIDIAN_ENABLE_COMMANDS=true`; suppressed by `OBSIDIAN_READ_ONLY=true`. */
1349
1465
  export declare const commandToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH,gFAAgF;AAChF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAM/B,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQhC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAoD,CAAC;AAErF,mHAAmH;AACnH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;+CAAiD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH,gFAAgF;AAChF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAM/B,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQhC,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAoD,CAAC;AAErF,mHAAmH;AACnH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;+CAAiD,CAAC"}