@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,378 @@
1
+ /**
2
+ * ============================================================================
3
+ * OBSIDIAN MCP - Navigation Tools
4
+ * ============================================================================
5
+ *
6
+ * Tools for navigating the Obsidian UI: opening notes, getting active file,
7
+ * and executing Obsidian commands.
8
+ * ============================================================================
9
+ */
10
+ import { z } from "zod";
11
+ import { ObsidianApiError } from "../types/obsidian.js";
12
+ import { getSummary, countWords } from "../utils/markdown.js";
13
+ import { getAllTags } from "../utils/frontmatter.js";
14
+ /**
15
+ * Register navigation tools with the MCP server.
16
+ *
17
+ * @param server - The MCP server instance
18
+ * @param client - The Obsidian API client
19
+ */
20
+ export function registerNavigationTools(server, client) {
21
+ // ---------------------------------------------------------------------------
22
+ // TOOL: open_note
23
+ // ---------------------------------------------------------------------------
24
+ // Open a note in the Obsidian UI.
25
+ // ---------------------------------------------------------------------------
26
+ server.tool("open_note", "Open a note in the Obsidian user interface. " +
27
+ "Makes the note visible and active in Obsidian.", {
28
+ path: z.string().describe("Path to the note to open."),
29
+ newPane: z
30
+ .boolean()
31
+ .optional()
32
+ .default(false)
33
+ .describe("Whether to open in a new pane (split view)."),
34
+ }, async ({ path, newPane }) => {
35
+ try {
36
+ const filePath = path.endsWith(".md") ? path : `${path}.md`;
37
+ await client.openFile(filePath, newPane);
38
+ return {
39
+ content: [
40
+ {
41
+ type: "text",
42
+ text: JSON.stringify({
43
+ success: true,
44
+ message: `Opened: ${filePath}`,
45
+ path: filePath,
46
+ newPane,
47
+ }, null, 2),
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ catch (error) {
53
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
54
+ return {
55
+ content: [
56
+ {
57
+ type: "text",
58
+ text: `Error opening note: ${message}`,
59
+ },
60
+ ],
61
+ isError: true,
62
+ };
63
+ }
64
+ });
65
+ // ---------------------------------------------------------------------------
66
+ // TOOL: get_active_note
67
+ // ---------------------------------------------------------------------------
68
+ // Get the currently active note in Obsidian.
69
+ // ---------------------------------------------------------------------------
70
+ server.tool("get_active_note", "Get the content of the currently active (focused) note in Obsidian. " +
71
+ "Returns the note's content, path, and metadata.", {
72
+ includeContent: z
73
+ .boolean()
74
+ .optional()
75
+ .default(true)
76
+ .describe("Whether to include the full content."),
77
+ includeStats: z
78
+ .boolean()
79
+ .optional()
80
+ .default(false)
81
+ .describe("Whether to include word count and summary."),
82
+ }, async ({ includeContent, includeStats }) => {
83
+ try {
84
+ const note = await client.getActiveFile();
85
+ if (!note) {
86
+ return {
87
+ content: [
88
+ {
89
+ type: "text",
90
+ text: JSON.stringify({
91
+ success: true,
92
+ hasActiveNote: false,
93
+ message: "No note is currently open in Obsidian.",
94
+ }, null, 2),
95
+ },
96
+ ],
97
+ };
98
+ }
99
+ const response = {
100
+ success: true,
101
+ hasActiveNote: true,
102
+ path: note.path,
103
+ };
104
+ if (note.frontmatter && Object.keys(note.frontmatter).length > 0) {
105
+ response.frontmatter = note.frontmatter;
106
+ }
107
+ if (includeContent) {
108
+ response.content = note.content;
109
+ }
110
+ if (includeStats) {
111
+ response.stats = {
112
+ wordCount: countWords(note.content),
113
+ summary: getSummary(note.content, 150),
114
+ tags: getAllTags(note.content),
115
+ };
116
+ }
117
+ return {
118
+ content: [
119
+ {
120
+ type: "text",
121
+ text: JSON.stringify(response, null, 2),
122
+ },
123
+ ],
124
+ };
125
+ }
126
+ catch (error) {
127
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
128
+ return {
129
+ content: [
130
+ {
131
+ type: "text",
132
+ text: `Error getting active note: ${message}`,
133
+ },
134
+ ],
135
+ isError: true,
136
+ };
137
+ }
138
+ });
139
+ // ---------------------------------------------------------------------------
140
+ // TOOL: append_to_active_note
141
+ // ---------------------------------------------------------------------------
142
+ // Append content to the currently active note.
143
+ // ---------------------------------------------------------------------------
144
+ server.tool("append_to_active_note", "Append content to the currently active note in Obsidian. " +
145
+ "Useful for quickly adding content to whatever note you're working on.", {
146
+ content: z.string().describe("Content to append."),
147
+ ensureNewline: z
148
+ .boolean()
149
+ .optional()
150
+ .default(true)
151
+ .describe("Whether to ensure content starts on a new line."),
152
+ }, async ({ content, ensureNewline }) => {
153
+ try {
154
+ // First check if there's an active note
155
+ const activeNote = await client.getActiveFile();
156
+ if (!activeNote) {
157
+ return {
158
+ content: [
159
+ {
160
+ type: "text",
161
+ text: "No note is currently open in Obsidian.",
162
+ },
163
+ ],
164
+ isError: true,
165
+ };
166
+ }
167
+ const contentToAppend = ensureNewline ? `\n${content}` : content;
168
+ await client.appendToActiveFile(contentToAppend);
169
+ return {
170
+ content: [
171
+ {
172
+ type: "text",
173
+ text: JSON.stringify({
174
+ success: true,
175
+ message: `Content appended to: ${activeNote.path}`,
176
+ path: activeNote.path,
177
+ }, null, 2),
178
+ },
179
+ ],
180
+ };
181
+ }
182
+ catch (error) {
183
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
184
+ return {
185
+ content: [
186
+ {
187
+ type: "text",
188
+ text: `Error appending to active note: ${message}`,
189
+ },
190
+ ],
191
+ isError: true,
192
+ };
193
+ }
194
+ });
195
+ // ---------------------------------------------------------------------------
196
+ // TOOL: get_commands
197
+ // ---------------------------------------------------------------------------
198
+ // Get list of available Obsidian commands.
199
+ // ---------------------------------------------------------------------------
200
+ server.tool("get_commands", "Get a list of all available commands in Obsidian. " +
201
+ "Commands are actions that can be executed, like 'Toggle fold' or 'Export to PDF'.", {
202
+ filter: z
203
+ .string()
204
+ .optional()
205
+ .describe("Filter commands by name (case-insensitive)."),
206
+ }, async ({ filter }) => {
207
+ try {
208
+ const commands = await client.getCommands();
209
+ let filteredCommands = commands;
210
+ if (filter) {
211
+ const lowerFilter = filter.toLowerCase();
212
+ filteredCommands = commands.filter((cmd) => cmd.name.toLowerCase().includes(lowerFilter) ||
213
+ cmd.id.toLowerCase().includes(lowerFilter));
214
+ }
215
+ // Sort by name
216
+ filteredCommands.sort((a, b) => a.name.localeCompare(b.name));
217
+ return {
218
+ content: [
219
+ {
220
+ type: "text",
221
+ text: JSON.stringify({
222
+ success: true,
223
+ filter: filter || null,
224
+ totalCommands: commands.length,
225
+ showing: filteredCommands.length,
226
+ commands: filteredCommands.map((cmd) => ({
227
+ id: cmd.id,
228
+ name: cmd.name,
229
+ })),
230
+ }, null, 2),
231
+ },
232
+ ],
233
+ };
234
+ }
235
+ catch (error) {
236
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
237
+ return {
238
+ content: [
239
+ {
240
+ type: "text",
241
+ text: `Error getting commands: ${message}`,
242
+ },
243
+ ],
244
+ isError: true,
245
+ };
246
+ }
247
+ });
248
+ // ---------------------------------------------------------------------------
249
+ // TOOL: execute_command
250
+ // ---------------------------------------------------------------------------
251
+ // Execute an Obsidian command.
252
+ // ---------------------------------------------------------------------------
253
+ server.tool("execute_command", "Execute an Obsidian command by its ID. " +
254
+ "Use get_commands to find available commands and their IDs. " +
255
+ "Examples: 'app:toggle-left-sidebar', 'editor:toggle-fold'", {
256
+ commandId: z.string().describe("The command ID to execute."),
257
+ }, async ({ commandId }) => {
258
+ try {
259
+ await client.executeCommand(commandId);
260
+ return {
261
+ content: [
262
+ {
263
+ type: "text",
264
+ text: JSON.stringify({
265
+ success: true,
266
+ message: `Command executed: ${commandId}`,
267
+ commandId,
268
+ }, null, 2),
269
+ },
270
+ ],
271
+ };
272
+ }
273
+ catch (error) {
274
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
275
+ return {
276
+ content: [
277
+ {
278
+ type: "text",
279
+ text: `Error executing command: ${message}`,
280
+ },
281
+ ],
282
+ isError: true,
283
+ };
284
+ }
285
+ });
286
+ // ---------------------------------------------------------------------------
287
+ // TOOL: quick_capture
288
+ // ---------------------------------------------------------------------------
289
+ // Quickly capture a thought or note to a designated capture file.
290
+ // ---------------------------------------------------------------------------
291
+ server.tool("quick_capture", "Quickly capture a thought, idea, or note. " +
292
+ "Appends to a designated capture file with timestamp. " +
293
+ "Great for inbox-style note capture.", {
294
+ content: z.string().describe("Content to capture."),
295
+ captureFile: z
296
+ .string()
297
+ .optional()
298
+ .default("Inbox.md")
299
+ .describe("File to capture to (default: Inbox.md)."),
300
+ addTimestamp: z
301
+ .boolean()
302
+ .optional()
303
+ .default(true)
304
+ .describe("Whether to add a timestamp."),
305
+ format: z
306
+ .enum(["bullet", "checkbox", "paragraph"])
307
+ .optional()
308
+ .default("bullet")
309
+ .describe("Format for the capture (bullet, checkbox, or paragraph)."),
310
+ }, async ({ content, captureFile, addTimestamp, format }) => {
311
+ try {
312
+ const filePath = captureFile.endsWith(".md")
313
+ ? captureFile
314
+ : `${captureFile}.md`;
315
+ // Format the content
316
+ let formattedContent;
317
+ const timestamp = addTimestamp
318
+ ? new Date().toLocaleString()
319
+ : "";
320
+ switch (format) {
321
+ case "checkbox":
322
+ formattedContent = timestamp
323
+ ? `- [ ] [${timestamp}] ${content}`
324
+ : `- [ ] ${content}`;
325
+ break;
326
+ case "paragraph":
327
+ formattedContent = timestamp ? `**${timestamp}**\n${content}` : content;
328
+ break;
329
+ case "bullet":
330
+ default:
331
+ formattedContent = timestamp
332
+ ? `- [${timestamp}] ${content}`
333
+ : `- ${content}`;
334
+ }
335
+ // Append to capture file
336
+ try {
337
+ await client.appendToFile(filePath, `\n${formattedContent}`);
338
+ }
339
+ catch (error) {
340
+ // File might not exist, create it
341
+ if (error instanceof ObsidianApiError && error.status === 404) {
342
+ const initialContent = `# Inbox\n\n${formattedContent}`;
343
+ await client.putFile(filePath, initialContent);
344
+ }
345
+ else {
346
+ throw error;
347
+ }
348
+ }
349
+ return {
350
+ content: [
351
+ {
352
+ type: "text",
353
+ text: JSON.stringify({
354
+ success: true,
355
+ message: `Captured to: ${filePath}`,
356
+ captureFile: filePath,
357
+ timestamp: addTimestamp ? timestamp : null,
358
+ format,
359
+ }, null, 2),
360
+ },
361
+ ],
362
+ };
363
+ }
364
+ catch (error) {
365
+ const message = error instanceof ObsidianApiError ? error.message : String(error);
366
+ return {
367
+ content: [
368
+ {
369
+ type: "text",
370
+ text: `Error capturing: ${message}`,
371
+ },
372
+ ],
373
+ isError: true,
374
+ };
375
+ }
376
+ });
377
+ }
378
+ //# sourceMappingURL=navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/tools/navigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ============================================================================
3
+ * OBSIDIAN MCP - Note Tools
4
+ * ============================================================================
5
+ *
6
+ * Core tools for creating, reading, updating, and deleting notes.
7
+ * These are the fundamental operations for note management.
8
+ * ============================================================================
9
+ */
10
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
+ import { ObsidianClient } from "../utils/client.js";
12
+ /**
13
+ * Register note CRUD tools with the MCP server.
14
+ *
15
+ * @param server - The MCP server instance
16
+ * @param client - The Obsidian API client
17
+ */
18
+ export declare function registerNoteTools(server: McpServer, client: ObsidianClient): void;
19
+ //# sourceMappingURL=notes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.d.ts","sourceRoot":"","sources":["../../src/tools/notes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AASpD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAguBjF"}