obsidian-mcp-server 3.1.2 → 3.1.3

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 (52) hide show
  1. package/README.md +3 -8
  2. package/changelog/3.1.x/3.1.3.md +23 -0
  3. package/dist/mcp-server/tools/definitions/_shared/schemas.d.ts.map +1 -1
  4. package/dist/mcp-server/tools/definitions/_shared/schemas.js +4 -2
  5. package/dist/mcp-server/tools/definitions/_shared/schemas.js.map +1 -1
  6. package/dist/mcp-server/tools/definitions/index.d.ts +68 -52
  7. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  8. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts +1 -1
  9. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js +2 -2
  10. package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js.map +1 -1
  11. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts +3 -3
  12. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts.map +1 -1
  13. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js +3 -3
  14. package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js.map +1 -1
  15. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js +2 -2
  16. package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts +11 -3
  18. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts.map +1 -1
  19. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js +60 -6
  20. package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js.map +1 -1
  21. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts +2 -2
  22. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js +5 -5
  23. package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js.map +1 -1
  24. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js +1 -1
  25. package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js.map +1 -1
  26. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts +3 -3
  27. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts.map +1 -1
  28. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js +5 -5
  29. package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js.map +1 -1
  30. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts +3 -3
  31. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js +4 -4
  32. package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js.map +1 -1
  33. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts +1 -1
  34. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js +1 -1
  35. package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js.map +1 -1
  36. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts +3 -3
  37. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts.map +1 -1
  38. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js +5 -5
  39. package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js.map +1 -1
  40. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts +4 -4
  41. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts.map +1 -1
  42. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js +5 -5
  43. package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js.map +1 -1
  44. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts +2 -2
  45. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts.map +1 -1
  46. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js +7 -12
  47. package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js.map +1 -1
  48. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts +1 -1
  49. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js +2 -2
  50. package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js.map +1 -1
  51. package/package.json +11 -1
  52. package/server.json +3 -3
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![npm](https://img.shields.io/npm/v/obsidian-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/obsidian-mcp-server) [![Version](https://img.shields.io/badge/Version-3.1.2-blue.svg?style=flat-square)](./CHANGELOG.md) [![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-259?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/)
10
+ [![npm](https://img.shields.io/npm/v/obsidian-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/obsidian-mcp-server) [![Version](https://img.shields.io/badge/Version-3.1.3-blue.svg?style=flat-square)](./CHANGELOG.md) [![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-259?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/)
11
11
 
12
12
  [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.11-blueviolet.svg?style=flat-square)](https://bun.sh/)
13
13
 
@@ -278,9 +278,11 @@ MCP_TRANSPORT_TYPE=http OBSIDIAN_API_KEY=... bun run start:http
278
278
  | `MCP_HTTP_HOST` | Host for the HTTP server. | `127.0.0.1` |
279
279
  | `MCP_HTTP_PORT` | Port for the HTTP server. | `3010` |
280
280
  | `MCP_HTTP_ENDPOINT_PATH` | Endpoint path for the JSON-RPC handler. | `/mcp` |
281
+ | `MCP_PUBLIC_URL` | Public origin override for TLS-terminating reverse-proxy deployments (landing page, Server Card, RFC 9728 metadata). | unset |
281
282
  | `MCP_AUTH_MODE` | Auth mode: `none`, `jwt`, or `oauth`. | `none` |
282
283
  | `MCP_AUTH_SECRET_KEY` | **Required when `MCP_AUTH_MODE=jwt`.** ≥32-char shared secret used to verify incoming JWTs. | — |
283
284
  | `MCP_LOG_LEVEL` | Log level (RFC 5424). | `info` |
285
+ | `LOGS_DIR` | Directory for log files (Node.js only). | `<project-root>/logs` |
284
286
  | `OTEL_ENABLED` | Enable OpenTelemetry. | `false` |
285
287
 
286
288
  See [`.env.example`](./.env.example) for the full list of optional overrides.
@@ -289,13 +291,6 @@ See [`.env.example`](./.env.example) for the full list of optional overrides.
289
291
 
290
292
  ### Local development
291
293
 
292
- - **Hot-reload dev mode:**
293
-
294
- ```sh
295
- bun run dev:stdio
296
- bun run dev:http
297
- ```
298
-
299
294
  - **Build and run the production version:**
300
295
 
301
296
  ```sh
@@ -0,0 +1,23 @@
1
+ ---
2
+ summary: obsidian_get_note grows an opt-in includeLinks flag that surfaces the note's outgoing wikilinks and markdown links; tool descriptions, schema defaults, and recovery hints tightened across the surface.
3
+ breaking: false
4
+ ---
5
+
6
+ # 3.1.3 — 2026-05-04
7
+
8
+ ## Added
9
+
10
+ - **`obsidian_get_note` — `includeLinks` flag.** With `format: "full"` and `includeLinks: true`, the response carries `outgoingLinks[]`: an array of `{ target, type: 'wikilink' | 'markdown' }` parsed from the note body. Captures `[[Target]]`, `[[Target|alias]]`, `[[Target#section]]`, `![[embed]]`, and `[text](path.md)`; filters external URIs (`http:`, `mailto:`, etc.). No existence check — this is the link graph as written. Pure regex over content already returned, zero extra HTTP. Default `false` keeps the response compact. Closes [#43](https://github.com/cyanheads/obsidian-mcp-server/issues/43).
11
+ - **`package.json` `funding` field** — GitHub Sponsors and Buy Me a Coffee links so the npm registry surfaces them on the package page.
12
+
13
+ ## Changed
14
+
15
+ - **Tool descriptions tightened across the surface.** `obsidian_get_note`, `obsidian_search_notes`, `obsidian_list_notes`, `obsidian_patch_note`, `obsidian_replace_in_note`, `obsidian_write_note`, `obsidian_manage_frontmatter`, `obsidian_manage_tags`, `obsidian_append_to_note`, `obsidian_execute_command`, and `obsidian_list_tags` all received a leaner first-line summary and clearer per-field `.describe()` text. No behavior change — the tools do the same things, the LLM gets a sharper picture of what each one is for.
16
+ - **Schema defaults instead of optional+manual fallback.** `obsidian_list_notes.depth`, `obsidian_search_notes.contextLength`, and `obsidian_search_notes.maxMatchesPerHit` now use Zod `.default(...)` so the default appears in the published schema and the handler reads `input.field` directly.
17
+ - **Recovery hints simplified.** Removed the "check the server startup banner" hint from every `path_forbidden` recovery — the wire payload's `activeScope` is the source of truth. The `no_active_file` recovery now points the LLM at `obsidian_open_in_ui` instead of telling it to open a note manually. The `periodic_disabled` recovery no longer instructs the LLM to change Obsidian plugin settings (which it can't) — it just tells it to switch to a path target.
18
+ - **`SectionSchema.target` description** clarifies that block references are written without the leading caret (`2d9b4a`, not `^2d9b4a`) — matches the Local REST API plugin's expectation.
19
+
20
+ ## Fixed
21
+
22
+ - **README env var table** documents `MCP_PUBLIC_URL` (TLS-terminating reverse-proxy origin override) and `LOGS_DIR` (Node.js log directory) — both supported by the framework but missing from the table.
23
+ - **README** drops the stale `bun run dev:stdio` / `bun run dev:http` instructions; those scripts were removed in 3.1.1 but the README still referenced them.
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/_shared/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,4EAA4E;AAC5E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;2BA4BvB,CAAC;AAEH,yCAAyC;AACzC,eAAO,MAAM,aAAa;;;;;;;iBAQxB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;kBAiBlB,CAAC;AAEd,eAAO,MAAM,iBAAiB;;;GAK3B,CAAC;AAEJ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/_shared/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,4EAA4E;AAC5E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;2BA4BvB,CAAC;AAEH,yCAAyC;AACzC,eAAO,MAAM,aAAa;;;;;;;iBAUxB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;kBAiBlB,CAAC;AAEd,eAAO,MAAM,iBAAiB;;;GAK3B,CAAC;AAEJ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -37,11 +37,13 @@ export const TargetSchema = z.discriminatedUnion('type', [
37
37
  ]);
38
38
  /** Sub-document target inside a note. */
39
39
  export const SectionSchema = z.object({
40
- type: z.enum(['heading', 'block', 'frontmatter']).describe('Section locator kind.'),
40
+ type: z
41
+ .enum(['heading', 'block', 'frontmatter'])
42
+ .describe('Heading by name, block by reference, or frontmatter field by key.'),
41
43
  target: z
42
44
  .string()
43
45
  .min(1)
44
- .describe('Heading name (use "::" for nested headings), block reference (e.g. "2d9b4a"), or frontmatter field name.'),
46
+ .describe('Heading name (use "::" for nested headings), block reference without leading caret (e.g. "2d9b4a", not "^2d9b4a"), or frontmatter field name.'),
45
47
  });
46
48
  export const PatchOptionsSchema = z
47
49
  .object({
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/_shared/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACvD,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACnE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,kEAAkE,CAAC;KAChF,CAAC;SACD,QAAQ,CAAC,4CAA4C,CAAC;IACzD,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;KACnF,CAAC;SACD,QAAQ,CAAC,gEAAgE,CAAC;IAC7E,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QAC1F,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;aAC3D,QAAQ,CAAC,4BAA4B,CAAC;QACzC,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,KAAK,CAAC,qBAAqB,CAAC;aAC5B,QAAQ,EAAE;aACV,QAAQ,CAAC,mDAAmD,CAAC;KACjE,CAAC;SACD,QAAQ,CAAC,6CAA6C,CAAC;CAC3D,CAAC,CAAC;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACnF,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,0GAA0G,CAC3G;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,qBAAqB,EAAE,CAAC;SACrB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,yEAAyE,CAAC;IACtF,uBAAuB,EAAE,CAAC;SACvB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,wGAAwG,CACzG;IACH,oBAAoB,EAAE,CAAC;SACpB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,wEAAwE,CAAC;CACtF,CAAC;KACD,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;KAC1B,OAAO,CAAC,UAAU,CAAC;KACnB,QAAQ,CACP,qPAAqP,CACtP,CAAC"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/_shared/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACvD,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACnE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,kEAAkE,CAAC;KAChF,CAAC;SACD,QAAQ,CAAC,4CAA4C,CAAC;IACzD,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;KACnF,CAAC;SACD,QAAQ,CAAC,gEAAgE,CAAC;IAC7E,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QAC1F,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;aAC3D,QAAQ,CAAC,4BAA4B,CAAC;QACzC,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,KAAK,CAAC,qBAAqB,CAAC;aAC5B,QAAQ,EAAE;aACV,QAAQ,CAAC,mDAAmD,CAAC;KACjE,CAAC;SACD,QAAQ,CAAC,6CAA6C,CAAC;CAC3D,CAAC,CAAC;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;SACzC,QAAQ,CAAC,mEAAmE,CAAC;IAChF,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,+IAA+I,CAChJ;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,qBAAqB,EAAE,CAAC;SACrB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,yEAAyE,CAAC;IACtF,uBAAuB,EAAE,CAAC;SACvB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,wGAAwG,CACzG;IACH,oBAAoB,EAAE,CAAC;SACpB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,wEAAwE,CAAC;CACtF,CAAC;KACD,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;KAC1B,OAAO,CAAC,UAAU,CAAC;KACnB,QAAQ,CACP,qPAAqP,CACtP,CAAC"}
@@ -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,7 @@ 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.";
284
292
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
285
293
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
286
294
  type: import("zod").ZodLiteral<"path">;
@@ -305,7 +313,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
305
313
  readonly reason: "path_forbidden";
306
314
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
307
315
  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.";
316
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
309
317
  }, {
310
318
  readonly reason: "cancelled";
311
319
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidRequest;
@@ -320,7 +328,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
320
328
  readonly reason: "no_active_file";
321
329
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
322
330
  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.";
331
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
324
332
  }, {
325
333
  readonly reason: "periodic_not_found";
326
334
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -330,7 +338,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
330
338
  readonly reason: "periodic_disabled";
331
339
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
332
340
  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.";
341
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
334
342
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
335
343
  operation: import("zod").ZodEnum<{
336
344
  set: "set";
@@ -377,7 +385,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
377
385
  readonly reason: "path_forbidden";
378
386
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
379
387
  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.";
388
+ readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
381
389
  }, {
382
390
  readonly reason: "value_required";
383
391
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -392,7 +400,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
392
400
  readonly reason: "no_active_file";
393
401
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
394
402
  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.";
403
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
396
404
  }, {
397
405
  readonly reason: "periodic_not_found";
398
406
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -402,7 +410,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
402
410
  readonly reason: "periodic_disabled";
403
411
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
404
412
  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.";
413
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
406
414
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
407
415
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
408
416
  type: import("zod").ZodLiteral<"path">;
@@ -457,7 +465,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
457
465
  readonly reason: "path_forbidden";
458
466
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
459
467
  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.";
468
+ readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
461
469
  }, {
462
470
  readonly reason: "tags_required";
463
471
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -472,7 +480,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
472
480
  readonly reason: "no_active_file";
473
481
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
474
482
  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.";
483
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
476
484
  }, {
477
485
  readonly reason: "periodic_not_found";
478
486
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -482,7 +490,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
482
490
  readonly reason: "periodic_disabled";
483
491
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
484
492
  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.";
493
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
486
494
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
487
495
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
488
496
  type: import("zod").ZodLiteral<"path">;
@@ -542,7 +550,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
542
550
  readonly reason: "path_forbidden";
543
551
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
544
552
  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.";
553
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
546
554
  }, {
547
555
  readonly reason: "note_missing";
548
556
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -552,7 +560,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
552
560
  readonly reason: "no_active_file";
553
561
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
554
562
  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.";
563
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
556
564
  }, {
557
565
  readonly reason: "periodic_not_found";
558
566
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -562,7 +570,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
562
570
  readonly reason: "periodic_disabled";
563
571
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
564
572
  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.";
573
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
566
574
  }, {
567
575
  readonly reason: "section_target_missing";
568
576
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -605,12 +613,12 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
605
613
  readonly reason: "path_forbidden";
606
614
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
607
615
  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.";
616
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
609
617
  }, {
610
618
  readonly reason: "regex_invalid";
611
619
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
612
620
  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.";
621
+ readonly recovery: "Use a valid ECMAScript regex, or set useRegex to false to match `search` as a literal string.";
614
622
  }, {
615
623
  readonly reason: "note_missing";
616
624
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -620,7 +628,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
620
628
  readonly reason: "no_active_file";
621
629
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
622
630
  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.";
631
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
624
632
  }, {
625
633
  readonly reason: "periodic_not_found";
626
634
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -630,7 +638,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
630
638
  readonly reason: "periodic_disabled";
631
639
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
632
640
  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.";
641
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
634
642
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
635
643
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
636
644
  type: import("zod").ZodLiteral<"path">;
@@ -675,7 +683,7 @@ export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").Too
675
683
  readonly reason: "path_forbidden";
676
684
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
677
685
  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.";
686
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
679
687
  }]>)[];
680
688
  /** Combined base set — preserves the previous registration order. */
681
689
  export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
@@ -716,7 +724,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
716
724
  readonly reason: "path_forbidden";
717
725
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
718
726
  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.";
727
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
720
728
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
721
729
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
722
730
  type: import("zod").ZodLiteral<"path">;
@@ -741,7 +749,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
741
749
  readonly reason: "path_forbidden";
742
750
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
743
751
  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.";
752
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
745
753
  }, {
746
754
  readonly reason: "cancelled";
747
755
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidRequest;
@@ -756,7 +764,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
756
764
  readonly reason: "no_active_file";
757
765
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
758
766
  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.";
767
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
760
768
  }, {
761
769
  readonly reason: "periodic_not_found";
762
770
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -766,7 +774,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
766
774
  readonly reason: "periodic_disabled";
767
775
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
768
776
  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.";
777
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
770
778
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
771
779
  format: import("zod").ZodEnum<{
772
780
  content: "content";
@@ -798,6 +806,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
798
806
  }>;
799
807
  target: import("zod").ZodString;
800
808
  }, import("zod/v4/core").$strip>>;
809
+ includeLinks: import("zod").ZodDefault<import("zod").ZodBoolean>;
801
810
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
802
811
  result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
803
812
  format: import("zod").ZodLiteral<"content">;
@@ -814,6 +823,13 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
814
823
  mtime: import("zod").ZodNumber;
815
824
  size: import("zod").ZodNumber;
816
825
  }, import("zod/v4/core").$strip>;
826
+ outgoingLinks: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
827
+ target: import("zod").ZodString;
828
+ type: import("zod").ZodEnum<{
829
+ markdown: "markdown";
830
+ wikilink: "wikilink";
831
+ }>;
832
+ }, import("zod/v4/core").$strip>>>;
817
833
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
818
834
  format: import("zod").ZodLiteral<"document-map">;
