obsidian-mcp-server 3.6.1 → 3.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/AGENTS.md +40 -22
  2. package/CLAUDE.md +40 -22
  3. package/Dockerfile +3 -3
  4. package/README.md +29 -17
  5. package/changelog/3.7.x/3.7.0.md +34 -0
  6. package/changelog/3.7.x/3.7.1.md +40 -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 +5 -1
  10. package/dist/config/server-config.js.map +1 -1
  11. package/dist/index.js +35 -35
  12. package/dist/index.js.map +1 -1
  13. package/dist/instructions.d.ts +20 -0
  14. package/dist/instructions.d.ts.map +1 -0
  15. package/dist/instructions.js +40 -0
  16. package/dist/instructions.js.map +1 -0
  17. package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts +7 -5
  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 +12 -8
  20. package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js.map +1 -1
  21. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts +69 -9
  22. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts.map +1 -1
  23. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js +88 -7
  24. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js.map +1 -1
  25. package/dist/mcp-server/tools/definitions/index.d.ts +256 -309
  26. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  27. package/dist/mcp-server/tools/definitions/index.js +9 -3
  28. package/dist/mcp-server/tools/definitions/index.js.map +1 -1
  29. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts +6 -0
  30. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts.map +1 -1
  31. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js +12 -4
  32. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js.map +1 -1
  33. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts +107 -10
  34. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts.map +1 -1
  35. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js +237 -162
  36. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js.map +1 -1
  37. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts +1 -0
  38. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts.map +1 -1
  39. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js +70 -24
  40. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js.map +1 -1
  41. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts +6 -1
  42. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts.map +1 -1
  43. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js +8 -10
  44. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js.map +1 -1
  45. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.d.ts +7 -5
  46. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.d.ts.map +1 -1
  47. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js +13 -7
  48. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js.map +1 -1
  49. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts.map +1 -1
  50. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js +6 -4
  51. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js.map +1 -1
  52. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts.map +1 -1
  53. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js +4 -2
  54. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js.map +1 -1
  55. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts +4 -1
  56. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts.map +1 -1
  57. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js +15 -4
  58. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js.map +1 -1
  59. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js +2 -2
  60. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js.map +1 -1
  61. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts.map +1 -1
  62. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js +4 -2
  63. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js.map +1 -1
  64. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts +26 -2
  65. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts.map +1 -1
  66. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js +47 -15
  67. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js.map +1 -1
  68. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts +5 -0
  69. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts.map +1 -1
  70. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js +21 -4
  71. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js.map +1 -1
  72. package/dist/services/obsidian/frontmatter-ops.d.ts +15 -1
  73. package/dist/services/obsidian/frontmatter-ops.d.ts.map +1 -1
  74. package/dist/services/obsidian/frontmatter-ops.js +55 -10
  75. package/dist/services/obsidian/frontmatter-ops.js.map +1 -1
  76. package/dist/services/obsidian/jsonlogic-evaluator.d.ts +83 -0
  77. package/dist/services/obsidian/jsonlogic-evaluator.d.ts.map +1 -0
  78. package/dist/services/obsidian/jsonlogic-evaluator.js +192 -0
  79. package/dist/services/obsidian/jsonlogic-evaluator.js.map +1 -0
  80. package/dist/services/obsidian/jsonlogic-worker.d.ts +53 -0
  81. package/dist/services/obsidian/jsonlogic-worker.d.ts.map +1 -0
  82. package/dist/services/obsidian/jsonlogic-worker.js +237 -0
  83. package/dist/services/obsidian/jsonlogic-worker.js.map +1 -0
  84. package/dist/services/obsidian/obsidian-service.d.ts +61 -6
  85. package/dist/services/obsidian/obsidian-service.d.ts.map +1 -1
  86. package/dist/services/obsidian/obsidian-service.js +301 -53
  87. package/dist/services/obsidian/obsidian-service.js.map +1 -1
  88. package/dist/services/obsidian/patch-instruction.d.ts +20 -1
  89. package/dist/services/obsidian/patch-instruction.d.ts.map +1 -1
  90. package/dist/services/obsidian/patch-instruction.js +30 -0
  91. package/dist/services/obsidian/patch-instruction.js.map +1 -1
  92. package/dist/services/obsidian/path-policy.d.ts +55 -5
  93. package/dist/services/obsidian/path-policy.d.ts.map +1 -1
  94. package/dist/services/obsidian/path-policy.js +143 -19
  95. package/dist/services/obsidian/path-policy.js.map +1 -1
  96. package/dist/services/obsidian/section-extractor.d.ts +24 -0
  97. package/dist/services/obsidian/section-extractor.d.ts.map +1 -1
  98. package/dist/services/obsidian/section-extractor.js +37 -0
  99. package/dist/services/obsidian/section-extractor.js.map +1 -1
  100. package/dist/services/obsidian/types.d.ts +12 -3
  101. package/dist/services/obsidian/types.d.ts.map +1 -1
  102. package/manifest.json +10 -2
  103. package/package.json +18 -14
  104. package/server.json +19 -5
