@aniketbiswas/obsidian-mcp-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +232 -0
  3. package/build/index.d.ts +26 -0
  4. package/build/index.d.ts.map +1 -0
  5. package/build/index.js +148 -0
  6. package/build/index.js.map +1 -0
  7. package/build/prompts/index.d.ts +33 -0
  8. package/build/prompts/index.d.ts.map +1 -0
  9. package/build/prompts/index.js +152 -0
  10. package/build/prompts/index.js.map +1 -0
  11. package/build/prompts/obsidian.d.ts +17 -0
  12. package/build/prompts/obsidian.d.ts.map +1 -0
  13. package/build/prompts/obsidian.js +305 -0
  14. package/build/prompts/obsidian.js.map +1 -0
  15. package/build/resources/index.d.ts +31 -0
  16. package/build/resources/index.d.ts.map +1 -0
  17. package/build/resources/index.js +111 -0
  18. package/build/resources/index.js.map +1 -0
  19. package/build/resources/obsidian.d.ts +19 -0
  20. package/build/resources/obsidian.d.ts.map +1 -0
  21. package/build/resources/obsidian.js +246 -0
  22. package/build/resources/obsidian.js.map +1 -0
  23. package/build/tools/_template.d.ts +23 -0
  24. package/build/tools/_template.d.ts.map +1 -0
  25. package/build/tools/_template.js +124 -0
  26. package/build/tools/_template.js.map +1 -0
  27. package/build/tools/calculator.d.ts +32 -0
  28. package/build/tools/calculator.d.ts.map +1 -0
  29. package/build/tools/calculator.js +130 -0
  30. package/build/tools/calculator.js.map +1 -0
  31. package/build/tools/daily-notes.d.ts +19 -0
  32. package/build/tools/daily-notes.d.ts.map +1 -0
  33. package/build/tools/daily-notes.js +469 -0
  34. package/build/tools/daily-notes.js.map +1 -0
  35. package/build/tools/greeting.d.ts +23 -0
  36. package/build/tools/greeting.d.ts.map +1 -0
  37. package/build/tools/greeting.js +111 -0
  38. package/build/tools/greeting.js.map +1 -0
  39. package/build/tools/index.d.ts +28 -0
  40. package/build/tools/index.d.ts.map +1 -0
  41. package/build/tools/index.js +46 -0
  42. package/build/tools/index.js.map +1 -0
  43. package/build/tools/links.d.ts +19 -0
  44. package/build/tools/links.d.ts.map +1 -0
  45. package/build/tools/links.js +467 -0
  46. package/build/tools/links.js.map +1 -0
  47. package/build/tools/metadata.d.ts +18 -0
  48. package/build/tools/metadata.d.ts.map +1 -0
  49. package/build/tools/metadata.js +447 -0
  50. package/build/tools/metadata.js.map +1 -0
  51. package/build/tools/navigation.d.ts +19 -0
  52. package/build/tools/navigation.d.ts.map +1 -0
  53. package/build/tools/navigation.js +378 -0
  54. package/build/tools/navigation.js.map +1 -0
  55. package/build/tools/notes.d.ts +19 -0
  56. package/build/tools/notes.d.ts.map +1 -0
  57. package/build/tools/notes.js +622 -0
  58. package/build/tools/notes.js.map +1 -0
  59. package/build/tools/search.d.ts +19 -0
  60. package/build/tools/search.d.ts.map +1 -0
  61. package/build/tools/search.js +418 -0
  62. package/build/tools/search.js.map +1 -0
  63. package/build/tools/templates.d.ts +18 -0
  64. package/build/tools/templates.d.ts.map +1 -0
  65. package/build/tools/templates.js +581 -0
  66. package/build/tools/templates.js.map +1 -0
  67. package/build/tools/vault.d.ts +19 -0
  68. package/build/tools/vault.d.ts.map +1 -0
  69. package/build/tools/vault.js +403 -0
  70. package/build/tools/vault.js.map +1 -0
  71. package/build/types/index.d.ts +11 -0
  72. package/build/types/index.d.ts.map +1 -0
  73. package/build/types/index.js +11 -0
  74. package/build/types/index.js.map +1 -0
  75. package/build/types/obsidian.d.ts +329 -0
  76. package/build/types/obsidian.d.ts.map +1 -0
  77. package/build/types/obsidian.js +38 -0
  78. package/build/types/obsidian.js.map +1 -0
  79. package/build/utils/client.d.ts +201 -0
  80. package/build/utils/client.d.ts.map +1 -0
  81. package/build/utils/client.js +656 -0
  82. package/build/utils/client.js.map +1 -0
  83. package/build/utils/config.d.ts +43 -0
  84. package/build/utils/config.d.ts.map +1 -0
  85. package/build/utils/config.js +117 -0
  86. package/build/utils/config.js.map +1 -0
  87. package/build/utils/frontmatter.d.ts +90 -0
  88. package/build/utils/frontmatter.d.ts.map +1 -0
  89. package/build/utils/frontmatter.js +306 -0
  90. package/build/utils/frontmatter.js.map +1 -0
  91. package/build/utils/index.d.ts +13 -0
  92. package/build/utils/index.d.ts.map +1 -0
  93. package/build/utils/index.js +13 -0
  94. package/build/utils/index.js.map +1 -0
  95. package/build/utils/markdown.d.ts +134 -0
  96. package/build/utils/markdown.d.ts.map +1 -0
  97. package/build/utils/markdown.js +330 -0
  98. package/build/utils/markdown.js.map +1 -0
  99. package/package.json +60 -0