819
835
  path: import("zod").ZodString;
@@ -843,7 +859,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
843
859
  readonly reason: "path_forbidden";
844
860
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
845
861
  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.";
862
+ readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope.";
847
863
  }, {
848
864
  readonly reason: "note_missing";
849
865
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -853,7 +869,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
853
869
  readonly reason: "no_active_file";
854
870
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
855
871
  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.";
872
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
857
873
  }, {
858
874
  readonly reason: "periodic_not_found";
859
875
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -863,12 +879,12 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
863
879
  readonly reason: "periodic_disabled";
864
880
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
865
881
  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.";
882
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
867
883
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
868
884
  path: import("zod").ZodOptional<import("zod").ZodString>;
869
885
  extension: import("zod").ZodOptional<import("zod").ZodString>;
870
886
  nameRegex: import("zod").ZodOptional<import("zod").ZodString>;
871
- depth: import("zod").ZodOptional<import("zod").ZodNumber>;
887
+ depth: import("zod").ZodDefault<import("zod").ZodNumber>;
872
888
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
873
889
  path: import("zod").ZodString;
874
890
  entries: import("zod").ZodArray<import("zod").ZodObject<{
@@ -898,7 +914,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
898
914
  readonly reason: "regex_invalid";
899
915
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
900
916
  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.";
917
+ readonly recovery: "Use a valid ECMAScript regex (e.g. `^Project.*\\.md$`), or omit nameRegex to disable filtering.";
902
918
  }, {
903
919
  readonly reason: "path_forbidden";
904
920
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
@@ -960,7 +976,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
960
976
  readonly reason: "path_forbidden";
961
977
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
962
978
  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.";
979
+ readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
964
980
  }, {
965
981
  readonly reason: "value_required";
966
982
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -975,7 +991,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
975
991
  readonly reason: "no_active_file";
976
992
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
977
993
  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.";
994
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
979
995
  }, {
980
996
  readonly reason: "periodic_not_found";
981
997
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -985,7 +1001,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
985
1001
  readonly reason: "periodic_disabled";
986
1002
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
987
1003
  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.";
1004
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
989
1005
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
990
1006
  target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
991
1007
  type: import("zod").ZodLiteral<"path">;
@@ -1040,7 +1056,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1040
1056
  readonly reason: "path_forbidden";
1041
1057
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1042
1058
  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.";
1059
+ readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
1044
1060
  }, {
1045
1061
  readonly reason: "tags_required";
1046
1062
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -1055,7 +1071,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1055
1071
  readonly reason: "no_active_file";
1056
1072
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1057
1073
  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.";
1074
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
1059
1075
  }, {
1060
1076
  readonly reason: "periodic_not_found";
1061
1077
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1065,7 +1081,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1065
1081
  readonly reason: "periodic_disabled";
1066
1082
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1067
1083
  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.";
1084
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
1069
1085
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1070
1086
  path: import("zod").ZodString;
1071
1087
  failIfMissing: import("zod").ZodDefault<import("zod").ZodBoolean>;
@@ -1078,7 +1094,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1078
1094
  readonly reason: "path_forbidden";
1079
1095
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1080
1096
  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.";
1097
+ readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope.";
1082
1098
  }, {
1083
1099
  readonly reason: "note_missing";
1084
1100
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1143,7 +1159,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1143
1159
  readonly reason: "path_forbidden";
1144
1160
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1145
1161
  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.";
1162
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
1147
1163
  }, {
1148
1164
  readonly reason: "note_missing";
1149
1165
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1153,7 +1169,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1153
1169
  readonly reason: "no_active_file";
1154
1170
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1155
1171
  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.";
1172
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
1157
1173
  }, {
1158
1174
  readonly reason: "periodic_not_found";
1159
1175
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1163,7 +1179,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1163
1179
  readonly reason: "periodic_disabled";
1164
1180
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1165
1181
  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.";
1182
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
1167
1183
  }, {
1168
1184
  readonly reason: "section_target_missing";
1169
1185
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
@@ -1206,12 +1222,12 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1206
1222
  readonly reason: "path_forbidden";
1207
1223
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1208
1224
  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.";
1225
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
1210
1226
  }, {
1211
1227
  readonly reason: "regex_invalid";
1212
1228
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1213
1229
  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.";
1230
+ readonly recovery: "Use a valid ECMAScript regex, or set useRegex to false to match `search` as a literal string.";
1215
1231
  }, {
1216
1232
  readonly reason: "note_missing";
1217
1233
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1221,7 +1237,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1221
1237
  readonly reason: "no_active_file";
1222
1238
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
1223
1239
  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.";
1240
+ readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
1225
1241
  }, {
1226
1242
  readonly reason: "periodic_not_found";
1227
1243
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
@@ -1231,7 +1247,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1231
1247
  readonly reason: "periodic_disabled";
1232
1248
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
1233
1249
  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.";
1250
+ readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
1235
1251
  }]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