@@ -4,14 +4,23 @@
4
4
  * 1. **Case-insensitive fallback.** If a path lookup 404s, list the parent
5
5
  * directory and look for a single case-insensitive filename match. If
6
6
  * found, retry against the canonical filesystem path (matches v2.x
7
- * behavior). This silently fixes "Readme.md" vs "README.md" on Linux; on
8
- * Mac/Windows the OS already case-folds and the fallback is a no-op.
7
+ * behavior) and report the path that was asked for as `requestedPath`, so
8
+ * the caller can disclose the substitution. The fallback is reachable on
9
+ * every host: the plugin's `note+json` and document-map reads resolve
10
+ * through Obsidian's case-sensitive vault index even on a case-insensitive
11
+ * filesystem (macOS, Windows). Only the raw-markdown read case-folds there,
12
+ * answering 200 for a wrong-case path before any fallback runs.
9
13
  *
10
14
  * 2. **"Did you mean" suggestions.** When no case match exists but the parent
11
15
  * directory has near-matches (e.g., extension-stripped variants), re-throw
12
16
  * NotFound enriched with the candidates in the message and
13
17
  * `error.data.suggestions[]`.
14
18
  *
19
+ * 3. **Case-variant naming on writes.** A whole-file write never substitutes
20
+ * a path, but on a case-insensitive filesystem a write to a case variant of
21
+ * an existing note is refused (`case_variant_exists`); the same listing
22
+ * names the note it collided with as `existingPath`.
23
+ *
15
24
  * `obsidian_get_note` and `obsidian_open_in_ui` wrap their service calls with
16
25
  * `withCaseFallback`; writes and deletes match the exact path.
17
26
  * @module mcp-server/tools/definitions/_shared/suggest-paths
@@ -26,7 +35,7 @@ const MAX_SUGGESTIONS = 5;
26
35
  * For path targets:
27
36
  * - **Exact match** → returns `{ result, resolvedPath: target.path }`.
28
37
  * - **Single case match** → retries with the canonical path and returns
29
- * `{ result, resolvedPath: <canonical> }`.
38
+ * `{ result, resolvedPath: <canonical>, requestedPath: target.path }`.
30
39
  * - **Multiple case matches** → throws `Conflict` with the candidates so the
31
40
  * agent can disambiguate.
32
41
  * - **No case match, extension-stripped near-matches** → throws `NotFound`
@@ -35,6 +44,7 @@ const MAX_SUGGESTIONS = 5;
35
44
  *
36
45
  * `resolvedPath` is `undefined` for non-path targets — callers derive the
37
46
  * canonical path from the result itself (typically `NoteJson.path`).
47
+ * `requestedPath` is present only on the single-case-match branch.
38
48
  */
