obsidian-mcp-server 2.0.7 → 3.0.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 (253) hide show
  1. package/CLAUDE.md +364 -0
  2. package/Dockerfile +99 -0
  3. package/LICENSE +4 -6
  4. package/README.md +246 -206
  5. package/changelog/3.0.x/3.0.0.md +102 -0
  6. package/changelog/template.md +51 -0
  7. package/dist/config/server-config.d.ts +19 -0
  8. package/dist/config/server-config.d.ts.map +1 -0
  9. package/dist/config/server-config.js +55 -0
  10. package/dist/config/server-config.js.map +1 -0
  11. package/dist/index.d.ts +7 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +23 -295
  14. package/dist/index.js.map +1 -0
  15. package/dist/mcp-server/prompts/definitions/index.d.ts +8 -0
  16. package/dist/mcp-server/prompts/definitions/index.d.ts.map +1 -0
  17. package/dist/mcp-server/prompts/definitions/index.js +8 -0
  18. package/dist/mcp-server/prompts/definitions/index.js.map +1 -0
  19. package/dist/mcp-server/resources/definitions/index.d.ts +36 -0
  20. package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
  21. package/dist/mcp-server/resources/definitions/index.js +9 -0
  22. package/dist/mcp-server/resources/definitions/index.js.map +1 -0
  23. package/dist/mcp-server/resources/definitions/obsidian-status.resource.d.ts +23 -0
  24. package/dist/mcp-server/resources/definitions/obsidian-status.resource.d.ts.map +1 -0
  25. package/dist/mcp-server/resources/definitions/obsidian-status.resource.js +47 -0
  26. package/dist/mcp-server/resources/definitions/obsidian-status.resource.js.map +1 -0
  27. package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts +13 -0
  28. package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts.map +1 -0
  29. package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js +30 -0
  30. package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js.map +1 -0
  31. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.d.ts +21 -0
  32. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.d.ts.map +1 -0
  33. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js +38 -0
  34. package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js.map +1 -0
  35. package/dist/mcp-server/tools/definitions/_shared/schemas.d.ts +45 -0
  36. package/dist/mcp-server/tools/definitions/_shared/schemas.d.ts.map +1 -0
  37. package/dist/mcp-server/tools/definitions/_shared/schemas.js +66 -0
  38. package/dist/mcp-server/tools/definitions/_shared/schemas.js.map +1 -0
  39. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts +51 -0
  40. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts.map +1 -0
  41. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js +120 -0
  42. package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js.map +1 -0
  43. package/dist/mcp-server/tools/definitions/index.d.ts +531 -0
  44. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
  45. package/dist/mcp-server/tools/definitions/index.js +38 -0
  46. package/dist/mcp-server/tools/definitions/index.js.map +1 -0
  47. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts +42 -0
  48. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts.map +1 -0
  49. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js +58 -0
  50. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js.map +1 -0
  51. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts +46 -0
  52. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts.map +1 -0
  53. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js +66 -0
  54. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js.map +1 -0
  55. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.d.ts +19 -0
  56. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.d.ts.map +1 -0
  57. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js +43 -0
  58. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js.map +1 -0
  59. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts +92 -0
  60. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts.map +1 -0
  61. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js +245 -0
  62. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js.map +1 -0
  63. package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.d.ts +13 -0
  64. package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.d.ts.map +1 -0
  65. package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.js +38 -0
  66. package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.js.map +1 -0
  67. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts +59 -0
  68. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts.map +1 -0
  69. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js +273 -0
  70. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js.map +1 -0
  71. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.d.ts +13 -0
  72. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.d.ts.map +1 -0
  73. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js +38 -0
  74. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js.map +1 -0
  75. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts +68 -0
  76. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts.map +1 -0
  77. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js +178 -0
  78. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js.map +1 -0
  79. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts +77 -0
  80. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts.map +1 -0
  81. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js +172 -0
  82. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js.map +1 -0
  83. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts +22 -0
  84. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts.map +1 -0
  85. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js +88 -0
  86. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js.map +1 -0
  87. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts +81 -0
  88. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts.map +1 -0
  89. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js +83 -0
  90. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js.map +1 -0
  91. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts +59 -0
  92. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts.map +1 -0
  93. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js +167 -0
  94. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js.map +1 -0
  95. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts +76 -0
  96. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts.map +1 -0
  97. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js +244 -0
  98. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js.map +1 -0
  99. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts +41 -0
  100. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts.map +1 -0
  101. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js +76 -0
  102. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js.map +1 -0
  103. package/dist/services/obsidian/frontmatter-ops.d.ts +34 -0
  104. package/dist/services/obsidian/frontmatter-ops.d.ts.map +1 -0
  105. package/dist/services/obsidian/frontmatter-ops.js +230 -0
  106. package/dist/services/obsidian/frontmatter-ops.js.map +1 -0
  107. package/dist/services/obsidian/obsidian-service.d.ts +73 -0
  108. package/dist/services/obsidian/obsidian-service.d.ts.map +1 -0
  109. package/dist/services/obsidian/obsidian-service.js +399 -0
  110. package/dist/services/obsidian/obsidian-service.js.map +1 -0
  111. package/dist/services/obsidian/section-extractor.d.ts +13 -0
  112. package/dist/services/obsidian/section-extractor.d.ts.map +1 -0
  113. package/dist/services/obsidian/section-extractor.js +124 -0
  114. package/dist/services/obsidian/section-extractor.js.map +1 -0
  115. package/dist/services/obsidian/types.d.ts +91 -0
  116. package/dist/services/obsidian/types.d.ts.map +1 -0
  117. package/dist/services/obsidian/types.js +7 -0
  118. package/dist/services/obsidian/types.js.map +1 -0
  119. package/package.json +63 -69
  120. package/server.json +167 -0
  121. package/CHANGELOG.md +0 -124
  122. package/dist/config/index.d.ts +0 -41
  123. package/dist/config/index.js +0 -191
  124. package/dist/mcp-server/server.d.ts +0 -33
  125. package/dist/mcp-server/server.js +0 -211
  126. package/dist/mcp-server/tools/obsidianDeleteNoteTool/index.d.ts +0 -12
  127. package/dist/mcp-server/tools/obsidianDeleteNoteTool/index.js +0 -12
  128. package/dist/mcp-server/tools/obsidianDeleteNoteTool/logic.d.ts +0 -51
  129. package/dist/mcp-server/tools/obsidianDeleteNoteTool/logic.js +0 -168
  130. package/dist/mcp-server/tools/obsidianDeleteNoteTool/registration.d.ts +0 -19
  131. package/dist/mcp-server/tools/obsidianDeleteNoteTool/registration.js +0 -91
  132. package/dist/mcp-server/tools/obsidianGlobalSearchTool/index.d.ts +0 -12
  133. package/dist/mcp-server/tools/obsidianGlobalSearchTool/index.js +0 -12
  134. package/dist/mcp-server/tools/obsidianGlobalSearchTool/logic.d.ts +0 -77
  135. package/dist/mcp-server/tools/obsidianGlobalSearchTool/logic.js +0 -341
  136. package/dist/mcp-server/tools/obsidianGlobalSearchTool/registration.d.ts +0 -18
  137. package/dist/mcp-server/tools/obsidianGlobalSearchTool/registration.js +0 -69
  138. package/dist/mcp-server/tools/obsidianListNotesTool/index.d.ts +0 -12
  139. package/dist/mcp-server/tools/obsidianListNotesTool/index.js +0 -12
  140. package/dist/mcp-server/tools/obsidianListNotesTool/logic.d.ts +0 -68
  141. package/dist/mcp-server/tools/obsidianListNotesTool/logic.js +0 -215
  142. package/dist/mcp-server/tools/obsidianListNotesTool/registration.d.ts +0 -23
  143. package/dist/mcp-server/tools/obsidianListNotesTool/registration.js +0 -98
  144. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/index.d.ts +0 -3
  145. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/index.js +0 -2
  146. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/logic.d.ts +0 -42
  147. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/logic.js +0 -152
  148. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/registration.d.ts +0 -3
  149. package/dist/mcp-server/tools/obsidianManageFrontmatterTool/registration.js +0 -52
  150. package/dist/mcp-server/tools/obsidianManageTagsTool/index.d.ts +0 -3
  151. package/dist/mcp-server/tools/obsidianManageTagsTool/index.js +0 -2
  152. package/dist/mcp-server/tools/obsidianManageTagsTool/logic.d.ts +0 -28
  153. package/dist/mcp-server/tools/obsidianManageTagsTool/logic.js +0 -161
  154. package/dist/mcp-server/tools/obsidianManageTagsTool/registration.d.ts +0 -3
  155. package/dist/mcp-server/tools/obsidianManageTagsTool/registration.js +0 -52
  156. package/dist/mcp-server/tools/obsidianReadNoteTool/index.d.ts +0 -12
  157. package/dist/mcp-server/tools/obsidianReadNoteTool/index.js +0 -12
  158. package/dist/mcp-server/tools/obsidianReadNoteTool/logic.d.ts +0 -87
  159. package/dist/mcp-server/tools/obsidianReadNoteTool/logic.js +0 -216
  160. package/dist/mcp-server/tools/obsidianReadNoteTool/registration.d.ts +0 -20
  161. package/dist/mcp-server/tools/obsidianReadNoteTool/registration.js +0 -101
  162. package/dist/mcp-server/tools/obsidianSearchReplaceTool/index.d.ts +0 -12
  163. package/dist/mcp-server/tools/obsidianSearchReplaceTool/index.js +0 -12
  164. package/dist/mcp-server/tools/obsidianSearchReplaceTool/logic.d.ts +0 -255
  165. package/dist/mcp-server/tools/obsidianSearchReplaceTool/logic.js +0 -583
  166. package/dist/mcp-server/tools/obsidianSearchReplaceTool/registration.d.ts +0 -22
  167. package/dist/mcp-server/tools/obsidianSearchReplaceTool/registration.js +0 -111
  168. package/dist/mcp-server/tools/obsidianUpdateNoteTool/index.d.ts +0 -12
  169. package/dist/mcp-server/tools/obsidianUpdateNoteTool/index.js +0 -12
  170. package/dist/mcp-server/tools/obsidianUpdateNoteTool/logic.d.ts +0 -183
  171. package/dist/mcp-server/tools/obsidianUpdateNoteTool/logic.js +0 -490
  172. package/dist/mcp-server/tools/obsidianUpdateNoteTool/registration.d.ts +0 -21
  173. package/dist/mcp-server/tools/obsidianUpdateNoteTool/registration.js +0 -108
  174. package/dist/mcp-server/transports/auth/core/authContext.d.ts +0 -33
  175. package/dist/mcp-server/transports/auth/core/authContext.js +0 -24
  176. package/dist/mcp-server/transports/auth/core/authTypes.d.ts +0 -17
  177. package/dist/mcp-server/transports/auth/core/authTypes.js +0 -5
  178. package/dist/mcp-server/transports/auth/core/authUtils.d.ts +0 -18
  179. package/dist/mcp-server/transports/auth/core/authUtils.js +0 -45
  180. package/dist/mcp-server/transports/auth/index.d.ts +0 -10
  181. package/dist/mcp-server/transports/auth/index.js +0 -9
  182. package/dist/mcp-server/transports/auth/strategies/jwt/jwtMiddleware.d.ts +0 -27
  183. package/dist/mcp-server/transports/auth/strategies/jwt/jwtMiddleware.js +0 -149
  184. package/dist/mcp-server/transports/auth/strategies/oauth/oauthMiddleware.d.ts +0 -20
  185. package/dist/mcp-server/transports/auth/strategies/oauth/oauthMiddleware.js +0 -124
  186. package/dist/mcp-server/transports/httpErrorHandler.d.ts +0 -26
  187. package/dist/mcp-server/transports/httpErrorHandler.js +0 -73
  188. package/dist/mcp-server/transports/httpTransport.d.ts +0 -21
  189. package/dist/mcp-server/transports/httpTransport.js +0 -208
  190. package/dist/mcp-server/transports/stdioTransport.d.ts +0 -42
  191. package/dist/mcp-server/transports/stdioTransport.js +0 -63
  192. package/dist/services/obsidianRestAPI/index.d.ts +0 -15
  193. package/dist/services/obsidianRestAPI/index.js +0 -17
  194. package/dist/services/obsidianRestAPI/methods/activeFileMethods.d.ts +0 -38
  195. package/dist/services/obsidianRestAPI/methods/activeFileMethods.js +0 -62
  196. package/dist/services/obsidianRestAPI/methods/commandMethods.d.ts +0 -22
  197. package/dist/services/obsidianRestAPI/methods/commandMethods.js +0 -31
  198. package/dist/services/obsidianRestAPI/methods/openMethods.d.ts +0 -16
  199. package/dist/services/obsidianRestAPI/methods/openMethods.js +0 -21
  200. package/dist/services/obsidianRestAPI/methods/patchMethods.d.ts +0 -37
  201. package/dist/services/obsidianRestAPI/methods/patchMethods.js +0 -94
  202. package/dist/services/obsidianRestAPI/methods/periodicNoteMethods.d.ts +0 -42
  203. package/dist/services/obsidianRestAPI/methods/periodicNoteMethods.js +0 -66
  204. package/dist/services/obsidianRestAPI/methods/searchMethods.d.ts +0 -25
  205. package/dist/services/obsidianRestAPI/methods/searchMethods.js +0 -36
  206. package/dist/services/obsidianRestAPI/methods/vaultMethods.d.ts +0 -58
  207. package/dist/services/obsidianRestAPI/methods/vaultMethods.js +0 -144
  208. package/dist/services/obsidianRestAPI/service.d.ts +0 -195
  209. package/dist/services/obsidianRestAPI/service.js +0 -379
  210. package/dist/services/obsidianRestAPI/types.d.ts +0 -127
  211. package/dist/services/obsidianRestAPI/types.js +0 -7
  212. package/dist/services/obsidianRestAPI/vaultCache/index.d.ts +0 -4
  213. package/dist/services/obsidianRestAPI/vaultCache/index.js +0 -4
  214. package/dist/services/obsidianRestAPI/vaultCache/service.d.ts +0 -88
  215. package/dist/services/obsidianRestAPI/vaultCache/service.js +0 -299
  216. package/dist/types-global/errors.d.ts +0 -73
  217. package/dist/types-global/errors.js +0 -71
  218. package/dist/utils/index.d.ts +0 -5
  219. package/dist/utils/index.js +0 -13
  220. package/dist/utils/internal/asyncUtils.d.ts +0 -54
  221. package/dist/utils/internal/asyncUtils.js +0 -101
  222. package/dist/utils/internal/errorHandler.d.ts +0 -176
  223. package/dist/utils/internal/errorHandler.js +0 -351
  224. package/dist/utils/internal/index.d.ts +0 -4
  225. package/dist/utils/internal/index.js +0 -4
  226. package/dist/utils/internal/logger.d.ts +0 -141
  227. package/dist/utils/internal/logger.js +0 -406
  228. package/dist/utils/internal/requestContext.d.ts +0 -83
  229. package/dist/utils/internal/requestContext.js +0 -72
  230. package/dist/utils/metrics/index.d.ts +0 -1
  231. package/dist/utils/metrics/index.js +0 -1
  232. package/dist/utils/metrics/tokenCounter.d.ts +0 -27
  233. package/dist/utils/metrics/tokenCounter.js +0 -128
  234. package/dist/utils/obsidian/index.d.ts +0 -5
  235. package/dist/utils/obsidian/index.js +0 -5
  236. package/dist/utils/obsidian/obsidianApiUtils.d.ts +0 -14
  237. package/dist/utils/obsidian/obsidianApiUtils.js +0 -29
  238. package/dist/utils/obsidian/obsidianStatUtils.d.ts +0 -68
  239. package/dist/utils/obsidian/obsidianStatUtils.js +0 -143
  240. package/dist/utils/parsing/dateParser.d.ts +0 -56
  241. package/dist/utils/parsing/dateParser.js +0 -104
  242. package/dist/utils/parsing/index.d.ts +0 -2
  243. package/dist/utils/parsing/index.js +0 -3
  244. package/dist/utils/parsing/jsonParser.d.ts +0 -80
  245. package/dist/utils/parsing/jsonParser.js +0 -133
  246. package/dist/utils/security/idGenerator.d.ts +0 -140
  247. package/dist/utils/security/idGenerator.js +0 -194
  248. package/dist/utils/security/index.d.ts +0 -3
  249. package/dist/utils/security/index.js +0 -3
  250. package/dist/utils/security/rateLimiter.d.ts +0 -156
  251. package/dist/utils/security/rateLimiter.js +0 -235
  252. package/dist/utils/security/sanitization.d.ts +0 -244
  253. package/dist/utils/security/sanitization.js +0 -599
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @fileoverview obsidian_patch_note — surgical edit (`append` / `prepend` /
3
+ * `replace`) of a heading, block reference, or frontmatter field. Uses the
4
+ * upstream Local REST API v3 PATCH protocol.
5
+ * @module mcp-server/tools/definitions/obsidian-patch-note.tool
6
+ */
7
+ import { z } from '@cyanheads/mcp-ts-core';
8
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
9
+ export declare const obsidianPatchNote: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
10
+ target: z.ZodDiscriminatedUnion<[z.ZodObject<{
11
+ type: z.ZodLiteral<"path">;
12
+ path: z.ZodString;
13
+ }, z.core.$strip>, z.ZodObject<{
14
+ type: z.ZodLiteral<"active">;
15
+ }, z.core.$strip>, z.ZodObject<{
16
+ type: z.ZodLiteral<"periodic">;
17
+ period: z.ZodEnum<{
18
+ daily: "daily";
19
+ weekly: "weekly";
20
+ monthly: "monthly";
21
+ quarterly: "quarterly";
22
+ yearly: "yearly";
23
+ }>;
24
+ date: z.ZodOptional<z.ZodString>;
25
+ }, z.core.$strip>], "type">;
26
+ section: z.ZodObject<{
27
+ type: z.ZodEnum<{
28
+ heading: "heading";
29
+ block: "block";
30
+ frontmatter: "frontmatter";
31
+ }>;
32
+ target: z.ZodString;
33
+ }, z.core.$strip>;
34
+ operation: z.ZodEnum<{
35
+ append: "append";
36
+ prepend: "prepend";
37
+ replace: "replace";
38
+ }>;
39
+ content: z.ZodString;
40
+ contentType: z.ZodDefault<z.ZodEnum<{
41
+ markdown: "markdown";
42
+ json: "json";
43
+ }>>;
44
+ patchOptions: z.ZodOptional<z.ZodObject<{
45
+ createTargetIfMissing: z.ZodDefault<z.ZodBoolean>;
46
+ applyIfContentPreexists: z.ZodDefault<z.ZodBoolean>;
47
+ trimTargetWhitespace: z.ZodDefault<z.ZodBoolean>;
48
+ }, z.core.$strip>>;
49
+ }, z.core.$strip>, z.ZodObject<{
50
+ path: z.ZodString;
51
+ section: z.ZodObject<{
52
+ type: z.ZodEnum<{
53
+ heading: "heading";
54
+ block: "block";
55
+ frontmatter: "frontmatter";
56
+ }>;
57
+ target: z.ZodString;
58
+ }, z.core.$strip>;
59
+ operation: z.ZodEnum<{
60
+ append: "append";
61
+ prepend: "prepend";
62
+ replace: "replace";
63
+ }>;
64
+ }, z.core.$strip>, readonly [{
65
+ readonly reason: "note_missing";
66
+ readonly code: JsonRpcErrorCode.NotFound;
67
+ readonly when: "The vault path does not resolve to an existing note.";
68
+ }, {
69
+ readonly reason: "no_active_file";
70
+ readonly code: JsonRpcErrorCode.NotFound;
71
+ readonly when: "Target was `active` but no file is currently open in Obsidian.";
72
+ }, {
73
+ readonly reason: "periodic_not_found";
74
+ readonly code: JsonRpcErrorCode.NotFound;
75
+ readonly when: "Target was `periodic` but no matching periodic note exists.";
76
+ }, {
77
+ readonly reason: "section_target_missing";
78
+ readonly code: JsonRpcErrorCode.ValidationError;
79
+ readonly when: "The named heading/block/frontmatter field does not exist in the note. Use `obsidian_get_note` with `format: \"document-map\"` to discover available targets.";
80
+ }]>;
81
+ //# sourceMappingURL=obsidian-patch-note.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian-patch-note.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/obsidian-patch-note.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AASjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8E5B,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @fileoverview obsidian_patch_note — surgical edit (`append` / `prepend` /
3
+ * `replace`) of a heading, block reference, or frontmatter field. Uses the
4
+ * upstream Local REST API v3 PATCH protocol.
5
+ * @module mcp-server/tools/definitions/obsidian-patch-note.tool
6
+ */
7
+ import { tool, z } from '@cyanheads/mcp-ts-core';
8
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
9
+ import { getObsidianService } from '../../../services/obsidian/obsidian-service.js';
10
+ import { ContentTypeSchema, PatchOptionsSchema, SectionSchema, TargetSchema, } from './_shared/schemas.js';
11
+ export const obsidianPatchNote = tool('obsidian_patch_note', {
12
+ description: 'Surgical edit of a heading, block reference, or frontmatter field. Choose `operation: "append"` to add after the section, `"prepend"` to add before, or `"replace"` to swap it out. Use `obsidian_get_note` with `format: "document-map"` to discover available headings, blocks, and frontmatter fields. Nested headings need `Parent::Child` syntax.',
13
+ annotations: { destructiveHint: true },
14
+ input: z.object({
15
+ target: TargetSchema.describe('Where the note lives.'),
16
+ section: SectionSchema.describe('Which heading/block/frontmatter field to edit.'),
17
+ operation: z
18
+ .enum(['append', 'prepend', 'replace'])
19
+ .describe('How to apply the content relative to the section.'),
20
+ content: z
21
+ .string()
22
+ .describe('Body to insert/replace. Markdown unless `contentType` is `json`.'),
23
+ contentType: ContentTypeSchema,
24
+ patchOptions: PatchOptionsSchema.describe('Optional flags: createTargetIfMissing, applyIfContentPreexists, trimTargetWhitespace.'),
25
+ }),
26
+ output: z.object({
27
+ path: z.string().describe('Resolved vault-relative path of the note.'),
28
+ section: SectionSchema.describe('Echoed section locator.'),
29
+ operation: z
30
+ .enum(['append', 'prepend', 'replace'])
31
+ .describe('Echoed operation that was applied.'),
32
+ }),
33
+ auth: ['tool:obsidian_patch_note:write'],
34
+ errors: [
35
+ {
36
+ reason: 'note_missing',
37
+ code: JsonRpcErrorCode.NotFound,
38
+ when: 'The vault path does not resolve to an existing note.',
39
+ },
40
+ {
41
+ reason: 'no_active_file',
42
+ code: JsonRpcErrorCode.NotFound,
43
+ when: 'Target was `active` but no file is currently open in Obsidian.',
44
+ },
45
+ {
46
+ reason: 'periodic_not_found',
47
+ code: JsonRpcErrorCode.NotFound,
48
+ when: 'Target was `periodic` but no matching periodic note exists.',
49
+ },
50
+ {
51
+ reason: 'section_target_missing',
52
+ code: JsonRpcErrorCode.ValidationError,
53
+ when: 'The named heading/block/frontmatter field does not exist in the note. Use `obsidian_get_note` with `format: "document-map"` to discover available targets.',
54
+ },
55
+ ],
56
+ async handler(input, ctx) {
57
+ const svc = getObsidianService();
58
+ const { target } = input;
59
+ await svc.patchNote(ctx, target, input.content, {
60
+ operation: input.operation,
61
+ targetType: input.section.type,
62
+ target: input.section.target,
63
+ targetDelimiter: input.section.type === 'heading' ? '::' : undefined,
64
+ createTargetIfMissing: input.patchOptions?.createTargetIfMissing,
65
+ applyIfContentPreexists: input.patchOptions?.applyIfContentPreexists,
66
+ trimTargetWhitespace: input.patchOptions?.trimTargetWhitespace,
67
+ contentType: input.contentType,
68
+ });
69
+ const path = await svc.resolvePath(ctx, target);
70
+ return { path, section: input.section, operation: input.operation };
71
+ },
72
+ format: (result) => [
73
+ {
74
+ type: 'text',
75
+ text: [
76
+ `**Patched ${result.path}**`,
77
+ `*Operation:* ${result.operation}`,
78
+ `*Section:* ${result.section.type} → ${result.section.target}`,
79
+ ].join('\n'),
80
+ },
81
+ ],
82
+ });
83
+ //# sourceMappingURL=obsidian-patch-note.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian-patch-note.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/obsidian-patch-note.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @fileoverview obsidian_replace_in_note — string/regex search-replace inside a
3
+ * single note. Composed read → mutate → write at the service layer; replacements
4
+ * are applied sequentially over the evolving body.
5
+ * @module mcp-server/tools/definitions/obsidian-replace-in-note.tool
6
+ */
7
+ import { z } from '@cyanheads/mcp-ts-core';
8
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
9
+ export declare const obsidianReplaceInNote: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
10
+ target: z.ZodDiscriminatedUnion<[z.ZodObject<{
11
+ type: z.ZodLiteral<"path">;
12
+ path: z.ZodString;
13
+ }, z.core.$strip>, z.ZodObject<{
14
+ type: z.ZodLiteral<"active">;
15
+ }, z.core.$strip>, z.ZodObject<{
16
+ type: z.ZodLiteral<"periodic">;
17
+ period: z.ZodEnum<{
18
+ daily: "daily";
19
+ weekly: "weekly";
20
+ monthly: "monthly";
21
+ quarterly: "quarterly";
22
+ yearly: "yearly";
23
+ }>;
24
+ date: z.ZodOptional<z.ZodString>;
25
+ }, z.core.$strip>], "type">;
26
+ replacements: z.ZodArray<z.ZodObject<{
27
+ search: z.ZodString;
28
+ replace: z.ZodString;
29
+ useRegex: z.ZodDefault<z.ZodBoolean>;
30
+ caseSensitive: z.ZodDefault<z.ZodBoolean>;
31
+ wholeWord: z.ZodDefault<z.ZodBoolean>;
32
+ flexibleWhitespace: z.ZodDefault<z.ZodBoolean>;
33
+ replaceAll: z.ZodDefault<z.ZodBoolean>;
34
+ }, z.core.$strip>>;
35
+ }, z.core.$strip>, z.ZodObject<{
36
+ path: z.ZodString;
37
+ totalReplacements: z.ZodNumber;
38
+ perReplacement: z.ZodArray<z.ZodObject<{
39
+ search: z.ZodString;
40
+ count: z.ZodNumber;
41
+ }, z.core.$strip>>;
42
+ }, z.core.$strip>, readonly [{
43
+ readonly reason: "regex_invalid";
44
+ readonly code: JsonRpcErrorCode.ValidationError;
45
+ readonly when: "A `useRegex: true` replacement supplied a `search` pattern that is not a valid ECMAScript regex.";
46
+ }, {
47
+ readonly reason: "note_missing";
48
+ readonly code: JsonRpcErrorCode.NotFound;
49
+ readonly when: "The vault path does not resolve to an existing note.";
50
+ }, {
51
+ readonly reason: "no_active_file";
52
+ readonly code: JsonRpcErrorCode.NotFound;
53
+ readonly when: "Target was `active` but no file is currently open in Obsidian.";
54
+ }, {
55
+ readonly reason: "periodic_not_found";
56
+ readonly code: JsonRpcErrorCode.NotFound;
57
+ readonly when: "Target was `periodic` but no matching periodic note exists.";
58
+ }]>;
59
+ //# sourceMappingURL=obsidian-replace-in-note.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian-replace-in-note.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/obsidian-replace-in-note.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA0BjE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2HhC,CAAC"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * @fileoverview obsidian_replace_in_note — string/regex search-replace inside a
3
+ * single note. Composed read → mutate → write at the service layer; replacements
4
+ * are applied sequentially over the evolving body.
5
+ * @module mcp-server/tools/definitions/obsidian-replace-in-note.tool
6
+ */
7
+ import { tool, z } from '@cyanheads/mcp-ts-core';
8
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
9
+ import { getObsidianService } from '../../../services/obsidian/obsidian-service.js';
10
+ import { TargetSchema } from './_shared/schemas.js';
11
+ const ReplacementSchema = z
12
+ .object({
13
+ search: z.string().min(1).describe('Substring or regex pattern to match.'),
14
+ replace: z.string().describe('Replacement text. Empty string deletes matches.'),
15
+ useRegex: z.boolean().default(false).describe('Treat `search` as an ECMAScript regex pattern.'),
16
+ caseSensitive: z.boolean().default(true).describe('When false, match case-insensitively.'),
17
+ wholeWord: z
18
+ .boolean()
19
+ .default(false)
20
+ .describe('Match only at word boundaries. Applies in both literal and regex modes — the search pattern is wrapped with `\\b…\\b`.'),
21
+ flexibleWhitespace: z
22
+ .boolean()
23
+ .default(false)
24
+ .describe('Treat any run of whitespace in `search` as matching any whitespace in the body. Literal mode only — has no effect when `useRegex: true` (express it directly with `\\s+`).'),
25
+ replaceAll: z.boolean().default(true).describe('When false, only the first match is replaced.'),
26
+ })
27
+ .describe('A single search/replace operation.');
28
+ export const obsidianReplaceInNote = tool('obsidian_replace_in_note', {
29
+ description: "String or regex search-replace inside a single note. The note is fetched, replacements are applied sequentially (each sees the previous one's output), and the result is written back. Use for edits that don't fit `obsidian_patch_note`'s structural targets — e.g., body-wide find-and-replace.",
30
+ annotations: { destructiveHint: true },
31
+ input: z.object({
32
+ target: TargetSchema.describe('Where the note lives.'),
33
+ replacements: z
34
+ .array(ReplacementSchema)
35
+ .min(1)
36
+ .describe('Replacements to apply in array order over the evolving content.'),
37
+ }),
38
+ output: z.object({
39
+ path: z.string().describe('Resolved vault-relative path of the note.'),
40
+ totalReplacements: z
41
+ .number()
42
+ .describe('Total number of substitutions applied across all replacement entries.'),
43
+ perReplacement: z
44
+ .array(z
45
+ .object({
46
+ search: z.string().describe('The search term/pattern that ran.'),
47
+ count: z.number().describe('Number of matches replaced for this entry.'),
48
+ })
49
+ .describe('Counts for one replacement entry.'))
50
+ .describe('Per-entry counts in the order replacements were applied.'),
51
+ }),
52
+ auth: ['tool:obsidian_replace_in_note:write'],
53
+ errors: [
54
+ {
55
+ reason: 'regex_invalid',
56
+ code: JsonRpcErrorCode.ValidationError,
57
+ when: 'A `useRegex: true` replacement supplied a `search` pattern that is not a valid ECMAScript regex.',
58
+ },
59
+ {
60
+ reason: 'note_missing',
61
+ code: JsonRpcErrorCode.NotFound,
62
+ when: 'The vault path does not resolve to an existing note.',
63
+ },
64
+ {
65
+ reason: 'no_active_file',
66
+ code: JsonRpcErrorCode.NotFound,
67
+ when: 'Target was `active` but no file is currently open in Obsidian.',
68
+ },
69
+ {
70
+ reason: 'periodic_not_found',
71
+ code: JsonRpcErrorCode.NotFound,
72
+ when: 'Target was `periodic` but no matching periodic note exists.',
73
+ },
74
+ ],
75
+ async handler(input, ctx) {
76
+ const svc = getObsidianService();
77
+ const { target } = input;
78
+ const note = await svc.getNoteJson(ctx, target);
79
+ let body = note.content;
80
+ const perReplacement = [];
81
+ let totalReplacements = 0;
82
+ for (const r of input.replacements) {
83
+ let count = 0;
84
+ if (r.useRegex) {
85
+ const pattern = r.wholeWord ? `\\b(?:${r.search})\\b` : r.search;
86
+ let re;
87
+ try {
88
+ re = new RegExp(pattern, `${r.replaceAll ? 'g' : ''}${r.caseSensitive ? '' : 'i'}`);
89
+ }
90
+ catch (err) {
91
+ throw ctx.fail('regex_invalid', `Invalid regex '${r.search}': ${err.message}`, { search: r.search }, { cause: err });
92
+ }
93
+ // Count separately, then apply with the string overload so $1/$2/$&
94
+ // capture-group references in `r.replace` are honored.
95
+ const matches = body.match(re);
96
+ count = matches ? (re.global ? matches.length : 1) : 0;
97
+ body = body.replace(re, r.replace);
98
+ }
99
+ else if (r.wholeWord || r.flexibleWhitespace) {
100
+ // Literal-with-transformations: build a regex from the escaped needle.
101
+ // Use the callback overload so `$1`/`$&` in `r.replace` stay literal.
102
+ let escaped = r.search.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
103
+ if (r.flexibleWhitespace)
104
+ escaped = escaped.replace(/\s+/g, '\\s+');
105
+ if (r.wholeWord)
106
+ escaped = `\\b${escaped}\\b`;
107
+ const re = new RegExp(escaped, `${r.replaceAll ? 'g' : ''}${r.caseSensitive ? '' : 'i'}`);
108
+ body = body.replace(re, () => {
109
+ count++;
110
+ return r.replace;
111
+ });
112
+ }
113
+ else if (r.caseSensitive) {
114
+ body = replaceLiteral(body, r.search, r.replace, r.replaceAll, () => {
115
+ count++;
116
+ });
117
+ }
118
+ else {
119
+ body = replaceLiteralCaseInsensitive(body, r.search, r.replace, r.replaceAll, () => {
120
+ count++;
121
+ });
122
+ }
123
+ perReplacement.push({ search: r.search, count });
124
+ totalReplacements += count;
125
+ }
126
+ if (totalReplacements > 0) {
127
+ await svc.writeNote(ctx, target, body, 'markdown');
128
+ }
129
+ return { path: note.path, totalReplacements, perReplacement };
130
+ },
131
+ format: (result) => {
132
+ const lines = [
133
+ `**Replaced in ${result.path}**`,
134
+ `*Total replacements:* ${result.totalReplacements}`,
135
+ '',
136
+ '**Per replacement**',
137
+ ];
138
+ for (const r of result.perReplacement) {
139
+ lines.push(`- \`${r.search}\` → ${r.count} match${r.count === 1 ? '' : 'es'}`);
140
+ }
141
+ return [{ type: 'text', text: lines.join('\n') }];
142
+ },
143
+ });
144
+ function replaceLiteral(haystack, needle, replacement, all, onMatch) {
145
+ if (!all) {
146
+ const idx = haystack.indexOf(needle);
147
+ if (idx === -1)
148
+ return haystack;
149
+ onMatch();
150
+ return haystack.slice(0, idx) + replacement + haystack.slice(idx + needle.length);
151
+ }
152
+ const parts = haystack.split(needle);
153
+ if (parts.length <= 1)
154
+ return haystack;
155
+ for (let i = 0; i < parts.length - 1; i++)
156
+ onMatch();
157
+ return parts.join(replacement);
158
+ }
159
+ function replaceLiteralCaseInsensitive(haystack, needle, replacement, all, onMatch) {
160
+ const escaped = needle.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
161
+ const re = new RegExp(escaped, all ? 'gi' : 'i');
162
+ return haystack.replace(re, () => {
163
+ onMatch();
164
+ return replacement;
165
+ });
166
+ }
167
+ //# sourceMappingURL=obsidian-replace-in-note.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian-replace-in-note.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/obsidian-replace-in-note.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @fileoverview obsidian_search_notes — text/dataview/jsonlogic search.
3
+ * Caps results at 100 hits and surfaces an `excluded` indicator when more
4
+ * were returned upstream. Text-mode hits are additionally capped per file
5
+ * via `maxMatchesPerHit` so a single match-heavy note can't blow the
6
+ * response budget — clipped hits carry `truncated: true` and `totalMatches`.
7
+ * @module mcp-server/tools/definitions/obsidian-search-notes.tool
8
+ */
9
+ import { z } from '@cyanheads/mcp-ts-core';
10
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
11
+ export declare const obsidianSearchNotes: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
12
+ mode: z.ZodEnum<{
13
+ text: "text";
14
+ dataview: "dataview";
15
+ jsonlogic: "jsonlogic";
16
+ }>;
17
+ query: z.ZodOptional<z.ZodString>;
18
+ logic: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
19
+ contextLength: z.ZodOptional<z.ZodNumber>;
20
+ pathPrefix: z.ZodOptional<z.ZodString>;
21
+ maxMatchesPerHit: z.ZodOptional<z.ZodNumber>;
22
+ }, z.core.$strip>, z.ZodObject<{
23
+ result: z.ZodDiscriminatedUnion<[z.ZodObject<{
24
+ mode: z.ZodLiteral<"text">;
25
+ hits: z.ZodArray<z.ZodObject<{
26
+ filename: z.ZodString;
27
+ score: z.ZodOptional<z.ZodNumber>;
28
+ matches: z.ZodArray<z.ZodObject<{
29
+ context: z.ZodString;
30
+ match: z.ZodObject<{
31
+ start: z.ZodNumber;
32
+ end: z.ZodNumber;
33
+ }, z.core.$strip>;
34
+ }, z.core.$strip>>;
35
+ totalMatches: z.ZodOptional<z.ZodNumber>;
36
+ truncated: z.ZodOptional<z.ZodBoolean>;
37
+ }, z.core.$strip>>;
38
+ excluded: z.ZodOptional<z.ZodObject<{
39
+ count: z.ZodNumber;
40
+ hint: z.ZodString;
41
+ }, z.core.$strip>>;
42
+ }, z.core.$strip>, z.ZodObject<{
43
+ mode: z.ZodLiteral<"dataview">;
44
+ hits: z.ZodArray<z.ZodObject<{
45
+ filename: z.ZodString;
46
+ result: z.ZodUnknown;
47
+ }, z.core.$strip>>;
48
+ excluded: z.ZodOptional<z.ZodObject<{
49
+ count: z.ZodNumber;
50
+ hint: z.ZodString;
51
+ }, z.core.$strip>>;
52
+ }, z.core.$strip>, z.ZodObject<{
53
+ mode: z.ZodLiteral<"jsonlogic">;
54
+ hits: z.ZodArray<z.ZodObject<{
55
+ filename: z.ZodString;
56
+ result: z.ZodUnknown;
57
+ }, z.core.$strip>>;
58
+ excluded: z.ZodOptional<z.ZodObject<{
59
+ count: z.ZodNumber;
60
+ hint: z.ZodString;
61
+ }, z.core.$strip>>;
62
+ }, z.core.$strip>], "mode">;
63
+ }, z.core.$strip>, readonly [{
64
+ readonly reason: "path_prefix_invalid_mode";
65
+ readonly code: JsonRpcErrorCode.ValidationError;
66
+ readonly when: "`pathPrefix` was provided in a non-text mode (only `text` supports prefix filtering).";
67
+ }, {
68
+ readonly reason: "query_required";
69
+ readonly code: JsonRpcErrorCode.ValidationError;
70
+ readonly when: "`query` is missing for `text` or `dataview` mode (required for both).";
71
+ }, {
72
+ readonly reason: "logic_required";
73
+ readonly code: JsonRpcErrorCode.ValidationError;
74
+ readonly when: "`logic` is missing for `jsonlogic` mode.";
75
+ }]>;
76
+ //# sourceMappingURL=obsidian-search-notes.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obsidian-search-notes.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/obsidian-search-notes.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAwDjE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0K9B,CAAC"}