1236
1252
  mode: import("zod").ZodEnum<{
1237
1253
  text: "text";
@@ -1240,9 +1256,9 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1240
1256
  }>;
1241
1257
  query: import("zod").ZodOptional<import("zod").ZodString>;
1242
1258
  logic: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
1243
- contextLength: import("zod").ZodOptional<import("zod").ZodNumber>;
1259
+ contextLength: import("zod").ZodDefault<import("zod").ZodNumber>;
1244
1260
  pathPrefix: import("zod").ZodOptional<import("zod").ZodString>;
1245
- maxMatchesPerHit: import("zod").ZodOptional<import("zod").ZodNumber>;
1261
+ maxMatchesPerHit: import("zod").ZodDefault<import("zod").ZodNumber>;
1246
1262
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1247
1263
  result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
1248
1264
  mode: import("zod").ZodLiteral<"text">;
@@ -1343,7 +1359,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
1343
1359
  readonly reason: "path_forbidden";
1344
1360
  readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
1345
1361
  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.";
1362
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
1347
1363
  }]>)[];
1348
1364
  /** Command-palette tools — opt-in via `OBSIDIAN_ENABLE_COMMANDS=true`; suppressed by `OBSIDIAN_READ_ONLY=true`. */
1349
1365
  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"}
@@ -43,6 +43,6 @@ export declare const obsidianAppendToNote: import("@cyanheads/mcp-ts-core").Tool
43
43
  readonly reason: "path_forbidden";
44
44
  readonly code: JsonRpcErrorCode.Forbidden;
45
45
  readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
46
- 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.";
46
+ readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
47
47
  }]>;
48
48
  //# sourceMappingURL=obsidian-append-to-note.tool.d.ts.map