39
49
  export async function withCaseFallback(ctx, svc, target, fn) {
40
50
  if (target.type !== 'path') {
@@ -51,7 +61,7 @@ export async function withCaseFallback(ctx, svc, target, fn) {
51
61
  const sole = probe.caseMatches.length === 1 ? probe.caseMatches[0] : undefined;
52
62
  if (sole !== undefined) {
53
63
  const result = await fn({ type: 'path', path: sole });
54
- return { result, resolvedPath: sole };
64
+ return { result, resolvedPath: sole, requestedPath: target.path };
55
65
  }
56
66
  if (probe.caseMatches.length > 1) {
57
67
  const list = probe.caseMatches.map((m) => `"${m}"`).join(', ');
@@ -69,17 +79,85 @@ export async function withCaseFallback(ctx, svc, target, fn) {
69
79
  throw notFound(`${prefix}. Did you mean: ${list}?`, { ...(err.data ?? {}), suggestions }, { cause: err });
70
80
  }
71
81
  }
82
+ /**
83
+ * Disclose a `withCaseFallback` substitution on the caller's enrichment: the
84
+ * `requestedPath` field plus a one-line notice naming both paths. `action` is
85
+ * what the tool did with the canonical file. Returns the notice — `notice` is
86
+ * last-wins, so a caller that sets another one must fold this text into it —
87
+ * or `undefined` when nothing was substituted.
88
+ */
89
+ export function discloseCaseSubstitution(ctx, fallback, action) {
90
+ if (fallback.requestedPath === undefined)
91
+ return;
92
+ const { requestedPath, resolvedPath } = fallback;
93
+ const notice = `\`${requestedPath}\` has no exact match; ${action} \`${resolvedPath}\`, the one file in that folder whose name matches it ignoring case. Write and delete tools match paths exactly — pass them \`${resolvedPath}\`.`;
94
+ ctx.enrich({ requestedPath });
95
+ ctx.enrich.notice(notice);
96
+ return notice;
97
+ }
72
98
  /**
73
99
  * List the parent directory of `path` and return up to {@link MAX_SUGGESTIONS}
74
100
  * close-match candidates. Match order: case-insensitive equality first, then
75
101
  * extension-stripped equality. Returns `[]` on listing failure or empty
76
- * basename. Used by callers that need suggestions without performing the
77
- * underlying operation (e.g., `obsidian_open_in_ui`'s explicit messaging).
102
+ * basename. Used by callers that need suggestions without substituting a
103
+ * match (e.g., `obsidian_delete_note`'s exact-case miss, which names the
104
+ * candidates but never deletes one in place of the requested path).
78
105
  */
79
106
  export async function findSimilarPaths(ctx, svc, path) {
80
107
  const probe = await probeParentDir(ctx, svc, path);
81
108
  return [...probe.caseMatches, ...probe.extInsensitive].slice(0, MAX_SUGGESTIONS);
82
109
  }
110
+ /**
111
+ * Read the parent folder listing for files that differ from `path` only in
112
+ * letter case. A listing that fails, or that the read scope withholds, reads
113
+ * as empty, so no path outside the read scope is ever named; the caller's
114
+ * cancellation propagates as itself.
115
+ */
116
+ export async function findCaseVariants(ctx, svc, path) {
117
+ const { caseMatches } = await probeParentDir(ctx, svc, path);
118
+ const normalized = path.replace(/^\/+|\/+$/g, '');
119
+ return {
120
+ exact: caseMatches.includes(normalized),
121
+ variants: caseMatches.filter((match) => match !== normalized),
122
+ };
123
+ }
124
+ /**
125
+ * Message and error data for a `case_variant_exists` refusal. `existingPath`
126
+ * is set only when exactly one variant is listed — never picked from several,
127
+ * and never inferred when none is: a file Obsidian does not index (a dot-file)
128
+ * refuses a write the same way and never appears in a listing.
129
+ */
130
+ export function caseVariantError(path, variants) {
131
+ const existingPath = variants.length === 1 ? variants[0] : undefined;
132
+ if (existingPath === undefined) {
133
+ return {
134
+ message: `'${path}' collides with a file already on disk: one whose name differs only in letter case, or one Obsidian does not index.`,
135
+ data: { path },
136
+ };
137
+ }
138
+ return {
139
+ message: `Note '${existingPath}' already exists, and this vault's filesystem treats '${path}' as the same file.`,
140
+ data: { path, existingPath },
141
+ };
142
+ }
143
+ /**
144
+ * Run a whole-file write to `path`, and when the service refuses it as
145
+ * `case_variant_exists`, rethrow it naming the existing note from the parent
146
+ * listing. The listing is read only on that failure, so a write that succeeds
147
+ * costs no extra request.
148
+ */
149
+ export async function withCaseVariantNamed(ctx, svc, path, write) {
150
+ try {
151
+ return await write();
152
+ }
153
+ catch (err) {
154
+ if (!(err instanceof McpError) || err.data?.reason !== 'case_variant_exists')
155
+ throw err;
156
+ const { variants } = await findCaseVariants(ctx, svc, path);
157
+ const { message, data } = caseVariantError(path, variants);
158
+ throw conflict(message, { ...data, reason: 'case_variant_exists' }, { cause: err });
159
+ }
160
+ }
83
161
  async function probeParentDir(ctx, svc, path) {
84
162
  const empty = { caseMatches: [], extInsensitive: [] };
85
163
  const normalized = path.replace(/^\/+|\/+$/g, '');
@@ -95,7 +173,10 @@ async function probeParentDir(ctx, svc, path) {
95
173
  const listing = await svc.listFiles(ctx, dir);
96
174
  entries = listing.files;
97
175
  }
98
- catch {
176
+ catch (err) {
177
+ // The caller's cancellation is not a listing that came back empty.
178
+ if (ctx.signal?.aborted)
179
+ throw err;
99
180
  return empty;
100
181
  }
101
182
  const baseLower = base.toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"suggest-paths.js","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/_shared/suggest-paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suggest-paths.js","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/_shared/suggest-paths.ts"],"names":[],"mappings":"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"}