obsidian-mcp-server 3.1.1 → 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.
- package/CLAUDE.md +10 -1
- package/README.md +30 -8
- package/changelog/3.1.x/3.1.2.md +23 -0
- package/changelog/3.1.x/3.1.3.md +23 -0
- package/dist/config/server-config.d.ts +5 -2
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +73 -0
- package/dist/config/server-config.js.map +1 -1
- package/dist/index.js +39 -5
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/_shared/schemas.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/_shared/schemas.js +4 -2
- package/dist/mcp-server/tools/definitions/_shared/schemas.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +764 -27
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/index.js +15 -9
- package/dist/mcp-server/tools/definitions/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts +7 -1
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js +10 -1
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts +7 -2
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js +8 -2
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts +15 -2
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js +65 -5
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts +7 -2
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js +20 -7
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts +7 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js +10 -4
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts +7 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js +9 -3
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts +5 -0
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js +6 -0
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts +9 -4
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js +10 -4
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts +8 -3
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js +10 -4
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js +21 -16
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts +5 -0
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js +7 -1
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js.map +1 -1
- package/dist/services/obsidian/obsidian-service.d.ts +7 -0
- package/dist/services/obsidian/obsidian-service.d.ts.map +1 -1
- package/dist/services/obsidian/obsidian-service.js +114 -17
- package/dist/services/obsidian/obsidian-service.js.map +1 -1
- package/dist/services/obsidian/path-policy.d.ts +56 -0
- package/dist/services/obsidian/path-policy.d.ts.map +1 -0
- package/dist/services/obsidian/path-policy.js +154 -0
- package/dist/services/obsidian/path-policy.js.map +1 -0
- package/package.json +17 -6
- package/server.json +41 -3
|
@@ -1,12 +1,691 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Tool registration barrel.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* @fileoverview Tool registration barrel. Tools are split into read-only and
|
|
3
|
+
* write groups so the entry point can wrap the write set with `disabledTool()`
|
|
4
|
+
* when `OBSIDIAN_READ_ONLY=true`. The command-palette pair is exported
|
|
5
|
+
* separately so the entry point wraps it with `disabledTool()` when either
|
|
6
|
+
* `OBSIDIAN_ENABLE_COMMANDS=false` or `OBSIDIAN_READ_ONLY=true` — keeping this
|
|
7
|
+
* module free of eager config reads.
|
|
7
8
|
* @module mcp-server/tools/definitions/index
|
|
8
9
|
*/
|
|
9
|
-
/**
|
|
10
|
+
/** Read-only tools — always registered, even with `OBSIDIAN_READ_ONLY=true`. */
|
|
11
|
+
export declare const readToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
12
|
+
format: import("zod").ZodEnum<{
|
|
13
|
+
content: "content";
|
|
14
|
+
section: "section";
|
|
15
|
+
full: "full";
|
|
16
|
+
"document-map": "document-map";
|
|
17
|
+
}>;
|
|
18
|
+
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
19
|
+
type: import("zod").ZodLiteral<"path">;
|
|
20
|
+
path: import("zod").ZodString;
|
|
21
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
22
|
+
type: import("zod").ZodLiteral<"active">;
|
|
23
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
24
|
+
type: import("zod").ZodLiteral<"periodic">;
|
|
25
|
+
period: import("zod").ZodEnum<{
|
|
26
|
+
daily: "daily";
|
|
27
|
+
weekly: "weekly";
|
|
28
|
+
monthly: "monthly";
|
|
29
|
+
quarterly: "quarterly";
|
|
30
|
+
yearly: "yearly";
|
|
31
|
+
}>;
|
|
32
|
+
date: import("zod").ZodOptional<import("zod").ZodString>;
|
|
33
|
+
}, import("zod/v4/core").$strip>], "type">;
|
|
34
|
+
section: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
35
|
+
type: import("zod").ZodEnum<{
|
|
36
|
+
heading: "heading";
|
|
37
|
+
block: "block";
|
|
38
|
+
frontmatter: "frontmatter";
|
|
39
|
+
}>;
|
|
40
|
+
target: import("zod").ZodString;
|
|
41
|
+
}, import("zod/v4/core").$strip>>;
|
|
42
|
+
includeLinks: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
43
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
44
|
+
result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
45
|
+
format: import("zod").ZodLiteral<"content">;
|
|
46
|
+
path: import("zod").ZodString;
|
|
47
|
+
content: import("zod").ZodString;
|
|
48
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
49
|
+
format: import("zod").ZodLiteral<"full">;
|
|
50
|
+
path: import("zod").ZodString;
|
|
51
|
+
content: import("zod").ZodString;
|
|
52
|
+
frontmatter: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
|
|
53
|
+
tags: import("zod").ZodArray<import("zod").ZodString>;
|
|
54
|
+
stat: import("zod").ZodObject<{
|
|
55
|
+
ctime: import("zod").ZodNumber;
|
|
56
|
+
mtime: import("zod").ZodNumber;
|
|
57
|
+
size: import("zod").ZodNumber;
|
|
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>>>;
|
|
66
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
67
|
+
format: import("zod").ZodLiteral<"document-map">;
|
|
68
|
+
path: import("zod").ZodString;
|
|
69
|
+
headings: import("zod").ZodArray<import("zod").ZodString>;
|
|
70
|
+
blocks: import("zod").ZodArray<import("zod").ZodString>;
|
|
71
|
+
frontmatterFields: import("zod").ZodArray<import("zod").ZodString>;
|
|
72
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
73
|
+
format: import("zod").ZodLiteral<"section">;
|
|
74
|
+
path: import("zod").ZodString;
|
|
75
|
+
section: import("zod").ZodObject<{
|
|
76
|
+
type: import("zod").ZodEnum<{
|
|
77
|
+
heading: "heading";
|
|
78
|
+
block: "block";
|
|
79
|
+
frontmatter: "frontmatter";
|
|
80
|
+
}>;
|
|
81
|
+
target: import("zod").ZodString;
|
|
82
|
+
}, import("zod/v4/core").$strip>;
|
|
83
|
+
valueText: import("zod").ZodOptional<import("zod").ZodString>;
|
|
84
|
+
valueJson: import("zod").ZodOptional<import("zod").ZodUnknown>;
|
|
85
|
+
}, import("zod/v4/core").$strip>], "format">;
|
|
86
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
87
|
+
readonly reason: "section_required";
|
|
88
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
89
|
+
readonly when: "`format` is \"section\" but no `section` locator was provided.";
|
|
90
|
+
readonly recovery: "Pass `section: { type, target }` (e.g. `{ type: \"heading\", target: \"Intro\" }`), or use `format: \"full\"` / `\"document-map\"` instead.";
|
|
91
|
+
}, {
|
|
92
|
+
readonly reason: "path_forbidden";
|
|
93
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
94
|
+
readonly when: "The target path is outside OBSIDIAN_READ_PATHS (and OBSIDIAN_WRITE_PATHS, since write paths imply read access).";
|
|
95
|
+
readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope.";
|
|
96
|
+
}, {
|
|
97
|
+
readonly reason: "note_missing";
|
|
98
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
99
|
+
readonly when: "The vault path does not resolve to an existing note.";
|
|
100
|
+
readonly recovery: "Verify the path with obsidian_list_notes or use obsidian_search_notes to locate the note.";
|
|
101
|
+
}, {
|
|
102
|
+
readonly reason: "no_active_file";
|
|
103
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
104
|
+
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
105
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
106
|
+
}, {
|
|
107
|
+
readonly reason: "periodic_not_found";
|
|
108
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
109
|
+
readonly when: "Target was `periodic` but no matching periodic note exists.";
|
|
110
|
+
readonly recovery: "Create the periodic note first or pass an explicit path target.";
|
|
111
|
+
}, {
|
|
112
|
+
readonly reason: "periodic_disabled";
|
|
113
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
114
|
+
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
115
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
116
|
+
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
117
|
+
path: import("zod").ZodOptional<import("zod").ZodString>;
|
|
118
|
+
extension: import("zod").ZodOptional<import("zod").ZodString>;
|
|
119
|
+
nameRegex: import("zod").ZodOptional<import("zod").ZodString>;
|
|
120
|
+
depth: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
121
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
122
|
+
path: import("zod").ZodString;
|
|
123
|
+
entries: import("zod").ZodArray<import("zod").ZodObject<{
|
|
124
|
+
path: import("zod").ZodString;
|
|
125
|
+
type: import("zod").ZodEnum<{
|
|
126
|
+
file: "file";
|
|
127
|
+
directory: "directory";
|
|
128
|
+
}>;
|
|
129
|
+
truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
130
|
+
}, import("zod/v4/core").$strip>>;
|
|
131
|
+
totals: import("zod").ZodObject<{
|
|
132
|
+
entries: import("zod").ZodNumber;
|
|
133
|
+
files: import("zod").ZodNumber;
|
|
134
|
+
directories: import("zod").ZodNumber;
|
|
135
|
+
}, import("zod/v4/core").$strip>;
|
|
136
|
+
appliedFilters: import("zod").ZodObject<{
|
|
137
|
+
extension: import("zod").ZodOptional<import("zod").ZodString>;
|
|
138
|
+
nameRegex: import("zod").ZodOptional<import("zod").ZodString>;
|
|
139
|
+
depth: import("zod").ZodNumber;
|
|
140
|
+
}, import("zod/v4/core").$strip>;
|
|
141
|
+
excluded: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
142
|
+
reason: import("zod").ZodLiteral<"entry_cap">;
|
|
143
|
+
cap: import("zod").ZodNumber;
|
|
144
|
+
hint: import("zod").ZodString;
|
|
145
|
+
}, import("zod/v4/core").$strip>>;
|
|
146
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
147
|
+
readonly reason: "regex_invalid";
|
|
148
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
149
|
+
readonly when: "The supplied `nameRegex` is not a valid ECMAScript regex.";
|
|
150
|
+
readonly recovery: "Use a valid ECMAScript regex (e.g. `^Project.*\\.md$`), or omit nameRegex to disable filtering.";
|
|
151
|
+
}, {
|
|
152
|
+
readonly reason: "path_forbidden";
|
|
153
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
154
|
+
readonly when: "The supplied `path` is outside OBSIDIAN_READ_PATHS (root listings always pass; specific subdirectories must be readable).";
|
|
155
|
+
readonly recovery: "List a directory inside the configured read scope, or omit `path` to list from the vault root. The error data echoes the active scope.";
|
|
156
|
+
}, {
|
|
157
|
+
readonly reason: "note_missing";
|
|
158
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
159
|
+
readonly when: "The supplied `path` does not exist in the vault. Sub-directories that disappear mid-walk are silently skipped — only the root path surfaces this error.";
|
|
160
|
+
readonly recovery: "List a parent directory to find the correct casing or check the spelling.";
|
|
161
|
+
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
162
|
+
tags: import("zod").ZodArray<import("zod").ZodObject<{
|
|
163
|
+
name: import("zod").ZodString;
|
|
164
|
+
count: import("zod").ZodNumber;
|
|
165
|
+
}, import("zod/v4/core").$strip>>;
|
|
166
|
+
}, import("zod/v4/core").$strip>, undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
167
|
+
path: import("zod").ZodString;
|
|
168
|
+
failIfMissing: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
169
|
+
newLeaf: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
170
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
171
|
+
path: import("zod").ZodString;
|
|
172
|
+
opened: import("zod").ZodBoolean;
|
|
173
|
+
createdIfMissing: import("zod").ZodBoolean;
|
|
174
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
175
|
+
readonly reason: "path_forbidden";
|
|
176
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
177
|
+
readonly when: "The target path is outside OBSIDIAN_READ_PATHS (and OBSIDIAN_WRITE_PATHS, since write paths imply read access).";
|
|
178
|
+
readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope.";
|
|
179
|
+
}, {
|
|
180
|
+
readonly reason: "note_missing";
|
|
181
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
182
|
+
readonly when: "`failIfMissing: true` (default) and the path does not exist in the vault. Pass `failIfMissing: false` to allow Obsidian to create the file on open.";
|
|
183
|
+
readonly recovery: "Verify the path with obsidian_list_notes or pass failIfMissing false to create on open.";
|
|
184
|
+
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
185
|
+
mode: import("zod").ZodEnum<{
|
|
186
|
+
text: "text";
|
|
187
|
+
dataview: "dataview";
|
|
188
|
+
jsonlogic: "jsonlogic";
|
|
189
|
+
}>;
|
|
190
|
+
query: import("zod").ZodOptional<import("zod").ZodString>;
|
|
191
|
+
logic: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
|
|
192
|
+
contextLength: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
193
|
+
pathPrefix: import("zod").ZodOptional<import("zod").ZodString>;
|
|
194
|
+
maxMatchesPerHit: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
195
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
196
|
+
result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
197
|
+
mode: import("zod").ZodLiteral<"text">;
|
|
198
|
+
hits: import("zod").ZodArray<import("zod").ZodObject<{
|
|
199
|
+
filename: import("zod").ZodString;
|
|
200
|
+
score: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
201
|
+
matches: import("zod").ZodArray<import("zod").ZodObject<{
|
|
202
|
+
context: import("zod").ZodString;
|
|
203
|
+
match: import("zod").ZodObject<{
|
|
204
|
+
start: import("zod").ZodNumber;
|
|
205
|
+
end: import("zod").ZodNumber;
|
|
206
|
+
}, import("zod/v4/core").$strip>;
|
|
207
|
+
}, import("zod/v4/core").$strip>>;
|
|
208
|
+
totalMatches: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
209
|
+
truncated: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
210
|
+
}, import("zod/v4/core").$strip>>;
|
|
211
|
+
excluded: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
212
|
+
count: import("zod").ZodNumber;
|
|
213
|
+
hint: import("zod").ZodString;
|
|
214
|
+
}, import("zod/v4/core").$strip>>;
|
|
215
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
216
|
+
mode: import("zod").ZodLiteral<"dataview">;
|
|
217
|
+
hits: import("zod").ZodArray<import("zod").ZodObject<{
|
|
218
|
+
filename: import("zod").ZodString;
|
|
219
|
+
result: import("zod").ZodUnknown;
|
|
220
|
+
}, import("zod/v4/core").$strip>>;
|
|
221
|
+
excluded: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
222
|
+
count: import("zod").ZodNumber;
|
|
223
|
+
hint: import("zod").ZodString;
|
|
224
|
+
}, import("zod/v4/core").$strip>>;
|
|
225
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
226
|
+
mode: import("zod").ZodLiteral<"jsonlogic">;
|
|
227
|
+
hits: import("zod").ZodArray<import("zod").ZodObject<{
|
|
228
|
+
filename: import("zod").ZodString;
|
|
229
|
+
result: import("zod").ZodUnknown;
|
|
230
|
+
}, import("zod/v4/core").$strip>>;
|
|
231
|
+
excluded: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
232
|
+
count: import("zod").ZodNumber;
|
|
233
|
+
hint: import("zod").ZodString;
|
|
234
|
+
}, import("zod/v4/core").$strip>>;
|
|
235
|
+
}, import("zod/v4/core").$strip>], "mode">;
|
|
236
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
237
|
+
readonly reason: "path_prefix_invalid_mode";
|
|
238
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
239
|
+
readonly when: "`pathPrefix` was provided in a non-text mode (only `text` supports prefix filtering).";
|
|
240
|
+
readonly recovery: "Drop pathPrefix or switch mode to text for prefix filtering.";
|
|
241
|
+
}, {
|
|
242
|
+
readonly reason: "query_required";
|
|
243
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
244
|
+
readonly when: "`query` is missing for `text` or `dataview` mode (required for both).";
|
|
245
|
+
readonly recovery: "Pass `query` — search terms for text mode (e.g. \"TODO\"), or DQL like \"TABLE WHERE file.mtime > date(today)\" for dataview mode.";
|
|
246
|
+
}, {
|
|
247
|
+
readonly reason: "logic_required";
|
|
248
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
249
|
+
readonly when: "`logic` is missing for `jsonlogic` mode.";
|
|
250
|
+
readonly recovery: "Pass a JSONLogic tree as `logic`, e.g. `{\"glob\": [{\"var\": \"path\"}, \"Projects/*.md\"]}`.";
|
|
251
|
+
}]>)[];
|
|
252
|
+
/** Write tools — wrapped with `disabledTool()` when `OBSIDIAN_READ_ONLY=true`. */
|
|
253
|
+
export declare const writeToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
254
|
+
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
255
|
+
type: import("zod").ZodLiteral<"path">;
|
|
256
|
+
path: import("zod").ZodString;
|
|
257
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
258
|
+
type: import("zod").ZodLiteral<"active">;
|
|
259
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
260
|
+
type: import("zod").ZodLiteral<"periodic">;
|
|
261
|
+
period: import("zod").ZodEnum<{
|
|
262
|
+
daily: "daily";
|
|
263
|
+
weekly: "weekly";
|
|
264
|
+
monthly: "monthly";
|
|
265
|
+
quarterly: "quarterly";
|
|
266
|
+
yearly: "yearly";
|
|
267
|
+
}>;
|
|
268
|
+
date: import("zod").ZodOptional<import("zod").ZodString>;
|
|
269
|
+
}, import("zod/v4/core").$strip>], "type">;
|
|
270
|
+
content: import("zod").ZodString;
|
|
271
|
+
section: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
272
|
+
type: import("zod").ZodEnum<{
|
|
273
|
+
heading: "heading";
|
|
274
|
+
block: "block";
|
|
275
|
+
frontmatter: "frontmatter";
|
|
276
|
+
}>;
|
|
277
|
+
target: import("zod").ZodString;
|
|
278
|
+
}, import("zod/v4/core").$strip>>;
|
|
279
|
+
contentType: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
280
|
+
markdown: "markdown";
|
|
281
|
+
json: "json";
|
|
282
|
+
}>>;
|
|
283
|
+
createTargetIfMissing: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
284
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
285
|
+
path: import("zod").ZodString;
|
|
286
|
+
sectionTargeted: import("zod").ZodBoolean;
|
|
287
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
288
|
+
readonly reason: "path_forbidden";
|
|
289
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
290
|
+
readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
|
|
291
|
+
readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
|
|
292
|
+
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
293
|
+
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
294
|
+
type: import("zod").ZodLiteral<"path">;
|
|
295
|
+
path: import("zod").ZodString;
|
|
296
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
297
|
+
type: import("zod").ZodLiteral<"active">;
|
|
298
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
299
|
+
type: import("zod").ZodLiteral<"periodic">;
|
|
300
|
+
period: import("zod").ZodEnum<{
|
|
301
|
+
daily: "daily";
|
|
302
|
+
weekly: "weekly";
|
|
303
|
+
monthly: "monthly";
|
|
304
|
+
quarterly: "quarterly";
|
|
305
|
+
yearly: "yearly";
|
|
306
|
+
}>;
|
|
307
|
+
date: import("zod").ZodOptional<import("zod").ZodString>;
|
|
308
|
+
}, import("zod/v4/core").$strip>], "type">;
|
|
309
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
310
|
+
path: import("zod").ZodString;
|
|
311
|
+
deleted: import("zod").ZodBoolean;
|
|
312
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
313
|
+
readonly reason: "path_forbidden";
|
|
314
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
315
|
+
readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
|
|
316
|
+
readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
|
|
317
|
+
}, {
|
|
318
|
+
readonly reason: "cancelled";
|
|
319
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidRequest;
|
|
320
|
+
readonly when: "User declined the deletion via interactive elicitation.";
|
|
321
|
+
readonly recovery: "Re-run the tool when the user is ready to confirm deletion.";
|
|
322
|
+
}, {
|
|
323
|
+
readonly reason: "note_missing";
|
|
324
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
325
|
+
readonly when: "The vault path does not resolve to an existing note.";
|
|
326
|
+
readonly recovery: "Verify the path with obsidian_list_notes or use obsidian_search_notes to locate the note.";
|
|
327
|
+
}, {
|
|
328
|
+
readonly reason: "no_active_file";
|
|
329
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
330
|
+
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
331
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
332
|
+
}, {
|
|
333
|
+
readonly reason: "periodic_not_found";
|
|
334
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
335
|
+
readonly when: "Target was `periodic` but no matching periodic note exists.";
|
|
336
|
+
readonly recovery: "Pass an explicit path target — periodic notes must already exist.";
|
|
337
|
+
}, {
|
|
338
|
+
readonly reason: "periodic_disabled";
|
|
339
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
340
|
+
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
341
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
342
|
+
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
343
|
+
operation: import("zod").ZodEnum<{
|
|
344
|
+
set: "set";
|
|
345
|
+
delete: "delete";
|
|
346
|
+
get: "get";
|
|
347
|
+
}>;
|
|
348
|
+
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
349
|
+
type: import("zod").ZodLiteral<"path">;
|
|
350
|
+
path: import("zod").ZodString;
|
|
351
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
352
|
+
type: import("zod").ZodLiteral<"active">;
|
|
353
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
354
|
+
type: import("zod").ZodLiteral<"periodic">;
|
|
355
|
+
period: import("zod").ZodEnum<{
|
|
356
|
+
daily: "daily";
|
|
357
|
+
weekly: "weekly";
|
|
358
|
+
monthly: "monthly";
|
|
359
|
+
quarterly: "quarterly";
|
|
360
|
+
yearly: "yearly";
|
|
361
|
+
}>;
|
|
362
|
+
date: import("zod").ZodOptional<import("zod").ZodString>;
|
|
363
|
+
}, import("zod/v4/core").$strip>], "type">;
|
|
364
|
+
key: import("zod").ZodString;
|
|
365
|
+
value: import("zod").ZodOptional<import("zod").ZodUnknown>;
|
|
366
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
367
|
+
result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
368
|
+
operation: import("zod").ZodLiteral<"get">;
|
|
369
|
+
path: import("zod").ZodString;
|
|
370
|
+
key: import("zod").ZodString;
|
|
371
|
+
exists: import("zod").ZodBoolean;
|
|
372
|
+
value: import("zod").ZodUnknown;
|
|
373
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
374
|
+
operation: import("zod").ZodLiteral<"set">;
|
|
375
|
+
path: import("zod").ZodString;
|
|
376
|
+
key: import("zod").ZodString;
|
|
377
|
+
frontmatter: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
|
|
378
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
379
|
+
operation: import("zod").ZodLiteral<"delete">;
|
|
380
|
+
path: import("zod").ZodString;
|
|
381
|
+
key: import("zod").ZodString;
|
|
382
|
+
frontmatter: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
|
|
383
|
+
}, import("zod/v4/core").$strip>], "operation">;
|
|
384
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
385
|
+
readonly reason: "path_forbidden";
|
|
386
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
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.";
|
|
388
|
+
readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
|
|
389
|
+
}, {
|
|
390
|
+
readonly reason: "value_required";
|
|
391
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
392
|
+
readonly when: "`operation` is \"set\" but no `value` was supplied.";
|
|
393
|
+
readonly recovery: "Pass `value` as any JSON-typed value: string, number, boolean, array, or object (e.g. `\"draft\"`, `42`, `true`, `[\"a\",\"b\"]`).";
|
|
394
|
+
}, {
|
|
395
|
+
readonly reason: "note_missing";
|
|
396
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
397
|
+
readonly when: "The vault path does not resolve to an existing note.";
|
|
398
|
+
readonly recovery: "Verify the path with obsidian_list_notes or use obsidian_search_notes to locate the note.";
|
|
399
|
+
}, {
|
|
400
|
+
readonly reason: "no_active_file";
|
|
401
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
402
|
+
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
403
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
404
|
+
}, {
|
|
405
|
+
readonly reason: "periodic_not_found";
|
|
406
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
407
|
+
readonly when: "Target was `periodic` but no matching periodic note exists.";
|
|
408
|
+
readonly recovery: "Create the periodic note first or pass an explicit path target.";
|
|
409
|
+
}, {
|
|
410
|
+
readonly reason: "periodic_disabled";
|
|
411
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
412
|
+
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
413
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
414
|
+
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
415
|
+
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
416
|
+
type: import("zod").ZodLiteral<"path">;
|
|
417
|
+
path: import("zod").ZodString;
|
|
418
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
419
|
+
type: import("zod").ZodLiteral<"active">;
|
|
420
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
421
|
+
type: import("zod").ZodLiteral<"periodic">;
|
|
422
|
+
period: import("zod").ZodEnum<{
|
|
423
|
+
daily: "daily";
|
|
424
|
+
weekly: "weekly";
|
|
425
|
+
monthly: "monthly";
|
|
426
|
+
quarterly: "quarterly";
|
|
427
|
+
yearly: "yearly";
|
|
428
|
+
}>;
|
|
429
|
+
date: import("zod").ZodOptional<import("zod").ZodString>;
|
|
430
|
+
}, import("zod/v4/core").$strip>], "type">;
|
|
431
|
+
operation: import("zod").ZodEnum<{
|
|
432
|
+
list: "list";
|
|
433
|
+
add: "add";
|
|
434
|
+
remove: "remove";
|
|
435
|
+
}>;
|
|
436
|
+
tags: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
|
|
437
|
+
location: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
438
|
+
frontmatter: "frontmatter";
|
|
439
|
+
inline: "inline";
|
|
440
|
+
both: "both";
|
|
441
|
+
}>>;
|
|
442
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
443
|
+
result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
444
|
+
operation: import("zod").ZodLiteral<"list">;
|
|
445
|
+
path: import("zod").ZodString;
|
|
446
|
+
tags: import("zod").ZodObject<{
|
|
447
|
+
frontmatter: import("zod").ZodArray<import("zod").ZodString>;
|
|
448
|
+
inline: import("zod").ZodArray<import("zod").ZodString>;
|
|
449
|
+
all: import("zod").ZodArray<import("zod").ZodString>;
|
|
450
|
+
}, import("zod/v4/core").$strip>;
|
|
451
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
452
|
+
operation: import("zod").ZodLiteral<"add">;
|
|
453
|
+
path: import("zod").ZodString;
|
|
454
|
+
applied: import("zod").ZodArray<import("zod").ZodString>;
|
|
455
|
+
skipped: import("zod").ZodArray<import("zod").ZodString>;
|
|
456
|
+
tags: import("zod").ZodArray<import("zod").ZodString>;
|
|
457
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
458
|
+
operation: import("zod").ZodLiteral<"remove">;
|
|
459
|
+
path: import("zod").ZodString;
|
|
460
|
+
applied: import("zod").ZodArray<import("zod").ZodString>;
|
|
461
|
+
skipped: import("zod").ZodArray<import("zod").ZodString>;
|
|
462
|
+
tags: import("zod").ZodArray<import("zod").ZodString>;
|
|
463
|
+
}, import("zod/v4/core").$strip>], "operation">;
|
|
464
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
465
|
+
readonly reason: "path_forbidden";
|
|
466
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
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.";
|
|
468
|
+
readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
|
|
469
|
+
}, {
|
|
470
|
+
readonly reason: "tags_required";
|
|
471
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
472
|
+
readonly when: "`operation` is \"add\" or \"remove\" but `tags` was empty or omitted.";
|
|
473
|
+
readonly recovery: "Pass a non-empty `tags` array (without `#`), e.g. `[\"draft\", \"wip\"]`.";
|
|
474
|
+
}, {
|
|
475
|
+
readonly reason: "note_missing";
|
|
476
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
477
|
+
readonly when: "The vault path does not resolve to an existing note.";
|
|
478
|
+
readonly recovery: "Verify the path with obsidian_list_notes or use obsidian_search_notes to locate the note.";
|
|
479
|
+
}, {
|
|
480
|
+
readonly reason: "no_active_file";
|
|
481
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
482
|
+
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
483
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
484
|
+
}, {
|
|
485
|
+
readonly reason: "periodic_not_found";
|
|
486
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
487
|
+
readonly when: "Target was `periodic` but no matching periodic note exists.";
|
|
488
|
+
readonly recovery: "Create the periodic note first or pass an explicit path target.";
|
|
489
|
+
}, {
|
|
490
|
+
readonly reason: "periodic_disabled";
|
|
491
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
492
|
+
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
493
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
494
|
+
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
495
|
+
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
496
|
+
type: import("zod").ZodLiteral<"path">;
|
|
497
|
+
path: import("zod").ZodString;
|
|
498
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
499
|
+
type: import("zod").ZodLiteral<"active">;
|
|
500
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
501
|
+
type: import("zod").ZodLiteral<"periodic">;
|
|
502
|
+
period: import("zod").ZodEnum<{
|
|
503
|
+
daily: "daily";
|
|
504
|
+
weekly: "weekly";
|
|
505
|
+
monthly: "monthly";
|
|
506
|
+
quarterly: "quarterly";
|
|
507
|
+
yearly: "yearly";
|
|
508
|
+
}>;
|
|
509
|
+
date: import("zod").ZodOptional<import("zod").ZodString>;
|
|
510
|
+
}, import("zod/v4/core").$strip>], "type">;
|
|
511
|
+
section: import("zod").ZodObject<{
|
|
512
|
+
type: import("zod").ZodEnum<{
|
|
513
|
+
heading: "heading";
|
|
514
|
+
block: "block";
|
|
515
|
+
frontmatter: "frontmatter";
|
|
516
|
+
}>;
|
|
517
|
+
target: import("zod").ZodString;
|
|
518
|
+
}, import("zod/v4/core").$strip>;
|
|
519
|
+
operation: import("zod").ZodEnum<{
|
|
520
|
+
replace: "replace";
|
|
521
|
+
append: "append";
|
|
522
|
+
prepend: "prepend";
|
|
523
|
+
}>;
|
|
524
|
+
content: import("zod").ZodString;
|
|
525
|
+
contentType: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
526
|
+
markdown: "markdown";
|
|
527
|
+
json: "json";
|
|
528
|
+
}>>;
|
|
529
|
+
patchOptions: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
530
|
+
createTargetIfMissing: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
531
|
+
applyIfContentPreexists: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
532
|
+
trimTargetWhitespace: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
533
|
+
}, import("zod/v4/core").$strip>>;
|
|
534
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
535
|
+
path: import("zod").ZodString;
|
|
536
|
+
section: import("zod").ZodObject<{
|
|
537
|
+
type: import("zod").ZodEnum<{
|
|
538
|
+
heading: "heading";
|
|
539
|
+
block: "block";
|
|
540
|
+
frontmatter: "frontmatter";
|
|
541
|
+
}>;
|
|
542
|
+
target: import("zod").ZodString;
|
|
543
|
+
}, import("zod/v4/core").$strip>;
|
|
544
|
+
operation: import("zod").ZodEnum<{
|
|
545
|
+
replace: "replace";
|
|
546
|
+
append: "append";
|
|
547
|
+
prepend: "prepend";
|
|
548
|
+
}>;
|
|
549
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
550
|
+
readonly reason: "path_forbidden";
|
|
551
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
552
|
+
readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
|
|
553
|
+
readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
|
|
554
|
+
}, {
|
|
555
|
+
readonly reason: "note_missing";
|
|
556
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
557
|
+
readonly when: "The vault path does not resolve to an existing note.";
|
|
558
|
+
readonly recovery: "Verify the path with obsidian_list_notes or use obsidian_search_notes to locate the note.";
|
|
559
|
+
}, {
|
|
560
|
+
readonly reason: "no_active_file";
|
|
561
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
562
|
+
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
563
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
564
|
+
}, {
|
|
565
|
+
readonly reason: "periodic_not_found";
|
|
566
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
567
|
+
readonly when: "Target was `periodic` but no matching periodic note exists.";
|
|
568
|
+
readonly recovery: "Create the periodic note first or pass an explicit path target.";
|
|
569
|
+
}, {
|
|
570
|
+
readonly reason: "periodic_disabled";
|
|
571
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
572
|
+
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
573
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
574
|
+
}, {
|
|
575
|
+
readonly reason: "section_target_missing";
|
|
576
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
577
|
+
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.";
|
|
578
|
+
readonly recovery: "Call obsidian_get_note with format document-map to discover the available targets.";
|
|
579
|
+
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
580
|
+
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
581
|
+
type: import("zod").ZodLiteral<"path">;
|
|
582
|
+
path: import("zod").ZodString;
|
|
583
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
584
|
+
type: import("zod").ZodLiteral<"active">;
|
|
585
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
586
|
+
type: import("zod").ZodLiteral<"periodic">;
|
|
587
|
+
period: import("zod").ZodEnum<{
|
|
588
|
+
daily: "daily";
|
|
589
|
+
weekly: "weekly";
|
|
590
|
+
monthly: "monthly";
|
|
591
|
+
quarterly: "quarterly";
|
|
592
|
+
yearly: "yearly";
|
|
593
|
+
}>;
|
|
594
|
+
date: import("zod").ZodOptional<import("zod").ZodString>;
|
|
595
|
+
}, import("zod/v4/core").$strip>], "type">;
|
|
596
|
+
replacements: import("zod").ZodArray<import("zod").ZodObject<{
|
|
597
|
+
search: import("zod").ZodString;
|
|
598
|
+
replace: import("zod").ZodString;
|
|
599
|
+
useRegex: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
600
|
+
caseSensitive: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
601
|
+
wholeWord: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
602
|
+
flexibleWhitespace: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
603
|
+
replaceAll: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
604
|
+
}, import("zod/v4/core").$strip>>;
|
|
605
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
606
|
+
path: import("zod").ZodString;
|
|
607
|
+
totalReplacements: import("zod").ZodNumber;
|
|
608
|
+
perReplacement: import("zod").ZodArray<import("zod").ZodObject<{
|
|
609
|
+
search: import("zod").ZodString;
|
|
610
|
+
count: import("zod").ZodNumber;
|
|
611
|
+
}, import("zod/v4/core").$strip>>;
|
|
612
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
613
|
+
readonly reason: "path_forbidden";
|
|
614
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
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.)";
|
|
616
|
+
readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
|
|
617
|
+
}, {
|
|
618
|
+
readonly reason: "regex_invalid";
|
|
619
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
620
|
+
readonly when: "A `useRegex: true` replacement supplied a `search` pattern that is not a valid ECMAScript regex.";
|
|
621
|
+
readonly recovery: "Use a valid ECMAScript regex, or set useRegex to false to match `search` as a literal string.";
|
|
622
|
+
}, {
|
|
623
|
+
readonly reason: "note_missing";
|
|
624
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
625
|
+
readonly when: "The vault path does not resolve to an existing note.";
|
|
626
|
+
readonly recovery: "Verify the path with obsidian_list_notes or use obsidian_search_notes to locate the note.";
|
|
627
|
+
}, {
|
|
628
|
+
readonly reason: "no_active_file";
|
|
629
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
630
|
+
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
631
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
632
|
+
}, {
|
|
633
|
+
readonly reason: "periodic_not_found";
|
|
634
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
635
|
+
readonly when: "Target was `periodic` but no matching periodic note exists.";
|
|
636
|
+
readonly recovery: "Create the periodic note first or pass an explicit path target.";
|
|
637
|
+
}, {
|
|
638
|
+
readonly reason: "periodic_disabled";
|
|
639
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
640
|
+
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
641
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
642
|
+
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
643
|
+
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
644
|
+
type: import("zod").ZodLiteral<"path">;
|
|
645
|
+
path: import("zod").ZodString;
|
|
646
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
647
|
+
type: import("zod").ZodLiteral<"active">;
|
|
648
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
649
|
+
type: import("zod").ZodLiteral<"periodic">;
|
|
650
|
+
period: import("zod").ZodEnum<{
|
|
651
|
+
daily: "daily";
|
|
652
|
+
weekly: "weekly";
|
|
653
|
+
monthly: "monthly";
|
|
654
|
+
quarterly: "quarterly";
|
|
655
|
+
yearly: "yearly";
|
|
656
|
+
}>;
|
|
657
|
+
date: import("zod").ZodOptional<import("zod").ZodString>;
|
|
658
|
+
}, import("zod/v4/core").$strip>], "type">;
|
|
659
|
+
content: import("zod").ZodString;
|
|
660
|
+
section: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
661
|
+
type: import("zod").ZodEnum<{
|
|
662
|
+
heading: "heading";
|
|
663
|
+
block: "block";
|
|
664
|
+
frontmatter: "frontmatter";
|
|
665
|
+
}>;
|
|
666
|
+
target: import("zod").ZodString;
|
|
667
|
+
}, import("zod/v4/core").$strip>>;
|
|
668
|
+
contentType: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
669
|
+
markdown: "markdown";
|
|
670
|
+
json: "json";
|
|
671
|
+
}>>;
|
|
672
|
+
overwrite: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
673
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
674
|
+
path: import("zod").ZodString;
|
|
675
|
+
sectionTargeted: import("zod").ZodBoolean;
|
|
676
|
+
created: import("zod").ZodBoolean;
|
|
677
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
678
|
+
readonly reason: "file_exists";
|
|
679
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Conflict;
|
|
680
|
+
readonly when: "Whole-file write was attempted against an existing note and `overwrite` was not set to `true`.";
|
|
681
|
+
readonly recovery: "Retry with overwrite true or use obsidian_patch_note for in-place edits.";
|
|
682
|
+
}, {
|
|
683
|
+
readonly reason: "path_forbidden";
|
|
684
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
685
|
+
readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
|
|
686
|
+
readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
|
|
687
|
+
}]>)[];
|
|
688
|
+
/** Combined base set — preserves the previous registration order. */
|
|
10
689
|
export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
11
690
|
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
12
691
|
type: import("zod").ZodLiteral<"path">;
|
|
@@ -41,7 +720,12 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
41
720
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
42
721
|
path: import("zod").ZodString;
|
|
43
722
|
sectionTargeted: import("zod").ZodBoolean;
|
|
44
|
-
}, import("zod/v4/core").$strip>,
|
|
723
|
+
}, import("zod/v4/core").$strip>, readonly [{
|
|
724
|
+
readonly reason: "path_forbidden";
|
|
725
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
726
|
+
readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
|
|
727
|
+
readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
|
|
728
|
+
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
45
729
|
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
46
730
|
type: import("zod").ZodLiteral<"path">;
|
|
47
731
|
path: import("zod").ZodString;
|
|
@@ -62,6 +746,11 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
62
746
|
path: import("zod").ZodString;
|
|
63
747
|
deleted: import("zod").ZodBoolean;
|
|
64
748
|
}, import("zod/v4/core").$strip>, readonly [{
|
|
749
|
+
readonly reason: "path_forbidden";
|
|
750
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
751
|
+
readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
|
|
752
|
+
readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
|
|
753
|
+
}, {
|
|
65
754
|
readonly reason: "cancelled";
|
|
66
755
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidRequest;
|
|
67
756
|
readonly when: "User declined the deletion via interactive elicitation.";
|
|
@@ -75,7 +764,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
75
764
|
readonly reason: "no_active_file";
|
|
76
765
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
77
766
|
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
78
|
-
readonly recovery: "
|
|
767
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
79
768
|
}, {
|
|
80
769
|
readonly reason: "periodic_not_found";
|
|
81
770
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
@@ -85,7 +774,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
85
774
|
readonly reason: "periodic_disabled";
|
|
86
775
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
87
776
|
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
88
|
-
readonly recovery: "
|
|
777
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
89
778
|
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
90
779
|
format: import("zod").ZodEnum<{
|
|
91
780
|
content: "content";
|
|
@@ -117,6 +806,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
117
806
|
}>;
|
|
118
807
|
target: import("zod").ZodString;
|
|
119
808
|
}, import("zod/v4/core").$strip>>;
|
|
809
|
+
includeLinks: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
120
810
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
121
811
|
result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
122
812
|
format: import("zod").ZodLiteral<"content">;
|
|
@@ -133,6 +823,13 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
133
823
|
mtime: import("zod").ZodNumber;
|
|
134
824
|
size: import("zod").ZodNumber;
|
|
135
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>>>;
|
|
136
833
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
137
834
|
format: import("zod").ZodLiteral<"document-map">;
|
|
138
835
|
path: import("zod").ZodString;
|
|
@@ -158,6 +855,11 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
158
855
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
159
856
|
readonly when: "`format` is \"section\" but no `section` locator was provided.";
|
|
160
857
|
readonly recovery: "Pass `section: { type, target }` (e.g. `{ type: \"heading\", target: \"Intro\" }`), or use `format: \"full\"` / `\"document-map\"` instead.";
|
|
858
|
+
}, {
|
|
859
|
+
readonly reason: "path_forbidden";
|
|
860
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
861
|
+
readonly when: "The target path is outside OBSIDIAN_READ_PATHS (and OBSIDIAN_WRITE_PATHS, since write paths imply read access).";
|
|
862
|
+
readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope.";
|
|
161
863
|
}, {
|
|
162
864
|
readonly reason: "note_missing";
|
|
163
865
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
@@ -167,7 +869,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
167
869
|
readonly reason: "no_active_file";
|
|
168
870
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
169
871
|
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
170
|
-
readonly recovery: "
|
|
872
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
171
873
|
}, {
|
|
172
874
|
readonly reason: "periodic_not_found";
|
|
173
875
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
@@ -177,12 +879,12 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
177
879
|
readonly reason: "periodic_disabled";
|
|
178
880
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
179
881
|
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
180
|
-
readonly recovery: "
|
|
882
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
181
883
|
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
182
884
|
path: import("zod").ZodOptional<import("zod").ZodString>;
|
|
183
885
|
extension: import("zod").ZodOptional<import("zod").ZodString>;
|
|
184
886
|
nameRegex: import("zod").ZodOptional<import("zod").ZodString>;
|
|
185
|
-
depth: import("zod").
|
|
887
|
+
depth: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
186
888
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
187
889
|
path: import("zod").ZodString;
|
|
188
890
|
entries: import("zod").ZodArray<import("zod").ZodObject<{
|
|
@@ -212,7 +914,12 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
212
914
|
readonly reason: "regex_invalid";
|
|
213
915
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
214
916
|
readonly when: "The supplied `nameRegex` is not a valid ECMAScript regex.";
|
|
215
|
-
readonly recovery: "
|
|
917
|
+
readonly recovery: "Use a valid ECMAScript regex (e.g. `^Project.*\\.md$`), or omit nameRegex to disable filtering.";
|
|
918
|
+
}, {
|
|
919
|
+
readonly reason: "path_forbidden";
|
|
920
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
921
|
+
readonly when: "The supplied `path` is outside OBSIDIAN_READ_PATHS (root listings always pass; specific subdirectories must be readable).";
|
|
922
|
+
readonly recovery: "List a directory inside the configured read scope, or omit `path` to list from the vault root. The error data echoes the active scope.";
|
|
216
923
|
}, {
|
|
217
924
|
readonly reason: "note_missing";
|
|
218
925
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
@@ -266,6 +973,11 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
266
973
|
frontmatter: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
|
|
267
974
|
}, import("zod/v4/core").$strip>], "operation">;
|
|
268
975
|
}, import("zod/v4/core").$strip>, readonly [{
|
|
976
|
+
readonly reason: "path_forbidden";
|
|
977
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
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.";
|
|
979
|
+
readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
|
|
980
|
+
}, {
|
|
269
981
|
readonly reason: "value_required";
|
|
270
982
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
271
983
|
readonly when: "`operation` is \"set\" but no `value` was supplied.";
|
|
@@ -279,7 +991,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
279
991
|
readonly reason: "no_active_file";
|
|
280
992
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
281
993
|
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
282
|
-
readonly recovery: "
|
|
994
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
283
995
|
}, {
|
|
284
996
|
readonly reason: "periodic_not_found";
|
|
285
997
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
@@ -289,7 +1001,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
289
1001
|
readonly reason: "periodic_disabled";
|
|
290
1002
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
291
1003
|
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
292
|
-
readonly recovery: "
|
|
1004
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
293
1005
|
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
294
1006
|
target: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
295
1007
|
type: import("zod").ZodLiteral<"path">;
|
|
@@ -341,6 +1053,11 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
341
1053
|
tags: import("zod").ZodArray<import("zod").ZodString>;
|
|
342
1054
|
}, import("zod/v4/core").$strip>], "operation">;
|
|
343
1055
|
}, import("zod/v4/core").$strip>, readonly [{
|
|
1056
|
+
readonly reason: "path_forbidden";
|
|
1057
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
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.";
|
|
1059
|
+
readonly recovery: "Use a path inside the configured scope. The error data echoes the active scope.";
|
|
1060
|
+
}, {
|
|
344
1061
|
readonly reason: "tags_required";
|
|
345
1062
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
346
1063
|
readonly when: "`operation` is \"add\" or \"remove\" but `tags` was empty or omitted.";
|
|
@@ -354,7 +1071,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
354
1071
|
readonly reason: "no_active_file";
|
|
355
1072
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
356
1073
|
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
357
|
-
readonly recovery: "
|
|
1074
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
358
1075
|
}, {
|
|
359
1076
|
readonly reason: "periodic_not_found";
|
|
360
1077
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
@@ -364,7 +1081,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
364
1081
|
readonly reason: "periodic_disabled";
|
|
365
1082
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
366
1083
|
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
367
|
-
readonly recovery: "
|
|
1084
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
368
1085
|
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
369
1086
|
path: import("zod").ZodString;
|
|
370
1087
|
failIfMissing: import("zod").ZodDefault<import("zod").ZodBoolean>;
|
|
@@ -374,6 +1091,11 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
374
1091
|
opened: import("zod").ZodBoolean;
|
|
375
1092
|
createdIfMissing: import("zod").ZodBoolean;
|
|
376
1093
|
}, import("zod/v4/core").$strip>, readonly [{
|
|
1094
|
+
readonly reason: "path_forbidden";
|
|
1095
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
1096
|
+
readonly when: "The target path is outside OBSIDIAN_READ_PATHS (and OBSIDIAN_WRITE_PATHS, since write paths imply read access).";
|
|
1097
|
+
readonly recovery: "Use a path inside the configured read scope. The error data echoes the active scope.";
|
|
1098
|
+
}, {
|
|
377
1099
|
readonly reason: "note_missing";
|
|
378
1100
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
379
1101
|
readonly when: "`failIfMissing: true` (default) and the path does not exist in the vault. Pass `failIfMissing: false` to allow Obsidian to create the file on open.";
|
|
@@ -404,9 +1126,9 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
404
1126
|
target: import("zod").ZodString;
|
|
405
1127
|
}, import("zod/v4/core").$strip>;
|
|
406
1128
|
operation: import("zod").ZodEnum<{
|
|
1129
|
+
replace: "replace";
|
|
407
1130
|
append: "append";
|
|
408
1131
|
prepend: "prepend";
|
|
409
|
-
replace: "replace";
|
|
410
1132
|
}>;
|
|
411
1133
|
content: import("zod").ZodString;
|
|
412
1134
|
contentType: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
@@ -429,11 +1151,16 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
429
1151
|
target: import("zod").ZodString;
|
|
430
1152
|
}, import("zod/v4/core").$strip>;
|
|
431
1153
|
operation: import("zod").ZodEnum<{
|
|
1154
|
+
replace: "replace";
|
|
432
1155
|
append: "append";
|
|
433
1156
|
prepend: "prepend";
|
|
434
|
-
replace: "replace";
|
|
435
1157
|
}>;
|
|
436
1158
|
}, import("zod/v4/core").$strip>, readonly [{
|
|
1159
|
+
readonly reason: "path_forbidden";
|
|
1160
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
1161
|
+
readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
|
|
1162
|
+
readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
|
|
1163
|
+
}, {
|
|
437
1164
|
readonly reason: "note_missing";
|
|
438
1165
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
439
1166
|
readonly when: "The vault path does not resolve to an existing note.";
|
|
@@ -442,7 +1169,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
442
1169
|
readonly reason: "no_active_file";
|
|
443
1170
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
444
1171
|
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
445
|
-
readonly recovery: "
|
|
1172
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
446
1173
|
}, {
|
|
447
1174
|
readonly reason: "periodic_not_found";
|
|
448
1175
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
@@ -452,7 +1179,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
452
1179
|
readonly reason: "periodic_disabled";
|
|
453
1180
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
454
1181
|
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
455
|
-
readonly recovery: "
|
|
1182
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
456
1183
|
}, {
|
|
457
1184
|
readonly reason: "section_target_missing";
|
|
458
1185
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
@@ -492,10 +1219,15 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
492
1219
|
count: import("zod").ZodNumber;
|
|
493
1220
|
}, import("zod/v4/core").$strip>>;
|
|
494
1221
|
}, import("zod/v4/core").$strip>, readonly [{
|
|
1222
|
+
readonly reason: "path_forbidden";
|
|
1223
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
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.)";
|
|
1225
|
+
readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
|
|
1226
|
+
}, {
|
|
495
1227
|
readonly reason: "regex_invalid";
|
|
496
1228
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
497
1229
|
readonly when: "A `useRegex: true` replacement supplied a `search` pattern that is not a valid ECMAScript regex.";
|
|
498
|
-
readonly recovery: "
|
|
1230
|
+
readonly recovery: "Use a valid ECMAScript regex, or set useRegex to false to match `search` as a literal string.";
|
|
499
1231
|
}, {
|
|
500
1232
|
readonly reason: "note_missing";
|
|
501
1233
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
@@ -505,7 +1237,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
505
1237
|
readonly reason: "no_active_file";
|
|
506
1238
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
507
1239
|
readonly when: "Target was `active` but no file is currently open in Obsidian.";
|
|
508
|
-
readonly recovery: "
|
|
1240
|
+
readonly recovery: "Call obsidian_open_in_ui to focus a file, or pass an explicit path target instead.";
|
|
509
1241
|
}, {
|
|
510
1242
|
readonly reason: "periodic_not_found";
|
|
511
1243
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
|
|
@@ -515,7 +1247,7 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
515
1247
|
readonly reason: "periodic_disabled";
|
|
516
1248
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
517
1249
|
readonly when: "Target was `periodic` but the requested period is not enabled in Obsidian's Periodic Notes plugin settings.";
|
|
518
|
-
readonly recovery: "
|
|
1250
|
+
readonly recovery: "Pass an explicit path target — the requested period is disabled in the operator's Periodic Notes plugin.";
|
|
519
1251
|
}]> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
520
1252
|
mode: import("zod").ZodEnum<{
|
|
521
1253
|
text: "text";
|
|
@@ -524,9 +1256,9 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
524
1256
|
}>;
|
|
525
1257
|
query: import("zod").ZodOptional<import("zod").ZodString>;
|
|
526
1258
|
logic: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
|
|
527
|
-
contextLength: import("zod").
|
|
1259
|
+
contextLength: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
528
1260
|
pathPrefix: import("zod").ZodOptional<import("zod").ZodString>;
|
|
529
|
-
maxMatchesPerHit: import("zod").
|
|
1261
|
+
maxMatchesPerHit: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
530
1262
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
531
1263
|
result: import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
|
|
532
1264
|
mode: import("zod").ZodLiteral<"text">;
|
|
@@ -623,8 +1355,13 @@ export declare const baseToolDefinitions: (import("@cyanheads/mcp-ts-core").Tool
|
|
|
623
1355
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Conflict;
|
|
624
1356
|
readonly when: "Whole-file write was attempted against an existing note and `overwrite` was not set to `true`.";
|
|
625
1357
|
readonly recovery: "Retry with overwrite true or use obsidian_patch_note for in-place edits.";
|
|
1358
|
+
}, {
|
|
1359
|
+
readonly reason: "path_forbidden";
|
|
1360
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.Forbidden;
|
|
1361
|
+
readonly when: "The target path is outside OBSIDIAN_WRITE_PATHS, or OBSIDIAN_READ_ONLY=true denies all writes.";
|
|
1362
|
+
readonly recovery: "Use a path inside the configured write scope. The error data echoes the active scope.";
|
|
626
1363
|
}]>)[];
|
|
627
|
-
/** Command-palette tools —
|
|
1364
|
+
/** Command-palette tools — opt-in via `OBSIDIAN_ENABLE_COMMANDS=true`; suppressed by `OBSIDIAN_READ_ONLY=true`. */
|
|
628
1365
|
export declare const commandToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
629
1366
|
commandId: import("zod").ZodString;
|
|
630
1367
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|