@@ -0,0 +1,418 @@
1
+ /**
2
+ * ============================================================================
3
+ * OBSIDIAN MCP - Search Tools
4
+ * ============================================================================
5
+ *
6
+ * Tools for searching notes in the Obsidian vault.
7
+ * Supports full-text search, tag search, and pattern matching.
8
+ * ============================================================================
9
+ */
10
+ import { z } from "zod";
11
+ import { ObsidianApiError } from "../types/obsidian.js";
12
+ import { getAllTags } from "../utils/frontmatter.js";
13
+ import { getSummary } from "../utils/markdown.js";
14
+ /**
15
+ * Register search tools with the MCP server.
16
+ *
17
+ * @param server - The MCP server instance
18
+ * @param client - The Obsidian API client
19
+ */
20
+ export function registerSearchTools(server, client) {
21
+ // ---------------------------------------------------------------------------
22
+ // TOOL: search_notes
23
+ // ---------------------------------------------------------------------------
24
+ // Full-text search across the vault using Obsidian's search syntax.
25
+ // ---------------------------------------------------------------------------
26
+ server.tool("search_notes", "Search for notes in the Obsidian vault using Obsidian's query syntax. " +
27
+ "Supports operators like: path:, file:, tag:#, content in quotes, and more. " +
28
+ "Returns matching files with relevance scores.", {
29
+ query: z
30
+ .string()
31
+ .describe("Search query. Supports Obsidian search syntax like: " +
32
+ '"exact phrase", path:folder/, tag:#mytag, file:name'),
33
+ limit: z
34
+ .number()
35
+ .int()
36
+ .min(1)
37
+ .max(100)
38
+ .optional()
39
+ .default(20)
40
+ .describe("Maximum number of results to return (default: 20)."),
41
+ }, async ({ query, limit }) => {
42
+ try {
43
+ const results = await client.search(query);
44
+ // Sort by score if available and limit results
45
+ const sortedResults = results
46
+ .sort((a, b) => (b.score || 0) - (a.score || 0))
47
+ .slice(0, limit);
48
+ return {
49
+ content: [
50
+ {
51
+ type: "text",
52
+ text: JSON.stringify({
53
+ success: true,
54
+ query,
55
+ totalResults: results.length,
56
+ showing: sortedResults.length,
57
+ results: sortedResults.map((r) => ({
58
+ path: r.filename,
59
+ score: r.score,
60
+ matches: r.matches?.slice(0, 3), // Limit matches per file
61
+ })),
62
+ }, null, 2),
63
+ },
64
+ ],
65
+ };
66
+ }
67
+ catch (error) {
68
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
69
+ return {
70
+ content: [
71
+ {
72
+ type: "text",
73
+ text: `Error searching notes: ${message}`,
74
+ },
75
+ ],
76
+ isError: true,
77
+ };
78
+ }
79
+ });
80
+ // ---------------------------------------------------------------------------
81
+ // TOOL: simple_search
82
+ // ---------------------------------------------------------------------------
83
+ // Simple text search across the vault.
84
+ // ---------------------------------------------------------------------------
85
+ server.tool("simple_search", "Simple text search across all notes in the vault. " +
86
+ "Searches for the exact text (case-insensitive). " +
87
+ "Good for finding specific phrases or terms.", {
88
+ query: z.string().describe("Text to search for in notes."),
89
+ limit: z
90
+ .number()
91
+ .int()
92
+ .min(1)
93
+ .max(100)
94
+ .optional()
95
+ .default(20)
96
+ .describe("Maximum number of results to return (default: 20)."),
97
+ }, async ({ query, limit }) => {
98
+ try {
99
+ const results = await client.simpleSearch(query);
100
+ const limitedResults = results.slice(0, limit);
101
+ return {
102
+ content: [
103
+ {
104
+ type: "text",
105
+ text: JSON.stringify({
106
+ success: true,
107
+ query,
108
+ totalResults: results.length,
109
+ showing: limitedResults.length,
110
+ results: limitedResults.map((r) => ({
111
+ path: r.filename,
112
+ matches: r.matches?.slice(0, 3),
113
+ })),
114
+ }, null, 2),
115
+ },
116
+ ],
117
+ };
118
+ }
119
+ catch (error) {
120
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
121
+ return {
122
+ content: [
123
+ {
124
+ type: "text",
125
+ text: `Error searching notes: ${message}`,
126
+ },
127
+ ],
128
+ isError: true,
129
+ };
130
+ }
131
+ });
132
+ // ---------------------------------------------------------------------------
133
+ // TOOL: search_by_tag
134
+ // ---------------------------------------------------------------------------
135
+ // Search for notes with specific tags.
136
+ // ---------------------------------------------------------------------------
137
+ server.tool("search_by_tag", "Find all notes that have specific tags. " +
138
+ "Tags can be in frontmatter or inline in the content. " +
139
+ "Can search for multiple tags (notes must have all specified tags).", {
140
+ tags: z
141
+ .array(z.string())
142
+ .min(1)
143
+ .describe("Tags to search for (with or without # prefix)."),
144
+ matchAll: z
145
+ .boolean()
146
+ .optional()
147
+ .default(true)
148
+ .describe("If true, notes must have ALL tags. If false, notes with ANY tag match."),
149
+ }, async ({ tags, matchAll }) => {
150
+ try {
151
+ // Normalize tags (remove # if present)
152
+ const normalizedTags = tags.map((t) => t.startsWith("#") ? t.slice(1) : t);
153
+ // Build Obsidian search query
154
+ const tagQueries = normalizedTags.map((t) => `tag:#${t}`);
155
+ const query = matchAll ? tagQueries.join(" ") : tagQueries.join(" OR ");
156
+ const results = await client.search(query);
157
+ return {
158
+ content: [
159
+ {
160
+ type: "text",
161
+ text: JSON.stringify({
162
+ success: true,
163
+ searchedTags: normalizedTags,
164
+ matchMode: matchAll ? "ALL" : "ANY",
165
+ totalResults: results.length,
166
+ results: results.map((r) => r.filename),
167
+ }, null, 2),
168
+ },
169
+ ],
170
+ };
171
+ }
172
+ catch (error) {
173
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
174
+ return {
175
+ content: [
176
+ {
177
+ type: "text",
178
+ text: `Error searching by tag: ${message}`,
179
+ },
180
+ ],
181
+ isError: true,
182
+ };
183
+ }
184
+ });
185
+ // ---------------------------------------------------------------------------
186
+ // TOOL: search_in_folder
187
+ // ---------------------------------------------------------------------------
188
+ // Search within a specific folder.
189
+ // ---------------------------------------------------------------------------
190
+ server.tool("search_in_folder", "Search for notes within a specific folder. " +
191
+ "Combines folder path filtering with text search.", {
192
+ folder: z.string().describe("Folder path to search in (e.g., 'Projects/Active')."),
193
+ query: z
194
+ .string()
195
+ .optional()
196
+ .describe("Optional text to search for within the folder."),
197
+ includeSubfolders: z
198
+ .boolean()
199
+ .optional()
200
+ .default(true)
201
+ .describe("Whether to include subfolders in the search."),
202
+ }, async ({ folder, query, includeSubfolders }) => {
203
+ try {
204
+ // Build path query
205
+ const pathQuery = includeSubfolders
206
+ ? `path:"${folder}"`
207
+ : `path:"${folder}/"`;
208
+ const fullQuery = query ? `${pathQuery} ${query}` : pathQuery;
209
+ const results = await client.search(fullQuery);
210
+ return {
211
+ content: [
212
+ {
213
+ type: "text",
214
+ text: JSON.stringify({
215
+ success: true,
216
+ folder,
217
+ searchQuery: query || "(all files)",
218
+ includeSubfolders,
219
+ totalResults: results.length,
220
+ results: results.map((r) => r.filename),
221
+ }, null, 2),
222
+ },
223
+ ],
224
+ };
225
+ }
226
+ catch (error) {
227
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
228
+ return {
229
+ content: [
230
+ {
231
+ type: "text",
232
+ text: `Error searching in folder: ${message}`,
233
+ },
234
+ ],
235
+ isError: true,
236
+ };
237
+ }
238
+ });
239
+ // ---------------------------------------------------------------------------
240
+ // TOOL: find_notes_by_name
241
+ // ---------------------------------------------------------------------------
242
+ // Find notes by filename pattern.
243
+ // ---------------------------------------------------------------------------
244
+ server.tool("find_notes_by_name", "Find notes by their filename. " +
245
+ "Searches for notes whose name contains the specified text.", {
246
+ name: z.string().describe("Text that the filename should contain."),
247
+ exactMatch: z
248
+ .boolean()
249
+ .optional()
250
+ .default(false)
251
+ .describe("If true, filename must match exactly (case-insensitive)."),
252
+ }, async ({ name, exactMatch }) => {
253
+ try {
254
+ // Use file: operator for filename search
255
+ const query = exactMatch ? `file:"${name}.md"` : `file:${name}`;
256
+ const results = await client.search(query);
257
+ return {
258
+ content: [
259
+ {
260
+ type: "text",
261
+ text: JSON.stringify({
262
+ success: true,
263
+ searchName: name,
264
+ matchMode: exactMatch ? "exact" : "contains",
265
+ totalResults: results.length,
266
+ results: results.map((r) => r.filename),
267
+ }, null, 2),
268
+ },
269
+ ],
270
+ };
271
+ }
272
+ catch (error) {
273
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
274
+ return {
275
+ content: [
276
+ {
277
+ type: "text",
278
+ text: `Error finding notes: ${message}`,
279
+ },
280
+ ],
281
+ isError: true,
282
+ };
283
+ }
284
+ });
285
+ // ---------------------------------------------------------------------------
286
+ // TOOL: get_recent_notes
287
+ // ---------------------------------------------------------------------------
288
+ // Get recently modified notes.
289
+ // ---------------------------------------------------------------------------
290
+ server.tool("get_recent_notes", "Get a list of recently modified markdown notes. " +
291
+ "Useful for finding notes you've worked on recently.", {
292
+ folder: z
293
+ .string()
294
+ .optional()
295
+ .describe("Optional folder to limit the search to."),
296
+ limit: z
297
+ .number()
298
+ .int()
299
+ .min(1)
300
+ .max(50)
301
+ .optional()
302
+ .default(10)
303
+ .describe("Maximum number of results (default: 10)."),
304
+ }, async ({ folder, limit }) => {
305
+ try {
306
+ // Get all markdown files
307
+ const allFiles = await client.listAllFiles(folder || "", 10);
308
+ const mdFiles = allFiles.filter((f) => f.type === "file" && f.extension === "md");
309
+ // Since we don't have direct access to mtime from the API,
310
+ // we'll return the files and suggest using file stats
311
+ const results = mdFiles.slice(0, limit).map((f) => f.path);
312
+ return {
313
+ content: [
314
+ {
315
+ type: "text",
316
+ text: JSON.stringify({
317
+ success: true,
318
+ folder: folder || "/",
319
+ note: "Results sorted alphabetically. For true recency, use Obsidian's Recent Files core plugin.",
320
+ totalFiles: mdFiles.length,
321
+ showing: results.length,
322
+ results,
323
+ }, null, 2),
324
+ },
325
+ ],
326
+ };
327
+ }
328
+ catch (error) {
329
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
330
+ return {
331
+ content: [
332
+ {
333
+ type: "text",
334
+ text: `Error getting recent notes: ${message}`,
335
+ },
336
+ ],
337
+ isError: true,
338
+ };
339
+ }
340
+ });
341
+ // ---------------------------------------------------------------------------
342
+ // TOOL: search_with_context
343
+ // ---------------------------------------------------------------------------
344
+ // Search and return results with content context.
345
+ // ---------------------------------------------------------------------------
346
+ server.tool("search_with_context", "Search notes and return results with content snippets/context. " +
347
+ "Useful for previewing search results without opening each note.", {
348
+ query: z.string().describe("Search query."),
349
+ contextLength: z
350
+ .number()
351
+ .int()
352
+ .min(50)
353
+ .max(500)
354
+ .optional()
355
+ .default(150)
356
+ .describe("Length of context snippet to show (default: 150)."),
357
+ limit: z
358
+ .number()
359
+ .int()
360
+ .min(1)
361
+ .max(20)
362
+ .optional()
363
+ .default(10)
364
+ .describe("Maximum number of results (default: 10)."),
365
+ }, async ({ query, contextLength, limit }) => {
366
+ try {
367
+ const results = await client.search(query);
368
+ const limitedResults = results.slice(0, limit);
369
+ // Fetch content for each result
370
+ const resultsWithContext = await Promise.all(limitedResults.map(async (result) => {
371
+ try {
372
+ const note = await client.getNote(result.filename);
373
+ return {
374
+ path: result.filename,
375
+ score: result.score,
376
+ snippet: getSummary(note.body || note.content, contextLength),
377
+ tags: getAllTags(note.content),
378
+ };
379
+ }
380
+ catch {
381
+ return {
382
+ path: result.filename,
383
+ score: result.score,
384
+ snippet: "(unable to load content)",
385
+ tags: [],
386
+ };
387
+ }
388
+ }));
389
+ return {
390
+ content: [
391
+ {
392
+ type: "text",
393
+ text: JSON.stringify({
394
+ success: true,
395
+ query,
396
+ totalResults: results.length,
397
+ showing: resultsWithContext.length,
398
+ results: resultsWithContext,
399
+ }, null, 2),
400
+ },
401
+ ],
402
+ };
403
+ }
404
+ catch (error) {
405
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
406
+ return {
407
+ content: [
408
+ {
409
+ type: "text",
410
+ text: `Error searching notes: ${message}`,
411
+ },
412
+ ],
413
+ isError: true,
414
+ };
415
+ }
416
+ });
417
+ }
418
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ============================================================================
3
+ * OBSIDIAN MCP - Template Tools
4
+ * ============================================================================
5
+ *
6
+ * Tools for working with note templates and creating structured notes.
7
+ * ============================================================================
8
+ */
9
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
10
+ import { ObsidianClient } from "../utils/client.js";
11
+ /**
12
+ * Register template tools with the MCP server.
13
+ *
14
+ * @param server - The MCP server instance
15
+ * @param client - The Obsidian API client
16
+ */
17
+ export declare function registerTemplateTools(server: McpServer, client: ObsidianClient): void;
18
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/tools/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAiYrF"}